Merge "AAPT: Add support for 'font' resource type"
diff --git a/apct-tests/perftests/core/Android.mk b/apct-tests/perftests/core/Android.mk
index 3a7f945..200f92f 100644
--- a/apct-tests/perftests/core/Android.mk
+++ b/apct-tests/perftests/core/Android.mk
@@ -8,7 +8,8 @@
LOCAL_STATIC_JAVA_LIBRARIES := \
android-support-test \
- apct-perftests-utils
+ apct-perftests-utils \
+ legacy-android-test
LOCAL_PACKAGE_NAME := CorePerfTests
diff --git a/api/current.txt b/api/current.txt
index 21ff81e..2b07a5c 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -114,6 +114,7 @@
field public static final java.lang.String RECEIVE_WAP_PUSH = "android.permission.RECEIVE_WAP_PUSH";
field public static final java.lang.String RECORD_AUDIO = "android.permission.RECORD_AUDIO";
field public static final java.lang.String REORDER_TASKS = "android.permission.REORDER_TASKS";
+ field public static final java.lang.String REQUEST_DELETE_PACKAGES = "android.permission.REQUEST_DELETE_PACKAGES";
field public static final java.lang.String REQUEST_IGNORE_BATTERY_OPTIMIZATIONS = "android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS";
field public static final java.lang.String REQUEST_INSTALL_PACKAGES = "android.permission.REQUEST_INSTALL_PACKAGES";
field public static final deprecated java.lang.String RESTART_PACKAGES = "android.permission.RESTART_PACKAGES";
@@ -362,6 +363,7 @@
field public static final int centerMedium = 16842959; // 0x10100cf
field public static final int centerX = 16843170; // 0x10101a2
field public static final int centerY = 16843171; // 0x10101a3
+ field public static final int certDigest = 16844106; // 0x101054a
field public static final int checkBoxPreferenceStyle = 16842895; // 0x101008f
field public static final int checkMark = 16843016; // 0x1010108
field public static final int checkMarkTint = 16843943; // 0x10104a7
@@ -1054,6 +1056,7 @@
field public static final int resizeable = 16843405; // 0x101028d
field public static final int resizeableActivity = 16844022; // 0x10104f6
field public static final int resource = 16842789; // 0x1010025
+ field public static final int restartOnConfigChanges = 16844105; // 0x1010549
field public static final int restoreAnyVersion = 16843450; // 0x10102ba
field public static final deprecated int restoreNeedsApplication = 16843421; // 0x101029d
field public static final int restrictedAccountType = 16843733; // 0x10103d5
@@ -1378,7 +1381,7 @@
field public static final int toYDelta = 16843209; // 0x10101c9
field public static final int toYScale = 16843205; // 0x10101c5
field public static final int toolbarStyle = 16843946; // 0x10104aa
- field public static final int tooltip = 16844084; // 0x1010534
+ field public static final int tooltipText = 16844084; // 0x1010534
field public static final int top = 16843182; // 0x10101ae
field public static final int topBright = 16842955; // 0x10100cb
field public static final int topDark = 16842951; // 0x10100c7
@@ -1437,7 +1440,7 @@
field public static final int viewportWidth = 16843778; // 0x1010402
field public static final int visibility = 16842972; // 0x10100dc
field public static final int visible = 16843156; // 0x1010194
- field public static final int visibleToEphemeral = 16844095; // 0x101053f
+ field public static final int visibleToInstantApps = 16844095; // 0x101053f
field public static final int vmSafeMode = 16843448; // 0x10102b8
field public static final int voiceIcon = 16843908; // 0x1010484
field public static final int voiceLanguage = 16843349; // 0x1010255
@@ -3500,8 +3503,7 @@
method public boolean dispatchTrackballEvent(android.view.MotionEvent);
method public void dump(java.lang.String, java.io.FileDescriptor, java.io.PrintWriter, java.lang.String[]);
method public void enterPictureInPictureMode();
- method public void enterPictureInPictureMode(float);
- method public void enterPictureInPictureModeOnMoveToBackground(boolean);
+ method public boolean enterPictureInPictureMode(android.app.PictureInPictureArgs);
method public android.view.View findViewById(int);
method public void finish();
method public void finishActivity(int);
@@ -3674,8 +3676,7 @@
method public void setIntent(android.content.Intent);
method public final void setMediaController(android.media.session.MediaController);
method public void setOverlayWithDecorCaptionEnabled(boolean);
- method public void setPictureInPictureActions(java.util.List<android.app.RemoteAction>);
- method public void setPictureInPictureAspectRatio(float);
+ method public void setPictureInPictureArgs(android.app.PictureInPictureArgs);
method public final deprecated void setProgress(int);
method public final deprecated void setProgressBarIndeterminate(boolean);
method public final deprecated void setProgressBarIndeterminateVisibility(boolean);
@@ -4837,11 +4838,13 @@
public static class Instrumentation.ActivityMonitor {
ctor public Instrumentation.ActivityMonitor(android.content.IntentFilter, android.app.Instrumentation.ActivityResult, boolean);
ctor public Instrumentation.ActivityMonitor(java.lang.String, android.app.Instrumentation.ActivityResult, boolean);
+ ctor public Instrumentation.ActivityMonitor();
method public final android.content.IntentFilter getFilter();
method public final int getHits();
method public final android.app.Activity getLastActivity();
method public final android.app.Instrumentation.ActivityResult getResult();
method public final boolean isBlocking();
+ method public android.app.Instrumentation.ActivityResult onMatchIntent(android.content.Intent);
method public final android.app.Activity waitForActivity();
method public final android.app.Activity waitForActivityWithTimeout(long);
}
@@ -5410,7 +5413,6 @@
method public java.lang.CharSequence getName();
method public android.net.Uri getSound();
method public long[] getVibrationPattern();
- method public boolean isAllowed();
method public void setBypassDnd(boolean);
method public void setImportance(int);
method public void setLights(boolean);
@@ -5448,6 +5450,7 @@
method public boolean removeAutomaticZenRule(java.lang.String);
method public final void setInterruptionFilter(int);
method public void setNotificationPolicy(android.app.NotificationManager.Policy);
+ method public android.content.ComponentName startServiceInForeground(android.content.Intent, int, android.app.Notification);
method public boolean updateAutomaticZenRule(java.lang.String, android.app.AutomaticZenRule);
field public static final java.lang.String ACTION_INTERRUPTION_FILTER_CHANGED = "android.app.action.INTERRUPTION_FILTER_CHANGED";
field public static final java.lang.String ACTION_NOTIFICATION_POLICY_ACCESS_GRANTED_CHANGED = "android.app.action.NOTIFICATION_POLICY_ACCESS_GRANTED_CHANGED";
@@ -5533,6 +5536,17 @@
method public abstract void onSendFinished(android.app.PendingIntent, android.content.Intent, int, java.lang.String, android.os.Bundle);
}
+ public final class PictureInPictureArgs implements android.os.Parcelable {
+ ctor public PictureInPictureArgs();
+ ctor public PictureInPictureArgs(float, java.util.List<android.app.RemoteAction>);
+ method public android.app.PictureInPictureArgs clone();
+ method public int describeContents();
+ method public void setActions(java.util.List<android.app.RemoteAction>);
+ method public void setAspectRatio(float);
+ method public void writeToParcel(android.os.Parcel, int);
+ field public static final android.os.Parcelable.Creator<android.app.PictureInPictureArgs> CREATOR;
+ }
+
public class Presentation extends android.app.Dialog {
ctor public Presentation(android.content.Context, android.view.Display);
ctor public Presentation(android.content.Context, android.view.Display, int);
@@ -6147,6 +6161,7 @@
method public boolean isActivePasswordSufficient();
method public boolean isAdminActive(android.content.ComponentName);
method public boolean isApplicationHidden(android.content.ComponentName, java.lang.String);
+ method public boolean isBackupServiceEnabled(android.content.ComponentName);
method public boolean isCallerApplicationRestrictionsManagingPackage();
method public boolean isDeviceOwnerApp(java.lang.String);
method public boolean isLockTaskPermitted(java.lang.String);
@@ -6177,6 +6192,7 @@
method public void setApplicationRestrictions(android.content.ComponentName, java.lang.String, android.os.Bundle);
method public void setApplicationRestrictionsManagingPackage(android.content.ComponentName, java.lang.String) throws android.content.pm.PackageManager.NameNotFoundException;
method public void setAutoTimeRequired(android.content.ComponentName, boolean);
+ method public void setBackupServiceEnabled(android.content.ComponentName, boolean);
method public void setBluetoothContactSharingDisabled(android.content.ComponentName, boolean);
method public void setCameraDisabled(android.content.ComponentName, boolean);
method public void setCertInstallerPackage(android.content.ComponentName, java.lang.String) throws java.lang.SecurityException;
@@ -7937,6 +7953,7 @@
ctor public ClipData(android.content.ClipDescription, android.content.ClipData.Item);
ctor public ClipData(android.content.ClipData);
method public void addItem(android.content.ClipData.Item);
+ method public void addItem(android.content.ClipData.Item, android.content.ContentResolver);
method public int describeContents();
method public android.content.ClipDescription getDescription();
method public android.content.ClipData.Item getItemAt(int);
@@ -9541,6 +9558,7 @@
method public int describeContents();
method public void dump(android.util.Printer, java.lang.String);
method public final int getThemeResource();
+ field public static final int CONFIG_COLORIMETRY = 16384; // 0x4000
field public static final int CONFIG_DENSITY = 4096; // 0x1000
field public static final int CONFIG_FONT_SCALE = 1073741824; // 0x40000000
field public static final int CONFIG_KEYBOARD = 16; // 0x10
@@ -9812,6 +9830,7 @@
method public java.util.List<android.content.pm.LauncherActivityInfo> getActivityList(java.lang.String, android.os.UserHandle);
method public android.content.pm.ApplicationInfo getApplicationInfo(java.lang.String, int, android.os.UserHandle);
method public android.content.pm.LauncherApps.PinItemRequest getPinItemRequest(android.content.Intent);
+ method public java.util.List<android.os.UserHandle> getProfiles();
method public android.graphics.drawable.Drawable getShortcutBadgedIconDrawable(android.content.pm.ShortcutInfo, int);
method public android.content.IntentSender getShortcutConfigActivityIntent(android.content.pm.LauncherActivityInfo);
method public java.util.List<android.content.pm.LauncherActivityInfo> getShortcutConfigActivityList(java.lang.String, android.os.UserHandle);
@@ -9849,7 +9868,7 @@
method public boolean accept(android.os.Bundle);
method public boolean accept();
method public int describeContents();
- method public android.appwidget.AppWidgetProviderInfo getAppWidgetProviderInfo();
+ method public android.appwidget.AppWidgetProviderInfo getAppWidgetProviderInfo(android.content.Context);
method public int getRequestType();
method public android.content.pm.ShortcutInfo getShortcutInfo();
method public boolean isValid();
@@ -9918,6 +9937,7 @@
method public void registerSessionCallback(android.content.pm.PackageInstaller.SessionCallback);
method public void registerSessionCallback(android.content.pm.PackageInstaller.SessionCallback, android.os.Handler);
method public void uninstall(java.lang.String, android.content.IntentSender);
+ method public void uninstall(android.content.pm.VersionedPackage, android.content.IntentSender);
method public void unregisterSessionCallback(android.content.pm.PackageInstaller.SessionCallback);
method public void updateSessionAppIcon(int, android.graphics.Bitmap);
method public void updateSessionAppLabel(int, java.lang.CharSequence);
@@ -10064,6 +10084,7 @@
method public abstract int[] getPackageGids(java.lang.String) throws android.content.pm.PackageManager.NameNotFoundException;
method public abstract int[] getPackageGids(java.lang.String, int) throws android.content.pm.PackageManager.NameNotFoundException;
method public abstract android.content.pm.PackageInfo getPackageInfo(java.lang.String, int) throws android.content.pm.PackageManager.NameNotFoundException;
+ method public abstract android.content.pm.PackageInfo getPackageInfo(android.content.pm.VersionedPackage, int) throws android.content.pm.PackageManager.NameNotFoundException;
method public abstract android.content.pm.PackageInstaller getPackageInstaller();
method public abstract int getPackageUid(java.lang.String, int) throws android.content.pm.PackageManager.NameNotFoundException;
method public abstract java.lang.String[] getPackagesForUid(int);
@@ -10078,6 +10099,7 @@
method public abstract android.content.res.Resources getResourcesForApplication(android.content.pm.ApplicationInfo) throws android.content.pm.PackageManager.NameNotFoundException;
method public abstract android.content.res.Resources getResourcesForApplication(java.lang.String) throws android.content.pm.PackageManager.NameNotFoundException;
method public abstract android.content.pm.ServiceInfo getServiceInfo(android.content.ComponentName, int) throws android.content.pm.PackageManager.NameNotFoundException;
+ method public abstract java.util.List<android.content.pm.SharedLibraryInfo> getSharedLibraries(int);
method public abstract android.content.pm.FeatureInfo[] getSystemAvailableFeatures();
method public abstract java.lang.String[] getSystemSharedLibraryNames();
method public abstract java.lang.CharSequence getText(java.lang.String, int, android.content.pm.ApplicationInfo);
@@ -10236,6 +10258,7 @@
field public static final int SIGNATURE_UNKNOWN_PACKAGE = -4; // 0xfffffffc
field public static final int VERIFICATION_ALLOW = 1; // 0x1
field public static final int VERIFICATION_REJECT = -1; // 0xffffffff
+ field public static final int VERSION_CODE_HIGHEST = -1; // 0xffffffff
}
public static class PackageManager.NameNotFoundException extends android.util.AndroidException {
@@ -10375,6 +10398,20 @@
field public java.lang.String permission;
}
+ public final class SharedLibraryInfo implements android.os.Parcelable {
+ method public int describeContents();
+ method public android.content.pm.VersionedPackage getDeclaringPackage();
+ method public java.util.List<android.content.pm.VersionedPackage> getDependentPackages();
+ method public java.lang.String getName();
+ method public int getVersion();
+ method public boolean isBuiltin();
+ method public boolean isDynamic();
+ method public boolean isStatic();
+ method public void writeToParcel(android.os.Parcel, int);
+ field public static final android.os.Parcelable.Creator<android.content.pm.SharedLibraryInfo> CREATOR;
+ field public static final int VERSION_UNDEFINED = -1; // 0xffffffff
+ }
+
public final class ShortcutInfo implements android.os.Parcelable {
method public int describeContents();
method public android.content.ComponentName getActivity();
@@ -10450,6 +10487,15 @@
field public static final android.os.Parcelable.Creator<android.content.pm.Signature> CREATOR;
}
+ public final class VersionedPackage implements android.os.Parcelable {
+ ctor public VersionedPackage(java.lang.String, int);
+ method public int describeContents();
+ method public java.lang.String getPackageName();
+ method public long getVersionCode();
+ method public void writeToParcel(android.os.Parcel, int);
+ field public static final android.os.Parcelable.Creator<android.content.pm.VersionedPackage> CREATOR;
+ }
+
}
package android.content.res {
@@ -10535,7 +10581,9 @@
method public int getLayoutDirection();
method public android.os.LocaleList getLocales();
method public boolean isLayoutSizeAtLeast(int);
+ method public boolean isScreenHdr();
method public boolean isScreenRound();
+ method public boolean isScreenWideColorGamut();
method public static boolean needNewResources(int, int);
method public void readFromParcel(android.os.Parcel);
method public void setLayoutDirection(java.util.Locale);
@@ -10545,6 +10593,16 @@
method public void setToDefaults();
method public int updateFrom(android.content.res.Configuration);
method public void writeToParcel(android.os.Parcel, int);
+ field public static final int COLORIMETRY_HDR_MASK = 12; // 0xc
+ field public static final int COLORIMETRY_HDR_NO = 4; // 0x4
+ field public static final int COLORIMETRY_HDR_SHIFT = 2; // 0x2
+ field public static final int COLORIMETRY_HDR_UNDEFINED = 0; // 0x0
+ field public static final int COLORIMETRY_HDR_YES = 8; // 0x8
+ field public static final int COLORIMETRY_UNDEFINED = 0; // 0x0
+ field public static final int COLORIMETRY_WIDE_COLOR_GAMUT_MASK = 3; // 0x3
+ field public static final int COLORIMETRY_WIDE_COLOR_GAMUT_NO = 1; // 0x1
+ field public static final int COLORIMETRY_WIDE_COLOR_GAMUT_UNDEFINED = 0; // 0x0
+ field public static final int COLORIMETRY_WIDE_COLOR_GAMUT_YES = 2; // 0x2
field public static final android.os.Parcelable.Creator<android.content.res.Configuration> CREATOR;
field public static final int DENSITY_DPI_UNDEFINED = 0; // 0x0
field public static final int HARDKEYBOARDHIDDEN_NO = 1; // 0x1
@@ -10610,6 +10668,7 @@
field public static final int UI_MODE_TYPE_UNDEFINED = 0; // 0x0
field public static final int UI_MODE_TYPE_VR_HEADSET = 7; // 0x7
field public static final int UI_MODE_TYPE_WATCH = 6; // 0x6
+ field public int colorimetry;
field public int densityDpi;
field public float fontScale;
field public int hardKeyboardHidden;
@@ -12595,7 +12654,6 @@
method public int getFontMetricsInt(android.graphics.Paint.FontMetricsInt);
method public android.graphics.Paint.FontMetricsInt getFontMetricsInt();
method public float getFontSpacing();
- method public java.lang.String getFontVariationSettings();
method public int getHinting();
method public float getLetterSpacing();
method public android.graphics.MaskFilter getMaskFilter();
@@ -12653,7 +12711,6 @@
method public void setFilterBitmap(boolean);
method public void setFlags(int);
method public void setFontFeatureSettings(java.lang.String);
- method public void setFontVariationSettings(java.lang.String);
method public void setHinting(int);
method public void setLetterSpacing(float);
method public void setLinearText(boolean);
@@ -24481,6 +24538,7 @@
public class TrafficStats {
ctor public TrafficStats();
method public static void clearThreadStatsTag();
+ method public static int getAndSetThreadStatsTag(int);
method public static long getMobileRxBytes();
method public static long getMobileRxPackets();
method public static long getMobileTxBytes();
@@ -30062,6 +30120,7 @@
method public android.os.StrictMode.VmPolicy.Builder detectLeakedClosableObjects();
method public android.os.StrictMode.VmPolicy.Builder detectLeakedRegistrationObjects();
method public android.os.StrictMode.VmPolicy.Builder detectLeakedSqlLiteObjects();
+ method public android.os.StrictMode.VmPolicy.Builder detectUntaggedSockets();
method public android.os.StrictMode.VmPolicy.Builder penaltyDeath();
method public android.os.StrictMode.VmPolicy.Builder penaltyDeathOnCleartextNetwork();
method public android.os.StrictMode.VmPolicy.Builder penaltyDeathOnFileUriExposure();
@@ -35254,6 +35313,7 @@
field public static final int PURPOSE_ENCRYPT = 1; // 0x1
field public static final int PURPOSE_SIGN = 4; // 0x4
field public static final int PURPOSE_VERIFY = 8; // 0x8
+ field public static final int PURPOSE_WRAP_KEY = 16; // 0x10
field public static final java.lang.String SIGNATURE_PADDING_RSA_PKCS1 = "PKCS1";
field public static final java.lang.String SIGNATURE_PADDING_RSA_PSS = "PSS";
}
@@ -39043,6 +39103,7 @@
method public void startIntentSender(android.content.IntentSender, android.content.Intent, int, int, int) throws android.content.IntentSender.SendIntentException;
method public void startIntentSender(android.content.IntentSender, android.content.Intent, int, int, int, android.os.Bundle) throws android.content.IntentSender.SendIntentException;
method public android.content.ComponentName startService(android.content.Intent);
+ method public android.content.ComponentName startServiceInForeground(android.content.Intent, int, android.app.Notification);
method public boolean stopService(android.content.Intent);
method public void unbindService(android.content.ServiceConnection);
method public void unregisterReceiver(android.content.BroadcastReceiver);
@@ -39143,6 +39204,7 @@
method public int[] getPackageGids(java.lang.String) throws android.content.pm.PackageManager.NameNotFoundException;
method public int[] getPackageGids(java.lang.String, int) throws android.content.pm.PackageManager.NameNotFoundException;
method public android.content.pm.PackageInfo getPackageInfo(java.lang.String, int) throws android.content.pm.PackageManager.NameNotFoundException;
+ method public android.content.pm.PackageInfo getPackageInfo(android.content.pm.VersionedPackage, int) throws android.content.pm.PackageManager.NameNotFoundException;
method public android.content.pm.PackageInstaller getPackageInstaller();
method public int getPackageUid(java.lang.String, int) throws android.content.pm.PackageManager.NameNotFoundException;
method public java.lang.String[] getPackagesForUid(int);
@@ -39157,6 +39219,7 @@
method public android.content.res.Resources getResourcesForApplication(android.content.pm.ApplicationInfo);
method public android.content.res.Resources getResourcesForApplication(java.lang.String) throws android.content.pm.PackageManager.NameNotFoundException;
method public android.content.pm.ServiceInfo getServiceInfo(android.content.ComponentName, int) throws android.content.pm.PackageManager.NameNotFoundException;
+ method public java.util.List<android.content.pm.SharedLibraryInfo> getSharedLibraries(int);
method public android.content.pm.FeatureInfo[] getSystemAvailableFeatures();
method public java.lang.String[] getSystemSharedLibraryNames();
method public java.lang.CharSequence getText(java.lang.String, int, android.content.pm.ApplicationInfo);
@@ -42905,7 +42968,7 @@
method public abstract android.view.SubMenu getSubMenu();
method public abstract java.lang.CharSequence getTitle();
method public abstract java.lang.CharSequence getTitleCondensed();
- method public default java.lang.CharSequence getTooltip();
+ method public default java.lang.CharSequence getTooltipText();
method public abstract boolean hasSubMenu();
method public abstract boolean isActionViewExpanded();
method public abstract boolean isCheckable();
@@ -42932,7 +42995,7 @@
method public abstract android.view.MenuItem setTitle(java.lang.CharSequence);
method public abstract android.view.MenuItem setTitle(int);
method public abstract android.view.MenuItem setTitleCondensed(java.lang.CharSequence);
- method public default android.view.MenuItem setTooltip(java.lang.CharSequence);
+ method public default android.view.MenuItem setTooltipText(java.lang.CharSequence);
method public abstract android.view.MenuItem setVisible(boolean);
field public static final int SHOW_AS_ACTION_ALWAYS = 2; // 0x2
field public static final int SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW = 8; // 0x8
@@ -43626,7 +43689,8 @@
method public java.lang.Object getTag(int);
method public int getTextAlignment();
method public int getTextDirection();
- method public final java.lang.CharSequence getTooltip();
+ method public final deprecated java.lang.CharSequence getTooltip();
+ method public final java.lang.CharSequence getTooltipText();
method public final int getTop();
method protected float getTopFadingEdgeStrength();
method protected int getTopPaddingOffset();
@@ -43927,7 +43991,8 @@
method public void setTag(int, java.lang.Object);
method public void setTextAlignment(int);
method public void setTextDirection(int);
- method public final void setTooltip(java.lang.CharSequence);
+ method public final deprecated void setTooltip(java.lang.CharSequence);
+ method public final void setTooltipText(java.lang.CharSequence);
method public final void setTop(int);
method public void setTouchDelegate(android.view.TouchDelegate);
method public final void setTransitionName(java.lang.String);
@@ -49318,6 +49383,10 @@
method public void endBatchEdit();
method public boolean extractText(android.view.inputmethod.ExtractedTextRequest, android.view.inputmethod.ExtractedText);
method public final int getAutoLinkMask();
+ method public int getAutoSizeMaxTextSize();
+ method public int getAutoSizeMinTextSize();
+ method public int getAutoSizeStepGranularity();
+ method public int getAutoSizeTextType();
method public int getBreakStrategy();
method public int getCompoundDrawablePadding();
method public android.content.res.ColorStateList getCompoundDrawableTintList();
@@ -49343,7 +49412,6 @@
method public int getExtendedPaddingTop();
method public android.text.InputFilter[] getFilters();
method public java.lang.String getFontFeatureSettings();
- method public java.lang.String getFontVariationSettings();
method public boolean getFreezesText();
method public int getGravity();
method public int getHighlightColor();
@@ -49427,6 +49495,10 @@
method public void removeTextChangedListener(android.text.TextWatcher);
method public void setAllCaps(boolean);
method public final void setAutoLinkMask(int);
+ method public void setAutoSizeMaxTextSize(int, float);
+ method public void setAutoSizeMinTextSize(int, float);
+ method public void setAutoSizeStepGranularity(int, float);
+ method public void setAutoSizeTextType(int);
method public void setBreakStrategy(int);
method public void setCompoundDrawablePadding(int);
method public void setCompoundDrawableTintList(android.content.res.ColorStateList);
@@ -49449,7 +49521,6 @@
method public void setExtractedText(android.view.inputmethod.ExtractedText);
method public void setFilters(android.text.InputFilter[]);
method public void setFontFeatureSettings(java.lang.String);
- method public void setFontVariationSettings(java.lang.String);
method protected boolean setFrame(int, int, int, int);
method public void setFreezesText(boolean);
method public void setGravity(int);
@@ -49518,8 +49589,8 @@
method public void setTypeface(android.graphics.Typeface, int);
method public void setTypeface(android.graphics.Typeface);
method public void setWidth(int);
- field public static final int AUTO_SIZE_TYPE_NONE = 0; // 0x0
- field public static final int AUTO_SIZE_TYPE_XY = 1; // 0x1
+ field public static final int AUTO_SIZE_TEXT_TYPE_NONE = 0; // 0x0
+ field public static final int AUTO_SIZE_TEXT_TYPE_XY = 1; // 0x1
}
public static final class TextView.BufferType extends java.lang.Enum {
diff --git a/api/system-current.txt b/api/system-current.txt
index 1f590dd..7cb8aaf 100644
--- a/api/system-current.txt
+++ b/api/system-current.txt
@@ -200,6 +200,7 @@
field public static final java.lang.String REGISTER_SIM_SUBSCRIPTION = "android.permission.REGISTER_SIM_SUBSCRIPTION";
field public static final java.lang.String REMOVE_DRM_CERTIFICATES = "android.permission.REMOVE_DRM_CERTIFICATES";
field public static final java.lang.String REORDER_TASKS = "android.permission.REORDER_TASKS";
+ field public static final java.lang.String REQUEST_DELETE_PACKAGES = "android.permission.REQUEST_DELETE_PACKAGES";
field public static final java.lang.String REQUEST_IGNORE_BATTERY_OPTIMIZATIONS = "android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS";
field public static final java.lang.String REQUEST_INSTALL_PACKAGES = "android.permission.REQUEST_INSTALL_PACKAGES";
field public static final java.lang.String REQUEST_NETWORK_SCORES = "android.permission.REQUEST_NETWORK_SCORES";
@@ -471,6 +472,7 @@
field public static final int centerMedium = 16842959; // 0x10100cf
field public static final int centerX = 16843170; // 0x10101a2
field public static final int centerY = 16843171; // 0x10101a3
+ field public static final int certDigest = 16844106; // 0x101054a
field public static final int checkBoxPreferenceStyle = 16842895; // 0x101008f
field public static final int checkMark = 16843016; // 0x1010108
field public static final int checkMarkTint = 16843943; // 0x10104a7
@@ -1163,6 +1165,7 @@
field public static final int resizeable = 16843405; // 0x101028d
field public static final int resizeableActivity = 16844022; // 0x10104f6
field public static final int resource = 16842789; // 0x1010025
+ field public static final int restartOnConfigChanges = 16844105; // 0x1010549
field public static final int restoreAnyVersion = 16843450; // 0x10102ba
field public static final deprecated int restoreNeedsApplication = 16843421; // 0x101029d
field public static final int restrictedAccountType = 16843733; // 0x10103d5
@@ -1491,7 +1494,7 @@
field public static final int toYDelta = 16843209; // 0x10101c9
field public static final int toYScale = 16843205; // 0x10101c5
field public static final int toolbarStyle = 16843946; // 0x10104aa
- field public static final int tooltip = 16844084; // 0x1010534
+ field public static final int tooltipText = 16844084; // 0x1010534
field public static final int top = 16843182; // 0x10101ae
field public static final int topBright = 16842955; // 0x10100cb
field public static final int topDark = 16842951; // 0x10100c7
@@ -1550,7 +1553,7 @@
field public static final int viewportWidth = 16843778; // 0x1010402
field public static final int visibility = 16842972; // 0x10100dc
field public static final int visible = 16843156; // 0x1010194
- field public static final int visibleToEphemeral = 16844095; // 0x101053f
+ field public static final int visibleToInstantApps = 16844095; // 0x101053f
field public static final int vmSafeMode = 16843448; // 0x10102b8
field public static final int voiceIcon = 16843908; // 0x1010484
field public static final int voiceLanguage = 16843349; // 0x1010255
@@ -3619,8 +3622,7 @@
method public boolean dispatchTrackballEvent(android.view.MotionEvent);
method public void dump(java.lang.String, java.io.FileDescriptor, java.io.PrintWriter, java.lang.String[]);
method public void enterPictureInPictureMode();
- method public void enterPictureInPictureMode(float);
- method public void enterPictureInPictureModeOnMoveToBackground(boolean);
+ method public boolean enterPictureInPictureMode(android.app.PictureInPictureArgs);
method public android.view.View findViewById(int);
method public void finish();
method public void finishActivity(int);
@@ -3795,8 +3797,7 @@
method public void setIntent(android.content.Intent);
method public final void setMediaController(android.media.session.MediaController);
method public void setOverlayWithDecorCaptionEnabled(boolean);
- method public void setPictureInPictureActions(java.util.List<android.app.RemoteAction>);
- method public void setPictureInPictureAspectRatio(float);
+ method public void setPictureInPictureArgs(android.app.PictureInPictureArgs);
method public final deprecated void setProgress(int);
method public final deprecated void setProgressBarIndeterminate(boolean);
method public final deprecated void setProgressBarIndeterminateVisibility(boolean);
@@ -4994,11 +4995,13 @@
public static class Instrumentation.ActivityMonitor {
ctor public Instrumentation.ActivityMonitor(android.content.IntentFilter, android.app.Instrumentation.ActivityResult, boolean);
ctor public Instrumentation.ActivityMonitor(java.lang.String, android.app.Instrumentation.ActivityResult, boolean);
+ ctor public Instrumentation.ActivityMonitor();
method public final android.content.IntentFilter getFilter();
method public final int getHits();
method public final android.app.Activity getLastActivity();
method public final android.app.Instrumentation.ActivityResult getResult();
method public final boolean isBlocking();
+ method public android.app.Instrumentation.ActivityResult onMatchIntent(android.content.Intent);
method public final android.app.Activity waitForActivity();
method public final android.app.Activity waitForActivityWithTimeout(long);
}
@@ -5582,10 +5585,11 @@
method public android.net.Uri getSound();
method public int getUserLockedFields();
method public long[] getVibrationPattern();
- method public boolean isAllowed();
+ method public boolean isDeleted();
method public void lockFields(int);
method public void populateFromXml(org.xmlpull.v1.XmlPullParser);
method public void setBypassDnd(boolean);
+ method public void setDeleted(boolean);
method public void setImportance(int);
method public void setLights(boolean);
method public void setLockscreenVisibility(int);
@@ -5633,6 +5637,7 @@
method public boolean removeAutomaticZenRule(java.lang.String);
method public final void setInterruptionFilter(int);
method public void setNotificationPolicy(android.app.NotificationManager.Policy);
+ method public android.content.ComponentName startServiceInForeground(android.content.Intent, int, android.app.Notification);
method public boolean updateAutomaticZenRule(java.lang.String, android.app.AutomaticZenRule);
field public static final java.lang.String ACTION_INTERRUPTION_FILTER_CHANGED = "android.app.action.INTERRUPTION_FILTER_CHANGED";
field public static final java.lang.String ACTION_NOTIFICATION_POLICY_ACCESS_GRANTED_CHANGED = "android.app.action.NOTIFICATION_POLICY_ACCESS_GRANTED_CHANGED";
@@ -5718,6 +5723,17 @@
method public abstract void onSendFinished(android.app.PendingIntent, android.content.Intent, int, java.lang.String, android.os.Bundle);
}
+ public final class PictureInPictureArgs implements android.os.Parcelable {
+ ctor public PictureInPictureArgs();
+ ctor public PictureInPictureArgs(float, java.util.List<android.app.RemoteAction>);
+ method public android.app.PictureInPictureArgs clone();
+ method public int describeContents();
+ method public void setActions(java.util.List<android.app.RemoteAction>);
+ method public void setAspectRatio(float);
+ method public void writeToParcel(android.os.Parcel, int);
+ field public static final android.os.Parcelable.Creator<android.app.PictureInPictureArgs> CREATOR;
+ }
+
public class Presentation extends android.app.Dialog {
ctor public Presentation(android.content.Context, android.view.Display);
ctor public Presentation(android.content.Context, android.view.Display, int);
@@ -6348,6 +6364,7 @@
method public boolean isActivePasswordSufficient();
method public boolean isAdminActive(android.content.ComponentName);
method public boolean isApplicationHidden(android.content.ComponentName, java.lang.String);
+ method public boolean isBackupServiceEnabled(android.content.ComponentName);
method public boolean isCallerApplicationRestrictionsManagingPackage();
method public boolean isDeviceManaged();
method public boolean isDeviceOwnerApp(java.lang.String);
@@ -6365,6 +6382,7 @@
method public void lockNow();
method public void lockNow(int);
method public void notifyPendingSystemUpdate(long);
+ method public boolean packageHasActiveAdmins(java.lang.String);
method public void reboot(android.content.ComponentName);
method public void removeActiveAdmin(android.content.ComponentName);
method public boolean removeCrossProfileWidgetProvider(android.content.ComponentName, java.lang.String);
@@ -6383,6 +6401,7 @@
method public void setApplicationRestrictions(android.content.ComponentName, java.lang.String, android.os.Bundle);
method public void setApplicationRestrictionsManagingPackage(android.content.ComponentName, java.lang.String) throws android.content.pm.PackageManager.NameNotFoundException;
method public void setAutoTimeRequired(android.content.ComponentName, boolean);
+ method public void setBackupServiceEnabled(android.content.ComponentName, boolean);
method public void setBluetoothContactSharingDisabled(android.content.ComponentName, boolean);
method public void setCameraDisabled(android.content.ComponentName, boolean);
method public void setCertInstallerPackage(android.content.ComponentName, java.lang.String) throws java.lang.SecurityException;
@@ -6747,6 +6766,7 @@
method public boolean isBackupEnabled();
method public java.lang.String[] listAllTransports();
method public int requestBackup(java.lang.String[], android.app.backup.BackupObserver);
+ method public int requestBackup(java.lang.String[], android.app.backup.BackupObserver, int);
method public int requestRestore(android.app.backup.RestoreObserver);
method public java.lang.String selectBackupTransport(java.lang.String);
method public void setAutoRestore(boolean);
@@ -6757,6 +6777,8 @@
field public static final int ERROR_TRANSPORT_ABORTED = -1000; // 0xfffffc18
field public static final int ERROR_TRANSPORT_PACKAGE_REJECTED = -1002; // 0xfffffc16
field public static final int ERROR_TRANSPORT_QUOTA_EXCEEDED = -1005; // 0xfffffc13
+ field public static final int FLAG_NON_INCREMENTAL_BACKUP = 1; // 0x1
+ field public static final java.lang.String PACKAGE_MANAGER_SENTINEL = "@pm@";
field public static final int SUCCESS = 0; // 0x0
}
@@ -8298,6 +8320,7 @@
ctor public ClipData(android.content.ClipDescription, android.content.ClipData.Item);
ctor public ClipData(android.content.ClipData);
method public void addItem(android.content.ClipData.Item);
+ method public void addItem(android.content.ClipData.Item, android.content.ContentResolver);
method public int describeContents();
method public android.content.ClipDescription getDescription();
method public android.content.ClipData.Item getItemAt(int);
@@ -9935,6 +9958,7 @@
method public int describeContents();
method public void dump(android.util.Printer, java.lang.String);
method public final int getThemeResource();
+ field public static final int CONFIG_COLORIMETRY = 16384; // 0x4000
field public static final int CONFIG_DENSITY = 4096; // 0x1000
field public static final int CONFIG_FONT_SCALE = 1073741824; // 0x40000000
field public static final int CONFIG_KEYBOARD = 16; // 0x10
@@ -10240,6 +10264,7 @@
method public java.util.List<android.content.pm.LauncherActivityInfo> getActivityList(java.lang.String, android.os.UserHandle);
method public android.content.pm.ApplicationInfo getApplicationInfo(java.lang.String, int, android.os.UserHandle);
method public android.content.pm.LauncherApps.PinItemRequest getPinItemRequest(android.content.Intent);
+ method public java.util.List<android.os.UserHandle> getProfiles();
method public android.graphics.drawable.Drawable getShortcutBadgedIconDrawable(android.content.pm.ShortcutInfo, int);
method public android.content.IntentSender getShortcutConfigActivityIntent(android.content.pm.LauncherActivityInfo);
method public java.util.List<android.content.pm.LauncherActivityInfo> getShortcutConfigActivityList(java.lang.String, android.os.UserHandle);
@@ -10277,7 +10302,7 @@
method public boolean accept(android.os.Bundle);
method public boolean accept();
method public int describeContents();
- method public android.appwidget.AppWidgetProviderInfo getAppWidgetProviderInfo();
+ method public android.appwidget.AppWidgetProviderInfo getAppWidgetProviderInfo(android.content.Context);
method public int getRequestType();
method public android.content.pm.ShortcutInfo getShortcutInfo();
method public boolean isValid();
@@ -10346,6 +10371,7 @@
method public void registerSessionCallback(android.content.pm.PackageInstaller.SessionCallback);
method public void registerSessionCallback(android.content.pm.PackageInstaller.SessionCallback, android.os.Handler);
method public void uninstall(java.lang.String, android.content.IntentSender);
+ method public void uninstall(android.content.pm.VersionedPackage, android.content.IntentSender);
method public void unregisterSessionCallback(android.content.pm.PackageInstaller.SessionCallback);
method public void updateSessionAppIcon(int, android.graphics.Bitmap);
method public void updateSessionAppLabel(int, java.lang.CharSequence);
@@ -10499,6 +10525,7 @@
method public abstract int[] getPackageGids(java.lang.String) throws android.content.pm.PackageManager.NameNotFoundException;
method public abstract int[] getPackageGids(java.lang.String, int) throws android.content.pm.PackageManager.NameNotFoundException;
method public abstract android.content.pm.PackageInfo getPackageInfo(java.lang.String, int) throws android.content.pm.PackageManager.NameNotFoundException;
+ method public abstract android.content.pm.PackageInfo getPackageInfo(android.content.pm.VersionedPackage, int) throws android.content.pm.PackageManager.NameNotFoundException;
method public abstract android.content.pm.PackageInstaller getPackageInstaller();
method public abstract int getPackageUid(java.lang.String, int) throws android.content.pm.PackageManager.NameNotFoundException;
method public abstract java.lang.String[] getPackagesForUid(int);
@@ -10514,6 +10541,7 @@
method public abstract android.content.res.Resources getResourcesForApplication(android.content.pm.ApplicationInfo) throws android.content.pm.PackageManager.NameNotFoundException;
method public abstract android.content.res.Resources getResourcesForApplication(java.lang.String) throws android.content.pm.PackageManager.NameNotFoundException;
method public abstract android.content.pm.ServiceInfo getServiceInfo(android.content.ComponentName, int) throws android.content.pm.PackageManager.NameNotFoundException;
+ method public abstract java.util.List<android.content.pm.SharedLibraryInfo> getSharedLibraries(int);
method public abstract android.content.pm.FeatureInfo[] getSystemAvailableFeatures();
method public abstract java.lang.String[] getSystemSharedLibraryNames();
method public abstract java.lang.CharSequence getText(java.lang.String, int, android.content.pm.ApplicationInfo);
@@ -10624,6 +10652,7 @@
field public static final java.lang.String FEATURE_SIP = "android.software.sip";
field public static final java.lang.String FEATURE_SIP_VOIP = "android.software.sip.voip";
field public static final java.lang.String FEATURE_TELEPHONY = "android.hardware.telephony";
+ field public static final java.lang.String FEATURE_TELEPHONY_CARRIERLOCK = "android.hardware.telephony.carrierlock";
field public static final java.lang.String FEATURE_TELEPHONY_CDMA = "android.hardware.telephony.cdma";
field public static final java.lang.String FEATURE_TELEPHONY_GSM = "android.hardware.telephony.gsm";
field public static final deprecated java.lang.String FEATURE_TELEVISION = "android.hardware.type.television";
@@ -10728,6 +10757,7 @@
field public static final int SIGNATURE_UNKNOWN_PACKAGE = -4; // 0xfffffffc
field public static final int VERIFICATION_ALLOW = 1; // 0x1
field public static final int VERIFICATION_REJECT = -1; // 0xffffffff
+ field public static final int VERSION_CODE_HIGHEST = -1; // 0xffffffff
}
public static class PackageManager.NameNotFoundException extends android.util.AndroidException {
@@ -10876,6 +10906,20 @@
field public java.lang.String permission;
}
+ public final class SharedLibraryInfo implements android.os.Parcelable {
+ method public int describeContents();
+ method public android.content.pm.VersionedPackage getDeclaringPackage();
+ method public java.util.List<android.content.pm.VersionedPackage> getDependentPackages();
+ method public java.lang.String getName();
+ method public int getVersion();
+ method public boolean isBuiltin();
+ method public boolean isDynamic();
+ method public boolean isStatic();
+ method public void writeToParcel(android.os.Parcel, int);
+ field public static final android.os.Parcelable.Creator<android.content.pm.SharedLibraryInfo> CREATOR;
+ field public static final int VERSION_UNDEFINED = -1; // 0xffffffff
+ }
+
public final class ShortcutInfo implements android.os.Parcelable {
method public int describeContents();
method public android.content.ComponentName getActivity();
@@ -10951,6 +10995,15 @@
field public static final android.os.Parcelable.Creator<android.content.pm.Signature> CREATOR;
}
+ public final class VersionedPackage implements android.os.Parcelable {
+ ctor public VersionedPackage(java.lang.String, int);
+ method public int describeContents();
+ method public java.lang.String getPackageName();
+ method public long getVersionCode();
+ method public void writeToParcel(android.os.Parcel, int);
+ field public static final android.os.Parcelable.Creator<android.content.pm.VersionedPackage> CREATOR;
+ }
+
}
package android.content.pm.permission {
@@ -11050,7 +11103,9 @@
method public int getLayoutDirection();
method public android.os.LocaleList getLocales();
method public boolean isLayoutSizeAtLeast(int);
+ method public boolean isScreenHdr();
method public boolean isScreenRound();
+ method public boolean isScreenWideColorGamut();
method public static boolean needNewResources(int, int);
method public void readFromParcel(android.os.Parcel);
method public void setLayoutDirection(java.util.Locale);
@@ -11060,6 +11115,16 @@
method public void setToDefaults();
method public int updateFrom(android.content.res.Configuration);
method public void writeToParcel(android.os.Parcel, int);
+ field public static final int COLORIMETRY_HDR_MASK = 12; // 0xc
+ field public static final int COLORIMETRY_HDR_NO = 4; // 0x4
+ field public static final int COLORIMETRY_HDR_SHIFT = 2; // 0x2
+ field public static final int COLORIMETRY_HDR_UNDEFINED = 0; // 0x0
+ field public static final int COLORIMETRY_HDR_YES = 8; // 0x8
+ field public static final int COLORIMETRY_UNDEFINED = 0; // 0x0
+ field public static final int COLORIMETRY_WIDE_COLOR_GAMUT_MASK = 3; // 0x3
+ field public static final int COLORIMETRY_WIDE_COLOR_GAMUT_NO = 1; // 0x1
+ field public static final int COLORIMETRY_WIDE_COLOR_GAMUT_UNDEFINED = 0; // 0x0
+ field public static final int COLORIMETRY_WIDE_COLOR_GAMUT_YES = 2; // 0x2
field public static final android.os.Parcelable.Creator<android.content.res.Configuration> CREATOR;
field public static final int DENSITY_DPI_UNDEFINED = 0; // 0x0
field public static final int HARDKEYBOARDHIDDEN_NO = 1; // 0x1
@@ -11125,6 +11190,7 @@
field public static final int UI_MODE_TYPE_UNDEFINED = 0; // 0x0
field public static final int UI_MODE_TYPE_VR_HEADSET = 7; // 0x7
field public static final int UI_MODE_TYPE_WATCH = 6; // 0x6
+ field public int colorimetry;
field public int densityDpi;
field public float fontScale;
field public int hardKeyboardHidden;
@@ -13110,7 +13176,6 @@
method public int getFontMetricsInt(android.graphics.Paint.FontMetricsInt);
method public android.graphics.Paint.FontMetricsInt getFontMetricsInt();
method public float getFontSpacing();
- method public java.lang.String getFontVariationSettings();
method public int getHinting();
method public float getLetterSpacing();
method public android.graphics.MaskFilter getMaskFilter();
@@ -13168,7 +13233,6 @@
method public void setFilterBitmap(boolean);
method public void setFlags(int);
method public void setFontFeatureSettings(java.lang.String);
- method public void setFontVariationSettings(java.lang.String);
method public void setHinting(int);
method public void setLetterSpacing(float);
method public void setLinearText(boolean);
@@ -26356,6 +26420,8 @@
method public android.net.wifi.WifiConfiguration[] getConnectableConfigs();
method public android.net.wifi.WifiConfiguration getConnectedConfig();
method public android.net.wifi.WifiConfiguration getDefaultWifiConfig();
+ method public int getLastSelectedNetworkId();
+ method public long getLastSelectedNetworkTimestamp();
method public android.net.wifi.ScanResult[] getScanResults();
method public void setConnectableConfigs(android.net.wifi.WifiConfiguration[]);
method public void setConnectedConfig(android.net.wifi.WifiConfiguration);
@@ -26369,6 +26435,7 @@
method public android.net.RecommendationRequest.Builder setConnectableConfigs(android.net.wifi.WifiConfiguration[]);
method public android.net.RecommendationRequest.Builder setConnectedWifiConfig(android.net.wifi.WifiConfiguration);
method public android.net.RecommendationRequest.Builder setDefaultWifiConfig(android.net.wifi.WifiConfiguration);
+ method public android.net.RecommendationRequest.Builder setLastSelectedNetwork(int, long);
method public android.net.RecommendationRequest.Builder setScanResults(android.net.wifi.ScanResult[]);
}
@@ -26460,6 +26527,7 @@
ctor public TrafficStats();
method public static void clearThreadStatsTag();
method public static void clearThreadStatsUid();
+ method public static int getAndSetThreadStatsTag(int);
method public static long getMobileRxBytes();
method public static long getMobileRxPackets();
method public static long getMobileTxBytes();
@@ -27466,6 +27534,7 @@
method public int describeContents();
method public android.net.ProxyInfo getHttpProxy();
method public boolean hasNoInternetAccess();
+ method public boolean isEphemeral();
method public boolean isNoInternetAccessExpected();
method public boolean isPasspoint();
method public void setHttpProxy(android.net.ProxyInfo);
@@ -32706,6 +32775,7 @@
method public android.os.StrictMode.VmPolicy.Builder detectLeakedClosableObjects();
method public android.os.StrictMode.VmPolicy.Builder detectLeakedRegistrationObjects();
method public android.os.StrictMode.VmPolicy.Builder detectLeakedSqlLiteObjects();
+ method public android.os.StrictMode.VmPolicy.Builder detectUntaggedSockets();
method public android.os.StrictMode.VmPolicy.Builder penaltyDeath();
method public android.os.StrictMode.VmPolicy.Builder penaltyDeathOnCleartextNetwork();
method public android.os.StrictMode.VmPolicy.Builder penaltyDeathOnFileUriExposure();
@@ -36182,6 +36252,7 @@
field public static final java.lang.String BOOT_COUNT = "boot_count";
field public static final java.lang.String CONTACT_METADATA_SYNC_ENABLED = "contact_metadata_sync_enabled";
field public static final android.net.Uri CONTENT_URI;
+ field public static final java.lang.String CURATE_SAVED_OPEN_NETWORKS = "curate_saved_open_networks";
field public static final java.lang.String DATA_ROAMING = "data_roaming";
field public static final java.lang.String DEBUG_APP = "debug_app";
field public static final java.lang.String DEVELOPMENT_SETTINGS_ENABLED = "development_settings_enabled";
@@ -38157,6 +38228,7 @@
field public static final int PURPOSE_ENCRYPT = 1; // 0x1
field public static final int PURPOSE_SIGN = 4; // 0x4
field public static final int PURPOSE_VERIFY = 8; // 0x8
+ field public static final int PURPOSE_WRAP_KEY = 16; // 0x10
field public static final java.lang.String SIGNATURE_PADDING_RSA_PKCS1 = "PKCS1";
field public static final java.lang.String SIGNATURE_PADDING_RSA_PSS = "PSS";
}
@@ -38745,6 +38817,7 @@
method public final android.os.IBinder onBind(android.content.Intent);
method public boolean onConfigure(java.util.List<android.os.PersistableBundle>);
method public void onDeviceLocked();
+ method public void onDeviceUnlockLockout(long);
method public void onDeviceUnlocked();
method public void onTrustTimeout();
method public void onUnlockAttempt(boolean);
@@ -41529,6 +41602,7 @@
method public void enableVideoCalling(boolean);
method public boolean endCall();
method public java.util.List<android.telephony.CellInfo> getAllCellInfo();
+ method public java.util.List<android.service.carrier.CarrierIdentifier> getAllowedCarriers(int);
method public int getCallState();
method public android.os.PersistableBundle getCarrierConfig();
method public java.util.List<java.lang.String> getCarrierPackageNamesForIntent(android.content.Intent);
@@ -41604,6 +41678,7 @@
method public java.lang.String sendEnvelopeWithStatus(java.lang.String);
method public void sendUssdRequest(java.lang.String, android.telephony.TelephonyManager.OnReceiveUssdResponseCallback, android.os.Handler);
method public void sendUssdRequest(java.lang.String, int, android.telephony.TelephonyManager.OnReceiveUssdResponseCallback, android.os.Handler);
+ method public int setAllowedCarriers(int, java.util.List<android.service.carrier.CarrierIdentifier>);
method public void setDataEnabled(boolean);
method public void setDataEnabled(int, boolean);
method public boolean setLine1NumberForDisplay(java.lang.String, java.lang.String);
@@ -42295,6 +42370,7 @@
method public void startIntentSender(android.content.IntentSender, android.content.Intent, int, int, int) throws android.content.IntentSender.SendIntentException;
method public void startIntentSender(android.content.IntentSender, android.content.Intent, int, int, int, android.os.Bundle) throws android.content.IntentSender.SendIntentException;
method public android.content.ComponentName startService(android.content.Intent);
+ method public android.content.ComponentName startServiceInForeground(android.content.Intent, int, android.app.Notification);
method public boolean stopService(android.content.Intent);
method public void unbindService(android.content.ServiceConnection);
method public void unregisterReceiver(android.content.BroadcastReceiver);
@@ -42397,6 +42473,7 @@
method public int[] getPackageGids(java.lang.String) throws android.content.pm.PackageManager.NameNotFoundException;
method public int[] getPackageGids(java.lang.String, int) throws android.content.pm.PackageManager.NameNotFoundException;
method public android.content.pm.PackageInfo getPackageInfo(java.lang.String, int) throws android.content.pm.PackageManager.NameNotFoundException;
+ method public android.content.pm.PackageInfo getPackageInfo(android.content.pm.VersionedPackage, int) throws android.content.pm.PackageManager.NameNotFoundException;
method public android.content.pm.PackageInstaller getPackageInstaller();
method public int getPackageUid(java.lang.String, int) throws android.content.pm.PackageManager.NameNotFoundException;
method public java.lang.String[] getPackagesForUid(int);
@@ -42412,6 +42489,7 @@
method public android.content.res.Resources getResourcesForApplication(android.content.pm.ApplicationInfo);
method public android.content.res.Resources getResourcesForApplication(java.lang.String) throws android.content.pm.PackageManager.NameNotFoundException;
method public android.content.pm.ServiceInfo getServiceInfo(android.content.ComponentName, int) throws android.content.pm.PackageManager.NameNotFoundException;
+ method public java.util.List<android.content.pm.SharedLibraryInfo> getSharedLibraries(int);
method public android.content.pm.FeatureInfo[] getSystemAvailableFeatures();
method public java.lang.String[] getSystemSharedLibraryNames();
method public java.lang.CharSequence getText(java.lang.String, int, android.content.pm.ApplicationInfo);
@@ -46165,7 +46243,7 @@
method public abstract android.view.SubMenu getSubMenu();
method public abstract java.lang.CharSequence getTitle();
method public abstract java.lang.CharSequence getTitleCondensed();
- method public default java.lang.CharSequence getTooltip();
+ method public default java.lang.CharSequence getTooltipText();
method public abstract boolean hasSubMenu();
method public abstract boolean isActionViewExpanded();
method public abstract boolean isCheckable();
@@ -46192,7 +46270,7 @@
method public abstract android.view.MenuItem setTitle(java.lang.CharSequence);
method public abstract android.view.MenuItem setTitle(int);
method public abstract android.view.MenuItem setTitleCondensed(java.lang.CharSequence);
- method public default android.view.MenuItem setTooltip(java.lang.CharSequence);
+ method public default android.view.MenuItem setTooltipText(java.lang.CharSequence);
method public abstract android.view.MenuItem setVisible(boolean);
field public static final int SHOW_AS_ACTION_ALWAYS = 2; // 0x2
field public static final int SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW = 8; // 0x8
@@ -46886,7 +46964,8 @@
method public java.lang.Object getTag(int);
method public int getTextAlignment();
method public int getTextDirection();
- method public final java.lang.CharSequence getTooltip();
+ method public final deprecated java.lang.CharSequence getTooltip();
+ method public final java.lang.CharSequence getTooltipText();
method public final int getTop();
method protected float getTopFadingEdgeStrength();
method protected int getTopPaddingOffset();
@@ -47187,7 +47266,8 @@
method public void setTag(int, java.lang.Object);
method public void setTextAlignment(int);
method public void setTextDirection(int);
- method public final void setTooltip(java.lang.CharSequence);
+ method public final deprecated void setTooltip(java.lang.CharSequence);
+ method public final void setTooltipText(java.lang.CharSequence);
method public final void setTop(int);
method public void setTouchDelegate(android.view.TouchDelegate);
method public final void setTransitionName(java.lang.String);
@@ -52938,6 +53018,10 @@
method public void endBatchEdit();
method public boolean extractText(android.view.inputmethod.ExtractedTextRequest, android.view.inputmethod.ExtractedText);
method public final int getAutoLinkMask();
+ method public int getAutoSizeMaxTextSize();
+ method public int getAutoSizeMinTextSize();
+ method public int getAutoSizeStepGranularity();
+ method public int getAutoSizeTextType();
method public int getBreakStrategy();
method public int getCompoundDrawablePadding();
method public android.content.res.ColorStateList getCompoundDrawableTintList();
@@ -52963,7 +53047,6 @@
method public int getExtendedPaddingTop();
method public android.text.InputFilter[] getFilters();
method public java.lang.String getFontFeatureSettings();
- method public java.lang.String getFontVariationSettings();
method public boolean getFreezesText();
method public int getGravity();
method public int getHighlightColor();
@@ -53047,6 +53130,10 @@
method public void removeTextChangedListener(android.text.TextWatcher);
method public void setAllCaps(boolean);
method public final void setAutoLinkMask(int);
+ method public void setAutoSizeMaxTextSize(int, float);
+ method public void setAutoSizeMinTextSize(int, float);
+ method public void setAutoSizeStepGranularity(int, float);
+ method public void setAutoSizeTextType(int);
method public void setBreakStrategy(int);
method public void setCompoundDrawablePadding(int);
method public void setCompoundDrawableTintList(android.content.res.ColorStateList);
@@ -53069,7 +53156,6 @@
method public void setExtractedText(android.view.inputmethod.ExtractedText);
method public void setFilters(android.text.InputFilter[]);
method public void setFontFeatureSettings(java.lang.String);
- method public void setFontVariationSettings(java.lang.String);
method protected boolean setFrame(int, int, int, int);
method public void setFreezesText(boolean);
method public void setGravity(int);
@@ -53138,8 +53224,8 @@
method public void setTypeface(android.graphics.Typeface, int);
method public void setTypeface(android.graphics.Typeface);
method public void setWidth(int);
- field public static final int AUTO_SIZE_TYPE_NONE = 0; // 0x0
- field public static final int AUTO_SIZE_TYPE_XY = 1; // 0x1
+ field public static final int AUTO_SIZE_TEXT_TYPE_NONE = 0; // 0x0
+ field public static final int AUTO_SIZE_TEXT_TYPE_XY = 1; // 0x1
}
public static final class TextView.BufferType extends java.lang.Enum {
diff --git a/api/test-current.txt b/api/test-current.txt
index f4e71e3..82715b3 100644
--- a/api/test-current.txt
+++ b/api/test-current.txt
@@ -114,6 +114,7 @@
field public static final java.lang.String RECEIVE_WAP_PUSH = "android.permission.RECEIVE_WAP_PUSH";
field public static final java.lang.String RECORD_AUDIO = "android.permission.RECORD_AUDIO";
field public static final java.lang.String REORDER_TASKS = "android.permission.REORDER_TASKS";
+ field public static final java.lang.String REQUEST_DELETE_PACKAGES = "android.permission.REQUEST_DELETE_PACKAGES";
field public static final java.lang.String REQUEST_IGNORE_BATTERY_OPTIMIZATIONS = "android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS";
field public static final java.lang.String REQUEST_INSTALL_PACKAGES = "android.permission.REQUEST_INSTALL_PACKAGES";
field public static final deprecated java.lang.String RESTART_PACKAGES = "android.permission.RESTART_PACKAGES";
@@ -362,6 +363,7 @@
field public static final int centerMedium = 16842959; // 0x10100cf
field public static final int centerX = 16843170; // 0x10101a2
field public static final int centerY = 16843171; // 0x10101a3
+ field public static final int certDigest = 16844106; // 0x101054a
field public static final int checkBoxPreferenceStyle = 16842895; // 0x101008f
field public static final int checkMark = 16843016; // 0x1010108
field public static final int checkMarkTint = 16843943; // 0x10104a7
@@ -1054,6 +1056,7 @@
field public static final int resizeable = 16843405; // 0x101028d
field public static final int resizeableActivity = 16844022; // 0x10104f6
field public static final int resource = 16842789; // 0x1010025
+ field public static final int restartOnConfigChanges = 16844105; // 0x1010549
field public static final int restoreAnyVersion = 16843450; // 0x10102ba
field public static final deprecated int restoreNeedsApplication = 16843421; // 0x101029d
field public static final int restrictedAccountType = 16843733; // 0x10103d5
@@ -1378,7 +1381,7 @@
field public static final int toYDelta = 16843209; // 0x10101c9
field public static final int toYScale = 16843205; // 0x10101c5
field public static final int toolbarStyle = 16843946; // 0x10104aa
- field public static final int tooltip = 16844084; // 0x1010534
+ field public static final int tooltipText = 16844084; // 0x1010534
field public static final int top = 16843182; // 0x10101ae
field public static final int topBright = 16842955; // 0x10100cb
field public static final int topDark = 16842951; // 0x10100c7
@@ -1437,7 +1440,7 @@
field public static final int viewportWidth = 16843778; // 0x1010402
field public static final int visibility = 16842972; // 0x10100dc
field public static final int visible = 16843156; // 0x1010194
- field public static final int visibleToEphemeral = 16844095; // 0x101053f
+ field public static final int visibleToInstantApps = 16844095; // 0x101053f
field public static final int vmSafeMode = 16843448; // 0x10102b8
field public static final int voiceIcon = 16843908; // 0x1010484
field public static final int voiceLanguage = 16843349; // 0x1010255
@@ -3502,8 +3505,7 @@
method public boolean dispatchTrackballEvent(android.view.MotionEvent);
method public void dump(java.lang.String, java.io.FileDescriptor, java.io.PrintWriter, java.lang.String[]);
method public void enterPictureInPictureMode();
- method public void enterPictureInPictureMode(float);
- method public void enterPictureInPictureModeOnMoveToBackground(boolean);
+ method public boolean enterPictureInPictureMode(android.app.PictureInPictureArgs);
method public android.view.View findViewById(int);
method public void finish();
method public void finishActivity(int);
@@ -3676,8 +3678,7 @@
method public void setIntent(android.content.Intent);
method public final void setMediaController(android.media.session.MediaController);
method public void setOverlayWithDecorCaptionEnabled(boolean);
- method public void setPictureInPictureActions(java.util.List<android.app.RemoteAction>);
- method public void setPictureInPictureAspectRatio(float);
+ method public void setPictureInPictureArgs(android.app.PictureInPictureArgs);
method public final deprecated void setProgress(int);
method public final deprecated void setProgressBarIndeterminate(boolean);
method public final deprecated void setProgressBarIndeterminateVisibility(boolean);
@@ -4847,11 +4848,13 @@
public static class Instrumentation.ActivityMonitor {
ctor public Instrumentation.ActivityMonitor(android.content.IntentFilter, android.app.Instrumentation.ActivityResult, boolean);
ctor public Instrumentation.ActivityMonitor(java.lang.String, android.app.Instrumentation.ActivityResult, boolean);
+ ctor public Instrumentation.ActivityMonitor();
method public final android.content.IntentFilter getFilter();
method public final int getHits();
method public final android.app.Activity getLastActivity();
method public final android.app.Instrumentation.ActivityResult getResult();
method public final boolean isBlocking();
+ method public android.app.Instrumentation.ActivityResult onMatchIntent(android.content.Intent);
method public final android.app.Activity waitForActivity();
method public final android.app.Activity waitForActivityWithTimeout(long);
}
@@ -5420,7 +5423,6 @@
method public java.lang.CharSequence getName();
method public android.net.Uri getSound();
method public long[] getVibrationPattern();
- method public boolean isAllowed();
method public void setBypassDnd(boolean);
method public void setImportance(int);
method public void setLights(boolean);
@@ -5459,6 +5461,7 @@
method public boolean removeAutomaticZenRule(java.lang.String);
method public final void setInterruptionFilter(int);
method public void setNotificationPolicy(android.app.NotificationManager.Policy);
+ method public android.content.ComponentName startServiceInForeground(android.content.Intent, int, android.app.Notification);
method public boolean updateAutomaticZenRule(java.lang.String, android.app.AutomaticZenRule);
field public static final java.lang.String ACTION_INTERRUPTION_FILTER_CHANGED = "android.app.action.INTERRUPTION_FILTER_CHANGED";
field public static final java.lang.String ACTION_NOTIFICATION_POLICY_ACCESS_GRANTED_CHANGED = "android.app.action.NOTIFICATION_POLICY_ACCESS_GRANTED_CHANGED";
@@ -5544,6 +5547,17 @@
method public abstract void onSendFinished(android.app.PendingIntent, android.content.Intent, int, java.lang.String, android.os.Bundle);
}
+ public final class PictureInPictureArgs implements android.os.Parcelable {
+ ctor public PictureInPictureArgs();
+ ctor public PictureInPictureArgs(float, java.util.List<android.app.RemoteAction>);
+ method public android.app.PictureInPictureArgs clone();
+ method public int describeContents();
+ method public void setActions(java.util.List<android.app.RemoteAction>);
+ method public void setAspectRatio(float);
+ method public void writeToParcel(android.os.Parcel, int);
+ field public static final android.os.Parcelable.Creator<android.app.PictureInPictureArgs> CREATOR;
+ }
+
public class Presentation extends android.app.Dialog {
ctor public Presentation(android.content.Context, android.view.Display);
ctor public Presentation(android.content.Context, android.view.Display, int);
@@ -6168,6 +6182,7 @@
method public boolean isActivePasswordSufficient();
method public boolean isAdminActive(android.content.ComponentName);
method public boolean isApplicationHidden(android.content.ComponentName, java.lang.String);
+ method public boolean isBackupServiceEnabled(android.content.ComponentName);
method public boolean isCallerApplicationRestrictionsManagingPackage();
method public boolean isDeviceManaged();
method public boolean isDeviceOwnerApp(java.lang.String);
@@ -6199,6 +6214,7 @@
method public void setApplicationRestrictions(android.content.ComponentName, java.lang.String, android.os.Bundle);
method public void setApplicationRestrictionsManagingPackage(android.content.ComponentName, java.lang.String) throws android.content.pm.PackageManager.NameNotFoundException;
method public void setAutoTimeRequired(android.content.ComponentName, boolean);
+ method public void setBackupServiceEnabled(android.content.ComponentName, boolean);
method public void setBluetoothContactSharingDisabled(android.content.ComponentName, boolean);
method public void setCameraDisabled(android.content.ComponentName, boolean);
method public void setCertInstallerPackage(android.content.ComponentName, java.lang.String) throws java.lang.SecurityException;
@@ -7959,6 +7975,7 @@
ctor public ClipData(android.content.ClipDescription, android.content.ClipData.Item);
ctor public ClipData(android.content.ClipData);
method public void addItem(android.content.ClipData.Item);
+ method public void addItem(android.content.ClipData.Item, android.content.ContentResolver);
method public int describeContents();
method public android.content.ClipDescription getDescription();
method public android.content.ClipData.Item getItemAt(int);
@@ -9566,6 +9583,7 @@
method public int describeContents();
method public void dump(android.util.Printer, java.lang.String);
method public final int getThemeResource();
+ field public static final int CONFIG_COLORIMETRY = 16384; // 0x4000
field public static final int CONFIG_DENSITY = 4096; // 0x1000
field public static final int CONFIG_FONT_SCALE = 1073741824; // 0x40000000
field public static final int CONFIG_KEYBOARD = 16; // 0x10
@@ -9840,6 +9858,7 @@
method public java.util.List<android.content.pm.LauncherActivityInfo> getActivityList(java.lang.String, android.os.UserHandle);
method public android.content.pm.ApplicationInfo getApplicationInfo(java.lang.String, int, android.os.UserHandle);
method public android.content.pm.LauncherApps.PinItemRequest getPinItemRequest(android.content.Intent);
+ method public java.util.List<android.os.UserHandle> getProfiles();
method public android.graphics.drawable.Drawable getShortcutBadgedIconDrawable(android.content.pm.ShortcutInfo, int);
method public android.content.IntentSender getShortcutConfigActivityIntent(android.content.pm.LauncherActivityInfo);
method public java.util.List<android.content.pm.LauncherActivityInfo> getShortcutConfigActivityList(java.lang.String, android.os.UserHandle);
@@ -9877,7 +9896,7 @@
method public boolean accept(android.os.Bundle);
method public boolean accept();
method public int describeContents();
- method public android.appwidget.AppWidgetProviderInfo getAppWidgetProviderInfo();
+ method public android.appwidget.AppWidgetProviderInfo getAppWidgetProviderInfo(android.content.Context);
method public int getRequestType();
method public android.content.pm.ShortcutInfo getShortcutInfo();
method public boolean isValid();
@@ -9946,6 +9965,7 @@
method public void registerSessionCallback(android.content.pm.PackageInstaller.SessionCallback);
method public void registerSessionCallback(android.content.pm.PackageInstaller.SessionCallback, android.os.Handler);
method public void uninstall(java.lang.String, android.content.IntentSender);
+ method public void uninstall(android.content.pm.VersionedPackage, android.content.IntentSender);
method public void unregisterSessionCallback(android.content.pm.PackageInstaller.SessionCallback);
method public void updateSessionAppIcon(int, android.graphics.Bitmap);
method public void updateSessionAppLabel(int, java.lang.CharSequence);
@@ -10094,6 +10114,7 @@
method public abstract int[] getPackageGids(java.lang.String) throws android.content.pm.PackageManager.NameNotFoundException;
method public abstract int[] getPackageGids(java.lang.String, int) throws android.content.pm.PackageManager.NameNotFoundException;
method public abstract android.content.pm.PackageInfo getPackageInfo(java.lang.String, int) throws android.content.pm.PackageManager.NameNotFoundException;
+ method public abstract android.content.pm.PackageInfo getPackageInfo(android.content.pm.VersionedPackage, int) throws android.content.pm.PackageManager.NameNotFoundException;
method public abstract android.content.pm.PackageInstaller getPackageInstaller();
method public abstract int getPackageUid(java.lang.String, int) throws android.content.pm.PackageManager.NameNotFoundException;
method public abstract java.lang.String[] getPackagesForUid(int);
@@ -10108,6 +10129,7 @@
method public abstract android.content.res.Resources getResourcesForApplication(android.content.pm.ApplicationInfo) throws android.content.pm.PackageManager.NameNotFoundException;
method public abstract android.content.res.Resources getResourcesForApplication(java.lang.String) throws android.content.pm.PackageManager.NameNotFoundException;
method public abstract android.content.pm.ServiceInfo getServiceInfo(android.content.ComponentName, int) throws android.content.pm.PackageManager.NameNotFoundException;
+ method public abstract java.util.List<android.content.pm.SharedLibraryInfo> getSharedLibraries(int);
method public abstract android.content.pm.FeatureInfo[] getSystemAvailableFeatures();
method public abstract java.lang.String[] getSystemSharedLibraryNames();
method public abstract java.lang.CharSequence getText(java.lang.String, int, android.content.pm.ApplicationInfo);
@@ -10266,6 +10288,7 @@
field public static final int SIGNATURE_UNKNOWN_PACKAGE = -4; // 0xfffffffc
field public static final int VERIFICATION_ALLOW = 1; // 0x1
field public static final int VERIFICATION_REJECT = -1; // 0xffffffff
+ field public static final int VERSION_CODE_HIGHEST = -1; // 0xffffffff
}
public static class PackageManager.NameNotFoundException extends android.util.AndroidException {
@@ -10406,6 +10429,20 @@
field public java.lang.String permission;
}
+ public final class SharedLibraryInfo implements android.os.Parcelable {
+ method public int describeContents();
+ method public android.content.pm.VersionedPackage getDeclaringPackage();
+ method public java.util.List<android.content.pm.VersionedPackage> getDependentPackages();
+ method public java.lang.String getName();
+ method public int getVersion();
+ method public boolean isBuiltin();
+ method public boolean isDynamic();
+ method public boolean isStatic();
+ method public void writeToParcel(android.os.Parcel, int);
+ field public static final android.os.Parcelable.Creator<android.content.pm.SharedLibraryInfo> CREATOR;
+ field public static final int VERSION_UNDEFINED = -1; // 0xffffffff
+ }
+
public final class ShortcutInfo implements android.os.Parcelable {
method public int describeContents();
method public android.content.ComponentName getActivity();
@@ -10482,6 +10519,15 @@
field public static final android.os.Parcelable.Creator<android.content.pm.Signature> CREATOR;
}
+ public final class VersionedPackage implements android.os.Parcelable {
+ ctor public VersionedPackage(java.lang.String, int);
+ method public int describeContents();
+ method public java.lang.String getPackageName();
+ method public long getVersionCode();
+ method public void writeToParcel(android.os.Parcel, int);
+ field public static final android.os.Parcelable.Creator<android.content.pm.VersionedPackage> CREATOR;
+ }
+
}
package android.content.res {
@@ -10567,7 +10613,9 @@
method public int getLayoutDirection();
method public android.os.LocaleList getLocales();
method public boolean isLayoutSizeAtLeast(int);
+ method public boolean isScreenHdr();
method public boolean isScreenRound();
+ method public boolean isScreenWideColorGamut();
method public static boolean needNewResources(int, int);
method public void readFromParcel(android.os.Parcel);
method public void setLayoutDirection(java.util.Locale);
@@ -10577,6 +10625,16 @@
method public void setToDefaults();
method public int updateFrom(android.content.res.Configuration);
method public void writeToParcel(android.os.Parcel, int);
+ field public static final int COLORIMETRY_HDR_MASK = 12; // 0xc
+ field public static final int COLORIMETRY_HDR_NO = 4; // 0x4
+ field public static final int COLORIMETRY_HDR_SHIFT = 2; // 0x2
+ field public static final int COLORIMETRY_HDR_UNDEFINED = 0; // 0x0
+ field public static final int COLORIMETRY_HDR_YES = 8; // 0x8
+ field public static final int COLORIMETRY_UNDEFINED = 0; // 0x0
+ field public static final int COLORIMETRY_WIDE_COLOR_GAMUT_MASK = 3; // 0x3
+ field public static final int COLORIMETRY_WIDE_COLOR_GAMUT_NO = 1; // 0x1
+ field public static final int COLORIMETRY_WIDE_COLOR_GAMUT_UNDEFINED = 0; // 0x0
+ field public static final int COLORIMETRY_WIDE_COLOR_GAMUT_YES = 2; // 0x2
field public static final android.os.Parcelable.Creator<android.content.res.Configuration> CREATOR;
field public static final int DENSITY_DPI_UNDEFINED = 0; // 0x0
field public static final int HARDKEYBOARDHIDDEN_NO = 1; // 0x1
@@ -10642,6 +10700,7 @@
field public static final int UI_MODE_TYPE_UNDEFINED = 0; // 0x0
field public static final int UI_MODE_TYPE_VR_HEADSET = 7; // 0x7
field public static final int UI_MODE_TYPE_WATCH = 6; // 0x6
+ field public int colorimetry;
field public int densityDpi;
field public float fontScale;
field public int hardKeyboardHidden;
@@ -12627,7 +12686,6 @@
method public int getFontMetricsInt(android.graphics.Paint.FontMetricsInt);
method public android.graphics.Paint.FontMetricsInt getFontMetricsInt();
method public float getFontSpacing();
- method public java.lang.String getFontVariationSettings();
method public int getHinting();
method public float getLetterSpacing();
method public android.graphics.MaskFilter getMaskFilter();
@@ -12685,7 +12743,6 @@
method public void setFilterBitmap(boolean);
method public void setFlags(int);
method public void setFontFeatureSettings(java.lang.String);
- method public void setFontVariationSettings(java.lang.String);
method public void setHinting(int);
method public void setLetterSpacing(float);
method public void setLinearText(boolean);
@@ -24571,6 +24628,7 @@
public class TrafficStats {
ctor public TrafficStats();
method public static void clearThreadStatsTag();
+ method public static int getAndSetThreadStatsTag(int);
method public static long getMobileRxBytes();
method public static long getMobileRxPackets();
method public static long getMobileTxBytes();
@@ -30174,6 +30232,7 @@
method public android.os.StrictMode.VmPolicy.Builder detectLeakedClosableObjects();
method public android.os.StrictMode.VmPolicy.Builder detectLeakedRegistrationObjects();
method public android.os.StrictMode.VmPolicy.Builder detectLeakedSqlLiteObjects();
+ method public android.os.StrictMode.VmPolicy.Builder detectUntaggedSockets();
method public android.os.StrictMode.VmPolicy.Builder penaltyDeath();
method public android.os.StrictMode.VmPolicy.Builder penaltyDeathOnCleartextNetwork();
method public android.os.StrictMode.VmPolicy.Builder penaltyDeathOnFileUriExposure();
@@ -35375,6 +35434,7 @@
field public static final int PURPOSE_ENCRYPT = 1; // 0x1
field public static final int PURPOSE_SIGN = 4; // 0x4
field public static final int PURPOSE_VERIFY = 8; // 0x8
+ field public static final int PURPOSE_WRAP_KEY = 16; // 0x10
field public static final java.lang.String SIGNATURE_PADDING_RSA_PKCS1 = "PKCS1";
field public static final java.lang.String SIGNATURE_PADDING_RSA_PSS = "PSS";
}
@@ -39165,6 +39225,7 @@
method public void startIntentSender(android.content.IntentSender, android.content.Intent, int, int, int) throws android.content.IntentSender.SendIntentException;
method public void startIntentSender(android.content.IntentSender, android.content.Intent, int, int, int, android.os.Bundle) throws android.content.IntentSender.SendIntentException;
method public android.content.ComponentName startService(android.content.Intent);
+ method public android.content.ComponentName startServiceInForeground(android.content.Intent, int, android.app.Notification);
method public boolean stopService(android.content.Intent);
method public void unbindService(android.content.ServiceConnection);
method public void unregisterReceiver(android.content.BroadcastReceiver);
@@ -39267,6 +39328,7 @@
method public int[] getPackageGids(java.lang.String) throws android.content.pm.PackageManager.NameNotFoundException;
method public int[] getPackageGids(java.lang.String, int) throws android.content.pm.PackageManager.NameNotFoundException;
method public android.content.pm.PackageInfo getPackageInfo(java.lang.String, int) throws android.content.pm.PackageManager.NameNotFoundException;
+ method public android.content.pm.PackageInfo getPackageInfo(android.content.pm.VersionedPackage, int) throws android.content.pm.PackageManager.NameNotFoundException;
method public android.content.pm.PackageInstaller getPackageInstaller();
method public int getPackageUid(java.lang.String, int) throws android.content.pm.PackageManager.NameNotFoundException;
method public java.lang.String[] getPackagesForUid(int);
@@ -39281,6 +39343,7 @@
method public android.content.res.Resources getResourcesForApplication(android.content.pm.ApplicationInfo);
method public android.content.res.Resources getResourcesForApplication(java.lang.String) throws android.content.pm.PackageManager.NameNotFoundException;
method public android.content.pm.ServiceInfo getServiceInfo(android.content.ComponentName, int) throws android.content.pm.PackageManager.NameNotFoundException;
+ method public java.util.List<android.content.pm.SharedLibraryInfo> getSharedLibraries(int);
method public android.content.pm.FeatureInfo[] getSystemAvailableFeatures();
method public java.lang.String[] getSystemSharedLibraryNames();
method public java.lang.CharSequence getText(java.lang.String, int, android.content.pm.ApplicationInfo);
@@ -43194,7 +43257,7 @@
method public abstract android.view.SubMenu getSubMenu();
method public abstract java.lang.CharSequence getTitle();
method public abstract java.lang.CharSequence getTitleCondensed();
- method public default java.lang.CharSequence getTooltip();
+ method public default java.lang.CharSequence getTooltipText();
method public abstract boolean hasSubMenu();
method public abstract boolean isActionViewExpanded();
method public abstract boolean isCheckable();
@@ -43221,7 +43284,7 @@
method public abstract android.view.MenuItem setTitle(java.lang.CharSequence);
method public abstract android.view.MenuItem setTitle(int);
method public abstract android.view.MenuItem setTitleCondensed(java.lang.CharSequence);
- method public default android.view.MenuItem setTooltip(java.lang.CharSequence);
+ method public default android.view.MenuItem setTooltipText(java.lang.CharSequence);
method public abstract android.view.MenuItem setVisible(boolean);
field public static final int SHOW_AS_ACTION_ALWAYS = 2; // 0x2
field public static final int SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW = 8; // 0x8
@@ -43917,7 +43980,8 @@
method public java.lang.Object getTag(int);
method public int getTextAlignment();
method public int getTextDirection();
- method public final java.lang.CharSequence getTooltip();
+ method public final deprecated java.lang.CharSequence getTooltip();
+ method public final java.lang.CharSequence getTooltipText();
method public android.view.View getTooltipView();
method public final int getTop();
method protected float getTopFadingEdgeStrength();
@@ -44219,7 +44283,8 @@
method public void setTag(int, java.lang.Object);
method public void setTextAlignment(int);
method public void setTextDirection(int);
- method public final void setTooltip(java.lang.CharSequence);
+ method public final deprecated void setTooltip(java.lang.CharSequence);
+ method public final void setTooltipText(java.lang.CharSequence);
method public final void setTop(int);
method public void setTouchDelegate(android.view.TouchDelegate);
method public final void setTransitionName(java.lang.String);
@@ -48789,6 +48854,7 @@
method public int getGravity();
method public android.view.Menu getMenu();
method public android.view.MenuInflater getMenuInflater();
+ method public android.widget.ListView getMenuListView();
method public void inflate(int);
method public void setGravity(int);
method public void setOnDismissListener(android.widget.PopupMenu.OnDismissListener);
@@ -49622,6 +49688,10 @@
method public void endBatchEdit();
method public boolean extractText(android.view.inputmethod.ExtractedTextRequest, android.view.inputmethod.ExtractedText);
method public final int getAutoLinkMask();
+ method public int getAutoSizeMaxTextSize();
+ method public int getAutoSizeMinTextSize();
+ method public int getAutoSizeStepGranularity();
+ method public int getAutoSizeTextType();
method public int getBreakStrategy();
method public int getCompoundDrawablePadding();
method public android.content.res.ColorStateList getCompoundDrawableTintList();
@@ -49647,7 +49717,6 @@
method public int getExtendedPaddingTop();
method public android.text.InputFilter[] getFilters();
method public java.lang.String getFontFeatureSettings();
- method public java.lang.String getFontVariationSettings();
method public boolean getFreezesText();
method public int getGravity();
method public int getHighlightColor();
@@ -49731,6 +49800,10 @@
method public void removeTextChangedListener(android.text.TextWatcher);
method public void setAllCaps(boolean);
method public final void setAutoLinkMask(int);
+ method public void setAutoSizeMaxTextSize(int, float);
+ method public void setAutoSizeMinTextSize(int, float);
+ method public void setAutoSizeStepGranularity(int, float);
+ method public void setAutoSizeTextType(int);
method public void setBreakStrategy(int);
method public void setCompoundDrawablePadding(int);
method public void setCompoundDrawableTintList(android.content.res.ColorStateList);
@@ -49753,7 +49826,6 @@
method public void setExtractedText(android.view.inputmethod.ExtractedText);
method public void setFilters(android.text.InputFilter[]);
method public void setFontFeatureSettings(java.lang.String);
- method public void setFontVariationSettings(java.lang.String);
method protected boolean setFrame(int, int, int, int);
method public void setFreezesText(boolean);
method public void setGravity(int);
@@ -49822,8 +49894,8 @@
method public void setTypeface(android.graphics.Typeface, int);
method public void setTypeface(android.graphics.Typeface);
method public void setWidth(int);
- field public static final int AUTO_SIZE_TYPE_NONE = 0; // 0x0
- field public static final int AUTO_SIZE_TYPE_XY = 1; // 0x1
+ field public static final int AUTO_SIZE_TEXT_TYPE_NONE = 0; // 0x0
+ field public static final int AUTO_SIZE_TEXT_TYPE_XY = 1; // 0x1
}
public static final class TextView.BufferType extends java.lang.Enum {
diff --git a/cmds/bmgr/src/com/android/commands/bmgr/Bmgr.java b/cmds/bmgr/src/com/android/commands/bmgr/Bmgr.java
index 5bf8076..780db5e 100644
--- a/cmds/bmgr/src/com/android/commands/bmgr/Bmgr.java
+++ b/cmds/bmgr/src/com/android/commands/bmgr/Bmgr.java
@@ -270,7 +270,7 @@
}
}
- private void backupNowAllPackages() {
+ private void backupNowAllPackages(boolean nonIncrementalBackup) {
int userId = UserHandle.USER_SYSTEM;
IPackageManager mPm =
IPackageManager.Stub.asInterface(ServiceManager.getService("package"));
@@ -297,14 +297,19 @@
System.err.println(BMGR_NOT_RUNNING_ERR);
}
}
- backupNowPackages(packages);
+ backupNowPackages(packages, nonIncrementalBackup);
}
}
- private void backupNowPackages(List<String> packages) {
+ private void backupNowPackages(List<String> packages, boolean nonIncrementalBackup) {
+ int flags = 0;
+ if (nonIncrementalBackup) {
+ flags |= BackupManager.FLAG_NON_INCREMENTAL_BACKUP;
+ }
try {
BackupObserver observer = new BackupObserver();
- int err = mBmgr.requestBackup(packages.toArray(new String[packages.size()]), observer);
+ int err = mBmgr.requestBackup(packages.toArray(new String[packages.size()]), observer,
+ flags);
if (err == 0) {
// Off and running -- wait for the backup to complete
observer.waitForCompletion();
@@ -320,24 +325,31 @@
private void doBackupNow() {
String pkg;
boolean backupAll = false;
+ boolean nonIncrementalBackup = false;
ArrayList<String> allPkgs = new ArrayList<String>();
while ((pkg = nextArg()) != null) {
if (pkg.equals("--all")) {
backupAll = true;
+ } else if (pkg.equals("--non-incremental")) {
+ nonIncrementalBackup = true;
+ } else if (pkg.equals("--incremental")) {
+ nonIncrementalBackup = false;
} else {
allPkgs.add(pkg);
}
}
if (backupAll) {
if (allPkgs.size() == 0) {
- System.out.println("Running backup for all packages.");
- backupNowAllPackages();
+ System.out.println("Running " + (nonIncrementalBackup ? "non-" : "") +
+ "incremental backup for all packages.");
+ backupNowAllPackages(nonIncrementalBackup);
} else {
System.err.println("Provide only '--all' flag or list of packages.");
}
} else if (allPkgs.size() > 0) {
- System.out.println("Running backup for " + allPkgs.size() +" requested packages.");
- backupNowPackages(allPkgs);
+ System.out.println("Running " + (nonIncrementalBackup ? "non-" : "") +
+ "incremental backup for " + allPkgs.size() +" requested packages.");
+ backupNowPackages(allPkgs, nonIncrementalBackup);
} else {
System.err.println("Provide '--all' flag or list of packages.");
}
diff --git a/cmds/pm/src/com/android/commands/pm/Pm.java b/cmds/pm/src/com/android/commands/pm/Pm.java
index 810d201..ac5fea3 100644
--- a/cmds/pm/src/com/android/commands/pm/Pm.java
+++ b/cmds/pm/src/com/android/commands/pm/Pm.java
@@ -1556,7 +1556,7 @@
System.err.println(" pm install-write [-S BYTES] SESSION_ID SPLIT_NAME [PATH]");
System.err.println(" pm install-commit SESSION_ID");
System.err.println(" pm install-abandon SESSION_ID");
- System.err.println(" pm uninstall [-k] [--user USER_ID] PACKAGE");
+ System.err.println(" pm uninstall [-k] [--user USER_ID] [--versionCode VERSION_CODE] PACKAGE");
System.err.println(" pm set-installer PACKAGE INSTALLER");
System.err.println(" pm move-package PACKAGE [internal|UUID]");
System.err.println(" pm move-primary-storage [internal|UUID]");
diff --git a/cmds/uiautomator/library/Android.mk b/cmds/uiautomator/library/Android.mk
index de46b8c..f932388 100644
--- a/cmds/uiautomator/library/Android.mk
+++ b/cmds/uiautomator/library/Android.mk
@@ -36,8 +36,7 @@
# Generate the stub source files
include $(CLEAR_VARS)
LOCAL_SRC_FILES := $(uiautomator.core_src_files)
-LOCAL_JAVA_LIBRARIES := $(uiautomator.core_java_libraries)
-LOCAL_STATIC_JAVA_LIBRARIES := legacy-android-test
+LOCAL_JAVA_LIBRARIES := $(uiautomator.core_java_libraries) legacy-android-test
LOCAL_MODULE_CLASS := JAVA_LIBRARIES
LOCAL_DROIDDOC_SOURCE_PATH := $(LOCAL_PATH)/core-src \
$(LOCAL_PATH)/testrunner-src
diff --git a/core/java/android/app/Activity.java b/core/java/android/app/Activity.java
index f6771857..556d7ad 100644
--- a/core/java/android/app/Activity.java
+++ b/core/java/android/app/Activity.java
@@ -2029,78 +2029,53 @@
}
/**
- * Puts the activity in picture-in-picture mode.
+ * Puts the activity in picture-in-picture mode if possible in the current system state. Any
+ * prior calls to {@link #setPictureInPictureArgs(PictureInPictureArgs)} will still apply when
+ * entering picture-in-picture through this call.
+ *
+ * @see #enterPictureInPictureMode(PictureInPictureArgs)
* @see android.R.attr#supportsPictureInPicture
*/
public void enterPictureInPictureMode() {
- try {
- ActivityManager.getService().enterPictureInPictureMode(mToken);
- } catch (RemoteException e) {
- }
+ enterPictureInPictureMode(new PictureInPictureArgs());
}
/**
- * Puts the activity in picture-in-picture mode with a given aspect ratio.
+ * Puts the activity in picture-in-picture mode if possible in the current system state with
+ * explicit given arguments. Only the set parameters in {@param args} will override prior calls
+ * {@link #setPictureInPictureArgs(PictureInPictureArgs)}.
+ *
+ * The system may disallow entering picture-in-picture in various cases, including when the
+ * activity is not visible.
+ *
* @see android.R.attr#supportsPictureInPicture
*
- * @param aspectRatio the new aspect ratio of the picture-in-picture.
+ * @param args the explicit non-null arguments to use when entering picture-in-picture.
+ * @return whether the system successfully entered picture-in-picture.
*/
- public void enterPictureInPictureMode(float aspectRatio) {
+ public boolean enterPictureInPictureMode(@NonNull PictureInPictureArgs args) {
try {
- ActivityManagerNative.getDefault().enterPictureInPictureModeWithAspectRatio(mToken,
- aspectRatio);
- } catch (RemoteException e) {
- }
- }
-
- /**
- * Requests to the system that the activity can be automatically put into picture-in-picture
- * mode when the user leaves the activity causing it normally to be hidden. Generally, this
- * happens when another task is brought to the forground or the task containing this activity
- * is moved to the background. This is a *not* a guarantee that the activity will actually be
- * put in picture-in-picture mode, and depends on a number of factors, including whether there
- * is already something in picture-in-picture.
- *
- * @param enterPictureInPictureOnMoveToBg whether or not this activity can automatically enter
- * picture-in-picture
- */
- public void enterPictureInPictureModeOnMoveToBackground(
- boolean enterPictureInPictureOnMoveToBg) {
- try {
- ActivityManagerNative.getDefault().enterPictureInPictureModeOnMoveToBackground(mToken,
- enterPictureInPictureOnMoveToBg);
- } catch (RemoteException e) {
- }
- }
-
- /**
- * Updates the aspect ratio of the current picture-in-picture activity if this activity is
- * already in picture-in-picture mode, or sets it to be used later if
- * {@link #enterPictureInPictureModeOnMoveToBackground(boolean)} is requested.
- *
- * @param aspectRatio the new aspect ratio of the picture-in-picture.
- */
- public void setPictureInPictureAspectRatio(float aspectRatio) {
- try {
- ActivityManagerNative.getDefault().setPictureInPictureAspectRatio(mToken, aspectRatio);
- } catch (RemoteException e) {
- }
- }
-
- /**
- * Updates the set of user actions associated with the picture-in-picture activity.
- *
- * @param actions the new actions for picture-in-picture (can be null to reset the set of
- * actions). The maximum number of actions that will be displayed on this device
- * is defined by {@link ActivityManager#getMaxNumPictureInPictureActions()}.
- */
- public void setPictureInPictureActions(List<RemoteAction> actions) {
- try {
- if (actions == null) {
- actions = new ArrayList<>();
+ if (args == null) {
+ throw new IllegalArgumentException("Expected non-null picture-in-picture args");
}
- ActivityManagerNative.getDefault().setPictureInPictureActions(mToken,
- new ParceledListSlice<RemoteAction>(actions));
+ return ActivityManagerNative.getDefault().enterPictureInPictureMode(mToken, args);
+ } catch (RemoteException e) {
+ return false;
+ }
+ }
+
+ /**
+ * Updates the properties of the picture-in-picture activity, or sets it to be used later when
+ * {@link #enterPictureInPictureMode()} is called.
+ *
+ * @param args the new properties of the picture-in-picture.
+ */
+ public void setPictureInPictureArgs(@NonNull PictureInPictureArgs args) {
+ try {
+ if (args == null) {
+ throw new IllegalArgumentException("Expected non-null picture-in-picture args");
+ }
+ ActivityManagerNative.getDefault().setPictureInPictureArgs(mToken, args);
} catch (RemoteException e) {
}
}
diff --git a/core/java/android/app/ActivityManager.java b/core/java/android/app/ActivityManager.java
index 2e3c100..1d4b038 100644
--- a/core/java/android/app/ActivityManager.java
+++ b/core/java/android/app/ActivityManager.java
@@ -526,9 +526,13 @@
/** @hide Mode for {@link IActivityManager#getAppStartMode}: delay running until later. */
public static final int APP_START_MODE_DELAYED = 1;
+ /** @hide Mode for {@link IActivityManager#getAppStartMode}: delay running until later, with
+ * rigid errors (throwing exception). */
+ public static final int APP_START_MODE_DELAYED_RIGID = 2;
+
/** @hide Mode for {@link IActivityManager#getAppStartMode}: disable/cancel pending
- * launches. */
- public static final int APP_START_MODE_DISABLED = 2;
+ * launches; this is the mode for ephemeral apps. */
+ public static final int APP_START_MODE_DISABLED = 3;
/**
* Lock task mode is not active.
diff --git a/core/java/android/app/ActivityManagerInternal.java b/core/java/android/app/ActivityManagerInternal.java
index 87700dc..89510d9 100644
--- a/core/java/android/app/ActivityManagerInternal.java
+++ b/core/java/android/app/ActivityManagerInternal.java
@@ -64,36 +64,6 @@
public static final int APP_TRANSITION_TIMEOUT = 3;
/**
- * Class to hold deferred properties to apply for picture-in-picture for a given activity.
- */
- public static class PictureInPictureArguments {
- /**
- * The expected aspect ratio of the picture-in-picture.
- */
- public float aspectRatio;
-
- /**
- * The set of actions that are associated with this activity when in picture in picture.
- */
- public List<RemoteAction> userActions = new ArrayList<>();
-
- public void dump(PrintWriter pw, String prefix) {
- pw.println(prefix + "aspectRatio=" + aspectRatio);
- if (userActions.isEmpty()) {
- pw.println(prefix + " userActions=[]");
- } else {
- pw.println(prefix + " userActions=[");
- for (int i = 0; i < userActions.size(); i++) {
- RemoteAction action = userActions.get(i);
- pw.print(prefix + " Action[" + i + "]: ");
- action.dump("", pw);
- }
- pw.println(prefix + " ]");
- }
- }
- }
-
- /**
* Grant Uri permissions from one app to another. This method only extends
* permission grants if {@code callingUid} has permission to them.
*/
@@ -201,6 +171,17 @@
public abstract void setPendingIntentWhitelistDuration(IIntentSender target, long duration);
/**
+ * Allow DeviceIdleController to tell us about what apps are whitelisted.
+ */
+ public abstract void setDeviceIdleWhitelist(int[] appids);
+
+ /**
+ * Update information about which app IDs are on the temp whitelist.
+ */
+ public abstract void updateDeviceIdleTempWhitelist(int[] appids, int changingAppId,
+ boolean adding);
+
+ /**
* Updates and persists the {@link Configuration} for a given user.
*
* @param values the configuration to update
diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java
index 74614cc..d814ddc 100644
--- a/core/java/android/app/ActivityThread.java
+++ b/core/java/android/app/ActivityThread.java
@@ -4919,18 +4919,27 @@
}
void handleApplicationInfoChanged(@NonNull final ApplicationInfo ai) {
+ // Updates triggered by package installation go through a package update
+ // receiver. Here we try to capture ApplicationInfo changes that are
+ // caused by other sources, such as overlays. That means we want to be as conservative
+ // about code changes as possible. Take the diff of the old ApplicationInfo and the new
+ // to see if anything needs to change.
synchronized (mResourcesManager) {
// Update all affected loaded packages with new package information
WeakReference<LoadedApk> ref = mPackages.get(ai.packageName);
LoadedApk apk = ref != null ? ref.get() : null;
if (apk != null) {
- apk.updateApplicationInfo(ai, null);
+ final ArrayList<String> oldPaths = new ArrayList<>();
+ LoadedApk.makePaths(this, apk.getApplicationInfo(), oldPaths, null /*outLibPaths*/);
+ apk.updateApplicationInfo(ai, oldPaths);
}
ref = mResourcePackages.get(ai.packageName);
apk = ref != null ? ref.get() : null;
if (apk != null) {
- apk.updateApplicationInfo(ai, null);
+ final ArrayList<String> oldPaths = new ArrayList<>();
+ LoadedApk.makePaths(this, apk.getApplicationInfo(), oldPaths, null /*outLibPaths*/);
+ apk.updateApplicationInfo(ai, oldPaths);
}
// Update all affected Resources objects to use new ResourcesImpl
diff --git a/core/java/android/app/AppOpsManager.java b/core/java/android/app/AppOpsManager.java
index 67fbc5a..9cc13ab 100644
--- a/core/java/android/app/AppOpsManager.java
+++ b/core/java/android/app/AppOpsManager.java
@@ -243,8 +243,10 @@
public static final int OP_AUDIO_ACCESSIBILITY_VOLUME = 64;
/** @hide Read the phone number. */
public static final int OP_READ_PHONE_NUMBER = 65;
+ /** @hide Request package installs through package installer */
+ public static final int OP_REQUEST_INSTALL_PACKAGES = 66;
/** @hide */
- public static final int _NUM_OP = 66;
+ public static final int _NUM_OP = 67;
/** Access to coarse location information. */
public static final String OPSTR_COARSE_LOCATION = "android:coarse_location";
@@ -461,6 +463,7 @@
OP_RUN_IN_BACKGROUND,
OP_AUDIO_ACCESSIBILITY_VOLUME,
OP_READ_PHONE_NUMBER,
+ OP_REQUEST_INSTALL_PACKAGES,
};
/**
@@ -534,6 +537,7 @@
null,
null, // OP_AUDIO_ACCESSIBILITY_VOLUME
OPSTR_READ_PHONE_NUMBER,
+ null, // OP_REQUEST_INSTALL_PACKAGES
};
/**
@@ -607,6 +611,7 @@
"RUN_IN_BACKGROUND",
"AUDIO_ACCESSIBILITY_VOLUME",
"READ_PHONE_NUMBER",
+ "REQUEST_INSTALL_PACKAGES",
};
/**
@@ -680,6 +685,7 @@
null, // no permission for running in background
null, // no permission for changing accessibility volume
Manifest.permission.READ_PHONE_NUMBER,
+ Manifest.permission.REQUEST_INSTALL_PACKAGES,
};
/**
@@ -754,6 +760,7 @@
null, // RUN_IN_BACKGROUND
UserManager.DISALLOW_ADJUST_VOLUME, //AUDIO_ACCESSIBILITY_VOLUME
null, // READ_PHONE_NUMBER
+ null, // REQUEST_INSTALL_PACKAGES
};
/**
@@ -827,6 +834,7 @@
false, // RUN_IN_BACKGROUND
false, // AUDIO_ACCESSIBILITY_VOLUME
false, // READ_PHONE_NUMBER
+ false, // REQUEST_INSTALL_PACKAGES
};
/**
@@ -899,6 +907,7 @@
AppOpsManager.MODE_ALLOWED, // OP_RUN_IN_BACKGROUND
AppOpsManager.MODE_ALLOWED, // OP_AUDIO_ACCESSIBILITY_VOLUME
AppOpsManager.MODE_ALLOWED,
+ AppOpsManager.MODE_DEFAULT, // OP_REQUEST_INSTALL_PACKAGES
};
/**
@@ -975,6 +984,7 @@
false,
false, // OP_AUDIO_ACCESSIBILITY_VOLUME
false,
+ false, // OP_REQUEST_INSTALL_PACKAGES
};
/**
diff --git a/core/java/android/app/ApplicationPackageManager.java b/core/java/android/app/ApplicationPackageManager.java
index f3185a8..f790542 100644
--- a/core/java/android/app/ApplicationPackageManager.java
+++ b/core/java/android/app/ApplicationPackageManager.java
@@ -17,13 +17,14 @@
package android.app;
import android.annotation.DrawableRes;
+import android.annotation.IntRange;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.StringRes;
import android.annotation.XmlRes;
-import android.app.admin.DevicePolicyManager;
import android.content.ComponentName;
import android.content.ContentResolver;
+import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.IntentSender;
@@ -52,13 +53,13 @@
import android.content.pm.ProviderInfo;
import android.content.pm.ResolveInfo;
import android.content.pm.ServiceInfo;
-import android.content.pm.UserInfo;
+import android.content.pm.SharedLibraryInfo;
import android.content.pm.VerifierDeviceIdentity;
+import android.content.pm.VersionedPackage;
import android.content.res.Resources;
import android.content.res.XmlResourceParser;
import android.graphics.Bitmap;
import android.graphics.Canvas;
-import android.graphics.Color;
import android.graphics.Rect;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
@@ -136,6 +137,21 @@
}
@Override
+ public PackageInfo getPackageInfo(VersionedPackage versionedPackage, int flags)
+ throws NameNotFoundException {
+ try {
+ PackageInfo pi = mPM.getPackageInfoVersioned(versionedPackage, flags,
+ mContext.getUserId());
+ if (pi != null) {
+ return pi;
+ }
+ } catch (RemoteException e) {
+ throw e.rethrowFromSystemServer();
+ }
+ throw new NameNotFoundException(versionedPackage.toString());
+ }
+
+ @Override
public PackageInfo getPackageInfoAsUser(String packageName, int flags, int userId)
throws NameNotFoundException {
try {
@@ -146,7 +162,6 @@
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
-
throw new NameNotFoundException(packageName);
}
@@ -444,6 +459,28 @@
/** @hide */
@Override
+ public @NonNull List<SharedLibraryInfo> getSharedLibraries(int flags) {
+ return getSharedLibrariesAsUser(flags, mContext.getUserId());
+ }
+
+ /** @hide */
+ @Override
+ @SuppressWarnings("unchecked")
+ public @NonNull List<SharedLibraryInfo> getSharedLibrariesAsUser(int flags, int userId) {
+ try {
+ ParceledListSlice<SharedLibraryInfo> sharedLibs = mPM.getSharedLibraries(
+ flags, userId);
+ if (sharedLibs == null) {
+ return Collections.emptyList();
+ }
+ return sharedLibs.getList();
+ } catch (RemoteException e) {
+ throw e.rethrowFromSystemServer();
+ }
+ }
+
+ /** @hide */
+ @Override
public @NonNull String getServicesSystemSharedLibraryPackageName() {
try {
return mPM.getServicesSystemSharedLibraryPackageName();
@@ -1386,7 +1423,7 @@
}
}
- ApplicationPackageManager(ContextImpl context,
+ protected ApplicationPackageManager(ContextImpl context,
IPackageManager pm) {
mContext = context;
mPM = pm;
@@ -1820,6 +1857,12 @@
@Override
public @Nullable VolumeInfo getPackageCurrentVolume(ApplicationInfo app) {
final StorageManager storage = mContext.getSystemService(StorageManager.class);
+ return getPackageCurrentVolume(app, storage);
+ }
+
+ @VisibleForTesting
+ protected @Nullable VolumeInfo getPackageCurrentVolume(ApplicationInfo app,
+ StorageManager storage) {
if (app.isInternal()) {
return storage.findVolumeById(VolumeInfo.ID_PRIVATE_INTERNAL);
} else if (app.isExternalAsec()) {
@@ -1831,25 +1874,43 @@
@Override
public @NonNull List<VolumeInfo> getPackageCandidateVolumes(ApplicationInfo app) {
- final StorageManager storage = mContext.getSystemService(StorageManager.class);
- final VolumeInfo currentVol = getPackageCurrentVolume(app);
- final List<VolumeInfo> vols = storage.getVolumes();
+ final StorageManager storageManager = mContext.getSystemService(StorageManager.class);
+ return getPackageCandidateVolumes(app, storageManager, mPM);
+ }
+
+ @VisibleForTesting
+ protected @NonNull List<VolumeInfo> getPackageCandidateVolumes(ApplicationInfo app,
+ StorageManager storageManager, IPackageManager pm) {
+ final VolumeInfo currentVol = getPackageCurrentVolume(app, storageManager);
+ final List<VolumeInfo> vols = storageManager.getVolumes();
final List<VolumeInfo> candidates = new ArrayList<>();
for (VolumeInfo vol : vols) {
- if (Objects.equals(vol, currentVol) || isPackageCandidateVolume(mContext, app, vol)) {
+ if (Objects.equals(vol, currentVol)
+ || isPackageCandidateVolume(mContext, app, vol, pm)) {
candidates.add(vol);
}
}
return candidates;
}
- private boolean isPackageCandidateVolume(
- ContextImpl context, ApplicationInfo app, VolumeInfo vol) {
- final boolean forceAllowOnExternal = Settings.Global.getInt(
+ @VisibleForTesting
+ protected boolean isForceAllowOnExternal(Context context) {
+ return Settings.Global.getInt(
context.getContentResolver(), Settings.Global.FORCE_ALLOW_ON_EXTERNAL, 0) != 0;
- // Private internal is always an option
+ }
+
+ @VisibleForTesting
+ protected boolean isAllow3rdPartyOnInternal(Context context) {
+ return context.getResources().getBoolean(
+ com.android.internal.R.bool.config_allow3rdPartyAppOnInternal);
+ }
+
+ private boolean isPackageCandidateVolume(
+ ContextImpl context, ApplicationInfo app, VolumeInfo vol, IPackageManager pm) {
+ final boolean forceAllowOnExternal = isForceAllowOnExternal(context);
+
if (VolumeInfo.ID_PRIVATE_INTERNAL.equals(vol.getId())) {
- return true;
+ return app.isSystemApp() || isAllow3rdPartyOnInternal(context);
}
// System apps and apps demanding internal storage can't be moved
@@ -1875,7 +1936,7 @@
// Some apps can't be moved. (e.g. device admins)
try {
- if (mPM.isPackageDeviceAdminOnAnyUser(app.packageName)) {
+ if (pm.isPackageDeviceAdminOnAnyUser(app.packageName)) {
return false;
}
} catch (RemoteException e) {
@@ -1952,10 +2013,11 @@
}
@Override
- public void deletePackageAsUser(String packageName, IPackageDeleteObserver observer, int flags,
- int userId) {
+ public void deletePackageAsUser(String packageName, IPackageDeleteObserver observer,
+ int flags, int userId) {
try {
- mPM.deletePackageAsUser(packageName, observer, userId, flags);
+ mPM.deletePackageAsUser(packageName, PackageManager.VERSION_CODE_HIGHEST,
+ observer, userId, flags);
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
@@ -2278,7 +2340,7 @@
synchronized (mLock) {
if (mInstaller == null) {
try {
- mInstaller = new PackageInstaller(mContext, this, mPM.getPackageInstaller(),
+ mInstaller = new PackageInstaller(mPM.getPackageInstaller(),
mContext.getPackageName(), mContext.getUserId());
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
diff --git a/core/java/android/app/ContextImpl.java b/core/java/android/app/ContextImpl.java
index d08bee5..1658e82 100644
--- a/core/java/android/app/ContextImpl.java
+++ b/core/java/android/app/ContextImpl.java
@@ -18,7 +18,6 @@
import android.annotation.NonNull;
import android.annotation.Nullable;
-import android.app.admin.DevicePolicyManager;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.ContentProvider;
@@ -1385,7 +1384,14 @@
@Override
public ComponentName startService(Intent service) {
warnIfCallingFromSystemProcess();
- return startServiceCommon(service, mUser);
+ return startServiceCommon(service, -1, null, mUser);
+ }
+
+ @Override
+ public ComponentName startServiceInForeground(Intent service,
+ int id, Notification notification) {
+ warnIfCallingFromSystemProcess();
+ return startServiceCommon(service, id, notification, mUser);
}
@Override
@@ -1396,16 +1402,24 @@
@Override
public ComponentName startServiceAsUser(Intent service, UserHandle user) {
- return startServiceCommon(service, user);
+ return startServiceCommon(service, -1, null, user);
}
- private ComponentName startServiceCommon(Intent service, UserHandle user) {
+ @Override
+ public ComponentName startServiceInForegroundAsUser(Intent service,
+ int id, Notification notification, UserHandle user) {
+ return startServiceCommon(service, id, notification, user);
+ }
+
+ private ComponentName startServiceCommon(Intent service, int id, Notification notification,
+ UserHandle user) {
try {
validateServiceIntent(service);
service.prepareToLeaveProcess(this);
ComponentName cn = ActivityManager.getService().startService(
mMainThread.getApplicationThread(), service, service.resolveTypeIfNeeded(
- getContentResolver()), getOpPackageName(), user.getIdentifier());
+ getContentResolver()), id, notification, getOpPackageName(),
+ user.getIdentifier());
if (cn != null) {
if (cn.getPackageName().equals("!")) {
throw new SecurityException(
@@ -1415,6 +1429,9 @@
throw new SecurityException(
"Unable to start service " + service
+ ": " + cn.getClassName());
+ } else if (cn.getPackageName().equals("?")) {
+ throw new IllegalStateException(
+ "Not allowed to start service " + service + ": " + cn.getClassName());
}
}
return cn;
@@ -1573,9 +1590,17 @@
throw new IllegalArgumentException("permission is null");
}
+ final IActivityManager am = ActivityManager.getService();
+ if (am == null && UserHandle.getAppId(Binder.getCallingUid()) == Process.SYSTEM_UID) {
+ // Well this is super awkward; we somehow don't have an active
+ // ActivityManager instance. If this is the system UID, then we
+ // totally have whatever permission this is.
+ Slog.w(TAG, "Missing ActivityManager; assuming system UID holds " + permission);
+ return PackageManager.PERMISSION_GRANTED;
+ }
+
try {
- return ActivityManager.getService().checkPermission(
- permission, pid, uid);
+ return am.checkPermission(permission, pid, uid);
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
diff --git a/core/java/android/app/IActivityManager.aidl b/core/java/android/app/IActivityManager.aidl
index e143255..135c2a4 100644
--- a/core/java/android/app/IActivityManager.aidl
+++ b/core/java/android/app/IActivityManager.aidl
@@ -34,6 +34,7 @@
import android.app.IUserSwitchObserver;
import android.app.Notification;
import android.app.PendingIntent;
+import android.app.PictureInPictureArgs;
import android.app.ProfilerInfo;
import android.app.WaitResult;
import android.app.assist.AssistContent;
@@ -128,7 +129,8 @@
void finishSubActivity(in IBinder token, in String resultWho, int requestCode);
PendingIntent getRunningServiceControlPanel(in ComponentName service);
ComponentName startService(in IApplicationThread caller, in Intent service,
- in String resolvedType, in String callingPackage, int userId);
+ in String resolvedType, int id, in Notification notification,
+ in String callingPackage, int userId);
int stopService(in IApplicationThread caller, in Intent service,
in String resolvedType, int userId);
int bindService(in IApplicationThread caller, in IBinder token, in Intent service,
@@ -479,12 +481,8 @@
boolean isInMultiWindowMode(in IBinder token);
boolean isInPictureInPictureMode(in IBinder token);
void killPackageDependents(in String packageName, int userId);
- void enterPictureInPictureMode(in IBinder token);
- void enterPictureInPictureModeWithAspectRatio(in IBinder token, float aspectRatio);
- void enterPictureInPictureModeOnMoveToBackground(in IBinder token,
- boolean enterPictureInPictureOnMoveToBg);
- void setPictureInPictureAspectRatio(in IBinder token, float aspectRatio);
- void setPictureInPictureActions(in IBinder token, in ParceledListSlice actions);
+ boolean enterPictureInPictureMode(in IBinder token, in PictureInPictureArgs args);
+ void setPictureInPictureArgs(in IBinder token, in PictureInPictureArgs args);
void activityRelaunched(in IBinder token);
IBinder getUriPermissionOwnerForActivity(in IBinder activityToken);
/**
diff --git a/core/java/android/app/INotificationManager.aidl b/core/java/android/app/INotificationManager.aidl
index 07c21a5..f909af0 100644
--- a/core/java/android/app/INotificationManager.aidl
+++ b/core/java/android/app/INotificationManager.aidl
@@ -40,6 +40,7 @@
{
void cancelAllNotifications(String pkg, int userId);
+ void clearData(String pkg, int uid);
void enqueueToast(String pkg, ITransientNotification callback, int duration);
void cancelToast(String pkg, ITransientNotification callback);
void enqueueNotificationWithTag(String pkg, String opPkg, String tag, int id,
@@ -54,10 +55,10 @@
void createNotificationChannels(String pkg, in ParceledListSlice channelsList);
void updateNotificationChannelForPackage(String pkg, int uid, in NotificationChannel channel);
NotificationChannel getNotificationChannel(String pkg, String channelId);
- NotificationChannel getNotificationChannelForPackage(String pkg, int uid, String channelId);
+ NotificationChannel getNotificationChannelForPackage(String pkg, int uid, String channelId, boolean includeDeleted);
void deleteNotificationChannel(String pkg, String channelId);
ParceledListSlice getNotificationChannels(String pkg);
- ParceledListSlice getNotificationChannelsForPackage(String pkg, int uid);
+ ParceledListSlice getNotificationChannelsForPackage(String pkg, int uid, boolean includeDeleted);
// TODO: Remove this when callers have been migrated to the equivalent
// INotificationListener method.
diff --git a/core/java/android/app/Instrumentation.java b/core/java/android/app/Instrumentation.java
index cc7981c..b1bdea1 100644
--- a/core/java/android/app/Instrumentation.java
+++ b/core/java/android/app/Instrumentation.java
@@ -443,6 +443,7 @@
private final String mClass;
private final ActivityResult mResult;
private final boolean mBlock;
+ private final boolean mIgnoreMatchingSpecificIntents;
// This is protected by 'Instrumentation.this.mSync'.
@@ -454,7 +455,7 @@
/**
* Create a new ActivityMonitor that looks for a particular kind of
* intent to be started.
- *
+ *
* @param which The set of intents this monitor is responsible for.
* @param result A canned result to return if the monitor is hit; can
* be null.
@@ -470,6 +471,7 @@
mClass = null;
mResult = result;
mBlock = block;
+ mIgnoreMatchingSpecificIntents = false;
}
/**
@@ -491,6 +493,34 @@
mClass = cls;
mResult = result;
mBlock = block;
+ mIgnoreMatchingSpecificIntents = false;
+ }
+
+ /**
+ * Create a new ActivityMonitor that can be used for intercepting any activity to be
+ * started.
+ *
+ * <p> When an activity is started, {@link #onMatchIntent(Intent)} will be called on
+ * instances created using this constructor to see if it is a hit.
+ *
+ * @see #onMatchIntent(Intent)
+ */
+ public ActivityMonitor() {
+ mWhich = null;
+ mClass = null;
+ mResult = null;
+ mBlock = false;
+ mIgnoreMatchingSpecificIntents = true;
+ }
+
+ /**
+ * @return true if this monitor is used for intercepting any started activity by calling
+ * into {@link #onMatchIntent(Intent)}, false if this monitor is only used
+ * for specific intents corresponding to the intent filter or activity class
+ * passed in the constructor.
+ */
+ final boolean ignoreMatchingSpecificIntents() {
+ return mIgnoreMatchingSpecificIntents;
}
/**
@@ -577,10 +607,31 @@
}
}
}
-
+
+ /**
+ * Used for intercepting any started activity.
+ *
+ * <p> A non-null return value here will be considered a hit for this monitor.
+ * By default this will return {@code null} and subclasses can override this to return
+ * a non-null value if the intent needs to be intercepted.
+ *
+ * <p> Whenever a new activity is started, this method will be called on instances created
+ * using {@link #Instrumentation.ActivityMonitor()} to check if there is a match. In case
+ * of a match, the activity start will be blocked and the returned result will be used.
+ *
+ * @param intent The intent used for starting the activity.
+ * @return The {@link ActivityResult} that needs to be used in case of a match.
+ */
+ public ActivityResult onMatchIntent(Intent intent) {
+ return null;
+ }
+
final boolean match(Context who,
Activity activity,
Intent intent) {
+ if (mIgnoreMatchingSpecificIntents) {
+ return false;
+ }
synchronized (this) {
if (mWhich != null
&& mWhich.match(who.getContentResolver(), intent,
@@ -1492,7 +1543,14 @@
final int N = mActivityMonitors.size();
for (int i=0; i<N; i++) {
final ActivityMonitor am = mActivityMonitors.get(i);
- if (am.match(who, null, intent)) {
+ ActivityResult result = null;
+ if (am.ignoreMatchingSpecificIntents()) {
+ result = am.onMatchIntent(intent);
+ }
+ if (result != null) {
+ am.mHits++;
+ return result;
+ } else if (am.match(who, null, intent)) {
am.mHits++;
if (am.isBlocking()) {
return requestCode >= 0 ? am.getResult() : null;
@@ -1548,7 +1606,14 @@
final int N = mActivityMonitors.size();
for (int i=0; i<N; i++) {
final ActivityMonitor am = mActivityMonitors.get(i);
- if (am.match(who, null, intents[0])) {
+ ActivityResult result = null;
+ if (am.ignoreMatchingSpecificIntents()) {
+ result = am.onMatchIntent(intents[0]);
+ }
+ if (result != null) {
+ am.mHits++;
+ return;
+ } else if (am.match(who, null, intents[0])) {
am.mHits++;
if (am.isBlocking()) {
return;
@@ -1611,7 +1676,14 @@
final int N = mActivityMonitors.size();
for (int i=0; i<N; i++) {
final ActivityMonitor am = mActivityMonitors.get(i);
- if (am.match(who, null, intent)) {
+ ActivityResult result = null;
+ if (am.ignoreMatchingSpecificIntents()) {
+ result = am.onMatchIntent(intent);
+ }
+ if (result != null) {
+ am.mHits++;
+ return result;
+ } else if (am.match(who, null, intent)) {
am.mHits++;
if (am.isBlocking()) {
return requestCode >= 0 ? am.getResult() : null;
@@ -1671,7 +1743,14 @@
final int N = mActivityMonitors.size();
for (int i=0; i<N; i++) {
final ActivityMonitor am = mActivityMonitors.get(i);
- if (am.match(who, null, intent)) {
+ ActivityResult result = null;
+ if (am.ignoreMatchingSpecificIntents()) {
+ result = am.onMatchIntent(intent);
+ }
+ if (result != null) {
+ am.mHits++;
+ return result;
+ } else if (am.match(who, null, intent)) {
am.mHits++;
if (am.isBlocking()) {
return requestCode >= 0 ? am.getResult() : null;
@@ -1710,7 +1789,14 @@
final int N = mActivityMonitors.size();
for (int i=0; i<N; i++) {
final ActivityMonitor am = mActivityMonitors.get(i);
- if (am.match(who, null, intent)) {
+ ActivityResult result = null;
+ if (am.ignoreMatchingSpecificIntents()) {
+ result = am.onMatchIntent(intent);
+ }
+ if (result != null) {
+ am.mHits++;
+ return result;
+ } else if (am.match(who, null, intent)) {
am.mHits++;
if (am.isBlocking()) {
return requestCode >= 0 ? am.getResult() : null;
@@ -1748,7 +1834,14 @@
final int N = mActivityMonitors.size();
for (int i=0; i<N; i++) {
final ActivityMonitor am = mActivityMonitors.get(i);
- if (am.match(who, null, intent)) {
+ ActivityResult result = null;
+ if (am.ignoreMatchingSpecificIntents()) {
+ result = am.onMatchIntent(intent);
+ }
+ if (result != null) {
+ am.mHits++;
+ return;
+ } else if (am.match(who, null, intent)) {
am.mHits++;
if (am.isBlocking()) {
return;
diff --git a/core/java/android/app/LoadedApk.java b/core/java/android/app/LoadedApk.java
index db1162a..4ab0743 100644
--- a/core/java/android/app/LoadedApk.java
+++ b/core/java/android/app/LoadedApk.java
@@ -16,6 +16,8 @@
package android.app;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
@@ -262,7 +264,15 @@
return ai.sharedLibraryFiles;
}
- public void updateApplicationInfo(ApplicationInfo aInfo, List<String> oldPaths) {
+ /**
+ * Update the ApplicationInfo for an app. If oldPaths is null, all the paths are considered
+ * new.
+ * @param aInfo The new ApplicationInfo to use for this LoadedApk
+ * @param oldPaths The code paths for the old ApplicationInfo object. null means no paths can
+ * be reused.
+ */
+ public void updateApplicationInfo(@NonNull ApplicationInfo aInfo,
+ @Nullable List<String> oldPaths) {
setApplicationInfo(aInfo);
final List<String> newPaths = new ArrayList<>();
diff --git a/core/java/android/app/MediaRouteButton.java b/core/java/android/app/MediaRouteButton.java
index 09e95df..d2d7b6d 100644
--- a/core/java/android/app/MediaRouteButton.java
+++ b/core/java/android/app/MediaRouteButton.java
@@ -174,7 +174,7 @@
@Override
public void setContentDescription(CharSequence contentDescription) {
super.setContentDescription(contentDescription);
- setTooltip(contentDescription);
+ setTooltipText(contentDescription);
}
@Override
diff --git a/core/java/android/app/NotificationChannel.java b/core/java/android/app/NotificationChannel.java
index bdccb8a..56ef791 100644
--- a/core/java/android/app/NotificationChannel.java
+++ b/core/java/android/app/NotificationChannel.java
@@ -44,6 +44,7 @@
private static final String TAG_CHANNEL = "channel";
private static final String ATT_NAME = "name";
private static final String ATT_ID = "id";
+ private static final String ATT_DELETED = "deleted";
private static final String ATT_PRIORITY = "priority";
private static final String ATT_VISIBILITY = "visibility";
private static final String ATT_IMPORTANCE = "importance";
@@ -120,7 +121,7 @@
NotificationManager.VISIBILITY_NO_OVERRIDE;
private static final int DEFAULT_IMPORTANCE =
NotificationManager.IMPORTANCE_UNSPECIFIED;
- private static final boolean DEFAULT_ALLOWED = true;
+ private static final boolean DEFAULT_DELETED = false;
private final String mId;
private CharSequence mName;
@@ -133,7 +134,7 @@
private int mUserLockedFields;
private boolean mVibrationEnabled;
private boolean mShowBadge;
- private boolean mAllowed = DEFAULT_ALLOWED;
+ private boolean mDeleted = DEFAULT_DELETED;
/**
* Creates a notification channel.
@@ -170,7 +171,7 @@
mUserLockedFields = in.readInt();
mVibrationEnabled = in.readByte() != 0;
mShowBadge = in.readByte() != 0;
- mAllowed = in.readByte() != 0;
+ mDeleted = in.readByte() != 0;
}
@Override
@@ -196,7 +197,7 @@
dest.writeInt(mUserLockedFields);
dest.writeByte(mVibrationEnabled ? (byte) 1 : (byte) 0);
dest.writeByte(mShowBadge ? (byte) 1 : (byte) 0);
- dest.writeByte(mAllowed ? (byte) 1 : (byte) 0);
+ dest.writeByte(mDeleted ? (byte) 1 : (byte) 0);
}
/**
@@ -207,6 +208,14 @@
mUserLockedFields |= field;
}
+ /**
+ * @hide
+ */
+ @SystemApi
+ public void setDeleted(boolean deleted) {
+ mDeleted = deleted;
+ }
+
// Modifiable by a notification ranker.
/**
@@ -365,10 +374,11 @@
}
/**
- * Returns whether notifications are allowed to post to this channel.
+ * @hide
*/
- public boolean isAllowed() {
- return mAllowed;
+ @SystemApi
+ public boolean isDeleted() {
+ return mDeleted;
}
/**
@@ -393,6 +403,7 @@
enableVibration(safeBool(parser, ATT_VIBRATION_ENABLED, false));
setVibrationPattern(safeLongArray(parser, ATT_VIBRATION, null));
setShowBadge(safeBool(parser, ATT_SHOW_BADGE, false));
+ setDeleted(safeBool(parser, ATT_DELETED, false));
lockFields(safeInt(parser, ATT_USER_LOCKED, 0));
}
@@ -434,6 +445,9 @@
if (canShowBadge()) {
out.attribute(null, ATT_SHOW_BADGE, Boolean.toString(canShowBadge()));
}
+ if (isDeleted()) {
+ out.attribute(null, ATT_DELETED, Boolean.toString(isDeleted()));
+ }
out.endTag(null, TAG_CHANNEL);
}
@@ -464,6 +478,7 @@
record.put(ATT_USER_LOCKED, Integer.toString(getUserLockedFields()));
record.put(ATT_VIBRATION, longArrayToString(getVibrationPattern()));
record.put(ATT_SHOW_BADGE, Boolean.toString(canShowBadge()));
+ record.put(ATT_DELETED, Boolean.toString(isDeleted()));
return record;
}
@@ -547,7 +562,7 @@
if (mUserLockedFields != that.mUserLockedFields) return false;
if (mVibrationEnabled != that.mVibrationEnabled) return false;
if (mShowBadge != that.mShowBadge) return false;
- if (mAllowed != that.mAllowed) return false;
+ if (mDeleted != that.mDeleted) return false;
if (mId != null ? !mId.equals(that.mId) : that.mId != null) return false;
if (mName != null ? !mName.equals(that.mName) : that.mName != null) return false;
if (mSound != null ? !mSound.equals(that.mSound) : that.mSound != null) return false;
@@ -568,7 +583,7 @@
result = 31 * result + mUserLockedFields;
result = 31 * result + (mVibrationEnabled ? 1 : 0);
result = 31 * result + (mShowBadge ? 1 : 0);
- result = 31 * result + (mAllowed ? 1 : 0);
+ result = 31 * result + (mDeleted ? 1 : 0);
return result;
}
@@ -586,7 +601,7 @@
", mUserLockedFields=" + mUserLockedFields +
", mVibrationEnabled=" + mVibrationEnabled +
", mShowBadge=" + mShowBadge +
- ", mAllowed=" + mAllowed +
+ ", mDeleted=" + mDeleted +
'}';
}
}
diff --git a/core/java/android/app/NotificationManager.java b/core/java/android/app/NotificationManager.java
index 3551691..c0aae6d 100644
--- a/core/java/android/app/NotificationManager.java
+++ b/core/java/android/app/NotificationManager.java
@@ -24,6 +24,7 @@
import android.app.Notification.Builder;
import android.content.ComponentName;
import android.content.Context;
+import android.content.Intent;
import android.content.pm.ParceledListSlice;
import android.graphics.drawable.Icon;
import android.net.Uri;
@@ -1085,4 +1086,38 @@
default: return defValue;
}
}
+
+ /**
+ * Start a service directly into the "foreground service" state. Unlike
+ * {@link android.content.Context#startService(Intent)}, this method
+ * can be used from within background operations like broadcast receivers
+ * or scheduled jobs.
+ *
+ * @param service Description of the service to be stopped. The Intent must be either
+ * fully explicit (supplying a component name) or specify a specific package
+ * name it is targeted to.
+ * @param id The identifier for this notification as per
+ * {@link #notify(int, Notification) NotificationManager.notify(int, Notification)};
+ * must not be 0.
+ * @param notification The Notification to be displayed.
+ * @return If the service is being started or is already running, the
+ * {@link ComponentName} of the actual service that was started is
+ * returned; else if the service does not exist null is returned.
+ */
+ @Nullable
+ public ComponentName startServiceInForeground(Intent service,
+ int id, Notification notification) {
+ return mContext.startServiceInForeground(service, id, notification);
+ }
+
+ /**
+ * @hide like {@link #startServiceInForeground(Intent, int, Notification)}
+ * but for a specific user.
+ */
+ @Nullable
+ public ComponentName startServiceInForegroundAsUser(Intent service,
+ int id, Notification notification, UserHandle user) {
+ return mContext.startServiceInForegroundAsUser(service, id, notification, user);
+ }
+
}
diff --git a/core/java/android/app/PictureInPictureArgs.aidl b/core/java/android/app/PictureInPictureArgs.aidl
new file mode 100644
index 0000000..49df39a
--- /dev/null
+++ b/core/java/android/app/PictureInPictureArgs.aidl
@@ -0,0 +1,19 @@
+/**
+ * Copyright (c) 2017, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.app;
+
+parcelable PictureInPictureArgs;
diff --git a/core/java/android/app/PictureInPictureArgs.java b/core/java/android/app/PictureInPictureArgs.java
new file mode 100644
index 0000000..fbdcbf4
--- /dev/null
+++ b/core/java/android/app/PictureInPictureArgs.java
@@ -0,0 +1,175 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.app;
+
+import android.annotation.Nullable;
+import android.os.Parcel;
+import android.os.Parcelable;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Represents a set of arguments used to initialize the picture-in-picture mode.
+ */
+public final class PictureInPictureArgs implements Parcelable {
+
+ /**
+ * The expected aspect ratio of the picture-in-picture.
+ */
+ @Nullable
+ private Float mAspectRatio;
+
+ /**
+ * The set of actions that are associated with this activity when in picture in picture.
+ */
+ @Nullable
+ private List<RemoteAction> mUserActions;
+
+ PictureInPictureArgs(Parcel in) {
+ if (in.readInt() != 0) {
+ mAspectRatio = in.readFloat();
+ }
+ if (in.readInt() != 0) {
+ mUserActions = new ArrayList<>();
+ in.readParcelableList(mUserActions, RemoteAction.class.getClassLoader());
+ }
+ }
+
+ /**
+ * Creates a new set of picture-in-picture arguments.
+ */
+ public PictureInPictureArgs() {
+ // Empty constructor
+ }
+
+ /**
+ * Creates a new set of picture-in-picture arguments from the given {@param aspectRatio} and
+ * {@param actions}.
+ */
+ public PictureInPictureArgs(float aspectRatio, List<RemoteAction> actions) {
+ mAspectRatio = aspectRatio;
+ if (actions != null) {
+ mUserActions = new ArrayList<>(actions);
+ }
+ }
+
+ /**
+ * Copies the set parameters from the other picture-in-picture args.
+ * @hide
+ */
+ public void copyOnlySet(PictureInPictureArgs otherArgs) {
+ if (otherArgs.hasSetAspectRatio()) {
+ mAspectRatio = otherArgs.mAspectRatio;
+ }
+ if (otherArgs.hasSetActions()) {
+ mUserActions = otherArgs.mUserActions;
+ }
+ }
+
+ /**
+ * Sets the aspect ratio.
+ * @param aspectRatio the new aspect ratio for picture-in-picture.
+ */
+ public void setAspectRatio(float aspectRatio) {
+ mAspectRatio = aspectRatio;
+ }
+
+ /**
+ * @return the aspect ratio. If none is set, return 0.
+ * @hide
+ */
+ public float getAspectRatio() {
+ if (mAspectRatio != null) {
+ return mAspectRatio;
+ }
+ return 0f;
+ }
+
+ /**
+ * @return whether the aspect ratio is set.
+ * @hide
+ */
+ public boolean hasSetAspectRatio() {
+ return mAspectRatio != null;
+ }
+
+ /**
+ * Sets the user actions.
+ * @param actions the new actions to show in the picture-in-picture menu.
+ */
+ public void setActions(List<RemoteAction> actions) {
+ if (mUserActions != null) {
+ mUserActions = null;
+ }
+ if (actions != null) {
+ mUserActions = new ArrayList<>(actions);
+ }
+ }
+
+ /**
+ * @return the set of user actions.
+ * @hide
+ */
+ public List<RemoteAction> getActions() {
+ return mUserActions;
+ }
+
+ /**
+ * @return whether the user actions are set.
+ * @hide
+ */
+ public boolean hasSetActions() {
+ return mUserActions != null;
+ }
+
+ @Override
+ public PictureInPictureArgs clone() {
+ return new PictureInPictureArgs(mAspectRatio, mUserActions);
+ }
+
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ @Override
+ public void writeToParcel(Parcel out, int flags) {
+ if (mAspectRatio != null) {
+ out.writeInt(1);
+ out.writeFloat(mAspectRatio);
+ } else {
+ out.writeInt(0);
+ }
+ if (mUserActions != null) {
+ out.writeInt(1);
+ out.writeParcelableList(mUserActions, 0);
+ } else {
+ out.writeInt(0);
+ }
+ }
+
+ public static final Creator<PictureInPictureArgs> CREATOR =
+ new Creator<PictureInPictureArgs>() {
+ public PictureInPictureArgs createFromParcel(Parcel in) {
+ return new PictureInPictureArgs(in);
+ }
+ public PictureInPictureArgs[] newArray(int size) {
+ return new PictureInPictureArgs[size];
+ }
+ };
+}
\ No newline at end of file
diff --git a/core/java/android/app/admin/DevicePolicyManager.java b/core/java/android/app/admin/DevicePolicyManager.java
index 2701698..b8bc7f1 100644
--- a/core/java/android/app/admin/DevicePolicyManager.java
+++ b/core/java/android/app/admin/DevicePolicyManager.java
@@ -1485,6 +1485,7 @@
* or uninstalled.
* @hide
*/
+ @SystemApi
public boolean packageHasActiveAdmins(String packageName) {
return packageHasActiveAdmins(packageName, myUserId());
}
@@ -7137,15 +7138,14 @@
}
/**
- * @hide
- * Enable backup service.
- * <p>This includes all backup and restore mechanisms.
- * Setting this to {@code false} will make backup service no-op or return empty results.
+ * Allows the device owner to enable or disable the backup service.
*
- * <p>There must be only one user on the device, managed by the device owner.
- * Otherwise a {@link SecurityException} will be thrown.
+ * <p> Backup service manages all backup and restore mechanisms on the device. Setting this to
+ * false will prevent data from being backed up or restored.
*
- * <p>Backup service is off by default when device owner is present.
+ * <p> Backup service is off by default when device owner is present.
+ *
+ * @throws SecurityException if {@code admin} is not a device owner.
*/
public void setBackupServiceEnabled(@NonNull ComponentName admin, boolean enabled) {
try {
@@ -7156,8 +7156,12 @@
}
/**
- * @hide
+ * Return whether the backup service is enabled by the device owner.
+ *
+ * <p> Backup service manages all backup and restore mechanisms on the device.
+ *
* @return {@code true} if backup service is enabled, {@code false} otherwise.
+ * @see #setBackupServiceEnabled
*/
public boolean isBackupServiceEnabled(@NonNull ComponentName admin) {
try {
diff --git a/core/java/android/app/backup/BackupManager.java b/core/java/android/app/backup/BackupManager.java
index 80bc136..540683d 100644
--- a/core/java/android/app/backup/BackupManager.java
+++ b/core/java/android/app/backup/BackupManager.java
@@ -136,6 +136,27 @@
*/
public static final String EXTRA_BACKUP_SERVICES_AVAILABLE = "backup_services_available";
+ /**
+ * If this flag is passed to {@link #requestBackup(String[], BackupObserver, int)},
+ * BackupManager will pass a blank old state to BackupAgents of requested packages.
+ *
+ * @hide
+ */
+ @SystemApi
+ public static final int FLAG_NON_INCREMENTAL_BACKUP = 1;
+
+ /**
+ * Use with {@link #requestBackup} to force backup of
+ * package meta data. Typically you do not need to explicitly request this be backed up as it is
+ * handled internally by the BackupManager. If you are requesting backups with
+ * FLAG_NON_INCREMENTAL, this package won't automatically be backed up and you have to
+ * explicitly request for its backup.
+ *
+ * @hide
+ */
+ @SystemApi
+ public static final String PACKAGE_MANAGER_SENTINEL = "@pm@";
+
private Context mContext;
private static IBackupManager sService;
@@ -484,13 +505,34 @@
*/
@SystemApi
public int requestBackup(String[] packages, BackupObserver observer) {
+ return requestBackup(packages, observer, 0);
+ }
+
+ /**
+ * Request an immediate backup, providing an observer to which results of the backup operation
+ * will be published. The Android backup system will decide for each package whether it will
+ * be full app data backup or key/value-pair-based backup.
+ *
+ * <p>If this method returns {@link BackupManager#SUCCESS}, the OS will attempt to backup all
+ * provided packages using the remote transport.
+ *
+ * @param packages List of package names to backup.
+ * @param observer The {@link BackupObserver} to receive callbacks during the backup
+ * operation. Could be {@code null}.
+ * @param flags {@link #FLAG_NON_INCREMENTAL_BACKUP}.
+ * @return {@link BackupManager#SUCCESS} on success; nonzero on error.
+ * @throws IllegalArgumentException on null or empty {@code packages} param.
+ * @hide
+ */
+ @SystemApi
+ public int requestBackup(String[] packages, BackupObserver observer, int flags) {
checkServiceBinder();
if (sService != null) {
try {
BackupObserverWrapper observerWrapper = observer == null
? null
: new BackupObserverWrapper(mContext, observer);
- return sService.requestBackup(packages, observerWrapper);
+ return sService.requestBackup(packages, observerWrapper, flags);
} catch (RemoteException e) {
Log.e(TAG, "requestBackup() couldn't connect");
}
diff --git a/core/java/android/app/backup/IBackupManager.aidl b/core/java/android/app/backup/IBackupManager.aidl
index a320bbf..fe23c28 100644
--- a/core/java/android/app/backup/IBackupManager.aidl
+++ b/core/java/android/app/backup/IBackupManager.aidl
@@ -357,7 +357,9 @@
* @param observer The {@link BackupObserver} to receive callbacks during the backup
* operation.
*
+ * @param flags {@link BackupManager#FLAG_NON_INCREMENTAL_BACKUP}.
+ *
* @return Zero on success; nonzero on error.
*/
- int requestBackup(in String[] packages, IBackupObserver observer);
+ int requestBackup(in String[] packages, IBackupObserver observer, int flags);
}
diff --git a/core/java/android/app/trust/ITrustManager.aidl b/core/java/android/app/trust/ITrustManager.aidl
index d3d02e5..a10de45 100644
--- a/core/java/android/app/trust/ITrustManager.aidl
+++ b/core/java/android/app/trust/ITrustManager.aidl
@@ -25,6 +25,7 @@
*/
interface ITrustManager {
void reportUnlockAttempt(boolean successful, int userId);
+ void reportUnlockLockout(int timeoutMs, int userId);
void reportEnabledTrustAgentsChanged(int userId);
void registerTrustListener(in ITrustListener trustListener);
void unregisterTrustListener(in ITrustListener trustListener);
diff --git a/core/java/android/app/trust/TrustManager.java b/core/java/android/app/trust/TrustManager.java
index 0f5cb6f..a64a023 100644
--- a/core/java/android/app/trust/TrustManager.java
+++ b/core/java/android/app/trust/TrustManager.java
@@ -81,6 +81,26 @@
}
/**
+ * Reports that user {@param userId} has entered a temporary device lockout.
+ *
+ * This generally occurs when the user has unsuccessfully tried to unlock the device too many
+ * times. The user will then be unable to unlock the device until a set amount of time has
+ * elapsed.
+ *
+ * @param timeout The amount of time that needs to elapse, in milliseconds, until the user may
+ * attempt to unlock the device again.
+ *
+ * Requires the {@link android.Manifest.permission#ACCESS_KEYGUARD_SECURE_STORAGE} permission.
+ */
+ public void reportUnlockLockout(int timeoutMs, int userId) {
+ try {
+ mService.reportUnlockLockout(timeoutMs, userId);
+ } catch (RemoteException e) {
+ throw e.rethrowFromSystemServer();
+ }
+ }
+
+ /**
* Reports that the list of enabled trust agents changed for user {@param userId}.
*
* Requires the {@link android.Manifest.permission#ACCESS_KEYGUARD_SECURE_STORAGE} permission.
diff --git a/core/java/android/appwidget/AppWidgetHost.java b/core/java/android/appwidget/AppWidgetHost.java
index cd14469..6ba52b7 100644
--- a/core/java/android/appwidget/AppWidgetHost.java
+++ b/core/java/android/appwidget/AppWidgetHost.java
@@ -36,7 +36,6 @@
import android.os.ServiceManager;
import android.util.DisplayMetrics;
import android.util.SparseArray;
-import android.util.TypedValue;
import android.widget.RemoteViews;
import android.widget.RemoteViews.OnClickHandler;
@@ -381,15 +380,7 @@
// Convert complex to dp -- we are getting the AppWidgetProviderInfo from the
// AppWidgetService, which doesn't have our context, hence we need to do the
// conversion here.
- appWidget.minWidth =
- TypedValue.complexToDimensionPixelSize(appWidget.minWidth, mDisplayMetrics);
- appWidget.minHeight =
- TypedValue.complexToDimensionPixelSize(appWidget.minHeight, mDisplayMetrics);
- appWidget.minResizeWidth =
- TypedValue.complexToDimensionPixelSize(appWidget.minResizeWidth, mDisplayMetrics);
- appWidget.minResizeHeight =
- TypedValue.complexToDimensionPixelSize(appWidget.minResizeHeight, mDisplayMetrics);
-
+ appWidget.updateDimensions(mDisplayMetrics);
synchronized (mViews) {
v = mViews.get(appWidgetId);
}
diff --git a/core/java/android/appwidget/AppWidgetManager.java b/core/java/android/appwidget/AppWidgetManager.java
index 31e779f..9980e966 100644
--- a/core/java/android/appwidget/AppWidgetManager.java
+++ b/core/java/android/appwidget/AppWidgetManager.java
@@ -31,7 +31,6 @@
import android.os.RemoteException;
import android.os.UserHandle;
import android.util.DisplayMetrics;
-import android.util.TypedValue;
import android.widget.RemoteViews;
import com.android.internal.appwidget.IAppWidgetService;
@@ -760,7 +759,7 @@
}
for (AppWidgetProviderInfo info : providers.getList()) {
// Converting complex to dp.
- convertSizesToPixels(info);
+ info.updateDimensions(mDisplayMetrics);
}
return providers.getList();
} catch (RemoteException e) {
@@ -782,7 +781,7 @@
AppWidgetProviderInfo info = mService.getAppWidgetInfo(mPackageName, appWidgetId);
if (info != null) {
// Converting complex to dp.
- convertSizesToPixels(info);
+ info.updateDimensions(mDisplayMetrics);
}
return info;
} catch (RemoteException e) {
@@ -1072,18 +1071,6 @@
}
}
- private void convertSizesToPixels(AppWidgetProviderInfo info) {
- // Converting complex to dp.
- info.minWidth = TypedValue.complexToDimensionPixelSize(info.minWidth,
- mDisplayMetrics);
- info.minHeight = TypedValue.complexToDimensionPixelSize(info.minHeight,
- mDisplayMetrics);
- info.minResizeWidth = TypedValue.complexToDimensionPixelSize(info.minResizeWidth,
- mDisplayMetrics);
- info.minResizeHeight = TypedValue.complexToDimensionPixelSize(info.minResizeHeight,
- mDisplayMetrics);
- }
-
/**
* Request to pin an app widget on the current launcher. It's up to the launcher to accept this
* request (optionally showing a user confirmation). If the request is accepted, the caller will
diff --git a/core/java/android/appwidget/AppWidgetProviderInfo.java b/core/java/android/appwidget/AppWidgetProviderInfo.java
index b4d79b4..06fdb32 100644
--- a/core/java/android/appwidget/AppWidgetProviderInfo.java
+++ b/core/java/android/appwidget/AppWidgetProviderInfo.java
@@ -26,6 +26,8 @@
import android.os.Parcelable;
import android.content.ComponentName;
import android.os.UserHandle;
+import android.util.DisplayMetrics;
+import android.util.TypedValue;
/**
* Describes the meta data for an installed AppWidget provider. The fields in this class
@@ -379,6 +381,17 @@
}
/**
+ * @hide
+ */
+ public void updateDimensions(DisplayMetrics displayMetrics) {
+ // Converting complex to dp.
+ minWidth = TypedValue.complexToDimensionPixelSize(minWidth, displayMetrics);
+ minHeight = TypedValue.complexToDimensionPixelSize(minHeight, displayMetrics);
+ minResizeWidth = TypedValue.complexToDimensionPixelSize(minResizeWidth, displayMetrics);
+ minResizeHeight = TypedValue.complexToDimensionPixelSize(minResizeHeight, displayMetrics);
+ }
+
+ /**
* Parcelable.Creator that instantiates AppWidgetProviderInfo objects
*/
public static final Parcelable.Creator<AppWidgetProviderInfo> CREATOR
diff --git a/core/java/android/bluetooth/BluetoothHeadsetClient.java b/core/java/android/bluetooth/BluetoothHeadsetClient.java
index c7c64c4..544b3b95 100644
--- a/core/java/android/bluetooth/BluetoothHeadsetClient.java
+++ b/core/java/android/bluetooth/BluetoothHeadsetClient.java
@@ -965,38 +965,6 @@
}
/**
- * Accept the incoming connection.
- */
- public boolean acceptIncomingConnect(BluetoothDevice device) {
- if (DBG) log("acceptIncomingConnect");
- if (mService != null && isEnabled()) {
- try {
- return mService.acceptIncomingConnect(device);
- } catch (RemoteException e) {Log.e(TAG, e.toString());}
- } else {
- Log.w(TAG, "Proxy not attached to service");
- if (DBG) Log.d(TAG, Log.getStackTraceString(new Throwable()));
- }
- return false;
- }
-
- /**
- * Reject the incoming connection.
- */
- public boolean rejectIncomingConnect(BluetoothDevice device) {
- if (DBG) log("rejectIncomingConnect");
- if (mService != null) {
- try {
- return mService.rejectIncomingConnect(device);
- } catch (RemoteException e) {Log.e(TAG, e.toString());}
- } else {
- Log.w(TAG, "Proxy not attached to service");
- if (DBG) Log.d(TAG, Log.getStackTraceString(new Throwable()));
- }
- return false;
- }
-
- /**
* Returns current audio state of Audio Gateway.
*
* Note: This is an internal function and shouldn't be exposed
@@ -1017,13 +985,15 @@
/**
* Sets whether audio routing is allowed.
*
+ * @param device remote device
+ * @param allowed if routing is allowed to the device
* Note: This is an internal function and shouldn't be exposed
*/
- public void setAudioRouteAllowed(boolean allowed) {
+ public void setAudioRouteAllowed(BluetoothDevice device, boolean allowed) {
if (VDBG) log("setAudioRouteAllowed");
if (mService != null && isEnabled()) {
try {
- mService.setAudioRouteAllowed(allowed);
+ mService.setAudioRouteAllowed(device, allowed);
} catch (RemoteException e) {Log.e(TAG, e.toString());}
} else {
Log.w(TAG, "Proxy not attached to service");
@@ -1033,14 +1003,15 @@
/**
* Returns whether audio routing is allowed.
- *
+ * @param device remote device
+ * @return whether the command succeeded
* Note: This is an internal function and shouldn't be exposed
*/
- public boolean getAudioRouteAllowed() {
+ public boolean getAudioRouteAllowed(BluetoothDevice device) {
if (VDBG) log("getAudioRouteAllowed");
if (mService != null && isEnabled()) {
try {
- return mService.getAudioRouteAllowed();
+ return mService.getAudioRouteAllowed(device);
} catch (RemoteException e) {Log.e(TAG, e.toString());}
} else {
Log.w(TAG, "Proxy not attached to service");
@@ -1054,15 +1025,16 @@
*
* It setup SCO channel with remote connected Handsfree AG device.
*
+ * @param device remote device
* @return <code>true</code> if command has been issued successfully;
* <code>false</code> otherwise;
* upon completion HFP sends {@link #ACTION_AUDIO_STATE_CHANGED}
* intent;
*/
- public boolean connectAudio() {
+ public boolean connectAudio(BluetoothDevice device) {
if (mService != null && isEnabled()) {
try {
- return mService.connectAudio();
+ return mService.connectAudio(device);
} catch (RemoteException e) {
Log.e(TAG, e.toString());
}
@@ -1078,15 +1050,16 @@
*
* It tears down the SCO channel from remote AG device.
*
+ * @param device remote device
* @return <code>true</code> if command has been issued successfully;
* <code>false</code> otherwise;
* upon completion HFP sends {@link #ACTION_AUDIO_STATE_CHANGED}
* intent;
*/
- public boolean disconnectAudio() {
+ public boolean disconnectAudio(BluetoothDevice device) {
if (mService != null && isEnabled()) {
try {
- return mService.disconnectAudio();
+ return mService.disconnectAudio(device);
} catch (RemoteException e) {
Log.e(TAG, e.toString());
}
diff --git a/core/java/android/bluetooth/IBluetoothHeadsetClient.aidl b/core/java/android/bluetooth/IBluetoothHeadsetClient.aidl
index a351bd2..e571b00 100644
--- a/core/java/android/bluetooth/IBluetoothHeadsetClient.aidl
+++ b/core/java/android/bluetooth/IBluetoothHeadsetClient.aidl
@@ -29,9 +29,6 @@
boolean connect(in BluetoothDevice device);
boolean disconnect(in BluetoothDevice device);
- boolean acceptIncomingConnect(in BluetoothDevice device);
- boolean rejectIncomingConnect(in BluetoothDevice device);
-
List<BluetoothDevice> getConnectedDevices();
List<BluetoothDevice> getDevicesMatchingConnectionStates(in int[] states);
int getConnectionState(in BluetoothDevice device);
@@ -58,10 +55,10 @@
boolean getLastVoiceTagNumber(in BluetoothDevice device);
int getAudioState(in BluetoothDevice device);
- boolean connectAudio();
- boolean disconnectAudio();
- void setAudioRouteAllowed(boolean allowed);
- boolean getAudioRouteAllowed();
+ boolean connectAudio(in BluetoothDevice device);
+ boolean disconnectAudio(in BluetoothDevice device);
+ void setAudioRouteAllowed(in BluetoothDevice device, boolean allowed);
+ boolean getAudioRouteAllowed(in BluetoothDevice device);
Bundle getCurrentAgFeatures(in BluetoothDevice device);
}
diff --git a/core/java/android/content/ClipData.java b/core/java/android/content/ClipData.java
index bc5e986..7096771 100644
--- a/core/java/android/content/ClipData.java
+++ b/core/java/android/content/ClipData.java
@@ -32,6 +32,8 @@
import android.text.style.URLSpan;
import android.util.Log;
+import com.android.internal.util.ArrayUtils;
+
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
@@ -762,6 +764,18 @@
static public ClipData newUri(ContentResolver resolver, CharSequence label,
Uri uri) {
Item item = new Item(uri);
+ String[] mimeTypes = getMimeTypes(resolver, uri);
+ return new ClipData(label, mimeTypes, item);
+ }
+
+ /**
+ * Finds all applicable MIME types for a given URI.
+ *
+ * @param resolver ContentResolver used to get information about the URI.
+ * @param uri The URI.
+ * @return Returns an array of MIME types.
+ */
+ private static String[] getMimeTypes(ContentResolver resolver, Uri uri) {
String[] mimeTypes = null;
if ("content".equals(uri.getScheme())) {
String realType = resolver.getType(uri);
@@ -769,7 +783,7 @@
if (realType != null) {
if (mimeTypes == null) {
mimeTypes = new String[] { realType };
- } else {
+ } else if (!ArrayUtils.contains(mimeTypes, realType)) {
String[] tmp = new String[mimeTypes.length + 1];
tmp[0] = realType;
System.arraycopy(mimeTypes, 0, tmp, 1, mimeTypes.length);
@@ -780,7 +794,7 @@
if (mimeTypes == null) {
mimeTypes = MIMETYPES_TEXT_URILIST;
}
- return new ClipData(label, mimeTypes, item);
+ return mimeTypes;
}
/**
@@ -811,8 +825,8 @@
* Add a new Item to the overall ClipData container.
* <p> This method will <em>not</em> update the list of available MIME types in the
* {@link ClipDescription}. It should be used only when adding items which do not add new
- * MIME types to this clip. If this is not the case, {@link #ClipData(CharSequence, String[],
- * Item)} should be used with a complete list of MIME types.
+ * MIME types to this clip. If this is not the case, use {@link #addItem(Item, ContentResolver)}
+ * or call {@link #ClipData(CharSequence, String[], Item)} with a complete list of MIME types.
* @param item Item to be added.
*/
public void addItem(Item item) {
@@ -822,6 +836,32 @@
mItems.add(item);
}
+ /**
+ * Add a new Item to the overall ClipData container.
+ * <p> Unlike {@link #addItem(Item)}, this method will update the list of available MIME types
+ * in the {@link ClipDescription}.
+ * @param item Item to be added.
+ * @param resolver ContentResolver used to get information about the URI possibly contained in
+ * the item.
+ */
+ public void addItem(Item item, ContentResolver resolver) {
+ addItem(item);
+
+ if (item.getHtmlText() != null) {
+ mClipDescription.addMimeTypes(MIMETYPES_TEXT_HTML);
+ } else if (item.getText() != null) {
+ mClipDescription.addMimeTypes(MIMETYPES_TEXT_PLAIN);
+ }
+
+ if (item.getIntent() != null) {
+ mClipDescription.addMimeTypes(MIMETYPES_TEXT_INTENT);
+ }
+
+ if (item.getUri() != null) {
+ mClipDescription.addMimeTypes(getMimeTypes(resolver, item.getUri()));
+ }
+ }
+
/** @hide */
public Bitmap getIcon() {
return mIcon;
diff --git a/core/java/android/content/ClipDescription.java b/core/java/android/content/ClipDescription.java
index 461d1e0..b33a915a 100644
--- a/core/java/android/content/ClipDescription.java
+++ b/core/java/android/content/ClipDescription.java
@@ -22,6 +22,7 @@
import android.text.TextUtils;
import java.util.ArrayList;
+import java.util.Arrays;
/**
* Meta-data describing the contents of a {@link ClipData}. Provides enough
@@ -89,7 +90,7 @@
final CharSequence mLabel;
- final String[] mMimeTypes;
+ private final ArrayList<String> mMimeTypes;
private PersistableBundle mExtras;
/**
@@ -103,7 +104,7 @@
throw new NullPointerException("mimeTypes is null");
}
mLabel = label;
- mMimeTypes = mimeTypes;
+ mMimeTypes = new ArrayList<String>(Arrays.asList(mimeTypes));
}
/**
@@ -111,7 +112,7 @@
*/
public ClipDescription(ClipDescription o) {
mLabel = o.mLabel;
- mMimeTypes = o.mMimeTypes;
+ mMimeTypes = new ArrayList<String>(o.mMimeTypes);
}
/**
@@ -155,8 +156,9 @@
* matches the desired MIME type, else false.
*/
public boolean hasMimeType(String mimeType) {
- for (int i=0; i<mMimeTypes.length; i++) {
- if (compareMimeTypes(mMimeTypes[i], mimeType)) {
+ final int size = mMimeTypes.size();
+ for (int i=0; i<size; i++) {
+ if (compareMimeTypes(mMimeTypes.get(i), mimeType)) {
return true;
}
}
@@ -173,12 +175,13 @@
*/
public String[] filterMimeTypes(String mimeType) {
ArrayList<String> array = null;
- for (int i=0; i<mMimeTypes.length; i++) {
- if (compareMimeTypes(mMimeTypes[i], mimeType)) {
+ final int size = mMimeTypes.size();
+ for (int i=0; i<size; i++) {
+ if (compareMimeTypes(mMimeTypes.get(i), mimeType)) {
if (array == null) {
array = new ArrayList<String>();
}
- array.add(mMimeTypes[i]);
+ array.add(mMimeTypes.get(i));
}
}
if (array == null) {
@@ -193,14 +196,26 @@
* Return the number of MIME types the clip is available in.
*/
public int getMimeTypeCount() {
- return mMimeTypes.length;
+ return mMimeTypes.size();
}
/**
* Return one of the possible clip MIME types.
*/
public String getMimeType(int index) {
- return mMimeTypes[index];
+ return mMimeTypes.get(index);
+ }
+
+ /**
+ * Add MIME types to the clip description.
+ */
+ void addMimeTypes(String[] mimeTypes) {
+ for (int i=0; i!=mimeTypes.length; i++) {
+ final String mimeType = mimeTypes[i];
+ if (!mMimeTypes.contains(mimeType)) {
+ mMimeTypes.add(mimeType);
+ }
+ }
}
/**
@@ -229,11 +244,12 @@
if (mMimeTypes == null) {
throw new NullPointerException("null mime types");
}
- if (mMimeTypes.length <= 0) {
+ final int size = mMimeTypes.size();
+ if (size <= 0) {
throw new IllegalArgumentException("must have at least 1 mime type");
}
- for (int i=0; i<mMimeTypes.length; i++) {
- if (mMimeTypes[i] == null) {
+ for (int i=0; i<size; i++) {
+ if (mMimeTypes.get(i) == null) {
throw new NullPointerException("mime type at " + i + " is null");
}
}
@@ -275,12 +291,13 @@
/** @hide */
public boolean toShortStringTypesOnly(StringBuilder b) {
boolean first = true;
- for (int i=0; i<mMimeTypes.length; i++) {
+ final int size = mMimeTypes.size();
+ for (int i=0; i<size; i++) {
if (!first) {
b.append(' ');
}
first = false;
- b.append(mMimeTypes[i]);
+ b.append(mMimeTypes.get(i));
}
return !first;
}
@@ -293,13 +310,13 @@
@Override
public void writeToParcel(Parcel dest, int flags) {
TextUtils.writeToParcel(mLabel, dest, flags);
- dest.writeStringArray(mMimeTypes);
+ dest.writeStringList(mMimeTypes);
dest.writePersistableBundle(mExtras);
}
ClipDescription(Parcel in) {
mLabel = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(in);
- mMimeTypes = in.createStringArray();
+ mMimeTypes = in.createStringArrayList();
mExtras = in.readPersistableBundle();
}
diff --git a/core/java/android/content/Context.java b/core/java/android/content/Context.java
index af5e643..596a9fd 100644
--- a/core/java/android/content/Context.java
+++ b/core/java/android/content/Context.java
@@ -35,6 +35,7 @@
import android.app.IApplicationThread;
import android.app.IServiceConnection;
import android.app.LoadedApk;
+import android.app.Notification;
import android.app.admin.DevicePolicyManager;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
@@ -2508,7 +2509,10 @@
* {@link ComponentName} of the actual service that was started is
* returned; else if the service does not exist null is returned.
*
- * @throws SecurityException
+ * @throws SecurityException If the caller does not permission to access the service
+ * or the service can not be found.
+ * @throws IllegalStateException If the application is in a state where the service
+ * can not be started (such as not in the foreground in a state when services are allowed).
*
* @see #stopService
* @see #bindService
@@ -2517,6 +2521,17 @@
public abstract ComponentName startService(Intent service);
/**
+ * Start a service directly into the "foreground service" state. Unlike {@link #startService},
+ * this method can be used from within background operations like broadcast receivers
+ * or scheduled jobs. The API entry point for this is in NotificationManager in order to
+ * preserve appropriate public package layering.
+ * @hide
+ */
+ @Nullable
+ public abstract ComponentName startServiceInForeground(Intent service,
+ int id, Notification notification);
+
+ /**
* Request that a given application service be stopped. If the service is
* not running, nothing happens. Otherwise it is stopped. Note that calls
* to startService() are not counted -- this stops the service no matter
@@ -2538,7 +2553,10 @@
* @return If there is a service matching the given Intent that is already
* running, then it is stopped and {@code true} is returned; else {@code false} is returned.
*
- * @throws SecurityException
+ * @throws SecurityException If the caller does not permission to access the service
+ * or the service can not be found.
+ * @throws IllegalStateException If the application is in a state where the service
+ * can not be started (such as not in the foreground in a state when services are allowed).
*
* @see #startService
*/
@@ -2547,9 +2565,18 @@
/**
* @hide like {@link #startService(Intent)} but for a specific user.
*/
+ @Nullable
public abstract ComponentName startServiceAsUser(Intent service, UserHandle user);
/**
+ * @hide like {@link #startServiceInForeground(Intent, int, Notification)}
+ * but for a specific user.
+ */
+ @Nullable
+ public abstract ComponentName startServiceInForegroundAsUser(Intent service,
+ int id, Notification notification, UserHandle user);
+
+ /**
* @hide like {@link #stopService(Intent)} but for a specific user.
*/
public abstract boolean stopServiceAsUser(Intent service, UserHandle user);
@@ -2591,7 +2618,8 @@
* {@code false} is returned if the connection is not made so you will not
* receive the service object.
*
- * @throws SecurityException
+ * @throws SecurityException If the caller does not permission to access the service
+ * or the service can not be found.
*
* @see #unbindService
* @see #startService
diff --git a/core/java/android/content/ContextWrapper.java b/core/java/android/content/ContextWrapper.java
index e437de0..b131ecc 100644
--- a/core/java/android/content/ContextWrapper.java
+++ b/core/java/android/content/ContextWrapper.java
@@ -20,6 +20,7 @@
import android.annotation.SystemApi;
import android.app.IApplicationThread;
import android.app.IServiceConnection;
+import android.app.Notification;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.content.res.AssetManager;
@@ -623,6 +624,13 @@
return mBase.startService(service);
}
+ /** @hide */
+ @Override
+ public ComponentName startServiceInForeground(Intent service,
+ int id, Notification notification) {
+ return mBase.startServiceInForeground(service, id, notification);
+ }
+
@Override
public boolean stopService(Intent name) {
return mBase.stopService(name);
@@ -636,6 +644,13 @@
/** @hide */
@Override
+ public ComponentName startServiceInForegroundAsUser(Intent service,
+ int id, Notification notification, UserHandle user) {
+ return mBase.startServiceInForegroundAsUser(service, id, notification, user);
+ }
+
+ /** @hide */
+ @Override
public boolean stopServiceAsUser(Intent name, UserHandle user) {
return mBase.stopServiceAsUser(name, user);
}
diff --git a/core/java/android/content/pm/ActivityInfo.java b/core/java/android/content/pm/ActivityInfo.java
index 298dc4e..4bd091d 100644
--- a/core/java/android/content/pm/ActivityInfo.java
+++ b/core/java/android/content/pm/ActivityInfo.java
@@ -566,6 +566,7 @@
CONFIG_SMALLEST_SCREEN_SIZE,
CONFIG_DENSITY,
CONFIG_LAYOUT_DIRECTION,
+ CONFIG_COLORIMETRY,
CONFIG_FONT_SCALE,
})
@Retention(RetentionPolicy.SOURCE)
@@ -671,6 +672,12 @@
public static final int CONFIG_LAYOUT_DIRECTION = 0x2000;
/**
* Bit in {@link #configChanges} that indicates that the activity
+ * can itself handle the change to the display color gamut or dynamic
+ * range. Set from the {@link android.R.attr#configChanges} attribute.
+ */
+ public static final int CONFIG_COLORIMETRY = 0x4000;
+ /**
+ * Bit in {@link #configChanges} that indicates that the activity
* can itself handle asset path changes. Set from the {@link android.R.attr#configChanges}
* attribute. This is not a core resource configuration, but a higher-level value, so its
* constant starts at the high bits.
@@ -706,6 +713,7 @@
Configuration.NATIVE_CONFIG_SMALLEST_SCREEN_SIZE, // SMALLEST SCREEN SIZE
Configuration.NATIVE_CONFIG_DENSITY, // DENSITY
Configuration.NATIVE_CONFIG_LAYOUTDIR, // LAYOUT DIRECTION
+ Configuration.NATIVE_CONFIG_COLORIMETRY, // COLORIMETRY
};
/**
@@ -761,7 +769,8 @@
* {@link #CONFIG_LOCALE}, {@link #CONFIG_TOUCHSCREEN},
* {@link #CONFIG_KEYBOARD}, {@link #CONFIG_NAVIGATION},
* {@link #CONFIG_ORIENTATION}, {@link #CONFIG_SCREEN_LAYOUT},
- * {@link #CONFIG_DENSITY}, and {@link #CONFIG_LAYOUT_DIRECTION}.
+ * {@link #CONFIG_DENSITY}, {@link #CONFIG_LAYOUT_DIRECTION} and
+ * {@link #CONFIG_COLORIMETRY}.
* Set from the {@link android.R.attr#configChanges} attribute.
*/
public int configChanges;
diff --git a/core/java/android/content/pm/ApplicationInfo.java b/core/java/android/content/pm/ApplicationInfo.java
index 71071e1..04ab239 100644
--- a/core/java/android/content/pm/ApplicationInfo.java
+++ b/core/java/android/content/pm/ApplicationInfo.java
@@ -551,6 +551,13 @@
public static final int PRIVATE_FLAG_BACKUP_IN_FOREGROUND = 1 << 12;
/**
+ * Value for {@link #privateFlags}: {@code true} means this application
+ * contains a static shared library. Defaults to {@code false} if unspecified.
+ * @hide
+ */
+ public static final int PRIVATE_FLAG_STATIC_SHARED_LIBRARY = 1 << 13;
+
+ /**
* Private/hidden flags. See {@code PRIVATE_FLAG_...} constants.
* {@hide}
*/
@@ -1358,6 +1365,13 @@
/**
* @hide
*/
+ public boolean isStaticSharedLibrary() {
+ return (privateFlags & ApplicationInfo.PRIVATE_FLAG_STATIC_SHARED_LIBRARY) != 0;
+ }
+
+ /**
+ * @hide
+ */
@Override protected ApplicationInfo getApplicationInfo() {
return this;
}
diff --git a/core/java/android/content/pm/IPackageInstaller.aidl b/core/java/android/content/pm/IPackageInstaller.aidl
index 154ff85..ecc8cd6 100644
--- a/core/java/android/content/pm/IPackageInstaller.aidl
+++ b/core/java/android/content/pm/IPackageInstaller.aidl
@@ -21,6 +21,7 @@
import android.content.pm.IPackageInstallerSession;
import android.content.pm.PackageInstaller;
import android.content.pm.ParceledListSlice;
+import android.content.pm.VersionedPackage;
import android.content.IntentSender;
import android.graphics.Bitmap;
@@ -44,7 +45,7 @@
void registerCallback(IPackageInstallerCallback callback, int userId);
void unregisterCallback(IPackageInstallerCallback callback);
- void uninstall(String packageName, String callerPackageName, int flags,
+ void uninstall(in VersionedPackage versionedPackage, String callerPackageName, int flags,
in IntentSender statusReceiver, int userId);
void setPermissionsResult(int sessionId, boolean accepted);
diff --git a/core/java/android/content/pm/IPackageManager.aidl b/core/java/android/content/pm/IPackageManager.aidl
index 19cca8e..ab9af5a 100644
--- a/core/java/android/content/pm/IPackageManager.aidl
+++ b/core/java/android/content/pm/IPackageManager.aidl
@@ -47,6 +47,7 @@
import android.content.pm.ServiceInfo;
import android.content.pm.UserInfo;
import android.content.pm.VerifierDeviceIdentity;
+import android.content.pm.VersionedPackage;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Bundle;
@@ -63,6 +64,8 @@
void checkPackageStartable(String packageName, int userId);
boolean isPackageAvailable(String packageName, int userId);
PackageInfo getPackageInfo(String packageName, int flags, int userId);
+ PackageInfo getPackageInfoVersioned(in VersionedPackage versionedPackage,
+ int flags, int userId);
int getPackageUid(String packageName, int flags, int userId);
int[] getPackageGids(String packageName, int flags, int userId);
@@ -138,6 +141,8 @@
ResolveInfo resolveIntent(in Intent intent, String resolvedType, int flags, int userId);
+ ResolveInfo findPersistentPreferredActivity(in Intent intent, int userId);
+
boolean canForwardTo(in Intent intent, String resolvedType, int sourceUserId, int targetUserId);
ParceledListSlice queryIntentActivities(in Intent intent,
@@ -229,18 +234,19 @@
void setApplicationCategoryHint(String packageName, int categoryHint, String callerPackageName);
/** @deprecated rawr, don't call AIDL methods directly! */
- void deletePackageAsUser(in String packageName, IPackageDeleteObserver observer,
- int userId, int flags);
+ void deletePackageAsUser(in String packageName, int versionCode,
+ IPackageDeleteObserver observer, int userId, int flags);
/**
* Delete a package for a specific user.
*
- * @param packageName The fully qualified name of the package to delete.
+ * @param versionedPackage The package to delete.
* @param observer a callback to use to notify when the package deletion in finished.
* @param userId the id of the user for whom to delete the package
* @param flags - possible values: {@link #DONT_DELETE_DATA}
*/
- void deletePackage(in String packageName, IPackageDeleteObserver2 observer, int userId, int flags);
+ void deletePackageVersioned(in VersionedPackage versionedPackage,
+ IPackageDeleteObserver2 observer, int userId, int flags);
String getInstallerPackageName(in String packageName);
@@ -586,4 +592,6 @@
List<String> getPreviousCodePaths(in String packageName);
int getInstallReason(String packageName, int userId);
+
+ ParceledListSlice getSharedLibraries(int flags, int userId);
}
diff --git a/core/java/android/content/pm/LauncherApps.java b/core/java/android/content/pm/LauncherApps.java
index cf873b0..c6a8674 100644
--- a/core/java/android/content/pm/LauncherApps.java
+++ b/core/java/android/content/pm/LauncherApps.java
@@ -61,15 +61,18 @@
/**
* Class for retrieving a list of launchable activities for the current user and any associated
- * managed profiles. This is mainly for use by launchers. Apps can be queried for each user profile.
+ * managed profiles that are visible to the current user, which can be retrieved with
+ * {@link #getProfiles}. This is mainly for use by launchers.
+ *
+ * Apps can be queried for each user profile.
* Since the PackageManager will not deliver package broadcasts for other profiles, you can register
* for package changes here.
* <p>
* To watch for managed profiles being added or removed, register for the following broadcasts:
* {@link Intent#ACTION_MANAGED_PROFILE_ADDED} and {@link Intent#ACTION_MANAGED_PROFILE_REMOVED}.
* <p>
- * You can retrieve the list of profiles associated with this user with
- * {@link UserManager#getUserProfiles()}.
+ * Note as of Android O, apps on a managed profile are no longer allowed to access apps on the
+ * main profile. Apps can only access profiles returned by {@link #getProfiles()}.
*/
public class LauncherApps {
@@ -376,6 +379,24 @@
}
/**
+ * Return a list of profiles that the caller can access via the {@link LauncherApps} APIs.
+ *
+ * <p>If the caller is running on a managed profile, it'll return only the current profile.
+ * Otherwise it'll return the same list as {@link UserManager#getUserProfiles()} would.
+ */
+ public List<UserHandle> getProfiles() {
+ final UserManager um = mContext.getSystemService(UserManager.class);
+ if (um.isManagedProfile()) {
+ // If it's a managed profile, only return the current profile.
+ final List result = new ArrayList(1);
+ result.add(android.os.Process.myUserHandle());
+ return result;
+ } else {
+ return um.getUserProfiles();
+ }
+ }
+
+ /**
* Retrieves a list of launchable activities that match {@link Intent#ACTION_MAIN} and
* {@link Intent#CATEGORY_LAUNCHER}, for a specified user.
*
@@ -1185,6 +1206,13 @@
* Represents a "pin shortcut" request made by an app, which is sent with
* an {@link #ACTION_CONFIRM_PIN_ITEM} intent to the default launcher app.
*
+ * <p>Note the launcher may receive a request to pin a shortcut that is already pinned, because
+ * the user may actually want to have multiple icons of the same shortcut on the launcher.
+ * The launcher can tell this case by calling {@link ShortcutInfo#isPinned()} on the shortcut
+ * returned by {@link #getShortcutInfo()}. In this case, calling {@link #accept()} is optional;
+ * even if the launcher does not call it, the shortcut is already pinned. Also in this case,
+ * the {@code options} argument to {@link #accept(Bundle)} will be ignored.
+ *
* @see #EXTRA_PIN_ITEM_REQUEST
* @see #getPinItemRequest(Intent)
*/
@@ -1249,8 +1277,13 @@
* {@link #REQUEST_TYPE_APPWIDGET} request.
*/
@Nullable
- public AppWidgetProviderInfo getAppWidgetProviderInfo() {
- return mAppWidgetInfo;
+ public AppWidgetProviderInfo getAppWidgetProviderInfo(Context context) {
+ if (mAppWidgetInfo != null) {
+ AppWidgetProviderInfo info = mAppWidgetInfo.clone();
+ info.updateDimensions(context.getResources().getDisplayMetrics());
+ return info;
+ }
+ return null;
}
/**
diff --git a/core/java/android/content/pm/PackageInfo.java b/core/java/android/content/pm/PackageInfo.java
index d40bab5..5d5696b 100644
--- a/core/java/android/content/pm/PackageInfo.java
+++ b/core/java/android/content/pm/PackageInfo.java
@@ -142,7 +142,7 @@
* {@link PackageManager#GET_INSTRUMENTATION} was set.
*/
public InstrumentationInfo[] instrumentation;
-
+
/**
* Array of all {@link android.R.styleable#AndroidManifestPermission
* <permission>} tags included under <manifest>,
@@ -150,7 +150,7 @@
* {@link PackageManager#GET_PERMISSIONS} was set.
*/
public PermissionInfo[] permissions;
-
+
/**
* Array of all {@link android.R.styleable#AndroidManifestUsesPermission
* <uses-permission>} tags included under <manifest>,
@@ -160,7 +160,7 @@
* by the system at install time.
*/
public String[] requestedPermissions;
-
+
/**
* Array of flags of all {@link android.R.styleable#AndroidManifestUsesPermission
* <uses-permission>} tags included under <manifest>,
diff --git a/core/java/android/content/pm/PackageInstaller.java b/core/java/android/content/pm/PackageInstaller.java
index db3f637..4de967c 100644
--- a/core/java/android/content/pm/PackageInstaller.java
+++ b/core/java/android/content/pm/PackageInstaller.java
@@ -16,6 +16,7 @@
package android.content.pm;
+import android.Manifest;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.RequiresPermission;
@@ -23,7 +24,6 @@
import android.annotation.SdkConstant.SdkConstantType;
import android.annotation.SystemApi;
import android.app.ActivityManager;
-import android.content.Context;
import android.content.Intent;
import android.content.IntentSender;
import android.graphics.Bitmap;
@@ -36,9 +36,11 @@
import android.os.ParcelFileDescriptor;
import android.os.Parcelable;
import android.os.RemoteException;
+import android.annotation.IntRange;
import android.util.ExceptionUtils;
import com.android.internal.util.IndentingPrintWriter;
+import com.android.internal.util.Preconditions;
import java.io.Closeable;
import java.io.IOException;
@@ -256,8 +258,6 @@
*/
public static final int STATUS_FAILURE_INCOMPATIBLE = 7;
- private final Context mContext;
- private final PackageManager mPm;
private final IPackageInstaller mInstaller;
private final int mUserId;
private final String mInstallerPackageName;
@@ -265,10 +265,8 @@
private final ArrayList<SessionCallbackDelegate> mDelegates = new ArrayList<>();
/** {@hide} */
- public PackageInstaller(Context context, PackageManager pm, IPackageInstaller installer,
+ public PackageInstaller(IPackageInstaller installer,
String installerPackageName, int userId) {
- mContext = context;
- mPm = pm;
mInstaller = installer;
mInstallerPackageName = installerPackageName;
mUserId = userId;
@@ -413,10 +411,35 @@
* Uninstall the given package, removing it completely from the device. This
* method is only available to the current "installer of record" for the
* package.
+ *
+ * @param packageName The package to uninstall.
+ * @param statusReceiver Where to deliver the result.
*/
public void uninstall(@NonNull String packageName, @NonNull IntentSender statusReceiver) {
+ uninstall(new VersionedPackage(packageName, PackageManager.VERSION_CODE_HIGHEST),
+ statusReceiver);
+ }
+
+ /**
+ * Uninstall the given package with a specific version code, removing it
+ * completely from the device. This method is only available to the current
+ * "installer of record" for the package. If the version code of the package
+ * does not match the one passed in the versioned package argument this
+ * method is a no-op. Use {@link PackageManager#VERSION_CODE_HIGHEST} to
+ * uninstall the latest version of the package.
+ *
+ * @param versionedPackage The versioned package to uninstall.
+ * @param statusReceiver Where to deliver the result.
+ */
+ @RequiresPermission(anyOf = {
+ Manifest.permission.DELETE_PACKAGES,
+ Manifest.permission.REQUEST_DELETE_PACKAGES})
+ public void uninstall(@NonNull VersionedPackage versionedPackage,
+ @NonNull IntentSender statusReceiver) {
+ Preconditions.checkNotNull(versionedPackage, "versionedPackage cannot be null");
try {
- mInstaller.uninstall(packageName, mInstallerPackageName, 0, statusReceiver, mUserId);
+ mInstaller.uninstall(versionedPackage, mInstallerPackageName,
+ 0, statusReceiver, mUserId);
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
diff --git a/core/java/android/content/pm/PackageItemInfo.java b/core/java/android/content/pm/PackageItemInfo.java
index bc79f41..11830c2 100644
--- a/core/java/android/content/pm/PackageItemInfo.java
+++ b/core/java/android/content/pm/PackageItemInfo.java
@@ -24,14 +24,10 @@
import android.os.Bundle;
import android.os.Parcel;
import android.os.UserHandle;
-import android.text.BidiFormatter;
import android.text.Html;
import android.text.TextPaint;
import android.text.TextUtils;
import android.util.Printer;
-import android.text.BidiFormatter;
-import android.text.TextPaint;
-import android.text.Html;
import java.text.Collator;
import java.util.Comparator;
@@ -50,31 +46,31 @@
* Public name of this item. From the "android:name" attribute.
*/
public String name;
-
+
/**
* Name of the package that this item is in.
*/
public String packageName;
-
+
/**
* A string resource identifier (in the package's resources) of this
* component's label. From the "label" attribute or, if not set, 0.
*/
public int labelRes;
-
+
/**
* The string provided in the AndroidManifest file, if any. You
* probably don't want to use this. You probably want
* {@link PackageManager#getApplicationLabel}
*/
public CharSequence nonLocalizedLabel;
-
+
/**
* A drawable resource identifier (in the package's resources) of this
* component's icon. From the "icon" attribute or, if not set, 0.
*/
public int icon;
-
+
/**
* A drawable resource identifier (in the package's resources) of this
* component's banner. From the "banner" attribute or, if not set, 0.
@@ -85,10 +81,10 @@
* A drawable resource identifier (in the package's resources) of this
* component's logo. Logos may be larger/wider than icons and are
* displayed by certain UI elements in place of a name or name/icon
- * combination. From the "logo" attribute or, if not set, 0.
+ * combination. From the "logo" attribute or, if not set, 0.
*/
public int logo;
-
+
/**
* Additional meta-data associated with this component. This field
* will only be filled in if you set the
@@ -124,10 +120,10 @@
* Retrieve the current textual label associated with this item. This
* will call back on the given PackageManager to load the label from
* the application.
- *
+ *
* @param pm A PackageManager from which the label can be loaded; usually
* the PackageManager from which you originally retrieved this item.
- *
+ *
* @return Returns a CharSequence containing the item's label. If the
* item does not have a label, its name is returned.
*/
@@ -146,7 +142,7 @@
}
return packageName;
}
-
+
/**
* Same as {@link #loadLabel(PackageManager)} with the addition that
* the returned label is safe for being presented in the UI since it
@@ -207,10 +203,10 @@
* Retrieve the current graphical icon associated with this item. This
* will call back on the given PackageManager to load the icon from
* the application.
- *
+ *
* @param pm A PackageManager from which the icon can be loaded; usually
* the PackageManager from which you originally retrieved this item.
- *
+ *
* @return Returns a Drawable containing the item's icon. If the
* item does not have an icon, the item's default icon is returned
* such as the default activity icon.
@@ -259,13 +255,13 @@
/**
* Retrieve the default graphical icon associated with this item.
- *
+ *
* @param pm A PackageManager from which the icon can be loaded; usually
* the PackageManager from which you originally retrieved this item.
- *
+ *
* @return Returns a Drawable containing the item's default icon
* such as the default activity icon.
- *
+ *
* @hide
*/
public Drawable loadDefaultIcon(PackageManager pm) {
@@ -291,10 +287,10 @@
* Retrieve the current graphical logo associated with this item. This
* will call back on the given PackageManager to load the logo from
* the application.
- *
+ *
* @param pm A PackageManager from which the logo can be loaded; usually
* the PackageManager from which you originally retrieved this item.
- *
+ *
* @return Returns a Drawable containing the item's logo. If the item
* does not have a logo, this method will return null.
*/
@@ -307,31 +303,31 @@
}
return loadDefaultLogo(pm);
}
-
+
/**
* Retrieve the default graphical logo associated with this item.
- *
+ *
* @param pm A PackageManager from which the logo can be loaded; usually
* the PackageManager from which you originally retrieved this item.
- *
+ *
* @return Returns a Drawable containing the item's default logo
* or null if no default logo is available.
- *
+ *
* @hide
*/
protected Drawable loadDefaultLogo(PackageManager pm) {
return null;
}
-
+
/**
* Load an XML resource attached to the meta-data of this item. This will
* retrieved the name meta-data entry, and if defined call back on the
* given PackageManager to load its XML file from the application.
- *
+ *
* @param pm A PackageManager from which the XML can be loaded; usually
* the PackageManager from which you originally retrieved this item.
* @param name Name of the meta-date you would like to load.
- *
+ *
* @return Returns an XmlPullParser you can use to parse the XML file
* assigned as the given meta-data. If the meta-data name is not defined
* or the XML resource could not be found, null is returned.
@@ -373,11 +369,11 @@
+ " banner=0x" + Integer.toHexString(banner));
}
}
-
+
protected void dumpBack(Printer pw, String prefix) {
// no back here
}
-
+
public void writeToParcel(Parcel dest, int parcelableFlags) {
dest.writeString(name);
dest.writeString(packageName);
@@ -389,7 +385,7 @@
dest.writeInt(banner);
dest.writeInt(showUserIcon);
}
-
+
protected PackageItemInfo(Parcel source) {
name = source.readString();
packageName = source.readString();
@@ -406,9 +402,9 @@
/**
* Get the ApplicationInfo for the application to which this item belongs,
* if available, otherwise returns null.
- *
+ *
* @return Returns the ApplicationInfo of this item, or null if not known.
- *
+ *
* @hide
*/
protected ApplicationInfo getApplicationInfo() {
diff --git a/core/java/android/content/pm/PackageManager.java b/core/java/android/content/pm/PackageManager.java
index 04e649c..7bdc56d 100644
--- a/core/java/android/content/pm/PackageManager.java
+++ b/core/java/android/content/pm/PackageManager.java
@@ -20,6 +20,7 @@
import android.annotation.CheckResult;
import android.annotation.DrawableRes;
import android.annotation.IntDef;
+import android.annotation.IntRange;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.RequiresPermission;
@@ -1287,6 +1288,13 @@
public static final int DELETE_FAILED_ABORTED = -5;
/**
+ * Deletion failed return code: this is passed to the
+ * {@link IPackageDeleteObserver} if the system failed to delete the package
+ * because the packge is a shared library used by other installed packages.
+ * {@hide} */
+ public static final int DELETE_FAILED_USED_SHARED_LIBRARY = -6;
+
+ /**
* Return code that is passed to the {@link IPackageMoveObserver} when the
* package has been successfully moved by the system.
*
@@ -1360,6 +1368,14 @@
public static final int MOVE_FAILED_DEVICE_ADMIN = -8;
/**
+ * Error code that is passed to the {@link IPackageMoveObserver} if system does not allow
+ * non-system apps to be moved to internal storage.
+ *
+ * @hide
+ */
+ public static final int MOVE_FAILED_3RD_PARTY_NOT_ALLOWED_ON_INTERNAL = -9;
+
+ /**
* Flag parameter for {@link #movePackage} to indicate that
* the package should be moved to internal storage if its
* been installed on external media.
@@ -1854,6 +1870,20 @@
public static final String FEATURE_TELEPHONY_GSM = "android.hardware.telephony.gsm";
/**
+ * Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}:
+ * The device supports telephony carrier restriction mechanism.
+ *
+ * <p>Devices declaring this feature must have an implementation of the
+ * {@link android.telephony.TelephonyManager#getAllowedCarriers} and
+ * {@link android.telephony.TelephonyManager#setAllowedCarriers}.
+ * @hide
+ */
+ @SystemApi
+ @SdkConstant(SdkConstantType.FEATURE)
+ public static final String FEATURE_TELEPHONY_CARRIERLOCK =
+ "android.hardware.telephony.carrierlock";
+
+ /**
* Feature for {@link #getSystemAvailableFeatures} and
* {@link #hasSystemFeature}: The device supports connecting to USB devices
* as the USB host.
@@ -2602,6 +2632,11 @@
public static final int NOTIFY_PACKAGE_USE_REASONS_COUNT = 8;
/**
+ * Constant for specifying the highest installed package version code.
+ */
+ public static final int VERSION_CODE_HIGHEST = -1;
+
+ /**
* Retrieve overall information about an application package that is
* installed on the system.
*
@@ -2649,7 +2684,58 @@
throws NameNotFoundException;
/**
- * @hide
+ * Retrieve overall information about an application package that is
+ * installed on the system. This method can be used for retrieving
+ * information about packages for which multiple versions can be
+ * installed at the time. Currently only packages hosting static shared
+ * libraries can have multiple installed versions. The method can also
+ * be used to get info for a package that has a single version installed
+ * by passing {@link #VERSION_CODE_HIGHEST} in the {@link VersionedPackage}
+ * constructor.
+ *
+ * @param versionedPackage The versioned packages for which to query.
+ * @param flags Additional option flags. Use any combination of
+ * {@link #GET_ACTIVITIES}, {@link #GET_CONFIGURATIONS},
+ * {@link #GET_GIDS}, {@link #GET_INSTRUMENTATION},
+ * {@link #GET_INTENT_FILTERS}, {@link #GET_META_DATA},
+ * {@link #GET_PERMISSIONS}, {@link #GET_PROVIDERS},
+ * {@link #GET_RECEIVERS}, {@link #GET_SERVICES},
+ * {@link #GET_SHARED_LIBRARY_FILES}, {@link #GET_SIGNATURES},
+ * {@link #GET_URI_PERMISSION_PATTERNS}, {@link #GET_UNINSTALLED_PACKAGES},
+ * {@link #MATCH_DISABLED_COMPONENTS}, {@link #MATCH_DISABLED_UNTIL_USED_COMPONENTS},
+ * {@link #MATCH_UNINSTALLED_PACKAGES}
+ * to modify the data returned.
+ *
+ * @return A PackageInfo object containing information about the
+ * package. If flag {@code MATCH_UNINSTALLED_PACKAGES} is set and if the
+ * package is not found in the list of installed applications, the
+ * package information is retrieved from the list of uninstalled
+ * applications (which includes installed applications as well as
+ * applications with data directory i.e. applications which had been
+ * deleted with {@code DONT_DELETE_DATA} flag set).
+ * @throws NameNotFoundException if a package with the given name cannot be
+ * found on the system.
+ * @see #GET_ACTIVITIES
+ * @see #GET_CONFIGURATIONS
+ * @see #GET_GIDS
+ * @see #GET_INSTRUMENTATION
+ * @see #GET_INTENT_FILTERS
+ * @see #GET_META_DATA
+ * @see #GET_PERMISSIONS
+ * @see #GET_PROVIDERS
+ * @see #GET_RECEIVERS
+ * @see #GET_SERVICES
+ * @see #GET_SHARED_LIBRARY_FILES
+ * @see #GET_SIGNATURES
+ * @see #GET_URI_PERMISSION_PATTERNS
+ * @see #MATCH_DISABLED_COMPONENTS
+ * @see #MATCH_DISABLED_UNTIL_USED_COMPONENTS
+ * @see #MATCH_UNINSTALLED_PACKAGES
+ */
+ public abstract PackageInfo getPackageInfo(VersionedPackage versionedPackage,
+ @PackageInfoFlags int flags) throws NameNotFoundException;
+
+ /**
* Retrieve overall information about an application package that is
* installed on the system.
*
@@ -2693,6 +2779,8 @@
* @see #MATCH_DISABLED_COMPONENTS
* @see #MATCH_DISABLED_UNTIL_USED_COMPONENTS
* @see #MATCH_UNINSTALLED_PACKAGES
+ *
+ * @hide
*/
@RequiresPermission(Manifest.permission.INTERACT_ACROSS_USERS)
public abstract PackageInfo getPackageInfoAsUser(String packageName,
@@ -3683,6 +3771,37 @@
public abstract String[] getSystemSharedLibraryNames();
/**
+ * Get a list of shared libraries on the device.
+ *
+ * @param flags To filter the libraries to return.
+ * @return The shared library list.
+ *
+ * @see #MATCH_FACTORY_ONLY
+ * @see #MATCH_KNOWN_PACKAGES
+ * @see #MATCH_ANY_USER
+ * @see #MATCH_UNINSTALLED_PACKAGES
+ */
+ public abstract @NonNull List<SharedLibraryInfo> getSharedLibraries(
+ @InstallFlags int flags);
+
+ /**
+ * Get a list of shared libraries on the device.
+ *
+ * @param flags To filter the libraries to return.
+ * @param userId The user to query for.
+ * @return The shared library list.
+ *
+ * @see #MATCH_FACTORY_ONLY
+ * @see #MATCH_KNOWN_PACKAGES
+ * @see #MATCH_ANY_USER
+ * @see #MATCH_UNINSTALLED_PACKAGES
+ *
+ * @hide
+ */
+ public abstract @NonNull List<SharedLibraryInfo> getSharedLibrariesAsUser(
+ @InstallFlags int flags, @UserIdInt int userId);
+
+ /**
* Get the name of the package hosting the services shared library.
*
* @return The library host package.
@@ -5066,6 +5185,7 @@
* indicate that no callback is desired.
* @hide
*/
+ @RequiresPermission(Manifest.permission.DELETE_PACKAGES)
public abstract void deletePackage(String packageName, IPackageDeleteObserver observer,
@DeleteFlags int flags);
@@ -5084,11 +5204,11 @@
* @param userId The user Id
* @hide
*/
- @RequiresPermission(anyOf = {
+ @RequiresPermission(anyOf = {
Manifest.permission.DELETE_PACKAGES,
Manifest.permission.INTERACT_ACROSS_USERS_FULL})
- public abstract void deletePackageAsUser(String packageName, IPackageDeleteObserver observer,
- @DeleteFlags int flags, @UserIdInt int userId);
+ public abstract void deletePackageAsUser(@NonNull String packageName,
+ IPackageDeleteObserver observer, @DeleteFlags int flags, @UserIdInt int userId);
/**
* Retrieve the package name of the application that installed a package. This identifies
@@ -5829,6 +5949,7 @@
case DELETE_FAILED_USER_RESTRICTED: return "DELETE_FAILED_USER_RESTRICTED";
case DELETE_FAILED_OWNER_BLOCKED: return "DELETE_FAILED_OWNER_BLOCKED";
case DELETE_FAILED_ABORTED: return "DELETE_FAILED_ABORTED";
+ case DELETE_FAILED_USED_SHARED_LIBRARY: return "DELETE_FAILED_USED_SHARED_LIBRARY";
default: return Integer.toString(status);
}
}
@@ -5842,6 +5963,7 @@
case DELETE_FAILED_USER_RESTRICTED: return PackageInstaller.STATUS_FAILURE_BLOCKED;
case DELETE_FAILED_OWNER_BLOCKED: return PackageInstaller.STATUS_FAILURE_BLOCKED;
case DELETE_FAILED_ABORTED: return PackageInstaller.STATUS_FAILURE_ABORTED;
+ case DELETE_FAILED_USED_SHARED_LIBRARY: return PackageInstaller.STATUS_FAILURE_CONFLICT;
default: return PackageInstaller.STATUS_FAILURE;
}
}
diff --git a/core/java/android/content/pm/PackageManagerInternal.java b/core/java/android/content/pm/PackageManagerInternal.java
index 2590a6b..a1747c7 100644
--- a/core/java/android/content/pm/PackageManagerInternal.java
+++ b/core/java/android/content/pm/PackageManagerInternal.java
@@ -138,9 +138,8 @@
* @param userId The user under which to check.
*
* @return An {@link ApplicationInfo} containing information about the
- * package.
- * @throws NameNotFoundException if a package with the given name cannot be
- * found on the system.
+ * package, or {@code null} if no application exists with that
+ * package name.
*/
public abstract ApplicationInfo getApplicationInfo(String packageName, int userId);
@@ -223,6 +222,27 @@
int userId);
/**
+ * Grants access to the package metadata for an ephemeral application.
+ * <p>
+ * When an ephemeral application explicitly tries to interact with a full
+ * install application [via an activity, service or provider that has been
+ * exposed using the {@code visibleToInstantApp} attribute], the normal
+ * application must be able to see metadata about the connecting ephemeral
+ * app. If the ephemeral application uses an implicit intent [ie action VIEW,
+ * category BROWSABLE], it remains hidden from the launched activity.
+ * <p>
+ * If the {@code sourceUid} is not for an ephemeral app or {@code targetUid}
+ * is not for a fully installed app, this method will be a no-op.
+ *
+ * @param userId the user
+ * @param intent the intent that triggered the grant
+ * @param targetAppId The app ID of the fully installed application
+ * @param ephemeralAppId The app ID of the ephemeral application
+ */
+ public abstract void grantEphemeralAccess(int userId, Intent intent,
+ int targetAppId, int ephemeralAppId);
+
+ /**
* @return The SetupWizard package name.
*/
public abstract String getSetupWizardPackageName();
diff --git a/core/java/android/content/pm/PackageParser.java b/core/java/android/content/pm/PackageParser.java
index 083e4cc6..d8d7abe 100644
--- a/core/java/android/content/pm/PackageParser.java
+++ b/core/java/android/content/pm/PackageParser.java
@@ -179,6 +179,13 @@
private static final String TAG_PACKAGE = "package";
private static final String TAG_RESTRICT_UPDATE = "restrict-update";
+ /**
+ * Bit mask of all the valid bits that can be set in restartOnConfigChanges.
+ * @hide
+ */
+ private static final int RESTART_ON_CONFIG_CHANGES_MASK =
+ ActivityInfo.CONFIG_MCC | ActivityInfo.CONFIG_MNC;
+
// These are the tags supported by child packages
private static final Set<String> CHILD_PACKAGE_TAGS = new ArraySet<>();
static {
@@ -1366,6 +1373,11 @@
"No APK Signature Scheme v2 signature in ephemeral package " + apkPath,
e);
}
+ // Static shared libraries must use only the V2 signing scheme
+ if (pkg.applicationInfo.isStaticSharedLibrary()) {
+ throw new PackageParserException(INSTALL_PARSE_FAILED_NO_CERTIFICATES,
+ "Static shared libs must use v2 signature scheme " + apkPath);
+ }
} catch (Exception e) {
// APK Signature Scheme v2 signature was found but did not verify
throw new PackageParserException(INSTALL_PARSE_FAILED_NO_CERTIFICATES,
@@ -2561,6 +2573,52 @@
return fi;
}
+ private boolean parseUsesStaticLibrary(Package pkg, Resources res, XmlResourceParser parser,
+ String[] outError) throws XmlPullParserException, IOException {
+ TypedArray sa = res.obtainAttributes(parser,
+ com.android.internal.R.styleable.AndroidManifestUsesStaticLibrary);
+
+ // Note: don't allow this value to be a reference to a resource that may change.
+ String lname = sa.getNonResourceString(
+ com.android.internal.R.styleable.AndroidManifestUsesLibrary_name);
+ final int version = sa.getInt(
+ com.android.internal.R.styleable.AndroidManifestUsesStaticLibrary_version, -1);
+ String certSha256 = sa.getNonResourceString(com.android.internal.R.styleable
+ .AndroidManifestUsesStaticLibrary_certDigest);
+ sa.recycle();
+
+ // Since an APK providing a static shared lib can only provide the lib - fail if malformed
+ if (lname == null || version < 0 || certSha256 == null) {
+ outError[0] = "Bad uses-static-library declaration name: " + lname + " version: "
+ + version + " certDigest" + certSha256;
+ mParseError = PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED;
+ XmlUtils.skipCurrentTag(parser);
+ return false;
+ }
+
+ // Can depend only on one version of the same library
+ if (pkg.usesStaticLibraries != null && pkg.usesStaticLibraries.contains(lname)) {
+ outError[0] = "Depending on multiple versions of static library " + lname;
+ mParseError = PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED;
+ XmlUtils.skipCurrentTag(parser);
+ return false;
+ }
+
+ lname = lname.intern();
+ // We allow ":" delimiters in the SHA declaration as this is the format
+ // emitted by the certtool making it easy for developers to copy/paste.
+ certSha256 = certSha256.replace(":", "").toLowerCase();
+ pkg.usesStaticLibraries = ArrayUtils.add(pkg.usesStaticLibraries, lname);
+ pkg.usesStaticLibrariesVersions = ArrayUtils.appendInt(
+ pkg.usesStaticLibrariesVersions, version);
+ pkg.usesStaticLibrariesCertDigests = ArrayUtils.appendElement(String.class,
+ pkg.usesStaticLibrariesCertDigests, certSha256);
+
+ XmlUtils.skipCurrentTag(parser);
+
+ return true;
+ }
+
private boolean parseUsesPermission(Package pkg, Resources res, XmlResourceParser parser)
throws XmlPullParserException, IOException {
TypedArray sa = res.obtainAttributes(parser,
@@ -3409,6 +3467,47 @@
mParseError = PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED;
return false;
}
+ } else if (tagName.equals("static-library")) {
+ sa = res.obtainAttributes(parser,
+ com.android.internal.R.styleable.AndroidManifestStaticLibrary);
+
+ // Note: don't allow this value to be a reference to a resource
+ // that may change.
+ final String lname = sa.getNonResourceString(
+ com.android.internal.R.styleable.AndroidManifestStaticLibrary_name);
+ final int version = sa.getInt(
+ com.android.internal.R.styleable.AndroidManifestStaticLibrary_version, -1);
+
+ sa.recycle();
+
+ // Since the app canot run without a static lib - fail if malformed
+ if (lname == null || version < 0) {
+ outError[0] = "Bad static-library declaration name: " + lname
+ + " version: " + version;
+ mParseError = PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED;
+ XmlUtils.skipCurrentTag(parser);
+ return false;
+ }
+
+ if (owner.mSharedUserId != null) {
+ outError[0] = "sharedUserId not allowed in static shared library";
+ mParseError = PackageManager.INSTALL_PARSE_FAILED_BAD_SHARED_USER_ID;
+ XmlUtils.skipCurrentTag(parser);
+ return false;
+ }
+
+ if (owner.staticSharedLibName != null) {
+ outError[0] = "Multiple static-shared libs for package " + pkgName;
+ mParseError = PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED;
+ XmlUtils.skipCurrentTag(parser);
+ return false;
+ }
+
+ owner.staticSharedLibName = lname.intern();
+ owner.staticSharedLibVersion = version;
+ ai.privateFlags |= ApplicationInfo.PRIVATE_FLAG_STATIC_SHARED_LIBRARY;
+
+ XmlUtils.skipCurrentTag(parser);
} else if (tagName.equals("library")) {
sa = res.obtainAttributes(parser,
@@ -3424,12 +3523,18 @@
if (lname != null) {
lname = lname.intern();
if (!ArrayUtils.contains(owner.libraryNames, lname)) {
- owner.libraryNames = ArrayUtils.add(owner.libraryNames, lname);
+ owner.libraryNames = ArrayUtils.add(
+ owner.libraryNames, lname);
}
}
XmlUtils.skipCurrentTag(parser);
+ } else if (tagName.equals("uses-static-library")) {
+ if (!parseUsesStaticLibrary(owner, res, parser, outError)) {
+ return false;
+ }
+
} else if (tagName.equals("uses-library")) {
sa = res.obtainAttributes(parser,
com.android.internal.R.styleable.AndroidManifestUsesLibrary);
@@ -3608,6 +3713,11 @@
return false;
}
+ } else if (tagName.equals("uses-static-library")) {
+ if (!parseUsesStaticLibrary(owner, res, parser, outError)) {
+ return false;
+ }
+
} else if (tagName.equals("uses-library")) {
sa = res.obtainAttributes(parser,
com.android.internal.R.styleable.AndroidManifestUsesLibrary);
@@ -3855,7 +3965,9 @@
a.info.maxRecents = sa.getInt(
R.styleable.AndroidManifestActivity_maxRecents,
ActivityManager.getDefaultAppRecentsLimitStatic());
- a.info.configChanges = sa.getInt(R.styleable.AndroidManifestActivity_configChanges, 0);
+ a.info.configChanges = getActivityConfigChanges(
+ sa.getInt(R.styleable.AndroidManifestActivity_configChanges, 0),
+ sa.getInt(R.styleable.AndroidManifestActivity_restartOnConfigChanges, 0));
a.info.softInputMode = sa.getInt(
R.styleable.AndroidManifestActivity_windowSoftInputMode, 0);
@@ -3931,10 +4043,10 @@
}
final boolean hasVisibleToEphemeral =
- sa.hasValue(R.styleable.AndroidManifestActivity_visibleToEphemeral);
+ sa.hasValue(R.styleable.AndroidManifestActivity_visibleToInstantApps);
final boolean isEphemeral = ((flags & PARSE_IS_EPHEMERAL) != 0);
final boolean visibleToEphemeral = isEphemeral
- || sa.getBoolean(R.styleable.AndroidManifestActivity_visibleToEphemeral, false);
+ || sa.getBoolean(R.styleable.AndroidManifestActivity_visibleToInstantApps, false);
if (visibleToEphemeral) {
a.info.flags |= ActivityInfo.FLAG_VISIBLE_TO_EPHEMERAL;
}
@@ -4083,6 +4195,17 @@
}
}
+ /**
+ * @param configChanges The bit mask of configChanges fetched from AndroidManifest.xml.
+ * @param restartOnConfigChanges The bit mask restartOnConfigChanges fetched from
+ * AndroidManifest.xml.
+ * @hide Exposed for unit testing only.
+ */
+ @TestApi
+ public static int getActivityConfigChanges(int configChanges, int restartOnConfigChanges) {
+ return configChanges | ((~restartOnConfigChanges) & RESTART_ON_CONFIG_CHANGES_MASK);
+ }
+
private void parseLayout(Resources res, AttributeSet attrs, Activity a) {
TypedArray sw = res.obtainAttributes(attrs,
com.android.internal.R.styleable.AndroidManifestLayout);
@@ -4244,7 +4367,7 @@
}
}
- // TODO add visibleToInstantApp attribute to activity alias
+ // TODO add visibleToInstantApps attribute to activity alias
final boolean isEphemeral = ((flags & PARSE_IS_EPHEMERAL) != 0);
final boolean visibleToEphemeral = isEphemeral
|| ((a.info.flags & ActivityInfo.FLAG_VISIBLE_TO_EPHEMERAL) != 0);
@@ -4420,10 +4543,10 @@
}
final boolean hasVisibleToEphemeral =
- sa.hasValue(R.styleable.AndroidManifestProvider_visibleToEphemeral);
+ sa.hasValue(R.styleable.AndroidManifestProvider_visibleToInstantApps);
final boolean isEphemeral = ((flags & PARSE_IS_EPHEMERAL) != 0);
final boolean visibleToEphemeral = isEphemeral
- || sa.getBoolean(R.styleable.AndroidManifestProvider_visibleToEphemeral, false);
+ || sa.getBoolean(R.styleable.AndroidManifestProvider_visibleToInstantApps, false);
if (visibleToEphemeral) {
p.info.flags |= ProviderInfo.FLAG_VISIBLE_TO_EPHEMERAL;
}
@@ -4731,10 +4854,10 @@
}
final boolean hasVisibleToEphemeral =
- sa.hasValue(R.styleable.AndroidManifestService_visibleToEphemeral);
+ sa.hasValue(R.styleable.AndroidManifestService_visibleToInstantApps);
final boolean isEphemeral = ((flags & PARSE_IS_EPHEMERAL) != 0);
final boolean visibleToEphemeral = isEphemeral
- || sa.getBoolean(R.styleable.AndroidManifestService_visibleToEphemeral, false);
+ || sa.getBoolean(R.styleable.AndroidManifestService_visibleToInstantApps, false);
if (visibleToEphemeral) {
s.info.flags |= ServiceInfo.FLAG_VISIBLE_TO_EPHEMERAL;
}
@@ -5167,6 +5290,10 @@
public String packageName;
+ // The package name declared in the manifest as the package can be
+ // renamed, for example static shared libs use synthetic package names.
+ public String manifestPackageName;
+
/** Names of any split APKs, ordered by parsed splitName */
public String[] splitNames;
@@ -5221,8 +5348,13 @@
public Package parentPackage;
public ArrayList<Package> childPackages;
+ public String staticSharedLibName = null;
+ public int staticSharedLibVersion = 0;
public ArrayList<String> libraryNames = null;
public ArrayList<String> usesLibraries = null;
+ public ArrayList<String> usesStaticLibraries = null;
+ public int[] usesStaticLibrariesVersions = null;
+ public String[] usesStaticLibrariesCertDigests = null;
public ArrayList<String> usesOptionalLibraries = null;
public String[] usesLibraryFiles = null;
@@ -5321,6 +5453,7 @@
public Package(String packageName) {
this.packageName = packageName;
+ this.manifestPackageName = packageName;
applicationInfo.packageName = packageName;
applicationInfo.uid = -1;
}
@@ -5639,6 +5772,7 @@
final ClassLoader boot = Object.class.getClassLoader();
packageName = dest.readString();
+ manifestPackageName = dest.readString();
splitNames = dest.readStringArray();
volumeUuid = dest.readString();
codePath = dest.readString();
@@ -5679,11 +5813,23 @@
childPackages = null;
}
+ staticSharedLibName = dest.readString();
+ staticSharedLibVersion = dest.readInt();
libraryNames = dest.createStringArrayList();
usesLibraries = dest.createStringArrayList();
usesOptionalLibraries = dest.createStringArrayList();
usesLibraryFiles = dest.readStringArray();
+ final int libCount = dest.readInt();
+ if (libCount > 0) {
+ usesStaticLibraries = new ArrayList<>(libCount);
+ dest.readStringList(usesStaticLibraries);
+ usesStaticLibrariesVersions = new int[libCount];
+ dest.readIntArray(usesStaticLibrariesVersions);
+ usesStaticLibrariesCertDigests = new String[libCount];
+ dest.readStringArray(usesStaticLibrariesCertDigests);
+ }
+
preferredActivityFilters = new ArrayList<>();
dest.readParcelableList(preferredActivityFilters, boot);
if (preferredActivityFilters.size() == 0) {
@@ -5769,6 +5915,7 @@
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(packageName);
+ dest.writeString(manifestPackageName);
dest.writeStringArray(splitNames);
dest.writeString(volumeUuid);
dest.writeString(codePath);
@@ -5793,11 +5940,22 @@
dest.writeStringList(protectedBroadcasts);
dest.writeParcelable(parentPackage, flags);
dest.writeParcelableList(childPackages, flags);
+ dest.writeString(staticSharedLibName);
+ dest.writeInt(staticSharedLibVersion);
dest.writeStringList(libraryNames);
dest.writeStringList(usesLibraries);
dest.writeStringList(usesOptionalLibraries);
dest.writeStringArray(usesLibraryFiles);
+ if (ArrayUtils.isEmpty(usesStaticLibraries)) {
+ dest.writeInt(-1);
+ } else {
+ dest.writeInt(usesStaticLibraries.size());
+ dest.writeStringList(usesStaticLibraries);
+ dest.writeIntArray(usesStaticLibrariesVersions);
+ dest.writeStringArray(usesStaticLibrariesCertDigests);
+ }
+
dest.writeParcelableList(preferredActivityFilters, flags);
dest.writeStringList(mOriginalPackages);
@@ -6219,6 +6377,9 @@
&& p.usesLibraryFiles != null) {
return true;
}
+ if (p.staticSharedLibName != null) {
+ return true;
+ }
return false;
}
diff --git a/core/java/android/content/pm/SharedLibraryInfo.aidl b/core/java/android/content/pm/SharedLibraryInfo.aidl
new file mode 100644
index 0000000..56d7c832
--- /dev/null
+++ b/core/java/android/content/pm/SharedLibraryInfo.aidl
@@ -0,0 +1,18 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package android.content.pm;
+
+parcelable SharedLibraryInfo;
diff --git a/core/java/android/content/pm/SharedLibraryInfo.java b/core/java/android/content/pm/SharedLibraryInfo.java
new file mode 100644
index 0000000..d79deb2
--- /dev/null
+++ b/core/java/android/content/pm/SharedLibraryInfo.java
@@ -0,0 +1,216 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.content.pm;
+
+import android.annotation.IntRange;
+import android.annotation.NonNull;
+import android.os.Parcel;
+import android.os.Parcelable;
+
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * This class provides information for a shared library. There are
+ * three types of shared libraries: builtin - non-updatable part of
+ * the OS; dynamic - updatable backwards-compatible dynamically linked;
+ * static - updatable non backwards-compatible emulating static linking.
+ */
+public final class SharedLibraryInfo implements Parcelable {
+ /**
+ * Shared library type: this library is a part of the OS
+ * and cannot be updated or uninstalled.
+ * @hide
+ */
+ public static final int TYPE_BUILTIN = 0x1<<0;
+
+ /**
+ * Shared library type: this library is backwards-compatible, can
+ * be updated, and updates can be uninstalled. Clients link against
+ * the latest version of the library.
+ * @hide
+ */
+ public static final int TYPE_DYNAMIC = 0x1<<1;
+
+ /**
+ * Shared library type: this library is <strong>not</strong> backwards
+ * -compatible, can be updated and updates can be uninstalled. Clients
+ * link against a specific version of the library.
+ * @hide
+ */
+ public static final int TYPE_STATIC = 0x1<<2;
+
+ /**
+ * Constant for referring to an undefined version.
+ */
+ public static final int VERSION_UNDEFINED = -1;
+
+ private final String mName;
+ private final int mVersion;
+ private final int mType;
+ private final VersionedPackage mDeclaringPackage;
+ private final List<VersionedPackage> mDependentPackages;
+
+ /**
+ * Creates a new instance.
+ *
+ * @param name The lib name.
+ * @param version The lib version if not builtin.
+ * @param type The lib type.
+ * @param declaringPackage The package that declares the library.
+ * @param dependentPackages The packages that depend on the library.
+ *
+ * @hide
+ */
+ public SharedLibraryInfo(String name, int version, int type,
+ VersionedPackage declaringPackage, List<VersionedPackage> dependentPackages) {
+ mName = name;
+ mVersion = version;
+ mType = type;
+ mDeclaringPackage = declaringPackage;
+ mDependentPackages = dependentPackages;
+ }
+
+ private SharedLibraryInfo(Parcel parcel) {
+ this(parcel.readString(), parcel.readInt(), parcel.readInt(),
+ parcel.readParcelable(null), parcel.readArrayList(null));
+ }
+
+ /** @hide */
+ public int getType() {
+ return mType;
+ }
+
+ /**
+ * Gets the library name.
+ *
+ * @return The name.
+ */
+ public String getName() {
+ return mName;
+ }
+
+ /**
+ * Gets the version of the library. For {@link #isStatic()} static} libraries
+ * this is the declared version and for {@link #isDynamic()} dynamic} and
+ * {@link #isBuiltin()} builtin} it is {@link #VERSION_UNDEFINED} as these
+ * are not versioned.
+ *
+ * @return The version.
+ */
+ public @IntRange(from = -1) int getVersion() {
+ return mVersion;
+ }
+
+ /**
+ * @return whether this library is builtin which means that it
+ * is a part of the OS and cannot be updated or uninstalled.
+ */
+ public boolean isBuiltin() {
+ return mType == TYPE_BUILTIN;
+ }
+
+ /**
+ * @return whether this library is dynamic which means that it
+ * is backwards-compatible, can be updated, and updates can be
+ * uninstalled. Clients link against the latest version of the
+ * library.
+ */
+ public boolean isDynamic() {
+ return mType == TYPE_DYNAMIC;
+ }
+
+ /**
+ * @return whether this library is dynamic which means that it
+ * is <strong>not</strong> backwards-compatible, can be updated
+ * and updates can be uninstalled. Clients link against a specific
+ * version of the library.
+ */
+ public boolean isStatic() {
+ return mType == TYPE_STATIC;
+ }
+
+ /**
+ * Gets the package that declares the library.
+ *
+ * @return The package declaring the library.
+ */
+ public @NonNull VersionedPackage getDeclaringPackage() {
+ return mDeclaringPackage;
+ }
+
+ /**
+ * Gets the packages that depend on the library.
+ *
+ * @return The dependent packages.
+ */
+ public @NonNull List<VersionedPackage> getDependentPackages() {
+ if (mDependentPackages == null) {
+ return Collections.emptyList();
+ }
+ return mDependentPackages;
+ }
+
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ @Override
+ public String toString() {
+ return "SharedLibraryInfo[name:" + mName + ", type:" + typeToString(mType)
+ + ", version:" + mVersion + (!getDependentPackages().isEmpty()
+ ? " has dependents" : "");
+ }
+
+ @Override
+ public void writeToParcel(Parcel parcel, int flags) {
+ parcel.writeString(mName);
+ parcel.writeInt(mVersion);
+ parcel.writeInt(mType);
+ parcel.writeParcelable(mDeclaringPackage, flags);
+ parcel.writeList(mDependentPackages);
+ }
+
+ private static String typeToString(int type) {
+ switch (type) {
+ case TYPE_BUILTIN: {
+ return "builtin";
+ }
+ case TYPE_DYNAMIC: {
+ return "dynamic";
+ }
+ case TYPE_STATIC: {
+ return "static";
+ }
+ default: {
+ return "unknown";
+ }
+ }
+ }
+
+ public static final Parcelable.Creator<SharedLibraryInfo> CREATOR =
+ new Parcelable.Creator<SharedLibraryInfo>() {
+ public SharedLibraryInfo createFromParcel(Parcel source) {
+ return new SharedLibraryInfo(source);
+ }
+
+ public SharedLibraryInfo[] newArray(int size) {
+ return new SharedLibraryInfo[size];
+ }
+ };
+}
diff --git a/core/java/android/content/pm/VersionedPackage.aidl b/core/java/android/content/pm/VersionedPackage.aidl
new file mode 100644
index 0000000..43412a4
--- /dev/null
+++ b/core/java/android/content/pm/VersionedPackage.aidl
@@ -0,0 +1,18 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package android.content.pm;
+
+parcelable VersionedPackage;
diff --git a/core/java/android/content/pm/VersionedPackage.java b/core/java/android/content/pm/VersionedPackage.java
new file mode 100644
index 0000000..83e7815
--- /dev/null
+++ b/core/java/android/content/pm/VersionedPackage.java
@@ -0,0 +1,100 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package android.content.pm;
+
+import android.annotation.IntRange;
+import android.annotation.NonNull;
+import android.os.Parcel;
+import android.os.Parcelable;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+/**
+ * Encapsulates a package and its version code.
+ */
+public final class VersionedPackage implements Parcelable {
+ private final String mPackageName;
+ private final long mVersionCode;
+
+ /** @hide */
+ @Retention(RetentionPolicy.SOURCE)
+ @IntRange(from = PackageManager.VERSION_CODE_HIGHEST)
+ public @interface VersionCode{}
+
+ /**
+ * Creates a new instance. Use {@link PackageManager#VERSION_CODE_HIGHEST}
+ * to refer to the highest version code of this package.
+ * @param packageName The package name.
+ * @param versionCode The version code.
+ */
+ public VersionedPackage(@NonNull String packageName,
+ @VersionCode int versionCode) {
+ mPackageName = packageName;
+ mVersionCode = versionCode;
+ }
+
+ private VersionedPackage(Parcel parcel) {
+ mPackageName = parcel.readString();
+ mVersionCode = parcel.readLong();
+ }
+
+ /**
+ * Gets the package name.
+ *
+ * @return The package name.
+ */
+ public @NonNull String getPackageName() {
+ return mPackageName;
+ }
+
+ /**
+ * Gets the version code.
+ *
+ * @return The version code.
+ */
+ public @VersionCode long getVersionCode() {
+ return mVersionCode;
+ }
+
+ @Override
+ public String toString() {
+ return "VersionedPackage[" + mPackageName + "/" + mVersionCode + "]";
+ }
+
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ @Override
+ public void writeToParcel(Parcel parcel, int flags) {
+ parcel.writeString(mPackageName);
+ parcel.writeLong(mVersionCode);
+ }
+
+ public static final Creator<VersionedPackage> CREATOR = new Creator<VersionedPackage>() {
+ @Override
+ public VersionedPackage createFromParcel(Parcel source) {
+ return new VersionedPackage(source);
+ }
+
+ @Override
+ public VersionedPackage[] newArray(int size) {
+ return new VersionedPackage[size];
+ }
+ };
+}
diff --git a/core/java/android/content/res/Configuration.java b/core/java/android/content/res/Configuration.java
index 65f4957..a81329d 100644
--- a/core/java/android/content/res/Configuration.java
+++ b/core/java/android/content/res/Configuration.java
@@ -101,6 +101,68 @@
*/
public boolean userSetLocale;
+
+ /** Constant for {@link #colorimetry}: bits that encode whether the screen is wide gamut. */
+ public static final int COLORIMETRY_WIDE_COLOR_GAMUT_MASK = 0x3;
+ /**
+ * Constant for {@link #colorimetry}: a {@link #COLORIMETRY_WIDE_COLOR_GAMUT_MASK} value
+ * indicating that it is unknown whether or not the screen is wide gamut.
+ */
+ public static final int COLORIMETRY_WIDE_COLOR_GAMUT_UNDEFINED = 0x0;
+ /**
+ * Constant for {@link #colorimetry}: a {@link #COLORIMETRY_WIDE_COLOR_GAMUT_MASK} value
+ * indicating that the screen is not wide gamut.
+ * <p>Corresponds to the <code>-nowidecg</code> resource qualifier.</p>
+ */
+ public static final int COLORIMETRY_WIDE_COLOR_GAMUT_NO = 0x1;
+ /**
+ * Constant for {@link #colorimetry}: a {@link #COLORIMETRY_WIDE_COLOR_GAMUT_MASK} value
+ * indicating that the screen is wide gamut.
+ * <p>Corresponds to the <code>-widecg</code> resource qualifier.</p>
+ */
+ public static final int COLORIMETRY_WIDE_COLOR_GAMUT_YES = 0x2;
+
+ /** Constant for {@link #colorimetry}: bits that encode whether the dynamic range of the screen. */
+ public static final int COLORIMETRY_HDR_MASK = 0xc;
+ /** Constant for {@link #colorimetry}: bits shift to get the screen dynamic range. */
+ public static final int COLORIMETRY_HDR_SHIFT = 2;
+ /**
+ * Constant for {@link #colorimetry}: a {@link #COLORIMETRY_HDR_MASK} value
+ * indicating that it is unknown whether or not the screen is HDR.
+ */
+ public static final int COLORIMETRY_HDR_UNDEFINED = 0x0;
+ /**
+ * Constant for {@link #colorimetry}: a {@link #COLORIMETRY_HDR_MASK} value
+ * indicating that the screen is not HDR (low/standard dynamic range).
+ * <p>Corresponds to the <code>-lowdr</code> resource qualifier.</p>
+ */
+ public static final int COLORIMETRY_HDR_NO = 0x1 << COLORIMETRY_HDR_SHIFT;
+ /**
+ * Constant for {@link #colorimetry}: a {@link #COLORIMETRY_HDR_MASK} value
+ * indicating that the screen is HDR (dynamic range).
+ * <p>Corresponds to the <code>-highdr</code> resource qualifier.</p>
+ */
+ public static final int COLORIMETRY_HDR_YES = 0x2 << COLORIMETRY_HDR_SHIFT;
+
+ /** Constant for {@link #colorimetry}: a value indicating that colorimetry is undefined */
+ @SuppressWarnings("PointlessBitwiseExpression")
+ public static final int COLORIMETRY_UNDEFINED = COLORIMETRY_WIDE_COLOR_GAMUT_UNDEFINED |
+ COLORIMETRY_HDR_UNDEFINED;
+
+ /**
+ * Bit mask of for color capabilities of the screen. Currently there are two fields:
+ * <p>The {@link #COLORIMETRY_WIDE_COLOR_GAMUT_MASK} bits define the color gamut of
+ * the screen. They may be one of
+ * {@link #COLORIMETRY_WIDE_COLOR_GAMUT_NO} or {@link #COLORIMETRY_WIDE_COLOR_GAMUT_YES}.</p>
+ *
+ * <p>The {@link #COLORIMETRY_HDR_MASK} defines the dynamic range of the screen. They may be
+ * one of {@link #COLORIMETRY_HDR_NO} or {@link #COLORIMETRY_HDR_YES}.</p>
+ *
+ * <p>See <a href="{@docRoot}guide/practices/screens_support.html">Supporting
+ * Multiple Screens</a> for more information.</p>
+ */
+ public int colorimetry;
+
/** Constant for {@link #screenLayout}: bits that encode the size. */
public static final int SCREENLAYOUT_SIZE_MASK = 0x0f;
/** Constant for {@link #screenLayout}: a {@link #SCREENLAYOUT_SIZE_MASK}
@@ -331,6 +393,9 @@
if ((diff & ActivityInfo.CONFIG_SCREEN_LAYOUT) != 0) {
list.add("CONFIG_SCREEN_LAYOUT");
}
+ if ((diff & ActivityInfo.CONFIG_COLORIMETRY) != 0) {
+ list.add("CONFIG_COLORIMETRY");
+ }
if ((diff & ActivityInfo.CONFIG_UI_MODE) != 0) {
list.add("CONFIG_UI_MODE");
}
@@ -711,6 +776,7 @@
NATIVE_CONFIG_UI_MODE,
NATIVE_CONFIG_SMALLEST_SCREEN_SIZE,
NATIVE_CONFIG_LAYOUTDIR,
+ NATIVE_CONFIG_COLORIMETRY,
})
@Retention(RetentionPolicy.SOURCE)
public @interface NativeConfig {}
@@ -747,6 +813,8 @@
public static final int NATIVE_CONFIG_SMALLEST_SCREEN_SIZE = 0x2000;
/** @hide Native-specific bit mask for LAYOUTDIR config ; DO NOT USE UNLESS YOU ARE SURE.*/
public static final int NATIVE_CONFIG_LAYOUTDIR = 0x4000;
+ /** @hide Native-specific bit mask for COLORIMETRY config ; DO NOT USE UNLESS YOU ARE SURE.*/
+ public static final int NATIVE_CONFIG_COLORIMETRY = 0x10000;
/**
* <p>Construct an invalid Configuration. This state is only suitable for constructing a
@@ -805,6 +873,7 @@
navigationHidden = o.navigationHidden;
orientation = o.orientation;
screenLayout = o.screenLayout;
+ colorimetry = o.colorimetry;
uiMode = o.uiMode;
screenWidthDp = o.screenWidthDp;
screenHeightDp = o.screenHeightDp;
@@ -885,6 +954,20 @@
default: sb.append(" layoutLong=");
sb.append(screenLayout&SCREENLAYOUT_LONG_MASK); break;
}
+ switch ((colorimetry&COLORIMETRY_HDR_MASK)) {
+ case COLORIMETRY_HDR_UNDEFINED: sb.append(" ?ldr"); break; // most likely not HDR
+ case COLORIMETRY_HDR_NO: /* ldr is not interesting to print */ break;
+ case COLORIMETRY_HDR_YES: sb.append(" hdr"); break;
+ default: sb.append(" dynamicRange=");
+ sb.append(colorimetry&COLORIMETRY_HDR_MASK); break;
+ }
+ switch ((colorimetry&COLORIMETRY_WIDE_COLOR_GAMUT_MASK)) {
+ case COLORIMETRY_WIDE_COLOR_GAMUT_UNDEFINED: sb.append(" ?wideColorGamut"); break;
+ case COLORIMETRY_WIDE_COLOR_GAMUT_NO: /* not wide is not interesting to print */ break;
+ case COLORIMETRY_WIDE_COLOR_GAMUT_YES: sb.append(" widecg"); break;
+ default: sb.append(" wideColorGamut=");
+ sb.append(colorimetry&COLORIMETRY_WIDE_COLOR_GAMUT_MASK); break;
+ }
switch (orientation) {
case ORIENTATION_UNDEFINED: sb.append(" ?orien"); break;
case ORIENTATION_LANDSCAPE: sb.append(" land"); break;
@@ -976,6 +1059,7 @@
navigationHidden = NAVIGATIONHIDDEN_UNDEFINED;
orientation = ORIENTATION_UNDEFINED;
screenLayout = SCREENLAYOUT_UNDEFINED;
+ colorimetry = COLORIMETRY_UNDEFINED;
uiMode = UI_MODE_TYPE_UNDEFINED;
screenWidthDp = compatScreenWidthDp = SCREEN_WIDTH_DP_UNDEFINED;
screenHeightDp = compatScreenHeightDp = SCREEN_HEIGHT_DP_UNDEFINED;
@@ -1111,6 +1195,23 @@
| (delta.screenLayout & SCREENLAYOUT_COMPAT_NEEDED);
}
+ if (((delta.colorimetry & COLORIMETRY_WIDE_COLOR_GAMUT_MASK) !=
+ COLORIMETRY_WIDE_COLOR_GAMUT_UNDEFINED)
+ && (delta.colorimetry & COLORIMETRY_WIDE_COLOR_GAMUT_MASK)
+ != (colorimetry & COLORIMETRY_WIDE_COLOR_GAMUT_MASK)) {
+ changed |= ActivityInfo.CONFIG_COLORIMETRY;
+ colorimetry = (colorimetry & ~COLORIMETRY_WIDE_COLOR_GAMUT_MASK)
+ | (delta.colorimetry & COLORIMETRY_WIDE_COLOR_GAMUT_MASK);
+ }
+
+ if (((delta.colorimetry & COLORIMETRY_HDR_MASK) != COLORIMETRY_HDR_UNDEFINED)
+ && (delta.colorimetry & COLORIMETRY_HDR_MASK)
+ != (colorimetry & COLORIMETRY_HDR_MASK)) {
+ changed |= ActivityInfo.CONFIG_COLORIMETRY;
+ colorimetry = (colorimetry & ~COLORIMETRY_HDR_MASK)
+ | (delta.colorimetry & COLORIMETRY_HDR_MASK);
+ }
+
if (delta.uiMode != (UI_MODE_TYPE_UNDEFINED|UI_MODE_NIGHT_UNDEFINED)
&& uiMode != delta.uiMode) {
changed |= ActivityInfo.CONFIG_UI_MODE;
@@ -1260,6 +1361,19 @@
getScreenLayoutNoDirection(delta.screenLayout)) {
changed |= ActivityInfo.CONFIG_SCREEN_LAYOUT;
}
+ if ((compareUndefined ||
+ (delta.colorimetry & COLORIMETRY_HDR_MASK) != COLORIMETRY_HDR_UNDEFINED)
+ && (colorimetry & COLORIMETRY_HDR_MASK) !=
+ (delta.colorimetry & COLORIMETRY_HDR_MASK)) {
+ changed |= ActivityInfo.CONFIG_COLORIMETRY;
+ }
+ if ((compareUndefined ||
+ (delta.colorimetry & COLORIMETRY_WIDE_COLOR_GAMUT_MASK) !=
+ COLORIMETRY_WIDE_COLOR_GAMUT_UNDEFINED)
+ && (colorimetry & COLORIMETRY_WIDE_COLOR_GAMUT_MASK) !=
+ (delta.colorimetry & COLORIMETRY_WIDE_COLOR_GAMUT_MASK)) {
+ changed |= ActivityInfo.CONFIG_COLORIMETRY;
+ }
if ((compareUndefined || delta.uiMode != (UI_MODE_TYPE_UNDEFINED|UI_MODE_NIGHT_UNDEFINED))
&& uiMode != delta.uiMode) {
changed |= ActivityInfo.CONFIG_UI_MODE;
@@ -1371,6 +1485,7 @@
dest.writeInt(navigationHidden);
dest.writeInt(orientation);
dest.writeInt(screenLayout);
+ dest.writeInt(colorimetry);
dest.writeInt(uiMode);
dest.writeInt(screenWidthDp);
dest.writeInt(screenHeightDp);
@@ -1405,6 +1520,7 @@
navigationHidden = source.readInt();
orientation = source.readInt();
screenLayout = source.readInt();
+ colorimetry = source.readInt();
uiMode = source.readInt();
screenWidthDp = source.readInt();
screenHeightDp = source.readInt();
@@ -1486,6 +1602,8 @@
if (n != 0) return n;
n = this.orientation - that.orientation;
if (n != 0) return n;
+ n = this.colorimetry - that.colorimetry;
+ if (n != 0) return n;
n = this.screenLayout - that.screenLayout;
if (n != 0) return n;
n = this.uiMode - that.uiMode;
@@ -1531,6 +1649,7 @@
result = 31 * result + navigationHidden;
result = 31 * result + orientation;
result = 31 * result + screenLayout;
+ result = 31 * result + colorimetry;
result = 31 * result + uiMode;
result = 31 * result + screenWidthDp;
result = 31 * result + screenHeightDp;
@@ -1639,6 +1758,24 @@
}
/**
+ * Return whether the screen has a wide color gamut.
+ *
+ * @return true if the screen has a wide color gamut, false otherwise
+ */
+ public boolean isScreenWideColorGamut() {
+ return (colorimetry & COLORIMETRY_WIDE_COLOR_GAMUT_MASK) == COLORIMETRY_WIDE_COLOR_GAMUT_YES;
+ }
+
+ /**
+ * Return whether the screen has a high dynamic range.
+ *
+ * @return true if the screen has a high dynamic range, false otherwise
+ */
+ public boolean isScreenHdr() {
+ return (colorimetry & COLORIMETRY_HDR_MASK) == COLORIMETRY_HDR_YES;
+ }
+
+ /**
*
* @hide
*/
@@ -1770,6 +1907,28 @@
break;
}
+ switch (config.colorimetry & Configuration.COLORIMETRY_HDR_MASK) {
+ case Configuration.COLORIMETRY_HDR_YES:
+ parts.add("highdr");
+ break;
+ case Configuration.COLORIMETRY_HDR_NO:
+ parts.add("lowdr");
+ break;
+ default:
+ break;
+ }
+
+ switch (config.colorimetry & Configuration.COLORIMETRY_WIDE_COLOR_GAMUT_MASK) {
+ case Configuration.COLORIMETRY_WIDE_COLOR_GAMUT_YES:
+ parts.add("widecg");
+ break;
+ case Configuration.COLORIMETRY_WIDE_COLOR_GAMUT_NO:
+ parts.add("nowidecg");
+ break;
+ default:
+ break;
+ }
+
switch (config.orientation) {
case Configuration.ORIENTATION_LANDSCAPE:
parts.add("land");
@@ -1995,6 +2154,16 @@
delta.screenLayout |= change.screenLayout & SCREENLAYOUT_ROUND_MASK;
}
+ if ((base.colorimetry & COLORIMETRY_WIDE_COLOR_GAMUT_MASK) !=
+ (change.colorimetry & COLORIMETRY_WIDE_COLOR_GAMUT_MASK)) {
+ delta.colorimetry |= change.colorimetry & COLORIMETRY_WIDE_COLOR_GAMUT_MASK;
+ }
+
+ if ((base.colorimetry & COLORIMETRY_HDR_MASK) !=
+ (change.colorimetry & COLORIMETRY_HDR_MASK)) {
+ delta.colorimetry |= change.colorimetry & COLORIMETRY_HDR_MASK;
+ }
+
if ((base.uiMode & UI_MODE_TYPE_MASK) != (change.uiMode & UI_MODE_TYPE_MASK)) {
delta.uiMode |= change.uiMode & UI_MODE_TYPE_MASK;
}
@@ -2037,6 +2206,7 @@
private static final String XML_ATTR_NAVIGATION_HIDDEN = "navHid";
private static final String XML_ATTR_ORIENTATION = "ori";
private static final String XML_ATTR_SCREEN_LAYOUT = "scrLay";
+ private static final String XML_ATTR_COLORIMETRY = "clrMtry";
private static final String XML_ATTR_UI_MODE = "ui";
private static final String XML_ATTR_SCREEN_WIDTH = "width";
private static final String XML_ATTR_SCREEN_HEIGHT = "height";
@@ -2079,6 +2249,8 @@
ORIENTATION_UNDEFINED);
configOut.screenLayout = XmlUtils.readIntAttribute(parser, XML_ATTR_SCREEN_LAYOUT,
SCREENLAYOUT_UNDEFINED);
+ configOut.colorimetry = XmlUtils.readIntAttribute(parser, XML_ATTR_COLORIMETRY,
+ COLORIMETRY_UNDEFINED);
configOut.uiMode = XmlUtils.readIntAttribute(parser, XML_ATTR_UI_MODE, 0);
configOut.screenWidthDp = XmlUtils.readIntAttribute(parser, XML_ATTR_SCREEN_WIDTH,
SCREEN_WIDTH_DP_UNDEFINED);
@@ -2141,6 +2313,9 @@
if (config.screenLayout != SCREENLAYOUT_UNDEFINED) {
XmlUtils.writeIntAttribute(xml, XML_ATTR_SCREEN_LAYOUT, config.screenLayout);
}
+ if (config.colorimetry != COLORIMETRY_UNDEFINED) {
+ XmlUtils.writeIntAttribute(xml, XML_ATTR_COLORIMETRY, config.colorimetry);
+ }
if (config.uiMode != 0) {
XmlUtils.writeIntAttribute(xml, XML_ATTR_UI_MODE, config.uiMode);
}
diff --git a/core/java/android/hardware/display/DisplayManagerInternal.java b/core/java/android/hardware/display/DisplayManagerInternal.java
index aea1258..3eb5844 100644
--- a/core/java/android/hardware/display/DisplayManagerInternal.java
+++ b/core/java/android/hardware/display/DisplayManagerInternal.java
@@ -19,6 +19,8 @@
import android.hardware.SensorManager;
import android.os.Handler;
import android.os.PowerManager;
+import android.util.IntArray;
+import android.util.SparseArray;
import android.view.Display;
import android.view.DisplayInfo;
@@ -147,6 +149,21 @@
public abstract void setDisplayOffsets(int displayId, int x, int y);
/**
+ * Provide a list of UIDs that are present on the display and are allowed to access it.
+ *
+ * @param displayAccessUIDs Mapping displayId -> int array of UIDs.
+ */
+ public abstract void setDisplayAccessUIDs(SparseArray<IntArray> displayAccessUIDs);
+
+ /**
+ * Check if specified UID's content is present on display and should be granted access to it.
+ *
+ * @param uid UID to be checked.
+ * @param displayId id of the display where presence of the content is checked.
+ * */
+ public abstract boolean isUidPresentOnDisplay(int uid, int displayId);
+
+ /**
* Describes the requested power state of the display.
*
* This object is intended to describe the general characteristics of the
diff --git a/core/java/android/net/NetworkKey.java b/core/java/android/net/NetworkKey.java
index ffbc401..1a128e0 100644
--- a/core/java/android/net/NetworkKey.java
+++ b/core/java/android/net/NetworkKey.java
@@ -17,6 +17,7 @@
package android.net;
import android.annotation.SystemApi;
+import android.net.wifi.ScanResult;
import android.os.Parcel;
import android.os.Parcelable;
@@ -52,6 +53,18 @@
public final WifiKey wifiKey;
/**
+ * Constructs a new NetworkKey for the given wifi {@link ScanResult}.
+ *
+ * @throws IllegalArgumentException if the given ScanResult is malformed
+ * @hide
+ */
+ public static NetworkKey createFromScanResult(ScanResult result) {
+ return new NetworkKey(
+ new WifiKey(
+ '"' + result.wifiSsid.toString() + '"', result.BSSID));
+ }
+
+ /**
* Construct a new {@link NetworkKey} for a Wi-Fi network.
* @param wifiKey the {@link WifiKey} identifying this Wi-Fi network.
*/
diff --git a/core/java/android/net/RecommendationRequest.java b/core/java/android/net/RecommendationRequest.java
index a227f18..b89a245 100644
--- a/core/java/android/net/RecommendationRequest.java
+++ b/core/java/android/net/RecommendationRequest.java
@@ -37,6 +37,8 @@
private final WifiConfiguration mDefaultConfig;
private WifiConfiguration mConnectedConfig;
private WifiConfiguration[] mConnectableConfigs;
+ private final int mLastSelectedNetworkId;
+ private final long mLastSelectedNetworkTimestamp;
/**
* Builder class for constructing {@link RecommendationRequest} instances.
@@ -48,17 +50,9 @@
private WifiConfiguration mDefaultConfig;
private WifiConfiguration mConnectedConfig;
private WifiConfiguration[] mConnectableConfigs;
+ private int mLastSelectedNetworkId;
+ private long mLastSelectedTimestamp;
- /**
- * @param scanResults the array of {@link ScanResult}s the recommendation must be
- * constrained to i.e. if a non-null wifi config recommendation is
- * returned then it must be able to connect to one of the networks in
- * the results list.
- *
- * If the array is {@code null} or empty then there is no constraint.
- *
- * @return this
- */
public Builder setScanResults(ScanResult[] scanResults) {
mScanResults = scanResults;
return this;
@@ -89,7 +83,20 @@
* @return this
*/
public Builder setConnectableConfigs(WifiConfiguration[] connectableConfigs) {
- mConnectableConfigs = connectableConfigs;
+ this.mConnectableConfigs = connectableConfigs;
+ return this;
+ }
+
+ /**
+ * @param networkId The {@link WifiConfiguration#networkId} of the last user selected
+ * network.
+ * @param timestamp The {@link android.os.SystemClock#elapsedRealtime()} when the user
+ * selected {@code networkId}.
+ * @return this
+ */
+ public Builder setLastSelectedNetwork(int networkId, long timestamp) {
+ this.mLastSelectedNetworkId = networkId;
+ this.mLastSelectedTimestamp = timestamp;
return this;
}
@@ -97,10 +104,8 @@
* @return a new {@link RecommendationRequest} instance
*/
public RecommendationRequest build() {
- return new RecommendationRequest(mScanResults,
- mDefaultConfig,
- mConnectedConfig,
- mConnectableConfigs);
+ return new RecommendationRequest(mScanResults, mDefaultConfig, mConnectedConfig,
+ mConnectableConfigs, mLastSelectedNetworkId, mLastSelectedTimestamp);
}
}
@@ -154,15 +159,35 @@
mConnectableConfigs = connectableConfigs;
}
+ /**
+ * @return The {@link WifiConfiguration#networkId} of the last user selected network.
+ * {@code 0} if not set.
+ */
+ public int getLastSelectedNetworkId() {
+ return mLastSelectedNetworkId;
+ }
+
+ /**
+ * @return The {@link android.os.SystemClock#elapsedRealtime()} when the user selected
+ * {@link #getLastSelectedNetworkId()}. {@code 0} if not set.
+ */
+ public long getLastSelectedNetworkTimestamp() {
+ return mLastSelectedNetworkTimestamp;
+ }
+
@VisibleForTesting
RecommendationRequest(ScanResult[] scanResults,
WifiConfiguration defaultWifiConfig,
WifiConfiguration connectedWifiConfig,
- WifiConfiguration[] connectableConfigs) {
+ WifiConfiguration[] connectableConfigs,
+ int lastSelectedNetworkId,
+ long lastSelectedNetworkTimestamp) {
mScanResults = scanResults;
mDefaultConfig = defaultWifiConfig;
mConnectedConfig = connectedWifiConfig;
mConnectableConfigs = connectableConfigs;
+ mLastSelectedNetworkId = lastSelectedNetworkId;
+ mLastSelectedNetworkTimestamp = lastSelectedNetworkTimestamp;
}
protected RecommendationRequest(Parcel in) {
@@ -190,6 +215,9 @@
} else {
mConnectableConfigs = null;
}
+
+ mLastSelectedNetworkId = in.readInt();
+ mLastSelectedNetworkTimestamp = in.readLong();
}
@Override
@@ -220,7 +248,8 @@
dest.writeInt(0);
}
-
+ dest.writeInt(mLastSelectedNetworkId);
+ dest.writeLong(mLastSelectedNetworkTimestamp);
}
public static final Creator<RecommendationRequest> CREATOR =
diff --git a/core/java/android/net/SntpClient.java b/core/java/android/net/SntpClient.java
index cea56b5..ffc735c 100644
--- a/core/java/android/net/SntpClient.java
+++ b/core/java/android/net/SntpClient.java
@@ -96,6 +96,7 @@
public boolean requestTime(InetAddress address, int port, int timeout) {
DatagramSocket socket = null;
+ final int oldTag = TrafficStats.getAndSetThreadStatsTag(TrafficStats.TAG_SYSTEM_NTP);
try {
socket = new DatagramSocket();
socket.setSoTimeout(timeout);
@@ -161,6 +162,7 @@
if (socket != null) {
socket.close();
}
+ TrafficStats.setThreadStatsTag(oldTag);
}
return true;
diff --git a/core/java/android/net/TrafficStats.java b/core/java/android/net/TrafficStats.java
index e7436be..fc66395 100644
--- a/core/java/android/net/TrafficStats.java
+++ b/core/java/android/net/TrafficStats.java
@@ -168,6 +168,24 @@
/**
* Set active tag to use when accounting {@link Socket} traffic originating
+ * from the current thread. Only one active tag per thread is supported.
+ * <p>
+ * Changes only take effect during subsequent calls to
+ * {@link #tagSocket(Socket)}.
+ * <p>
+ * Tags between {@code 0xFFFFFF00} and {@code 0xFFFFFFFF} are reserved and
+ * used internally by system services like {@link DownloadManager} when
+ * performing traffic on behalf of an application.
+ *
+ * @return the current tag for the calling thread, which can be used to
+ * restore any existing values after a nested operation is finished
+ */
+ public static int getAndSetThreadStatsTag(int tag) {
+ return NetworkManagementSocketTagger.setThreadSocketStatsTag(tag);
+ }
+
+ /**
+ * Set active tag to use when accounting {@link Socket} traffic originating
* from the current thread. The tag used internally is well-defined to
* distinguish all backup-related traffic.
*
diff --git a/core/java/android/os/FileUtils.java b/core/java/android/os/FileUtils.java
index 73c9462..7c015de 100644
--- a/core/java/android/os/FileUtils.java
+++ b/core/java/android/os/FileUtils.java
@@ -38,7 +38,6 @@
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
-import java.io.FileWriter;
import java.io.FilenameFilter;
import java.io.IOException;
import java.io.InputStream;
@@ -334,12 +333,7 @@
* @throws IOException
*/
public static void stringToFile(String filename, String string) throws IOException {
- FileWriter out = new FileWriter(filename);
- try {
- out.write(string);
- } finally {
- out.close();
- }
+ bytesToFile(filename, string.getBytes(StandardCharsets.UTF_8));
}
/**
diff --git a/core/java/android/os/GraphicsEnvironment.java b/core/java/android/os/GraphicsEnvironment.java
index 4b130ed1..20de370 100644
--- a/core/java/android/os/GraphicsEnvironment.java
+++ b/core/java/android/os/GraphicsEnvironment.java
@@ -19,6 +19,7 @@
import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
+import android.opengl.EGL14;
import android.os.SystemProperties;
import android.util.Log;
@@ -34,6 +35,23 @@
private static final String PROPERTY_GFX_DRIVER = "ro.gfx.driver.0";
public static void setupGraphicsEnvironment(Context context) {
+ chooseDriver(context);
+
+ // Now that we've figured out which driver to use for this process, load and initialize it.
+ // This can take multiple frame periods, and it would otherwise happen as part of the first
+ // frame, increasing first-frame latency. Starting it here, as a low-priority background
+ // thread, means that it's usually done long before we start drawing the first frame,
+ // without significantly disrupting other activity launch work.
+ Thread eglInitThread = new Thread(
+ () -> {
+ Thread.currentThread().setPriority(Thread.MIN_PRIORITY);
+ EGL14.eglGetDisplay(EGL14.EGL_DEFAULT_DISPLAY);
+ },
+ "EGL Init");
+ eglInitThread.start();
+ }
+
+ private static void chooseDriver(Context context) {
String driverPackageName = SystemProperties.get(PROPERTY_GFX_DRIVER);
if (driverPackageName == null || driverPackageName.isEmpty()) {
return;
diff --git a/core/java/android/os/Parcel.java b/core/java/android/os/Parcel.java
index e15f086..d6d5cb6 100644
--- a/core/java/android/os/Parcel.java
+++ b/core/java/android/os/Parcel.java
@@ -27,6 +27,8 @@
import android.util.SparseArray;
import android.util.SparseBooleanArray;
+import libcore.util.SneakyThrow;
+
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.FileDescriptor;
@@ -250,6 +252,7 @@
private static final int EX_NETWORK_MAIN_THREAD = -6;
private static final int EX_UNSUPPORTED_OPERATION = -7;
private static final int EX_SERVICE_SPECIFIC = -8;
+ private static final int EX_PARCELABLE = -9;
private static final int EX_HAS_REPLY_HEADER = -128; // special; see below
// EX_TRANSACTION_FAILED is used exclusively in native code.
// see libbinder's binder/Status.h
@@ -1597,7 +1600,12 @@
*/
public final void writeException(Exception e) {
int code = 0;
- if (e instanceof SecurityException) {
+ if (e instanceof Parcelable
+ && (e.getClass().getClassLoader() == Parcelable.class.getClassLoader())) {
+ // We only send Parcelable exceptions that are in the
+ // BootClassLoader to ensure that the receiver can unpack them
+ code = EX_PARCELABLE;
+ } else if (e instanceof SecurityException) {
code = EX_SECURITY;
} else if (e instanceof BadParcelableException) {
code = EX_BAD_PARCELABLE;
@@ -1623,8 +1631,20 @@
throw new RuntimeException(e);
}
writeString(e.getMessage());
- if (e instanceof ServiceSpecificException) {
- writeInt(((ServiceSpecificException)e).errorCode);
+ switch (code) {
+ case EX_SERVICE_SPECIFIC:
+ writeInt(((ServiceSpecificException) e).errorCode);
+ break;
+ case EX_PARCELABLE:
+ // Write parceled exception prefixed by length
+ final int sizePosition = dataPosition();
+ writeInt(0);
+ writeParcelable((Parcelable) e, Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
+ final int payloadPosition = dataPosition();
+ setDataPosition(sizePosition);
+ writeInt(payloadPosition - sizePosition);
+ setDataPosition(payloadPosition);
+ break;
}
}
@@ -1722,6 +1742,13 @@
*/
public final void readException(int code, String msg) {
switch (code) {
+ case EX_PARCELABLE:
+ if (readInt() > 0) {
+ SneakyThrow.sneakyThrow(
+ (Exception) readParcelable(Parcelable.class.getClassLoader()));
+ } else {
+ throw new RuntimeException(msg + " [missing Parcelable]");
+ }
case EX_SECURITY:
throw new SecurityException(msg);
case EX_BAD_PARCELABLE:
diff --git a/core/java/android/os/ParcelableException.java b/core/java/android/os/ParcelableException.java
new file mode 100644
index 0000000..d84d629
--- /dev/null
+++ b/core/java/android/os/ParcelableException.java
@@ -0,0 +1,88 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.os;
+
+import java.io.IOException;
+
+/**
+ * Wrapper class that offers to transport typical {@link Throwable} across a
+ * {@link Binder} call. This class is typically used to transport exceptions
+ * that cannot be modified to add {@link Parcelable} behavior, such as
+ * {@link IOException}.
+ * <ul>
+ * <li>The wrapped throwable must be defined as system class (that is, it must
+ * be in the same {@link ClassLoader} as {@link Parcelable}).
+ * <li>The wrapped throwable must support the
+ * {@link Throwable#Throwable(String)} constructor.
+ * <li>The receiver side must catch any thrown {@link ParcelableException} and
+ * call {@link #maybeRethrow(Class)} for all expected exception types.
+ * </ul>
+ *
+ * @hide
+ */
+public final class ParcelableException extends RuntimeException implements Parcelable {
+ public ParcelableException(Throwable t) {
+ super(t);
+ }
+
+ @SuppressWarnings("unchecked")
+ public <T extends Throwable> void maybeRethrow(Class<T> clazz) throws T {
+ if (clazz.isAssignableFrom(getCause().getClass())) {
+ throw (T) getCause();
+ }
+ }
+
+ /** {@hide} */
+ public static Throwable readFromParcel(Parcel in) {
+ final String name = in.readString();
+ final String msg = in.readString();
+ try {
+ final Class<?> clazz = Class.forName(name, true, Parcelable.class.getClassLoader());
+ return (Throwable) clazz.getConstructor(String.class).newInstance(msg);
+ } catch (ReflectiveOperationException e) {
+ throw new RuntimeException(name + ": " + msg);
+ }
+ }
+
+ /** {@hide} */
+ public static void writeToParcel(Parcel out, Throwable t) {
+ out.writeString(t.getClass().getName());
+ out.writeString(t.getMessage());
+ }
+
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ @Override
+ public void writeToParcel(Parcel dest, int flags) {
+ writeToParcel(dest, getCause());
+ }
+
+ public static final Creator<ParcelableException> CREATOR = new Creator<ParcelableException>() {
+ @Override
+ public ParcelableException createFromParcel(Parcel source) {
+ return new ParcelableException(readFromParcel(source));
+ }
+
+ @Override
+ public ParcelableException[] newArray(int size) {
+ return new ParcelableException[size];
+ }
+ };
+}
diff --git a/core/java/android/os/RecoverySystem.java b/core/java/android/os/RecoverySystem.java
index d48431a..a8822c5 100644
--- a/core/java/android/os/RecoverySystem.java
+++ b/core/java/android/os/RecoverySystem.java
@@ -650,6 +650,18 @@
bootCommand(context, shutdownArg, "--wipe_data", reasonArg, localeArg);
}
+ /** {@hide} */
+ public static void rebootPromptAndWipeUserData(Context context, String reason)
+ throws IOException {
+ String reasonArg = null;
+ if (!TextUtils.isEmpty(reason)) {
+ reasonArg = "--reason=" + sanitizeArg(reason);
+ }
+
+ final String localeArg = "--locale=" + Locale.getDefault().toString();
+ bootCommand(context, null, "--prompt_and_wipe_data", reasonArg, localeArg);
+ }
+
/**
* Reboot into the recovery system to wipe the /cache partition.
* @throws IOException if something goes wrong.
diff --git a/core/java/android/os/StrictMode.java b/core/java/android/os/StrictMode.java
index 0da4bd1..ae981b7 100644
--- a/core/java/android/os/StrictMode.java
+++ b/core/java/android/os/StrictMode.java
@@ -24,6 +24,7 @@
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
+import android.net.TrafficStats;
import android.net.Uri;
import android.util.ArrayMap;
import android.util.Log;
@@ -245,11 +246,17 @@
*/
private static final int DETECT_VM_CONTENT_URI_WITHOUT_PERMISSION = 0x80 << 8; // for VmPolicy
+ /**
+ * @hide
+ */
+ private static final int DETECT_VM_UNTAGGED_SOCKET = 0x80 << 24; // for VmPolicy
+
private static final int ALL_VM_DETECT_BITS =
DETECT_VM_CURSOR_LEAKS | DETECT_VM_CLOSABLE_LEAKS |
DETECT_VM_ACTIVITY_LEAKS | DETECT_VM_INSTANCE_LEAKS |
DETECT_VM_REGISTRATION_LEAKS | DETECT_VM_FILE_URI_EXPOSURE |
- DETECT_VM_CLEARTEXT_NETWORK | DETECT_VM_CONTENT_URI_WITHOUT_PERMISSION;
+ DETECT_VM_CLEARTEXT_NETWORK | DETECT_VM_CONTENT_URI_WITHOUT_PERMISSION |
+ DETECT_VM_UNTAGGED_SOCKET;
// Byte 3: Penalty
@@ -300,6 +307,8 @@
*/
public static final int PENALTY_DEATH_ON_FILE_URI_EXPOSURE = 0x04 << 24;
+ // CAUTION: we started stealing the top bits of Byte 4 for VM above
+
/**
* Mask of all the penalty bits valid for thread policies.
*/
@@ -715,7 +724,8 @@
public Builder detectAll() {
int flags = DETECT_VM_ACTIVITY_LEAKS | DETECT_VM_CURSOR_LEAKS
| DETECT_VM_CLOSABLE_LEAKS | DETECT_VM_REGISTRATION_LEAKS
- | DETECT_VM_FILE_URI_EXPOSURE | DETECT_VM_CONTENT_URI_WITHOUT_PERMISSION;
+ | DETECT_VM_FILE_URI_EXPOSURE | DETECT_VM_CONTENT_URI_WITHOUT_PERMISSION
+ | DETECT_VM_UNTAGGED_SOCKET;
// TODO: always add DETECT_VM_CLEARTEXT_NETWORK once we have facility
// for apps to mark sockets that should be ignored
@@ -820,6 +830,22 @@
}
/**
+ * Detect any sockets in the calling app which have not been tagged
+ * using {@link TrafficStats}. Tagging sockets can help you
+ * investigate network usage inside your app, such as a narrowing
+ * down heavy usage to a specific library or component.
+ * <p>
+ * This currently does not detect sockets created in native code.
+ *
+ * @see TrafficStats#setThreadStatsTag(int)
+ * @see TrafficStats#tagSocket(java.net.Socket)
+ * @see TrafficStats#tagDatagramSocket(java.net.DatagramSocket)
+ */
+ public Builder detectUntaggedSockets() {
+ return enable(DETECT_VM_UNTAGGED_SOCKET);
+ }
+
+ /**
* Crashes the whole process on violation. This penalty runs at the
* end of all enabled penalties so you'll still get your logging or
* other violations before the process dies.
@@ -1152,6 +1178,11 @@
if (IS_ENG_BUILD) {
policyBuilder.penaltyLog();
}
+ // All core system components need to tag their sockets to aid
+ // system health investigations
+ if (android.os.Process.myUid() < android.os.Process.FIRST_APPLICATION_UID) {
+ policyBuilder.detectUntaggedSockets();
+ }
setVmPolicy(policyBuilder.build());
setCloseGuardEnabled(vmClosableObjectLeaksEnabled());
}
@@ -1832,6 +1863,13 @@
/**
* @hide
*/
+ public static boolean vmUntaggedSocketEnabled() {
+ return (sVmPolicyMask & DETECT_VM_UNTAGGED_SOCKET) != 0;
+ }
+
+ /**
+ * @hide
+ */
public static void onSqliteObjectLeaked(String message, Throwable originStack) {
onVmPolicyViolation(message, originStack);
}
@@ -1911,6 +1949,14 @@
forceDeath);
}
+ /**
+ * @hide
+ */
+ public static void onUntaggedSocket() {
+ onVmPolicyViolation(null, new Throwable("Untagged socket detected; use"
+ + " TrafficStats.setThreadSocketTag() to track all network usage"));
+ }
+
// Map from VM violation fingerprint to uptime millis.
private static final HashMap<Integer, Long> sLastVmViolationTime = new HashMap<Integer, Long>();
diff --git a/core/java/android/os/storage/IStorageManager.aidl b/core/java/android/os/storage/IStorageManager.aidl
index 59394b2..b03c907 100644
--- a/core/java/android/os/storage/IStorageManager.aidl
+++ b/core/java/android/os/storage/IStorageManager.aidl
@@ -286,7 +286,6 @@
void prepareUserStorage(in String volumeUuid, int userId, int serialNumber, int flags) = 66;
void destroyUserStorage(in String volumeUuid, int userId, int flags) = 67;
boolean isConvertibleToFBE() = 68;
- ParcelFileDescriptor mountAppFuse(in String name) = 69;
void addUserKeyAuth(int userId, int serialNumber, in byte[] token, in byte[] secret) = 70;
void fixateNewestUserKeyAuth(int userId) = 71;
void fstrim(int flags) = 72;
diff --git a/core/java/android/os/storage/StorageManager.java b/core/java/android/os/storage/StorageManager.java
index 85df48f..c6ff476 100644
--- a/core/java/android/os/storage/StorageManager.java
+++ b/core/java/android/os/storage/StorageManager.java
@@ -1319,16 +1319,6 @@
}
/** {@hide} */
- public ParcelFileDescriptor mountAppFuse(String name) {
- try {
- return mStorageManager.mountAppFuse(name);
- } catch (RemoteException e) {
- throw e.rethrowFromSystemServer();
- }
- }
-
-
- /** {@hide} */
@VisibleForTesting
public @NonNull ParcelFileDescriptor openProxyFileDescriptor(
int mode, ProxyFileDescriptorCallback callback, ThreadFactory factory)
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java
index 371c0f3..5dcc96a 100755
--- a/core/java/android/provider/Settings.java
+++ b/core/java/android/provider/Settings.java
@@ -50,6 +50,7 @@
import android.net.Uri;
import android.net.wifi.WifiManager;
import android.os.BatteryManager;
+import android.os.Binder;
import android.os.Build.VERSION_CODES;
import android.os.Bundle;
import android.os.DropBoxManager;
@@ -286,6 +287,21 @@
"android.settings.SECURITY_SETTINGS";
/**
+ * Activity Action: Show settings to allow configuration of trusted external sources
+ * <p>
+ * In some cases, a matching Activity may not exist, so ensure you
+ * safeguard against this.
+ * <p>
+ * Input: Nothing.
+ * <p>
+ * Output: Nothing.
+ * @hide
+ */
+ @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
+ public static final String ACTION_MANAGE_EXTERNAL_SOURCES =
+ "android.settings.action.MANAGE_EXTERNAL_SOURCES";
+
+ /**
* Activity Action: Show trusted credentials settings, opening to the user tab,
* to allow management of installed credentials.
* <p>
@@ -1581,6 +1597,24 @@
// with a partial enable/disable state in multi-threaded situations.
private static final Object mLocationSettingsLock = new Object();
+ // Used in system server calling uid workaround in call()
+ private static boolean sInSystemServer = false;
+ private static final Object sInSystemServerLock = new Object();
+
+ /** @hide */
+ public static void setInSystemServer() {
+ synchronized (sInSystemServerLock) {
+ sInSystemServer = true;
+ }
+ }
+
+ /** @hide */
+ public static boolean isInSystemServer() {
+ synchronized (sInSystemServerLock) {
+ return sInSystemServer;
+ }
+ }
+
public static class SettingNotFoundException extends AndroidException {
public SettingNotFoundException(String msg) {
super(msg);
@@ -1789,7 +1823,23 @@
}
}
}
- Bundle b = cp.call(cr.getPackageName(), mCallGetCommand, name, args);
+ Bundle b;
+ // If we're in system server and in a binder transaction we need to clear the
+ // calling uid. This works around code in system server that did not call
+ // clearCallingIdentity, previously this wasn't needed because reading settings
+ // did not do permission checking but thats no longer the case.
+ // Long term this should be removed and callers should properly call
+ // clearCallingIdentity or use a ContentResolver from the caller as needed.
+ if (Settings.isInSystemServer() && Binder.getCallingUid() != Process.myUid()) {
+ final long token = Binder.clearCallingIdentity();
+ try {
+ b = cp.call(cr.getPackageName(), mCallGetCommand, name, args);
+ } finally {
+ Binder.restoreCallingIdentity(token);
+ }
+ } else {
+ b = cp.call(cr.getPackageName(), mCallGetCommand, name, args);
+ }
if (b != null) {
String value = b.getString(Settings.NameValueTable.VALUE);
// Don't update our cache for reads of other users' data
@@ -1849,7 +1899,19 @@
try {
Bundle queryArgs = ContentResolver.createSqlQueryBundle(
NAME_EQ_PLACEHOLDER, new String[]{name}, null);
- c = cp.query(cr.getPackageName(), mUri, SELECT_VALUE_PROJECTION, queryArgs, null);
+ // Same workaround as above.
+ if (Settings.isInSystemServer() && Binder.getCallingUid() != Process.myUid()) {
+ final long token = Binder.clearCallingIdentity();
+ try {
+ c = cp.query(cr.getPackageName(), mUri, SELECT_VALUE_PROJECTION, queryArgs,
+ null);
+ } finally {
+ Binder.restoreCallingIdentity(token);
+ }
+ } else {
+ c = cp.query(cr.getPackageName(), mUri, SELECT_VALUE_PROJECTION, queryArgs,
+ null);
+ }
if (c == null) {
Log.w(TAG, "Can't get key " + name + " from " + mUri);
return null;
@@ -4006,6 +4068,22 @@
}
/**
+ * System settings which can be accessed by ephemeral apps.
+ * @hide
+ */
+ public static final Set<String> EPHEMERAL_SETTINGS = new ArraySet<>();
+ static {
+ EPHEMERAL_SETTINGS.add(TEXT_AUTO_REPLACE);
+ EPHEMERAL_SETTINGS.add(TEXT_AUTO_CAPS);
+ EPHEMERAL_SETTINGS.add(TEXT_AUTO_PUNCTUATE);
+ EPHEMERAL_SETTINGS.add(TEXT_SHOW_PASSWORD);
+ EPHEMERAL_SETTINGS.add(DATE_FORMAT);
+ EPHEMERAL_SETTINGS.add(FONT_SCALE);
+ EPHEMERAL_SETTINGS.add(HAPTIC_FEEDBACK_ENABLED);
+ EPHEMERAL_SETTINGS.add(TIME_12_24);
+ }
+
+ /**
* When to use Wi-Fi calling
*
* @see android.telephony.TelephonyManager.WifiCallingChoices
@@ -6884,6 +6962,20 @@
}
/**
+ * Secure settings which can be accessed by ephemeral apps.
+ * @hide
+ */
+ public static final Set<String> EPHEMERAL_SETTINGS = new ArraySet<>();
+ static {
+ EPHEMERAL_SETTINGS.add(ENABLED_ACCESSIBILITY_SERVICES);
+ EPHEMERAL_SETTINGS.add(ACCESSIBILITY_SPEAK_PASSWORD);
+ EPHEMERAL_SETTINGS.add(ACCESSIBILITY_DISPLAY_INVERSION_ENABLED);
+
+ EPHEMERAL_SETTINGS.add(DEFAULT_INPUT_METHOD);
+ EPHEMERAL_SETTINGS.add(ENABLED_INPUT_METHODS);
+ }
+
+ /**
* Helper method for determining if a location provider is enabled.
*
* @param cr the content resolver to use
@@ -8039,6 +8131,16 @@
"network_recommendations_enabled";
/**
+ * Value to specify if the Wi-Fi Framework should defer to
+ * {@link com.android.server.NetworkScoreService} for evaluating saved open networks.
+ *
+ * Type: int (0 for false, 1 for true)
+ * @hide
+ */
+ @SystemApi
+ public static final String CURATE_SAVED_OPEN_NETWORKS = "curate_saved_open_networks";
+
+ /**
* The number of milliseconds the {@link com.android.server.NetworkScoreService}
* will give a recommendation request to complete before returning a default response.
*
@@ -9891,6 +9993,20 @@
* @hide
*/
public static final String CELL_ON = "cell_on";
+
+ /**
+ * Global settings which can be accessed by ephemeral apps.
+ * @hide
+ */
+ public static final Set<String> EPHEMERAL_SETTINGS = new ArraySet<>();
+ static {
+ EPHEMERAL_SETTINGS.add(WAIT_FOR_DEBUGGER);
+ EPHEMERAL_SETTINGS.add(DEVICE_PROVISIONED);
+ EPHEMERAL_SETTINGS.add(DEVELOPMENT_FORCE_RESIZABLE_ACTIVITIES);
+ EPHEMERAL_SETTINGS.add(DEVELOPMENT_FORCE_RTL);
+ EPHEMERAL_SETTINGS.add(EPHEMERAL_COOKIE_MAX_SIZE_BYTES);
+ }
+
}
/**
diff --git a/core/java/android/provider/VoicemailContract.java b/core/java/android/provider/VoicemailContract.java
index c3cbcdc..a4b6807 100644
--- a/core/java/android/provider/VoicemailContract.java
+++ b/core/java/android/provider/VoicemailContract.java
@@ -30,6 +30,7 @@
import android.telecom.PhoneAccount;
import android.telecom.PhoneAccountHandle;
import android.telecom.Voicemail;
+
import java.util.List;
/**
@@ -279,6 +280,48 @@
public static final String LAST_MODIFIED = "last_modified";
/**
+ * Flag to indicate the voicemail was backed up. The value will be 1 if backed up, 0 if
+ * not.
+ *
+ * <P>Type: INTEGER (boolean)</P>
+ *
+ * @hide
+ */
+ public static final String BACKED_UP = "backed_up";
+
+ /**
+ * Flag to indicate the voicemail was restored from a backup. The value will be 1 if
+ * restored, 0 if not.
+ *
+ * <P>Type: INTEGER (boolean)</P>
+ *
+ * @hide
+ */
+ public static final String RESTORED = "restored";
+
+ /**
+ * Flag to indicate the voicemail was marked as archived. Archived voicemail should not be
+ * deleted even if it no longer exist on the server. The value will be 1 if archived true, 0
+ * if not.
+ *
+ * <P>Type: INTEGER (boolean)</P>
+ *
+ * @hide
+ */
+ public static final String ARCHIVED = "archived";
+
+ /**
+ * Flag to indicate the voicemail is a OMTP voicemail handled by the {@link
+ * android.telephony.VisualVoicemailService}. The UI should only show OMTP voicemails from
+ * the current visual voicemail package.
+ *
+ * <P>Type: INTEGER (boolean)</P>
+ *
+ * @hide
+ */
+ public static final String IS_OMTP_VOICEMAIL = "is_omtp_voicmail";
+
+ /**
* A convenience method to build voicemail URI specific to a source package by appending
* {@link VoicemailContract#PARAM_KEY_SOURCE_PACKAGE} param to the base URI.
*/
diff --git a/core/java/android/security/keymaster/KeymasterDefs.java b/core/java/android/security/keymaster/KeymasterDefs.java
index eb3d031..22f1bed 100644
--- a/core/java/android/security/keymaster/KeymasterDefs.java
+++ b/core/java/android/security/keymaster/KeymasterDefs.java
@@ -132,6 +132,8 @@
public static final int KM_PURPOSE_DECRYPT = 1;
public static final int KM_PURPOSE_SIGN = 2;
public static final int KM_PURPOSE_VERIFY = 3;
+ public static final int KM_PURPOSE_DERIVE_KEY = 4;
+ public static final int KM_PURPOSE_WRAP_KEY = 5;
// Key formats.
public static final int KM_KEY_FORMAT_X509 = 0;
diff --git a/core/java/android/service/trust/ITrustAgentService.aidl b/core/java/android/service/trust/ITrustAgentService.aidl
index f07d0d0..22b4d09 100644
--- a/core/java/android/service/trust/ITrustAgentService.aidl
+++ b/core/java/android/service/trust/ITrustAgentService.aidl
@@ -24,6 +24,7 @@
*/
interface ITrustAgentService {
oneway void onUnlockAttempt(boolean successful);
+ oneway void onUnlockLockout(int timeoutMs);
oneway void onTrustTimeout();
oneway void onDeviceLocked();
oneway void onDeviceUnlocked();
diff --git a/core/java/android/service/trust/TrustAgentService.java b/core/java/android/service/trust/TrustAgentService.java
index 9d7ffad..0d5177d 100644
--- a/core/java/android/service/trust/TrustAgentService.java
+++ b/core/java/android/service/trust/TrustAgentService.java
@@ -123,6 +123,7 @@
private static final int MSG_TRUST_TIMEOUT = 3;
private static final int MSG_DEVICE_LOCKED = 4;
private static final int MSG_DEVICE_UNLOCKED = 5;
+ private static final int MSG_UNLOCK_LOCKOUT = 6;
/**
* Class containing raw data for a given configuration request.
@@ -151,6 +152,9 @@
case MSG_UNLOCK_ATTEMPT:
onUnlockAttempt(msg.arg1 != 0);
break;
+ case MSG_UNLOCK_LOCKOUT:
+ onDeviceUnlockLockout(msg.arg1);
+ break;
case MSG_CONFIGURE:
ConfigurationData data = (ConfigurationData) msg.obj;
boolean result = onConfigure(data.options);
@@ -226,6 +230,21 @@
public void onDeviceUnlocked() {
}
+ /**
+ * Called when the device enters a temporary unlock lockout.
+ *
+ * <p>This occurs when the user has consecutively failed to unlock the device too many times,
+ * and must wait until a timeout has passed to perform another attempt. The user may then only
+ * use strong authentication mechanisms (PIN, pattern or password) to unlock the device.
+ * Calls to {@link #grantTrust(CharSequence, long, int)} will be ignored until the user has
+ * unlocked the device and {@link #onDeviceUnlocked()} is called.
+ *
+ * @param timeoutMs The amount of time, in milliseconds, that needs to elapse before the user
+ * can attempt to unlock the device again.
+ */
+ public void onDeviceUnlockLockout(long timeoutMs) {
+ }
+
private void onError(String msg) {
Slog.v(TAG, "Remote exception while " + msg);
}
@@ -366,6 +385,11 @@
mHandler.obtainMessage(MSG_UNLOCK_ATTEMPT, successful ? 1 : 0, 0).sendToTarget();
}
+ @Override
+ public void onUnlockLockout(int timeoutMs) {
+ mHandler.obtainMessage(MSG_UNLOCK_LOCKOUT, timeoutMs, 0).sendToTarget();
+ }
+
@Override /* Binder API */
public void onTrustTimeout() {
mHandler.sendEmptyMessage(MSG_TRUST_TIMEOUT);
diff --git a/core/java/android/util/ExceptionUtils.java b/core/java/android/util/ExceptionUtils.java
index f5d515d..da0b609 100644
--- a/core/java/android/util/ExceptionUtils.java
+++ b/core/java/android/util/ExceptionUtils.java
@@ -16,6 +16,8 @@
package android.util;
+import android.os.ParcelableException;
+
import java.io.IOException;
/**
@@ -24,19 +26,13 @@
* @hide
*/
public class ExceptionUtils {
- // TODO: longer term these should be replaced with first-class
- // Parcel.read/writeException() and AIDL support, but for now do this using
- // a nasty hack.
-
- private static final String PREFIX_IO = "\u2603";
-
public static RuntimeException wrap(IOException e) {
- throw new IllegalStateException(PREFIX_IO + e.getMessage());
+ throw new ParcelableException(e);
}
public static void maybeUnwrapIOException(RuntimeException e) throws IOException {
- if ((e instanceof IllegalStateException) && e.getMessage().startsWith(PREFIX_IO)) {
- throw new IOException(e.getMessage().substring(PREFIX_IO.length()));
+ if (e instanceof ParcelableException) {
+ ((ParcelableException) e).maybeRethrow(IOException.class);
}
}
diff --git a/core/java/android/view/MenuInflater.java b/core/java/android/view/MenuInflater.java
index f3f3d40..7a5c65f 100644
--- a/core/java/android/view/MenuInflater.java
+++ b/core/java/android/view/MenuInflater.java
@@ -335,7 +335,7 @@
private ActionProvider itemActionProvider;
private CharSequence itemContentDescription;
- private CharSequence itemTooltip;
+ private CharSequence itemTooltipText;
private static final int defaultGroupId = NO_ID;
private static final int defaultItemId = NO_ID;
@@ -429,7 +429,7 @@
itemContentDescription =
a.getText(com.android.internal.R.styleable.MenuItem_contentDescription);
- itemTooltip = a.getText(com.android.internal.R.styleable.MenuItem_tooltip);
+ itemTooltipText = a.getText(com.android.internal.R.styleable.MenuItem_tooltipText);
a.recycle();
@@ -495,7 +495,7 @@
}
item.setContentDescription(itemContentDescription);
- item.setTooltip(itemTooltip);
+ item.setTooltipText(itemTooltipText);
}
public MenuItem addItem() {
diff --git a/core/java/android/view/MenuItem.java b/core/java/android/view/MenuItem.java
index 5ced765..3f8d089 100644
--- a/core/java/android/view/MenuItem.java
+++ b/core/java/android/view/MenuItem.java
@@ -621,9 +621,9 @@
/**
* Change the tooltip text associated with this menu item.
*
- * @param tooltip The new tooltip text.
+ * @param tooltipText The new tooltip text.
*/
- default MenuItem setTooltip(CharSequence tooltip) {
+ default MenuItem setTooltipText(CharSequence tooltipText) {
return this;
}
@@ -632,7 +632,7 @@
*
* @return The tooltip text.
*/
- default CharSequence getTooltip() {
+ default CharSequence getTooltipText() {
return null;
}
}
diff --git a/core/java/android/view/ThreadedRenderer.java b/core/java/android/view/ThreadedRenderer.java
index f3ebcb4..b0826a8 100644
--- a/core/java/android/view/ThreadedRenderer.java
+++ b/core/java/android/view/ThreadedRenderer.java
@@ -360,6 +360,7 @@
void destroy() {
mInitialized = false;
updateEnabledState(null);
+ mRootNode.discardDisplayList();
nDestroy(mNativeProxy, mRootNode.mNativeRenderNode);
}
@@ -491,20 +492,12 @@
*/
void destroyHardwareResources(View view) {
destroyResources(view);
+ mRootNode.discardDisplayList();
nDestroyHardwareResources(mNativeProxy);
}
private static void destroyResources(View view) {
view.destroyHardwareResources();
-
- if (view instanceof ViewGroup) {
- ViewGroup group = (ViewGroup) view;
-
- int count = group.getChildCount();
- for (int i = 0; i < count; i++) {
- destroyResources(group.getChildAt(i));
- }
- }
}
/**
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java
index 37dfdb9..26e311c 100644
--- a/core/java/android/view/View.java
+++ b/core/java/android/view/View.java
@@ -3718,7 +3718,7 @@
* Text to be displayed in a tooltip popup.
*/
@Nullable
- CharSequence mTooltip;
+ CharSequence mTooltipText;
/**
* View-relative position of the tooltip anchor point.
@@ -4761,8 +4761,8 @@
forceHasOverlappingRendering(a.getBoolean(attr, true));
}
break;
- case R.styleable.View_tooltip:
- setTooltip(a.getText(attr));
+ case R.styleable.View_tooltipText:
+ setTooltipText(a.getText(attr));
break;
case R.styleable.View_keyboardNavigationCluster:
if (a.peekValue(attr) != null) {
@@ -16641,6 +16641,12 @@
// safe to free its copy of the display list as it knows that we will
// push an updated DisplayList if we try to draw again
resetDisplayList();
+ if (mOverlay != null) {
+ mOverlay.getOverlayView().destroyHardwareResources();
+ }
+ if (mGhostView != null) {
+ mGhostView.destroyHardwareResources();
+ }
}
/**
@@ -16811,11 +16817,9 @@
}
private void resetDisplayList() {
- if (mRenderNode.isValid()) {
- mRenderNode.discardDisplayList();
- }
+ mRenderNode.discardDisplayList();
- if (mBackgroundRenderNode != null && mBackgroundRenderNode.isValid()) {
+ if (mBackgroundRenderNode != null) {
mBackgroundRenderNode.discardDisplayList();
}
}
@@ -24638,10 +24642,10 @@
* menu). </li>
* <li>On hover, after a brief delay since the pointer has stopped moving </li>
*
- * @param tooltip the tooltip text, or null if no tooltip is required
+ * @param tooltipText the tooltip text, or null if no tooltip is required
*/
- public final void setTooltip(@Nullable CharSequence tooltip) {
- if (TextUtils.isEmpty(tooltip)) {
+ public final void setTooltipText(@Nullable CharSequence tooltipText) {
+ if (TextUtils.isEmpty(tooltipText)) {
setFlags(0, TOOLTIP);
hideTooltip();
mTooltipInfo = null;
@@ -24652,21 +24656,42 @@
mTooltipInfo.mShowTooltipRunnable = this::showHoverTooltip;
mTooltipInfo.mHideTooltipRunnable = this::hideTooltip;
}
- mTooltipInfo.mTooltip = tooltip;
+ mTooltipInfo.mTooltipText = tooltipText;
if (mTooltipInfo.mTooltipPopup != null && mTooltipInfo.mTooltipPopup.isShowing()) {
- mTooltipInfo.mTooltipPopup.updateContent(mTooltipInfo.mTooltip);
+ mTooltipInfo.mTooltipPopup.updateContent(mTooltipInfo.mTooltipText);
}
}
}
/**
+ * To be removed once the support library has stopped using it.
+ *
+ * @deprecated use {@link #setTooltipText} instead
+ */
+ @Deprecated
+ public final void setTooltip(@Nullable CharSequence tooltipText) {
+ setTooltipText(tooltipText);
+ }
+
+ /**
* Returns the view's tooltip text.
*
* @return the tooltip text
*/
@Nullable
+ public final CharSequence getTooltipText() {
+ return mTooltipInfo != null ? mTooltipInfo.mTooltipText : null;
+ }
+
+ /**
+ * To be removed once the support library has stopped using it.
+ *
+ * @deprecated use {@link #getTooltipText} instead
+ */
+ @Deprecated
+ @Nullable
public final CharSequence getTooltip() {
- return mTooltipInfo != null ? mTooltipInfo.mTooltip : null;
+ return getTooltipText();
}
private boolean showTooltip(int x, int y, boolean fromLongClick) {
@@ -24676,7 +24701,7 @@
if ((mViewFlags & ENABLED_MASK) != ENABLED) {
return false;
}
- final CharSequence tooltipText = getTooltip();
+ final CharSequence tooltipText = getTooltipText();
if (TextUtils.isEmpty(tooltipText)) {
return false;
}
diff --git a/core/java/android/view/ViewGroup.java b/core/java/android/view/ViewGroup.java
index a479bb3..d252d75 100644
--- a/core/java/android/view/ViewGroup.java
+++ b/core/java/android/view/ViewGroup.java
@@ -3450,6 +3450,16 @@
super.dispatchDetachedFromWindow();
}
+ /** @hide */
+ @Override
+ protected void destroyHardwareResources() {
+ super.destroyHardwareResources();
+ int count = getChildCount();
+ for (int i = 0; i < count; i++) {
+ getChildAt(i).destroyHardwareResources();
+ }
+ }
+
/**
* @hide
*/
diff --git a/core/java/android/view/WindowManagerPolicy.java b/core/java/android/view/WindowManagerPolicy.java
index 3748134..bc4ae6d 100644
--- a/core/java/android/view/WindowManagerPolicy.java
+++ b/core/java/android/view/WindowManagerPolicy.java
@@ -750,13 +750,14 @@
* @param windowFlags Window layout flags.
* @param overrideConfig override configuration to consider when generating
* context to for resources.
+ * @param displayId Id of the display to show the splash screen at.
*
* @return The starting surface.
*
*/
public StartingSurface addSplashScreen(IBinder appToken, String packageName, int theme,
CompatibilityInfo compatInfo, CharSequence nonLocalizedLabel, int labelRes, int icon,
- int logo, int windowFlags, Configuration overrideConfig);
+ int logo, int windowFlags, Configuration overrideConfig, int displayId);
/**
* Prepare for a window being added to the window manager. You can throw an
diff --git a/core/java/android/view/accessibility/AccessibilityNodeInfo.java b/core/java/android/view/accessibility/AccessibilityNodeInfo.java
index f0bf7e5..56d45b0 100644
--- a/core/java/android/view/accessibility/AccessibilityNodeInfo.java
+++ b/core/java/android/view/accessibility/AccessibilityNodeInfo.java
@@ -3998,8 +3998,10 @@
* Obtains a pooled instance.
*
* @param type The type of the range.
- * @param min The min value.
- * @param max The max value.
+ * @param min The minimum value. Use {@code Float.NEGATIVE_INFINITY} if the range has no
+ * minimum.
+ * @param max The maximum value. Use {@code Float.POSITIVE_INFINITY} if the range has no
+ * maximum.
* @param current The current value.
*/
public static RangeInfo obtain(int type, float min, float max, float current) {
@@ -4019,8 +4021,10 @@
* Creates a new range.
*
* @param type The type of the range.
- * @param min The min value.
- * @param max The max value.
+ * @param min The minimum value. Use {@code Float.NEGATIVE_INFINITY} if the range has no
+ * minimum.
+ * @param max The maximum value. Use {@code Float.POSITIVE_INFINITY} if the range has no
+ * maximum.
* @param current The current value.
*/
private RangeInfo(int type, float min, float max, float current) {
@@ -4044,18 +4048,18 @@
}
/**
- * Gets the min value.
+ * Gets the minimum value.
*
- * @return The min value.
+ * @return The minimum value, or {@code Float.NEGATIVE_INFINITY} if no minimum exists.
*/
public float getMin() {
return mMin;
}
/**
- * Gets the max value.
+ * Gets the maximum value.
*
- * @return The max value.
+ * @return The maximum value, or {@code Float.POSITIVE_INFINITY} if no maximum exists.
*/
public float getMax() {
return mMax;
diff --git a/core/java/android/widget/EditText.java b/core/java/android/widget/EditText.java
index af5c842..faf0379 100644
--- a/core/java/android/widget/EditText.java
+++ b/core/java/android/widget/EditText.java
@@ -42,6 +42,8 @@
* <p>See the <a href="{@docRoot}guide/topics/ui/controls/text.html">Text Fields</a>
* guide.</p>
* <p>
+ * This widget does not support auto-sizing text.
+ * <p>
* <b>XML attributes</b>
* <p>
* See {@link android.R.styleable#EditText EditText Attributes},
diff --git a/core/java/android/widget/PopupMenu.java b/core/java/android/widget/PopupMenu.java
index eb27533..59bbc3b 100644
--- a/core/java/android/widget/PopupMenu.java
+++ b/core/java/android/widget/PopupMenu.java
@@ -17,6 +17,7 @@
package android.widget;
import android.annotation.MenuRes;
+import android.annotation.TestApi;
import android.content.Context;
import android.view.Gravity;
import android.view.Menu;
@@ -281,4 +282,19 @@
*/
void onDismiss(PopupMenu menu);
}
+
+ /**
+ * Returns the {@link ListView} representing the list of menu items in the currently showing
+ * menu.
+ *
+ * @return The view representing the list of menu items.
+ * @hide
+ */
+ @TestApi
+ public ListView getMenuListView() {
+ if (!mPopup.isShowing()) {
+ return null;
+ }
+ return mPopup.getPopup().getListView();
+ }
}
diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java
index b6693c7..b1fc67e 100644
--- a/core/java/android/widget/TextView.java
+++ b/core/java/android/widget/TextView.java
@@ -22,6 +22,7 @@
import android.annotation.ColorInt;
import android.annotation.DrawableRes;
import android.annotation.FloatRange;
+import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.Size;
@@ -158,6 +159,8 @@
import org.xmlpull.v1.XmlPullParserException;
import java.io.IOException;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.Locale;
@@ -252,6 +255,10 @@
* @attr ref android.R.styleable#TextView_fontFeatureSettings
* @attr ref android.R.styleable#TextView_breakStrategy
* @attr ref android.R.styleable#TextView_hyphenationFrequency
+ * @attr ref android.R.styleable#TextView_autoSizeText
+ * @attr ref android.R.styleable#TextView_autoSizeMinTextSize
+ * @attr ref android.R.styleable#TextView_autoSizeMaxTextSize
+ * @attr ref android.R.styleable#TextView_autoSizeStepGranularity
*/
@RemoteView
public class TextView extends View implements ViewTreeObserver.OnPreDrawListener {
@@ -670,17 +677,31 @@
*/
private int mDeviceProvisionedState = DEVICE_PROVISIONED_UNKNOWN;
- // The TextView does not auto-size text.
- public static final int AUTO_SIZE_TYPE_NONE = 0;
+ // The TextView does not auto-size text (default).
+ public static final int AUTO_SIZE_TEXT_TYPE_NONE = 0;
// The TextView performs uniform horizontal and vertical text size scaling to fit within the
// container.
- public static final int AUTO_SIZE_TYPE_XY = 1;
- // Auto-size type.
- private int mAutoSizeType = AUTO_SIZE_TYPE_NONE;
- // Specify if auto-size is needed.
- private boolean mNeedsAutoSize = false;
+ public static final int AUTO_SIZE_TEXT_TYPE_XY = 1;
+ /** @hide */
+ @IntDef({AUTO_SIZE_TEXT_TYPE_NONE, AUTO_SIZE_TEXT_TYPE_XY})
+ @Retention(RetentionPolicy.SOURCE)
+ public @interface AutoSizeTextType {}
+ // Default minimum size for auto-sizing text in scaled pixels. {@see #setAutoSizeMinTextSize}.
+ private static final int DEFAULT_AUTO_SIZE_MIN_TEXT_SIZE_IN_SP = 12;
+ // Default maximum size for auto-sizing text in scaled pixels. {@see #setAutoSizeMaxTextSize}.
+ private static final int DEFAULT_AUTO_SIZE_MAX_TEXT_SIZE_IN_SP = 112;
// Default value for the step size in pixels.
private static final int DEFAULT_AUTO_SIZE_GRANULARITY_IN_PX = 1;
+ // Auto-size text type.
+ private int mAutoSizeTextType = AUTO_SIZE_TEXT_TYPE_NONE;
+ // Specify if auto-size text is needed.
+ private boolean mNeedsAutoSizeText = false;
+ // Step size for auto-sizing in pixels.
+ private int mAutoSizeStepGranularityInPx = 0;
+ // Minimum text size for auto-sizing in pixels.
+ private int mAutoSizeMinTextSizeInPx = 0;
+ // Maximum text size for auto-sizing in pixels.
+ private int mAutoSizeMaxTextSizeInPx = 0;
// Contains the sorted set of desired text sizes in pixels to pick from when auto-sizing text.
private int[] mAutoSizeTextSizesInPx;
@@ -887,13 +908,6 @@
CharSequence hint = null;
boolean password = false;
int inputType = EditorInfo.TYPE_NULL;
- int autoSizeStepGranularityInPx = DEFAULT_AUTO_SIZE_GRANULARITY_IN_PX;
- int autoSizeMinTextSize = (int) TypedValue.applyDimension(
- TypedValue.COMPLEX_UNIT_SP, 12, getResources().getDisplayMetrics());
- int autoSizeMaxTextSize = (int) TypedValue.applyDimension(
- TypedValue.COMPLEX_UNIT_SP, 112, getResources().getDisplayMetrics());
-
-
a = theme.obtainStyledAttributes(
attrs, com.android.internal.R.styleable.TextView, defStyleAttr, defStyleRes);
@@ -1249,20 +1263,19 @@
break;
case com.android.internal.R.styleable.TextView_autoSizeText:
- mAutoSizeType = a.getInt(attr, AUTO_SIZE_TYPE_NONE);
+ mAutoSizeTextType = a.getInt(attr, AUTO_SIZE_TEXT_TYPE_NONE);
break;
case com.android.internal.R.styleable.TextView_autoSizeStepGranularity:
- autoSizeStepGranularityInPx = a.getDimensionPixelSize(
- attr, DEFAULT_AUTO_SIZE_GRANULARITY_IN_PX);
+ mAutoSizeStepGranularityInPx = a.getDimensionPixelSize(attr, 0);
break;
case com.android.internal.R.styleable.TextView_autoSizeMinTextSize:
- autoSizeMinTextSize = a.getDimensionPixelSize(attr, autoSizeMinTextSize);
+ mAutoSizeMinTextSizeInPx = a.getDimensionPixelSize(attr, 0);
break;
case com.android.internal.R.styleable.TextView_autoSizeMaxTextSize:
- autoSizeMaxTextSize = a.getDimensionPixelSize(attr, autoSizeMaxTextSize);
+ mAutoSizeMaxTextSizeInPx = a.getDimensionPixelSize(attr, 0);
break;
}
}
@@ -1542,39 +1555,204 @@
setImportantForAccessibility(IMPORTANT_FOR_ACCESSIBILITY_YES);
}
- // Setup auto-size.
+ setupAutoSizeTextXY();
+ }
+
+ /**
+ * Specify whether this widget should automatically scale the text to try to perfectly fit
+ * within the layout bounds by taking into account the auto-size configuration.
+ *
+ * @param autoSizeTextType the type of auto-size. Must be one of
+ * {@link TextView#AUTO_SIZE_TEXT_TYPE_NONE} or
+ * {@link TextView#AUTO_SIZE_TEXT_TYPE_XY}
+ *
+ * @attr ref android.R.styleable#TextView_autoSizeText
+ *
+ * @see #getAutoSizeTextType()
+ */
+ public void setAutoSizeTextType(@AutoSizeTextType int autoSizeTextType) {
if (supportsAutoSizeText()) {
- switch (mAutoSizeType) {
- case AUTO_SIZE_TYPE_NONE:
- // Nothing to do.
+ switch (autoSizeTextType) {
+ case AUTO_SIZE_TEXT_TYPE_NONE:
+ if (mAutoSizeTextType != AUTO_SIZE_TEXT_TYPE_NONE) {
+ // Clear all auto-size configuration
+ mAutoSizeTextType = AUTO_SIZE_TEXT_TYPE_NONE;
+ mAutoSizeMinTextSizeInPx = 0;
+ mAutoSizeMaxTextSizeInPx = 0;
+ mAutoSizeStepGranularityInPx = 0;
+ mAutoSizeTextSizesInPx = null;
+ mNeedsAutoSizeText = false;
+ }
break;
- case AUTO_SIZE_TYPE_XY:
- if (autoSizeMaxTextSize <= autoSizeMinTextSize) {
- throw new IllegalStateException("Maximum text size is less then minimum "
- + "text size");
+ case AUTO_SIZE_TEXT_TYPE_XY:
+ if (mAutoSizeTextType != AUTO_SIZE_TEXT_TYPE_XY) {
+ mAutoSizeTextType = AUTO_SIZE_TEXT_TYPE_XY;
+ setupAutoSizeTextXY();
}
-
- if (autoSizeStepGranularityInPx <= 0) {
- throw new IllegalStateException("Unexpected zero or negative value for auto"
- + " size step granularity in pixels");
- }
-
- final int autoSizeValuesLength = (autoSizeMaxTextSize - autoSizeMinTextSize)
- / autoSizeStepGranularityInPx;
- mAutoSizeTextSizesInPx = new int[autoSizeValuesLength];
- int sizeToAdd = autoSizeMinTextSize;
- for (int i = 0; i < autoSizeValuesLength; i++) {
- mAutoSizeTextSizesInPx[i] = sizeToAdd;
- sizeToAdd += autoSizeStepGranularityInPx;
- }
-
- mNeedsAutoSize = true;
break;
default:
throw new IllegalArgumentException(
- "Unknown autoSizeText type: " + mAutoSizeType);
+ "Unknown auto-size text type: " + autoSizeTextType);
+ }
+ }
+ }
+
+ /**
+ * Returns the type of auto-size set for this widget.
+ *
+ * @return an {@code int} corresponding to one of the auto-size types:
+ * {@link TextView#AUTO_SIZE_TEXT_TYPE_NONE} or
+ * {@link TextView#AUTO_SIZE_TEXT_TYPE_XY}
+ *
+ * @attr ref android.R.styleable#TextView_autoSizeText
+ *
+ * @see #setAutoSizeTextType(int)
+ */
+ @AutoSizeTextType
+ public int getAutoSizeTextType() {
+ return mAutoSizeTextType;
+ }
+
+ /**
+ * Sets the auto-size step granularity. It is used in conjunction with auto-size minimum
+ * and maximum text size in order to build the set of text sizes the system uses to choose
+ * from when auto-sizing.
+ *
+ * @param unit the desired dimension unit. See {@link TypedValue} for the possible
+ * dimension units
+ * @param size the desired size in the given units
+ *
+ * @attr ref android.R.styleable#TextView_autoSizeStepGranularity
+ *
+ * @see #getAutoSizeStepGranularity()
+ * @see #setAutoSizeMinTextSize(int, float)
+ * @see #setAutoSizeMaxTextSize(int, float)
+ */
+ public void setAutoSizeStepGranularity(int unit, float size) {
+ if (supportsAutoSizeText()) {
+ mAutoSizeStepGranularityInPx = (int) TypedValue.applyDimension(
+ unit, size, getResources().getDisplayMetrics());
+ setupAutoSizeTextXY();
+ }
+ }
+
+ /**
+ * @return the current auto-size step granularity in pixels.
+ *
+ * @see #setAutoSizeStepGranularity(int, float)
+ */
+ public int getAutoSizeStepGranularity() {
+ return mAutoSizeStepGranularityInPx;
+ }
+
+ /**
+ * Sets the minimum text size to be used in conjunction with auto-size maximum text size and
+ * auto-size step granularity in order to build the set of text sizes the system uses to choose
+ * from when auto-sizing.
+ *
+ * @param unit the desired dimension unit. See {@link TypedValue} for the possible
+ * dimension units
+ * @param size the desired size in the given units
+ *
+ * @attr ref android.R.styleable#TextView_autoSizeMinTextSize
+ *
+ * @see #getAutoSizeMinTextSize()
+ * @see #setAutoSizeMaxTextSize(int, float)
+ * @see #setAutoSizeStepGranularity(int, float)
+ */
+ public void setAutoSizeMinTextSize(int unit, float size) {
+ if (supportsAutoSizeText()) {
+ mAutoSizeMinTextSizeInPx = (int) TypedValue.applyDimension(
+ unit, size, getResources().getDisplayMetrics());
+ setupAutoSizeTextXY();
+ }
+ }
+
+ /**
+ * @return the current auto-size minimum text size in pixels (the default is 12sp). Note that
+ * if auto-size has not been configured this function returns {@code 0}.
+ *
+ * @see #setAutoSizeMinTextSize(int, float)
+ */
+ public int getAutoSizeMinTextSize() {
+ return mAutoSizeMinTextSizeInPx;
+ }
+
+ /**
+ * Sets the maximum text size to be used in conjunction with auto-size minimum text size and
+ * auto-size step granularity in order to build the set of text sizes the system uses to choose
+ * from when auto-sizing.
+ *
+ * @param unit the desired dimension unit. See {@link TypedValue} for the possible
+ * dimension units
+ * @param size the desired size in the given units
+ *
+ * @attr ref android.R.styleable#TextView_autoSizeMaxTextSize
+ *
+ * @see #getAutoSizeMaxTextSize()
+ * @see #setAutoSizeMinTextSize(int, float)
+ * @see #setAutoSizeStepGranularity(int, float)
+ */
+ public void setAutoSizeMaxTextSize(int unit, float size) {
+ if (supportsAutoSizeText()) {
+ mAutoSizeMaxTextSizeInPx = (int) TypedValue.applyDimension(
+ unit, size, getResources().getDisplayMetrics());
+ setupAutoSizeTextXY();
+ }
+ }
+
+ /**
+ * @return the current auto-size maximum text size in pixels (the default is 112sp). Note that
+ * if auto-size has not been configured this function returns {@code 0}.
+ *
+ * @see #setAutoSizeMaxTextSize(int, float)
+ */
+ public int getAutoSizeMaxTextSize() {
+ return mAutoSizeMaxTextSizeInPx;
+ }
+
+ private void setupAutoSizeTextXY() {
+ if (supportsAutoSizeText() && mAutoSizeTextType == AUTO_SIZE_TEXT_TYPE_XY) {
+ // Set valid defaults.
+ if (mAutoSizeMinTextSizeInPx <= 0) {
+ mAutoSizeMinTextSizeInPx = (int) TypedValue.applyDimension(
+ TypedValue.COMPLEX_UNIT_SP,
+ DEFAULT_AUTO_SIZE_MIN_TEXT_SIZE_IN_SP,
+ getResources().getDisplayMetrics());
}
+ if (mAutoSizeMaxTextSizeInPx <= 0) {
+ mAutoSizeMaxTextSizeInPx = (int) TypedValue.applyDimension(
+ TypedValue.COMPLEX_UNIT_SP,
+ DEFAULT_AUTO_SIZE_MAX_TEXT_SIZE_IN_SP,
+ getResources().getDisplayMetrics());
+ }
+
+ if (mAutoSizeStepGranularityInPx <= 0) {
+ mAutoSizeStepGranularityInPx = DEFAULT_AUTO_SIZE_GRANULARITY_IN_PX;
+ }
+
+ // Validate.
+ if (mAutoSizeMaxTextSizeInPx <= mAutoSizeMinTextSizeInPx) {
+ throw new IllegalStateException("Maximum auto-size text size ("
+ + mAutoSizeMaxTextSizeInPx + "px) is less or equal to minimum auto-size "
+ + "text size (" + mAutoSizeMinTextSizeInPx + "px)");
+ }
+
+ // Calculate sizes to choose from based on the current auto-size configuration.
+ final int autoSizeValuesLength = (int) Math.ceil(
+ (mAutoSizeMaxTextSizeInPx - mAutoSizeMinTextSizeInPx)
+ / mAutoSizeStepGranularityInPx);
+
+ mAutoSizeTextSizesInPx = new int[autoSizeValuesLength];
+ int sizeToAdd = mAutoSizeMinTextSizeInPx;
+ for (int i = 0; i < autoSizeValuesLength; i++) {
+ mAutoSizeTextSizesInPx[i] = sizeToAdd;
+ sizeToAdd += mAutoSizeStepGranularityInPx;
+ }
+
+ mNeedsAutoSizeText = true;
+ autoSizeText();
}
}
@@ -3030,9 +3208,6 @@
/**
* @return the size (in pixels) of the default text size in this TextView.
- *
- * <p>Note: if this TextView has mAutoSizeType set to {@link TextView#AUTO_SIZE_TYPE_XY} than
- * this function returns the maximum text size for auto-sizing.
*/
@ViewDebug.ExportedProperty(category = "text")
public float getTextSize() {
@@ -3077,7 +3252,7 @@
}
/**
- * Set the default text size to a given unit and value. See {@link
+ * Set the default text size to a given unit and value. See {@link
* TypedValue} for the possible dimension units.
*
* <p>Note: if this TextView has the auto-size feature enabled than this function is no-op.
@@ -3113,7 +3288,7 @@
if (mLayout != null) {
// Do not auto-size right after setting the text size.
- mNeedsAutoSize = false;
+ mNeedsAutoSizeText = false;
nullLayouts();
requestLayout();
invalidate();
@@ -3257,20 +3432,6 @@
}
/**
- * Returns the font variation settings.
- *
- * @return the currently set font variation settings. Returns null if no variation is
- * specified.
- *
- * @see #setFontVariationSettings(String)
- * @see Paint#setFontVariationSettings(String) Paint.setFontVariationSettings(String)
- */
- @Nullable
- public String getFontVariationSettings() {
- return mTextPaint.getFontVariationSettings();
- }
-
- /**
* Sets the break strategy for breaking paragraphs into lines. The default value for
* TextView is {@link Layout#BREAK_STRATEGY_HIGH_QUALITY}, and the default value for
* EditText is {@link Layout#BREAK_STRATEGY_SIMPLE}, the latter to avoid the
@@ -3377,41 +3538,6 @@
/**
- * Sets TrueType or OpenType font variation settings. The settings string is constructed from
- * multiple pairs of axis tag and style values. The axis tag must contain four ASCII characters
- * and must be wrapped with single quotes (U+0027) or double quotes (U+0022). Axis strings that
- * are longer or shorter than four characters, or contain characters outside of U+0020..U+007E
- * are invalid. If a specified axis name is not defined in the font, the settings will be
- * ignored.
- *
- * <pre>
- * textView.setFontVariationSettings("'wdth' 1.0");
- * textView.setFontVariationSettings("'AX ' 1.8, 'FB ' 2.0");
- * </pre>
- *
- * @param fontVariationSettings font variation settings. You can pass null or empty string as
- * no variation settings.
- *
- * @see #getFontVariationSettings()
- * @see Paint#getFontVariationSettings() Paint.getFontVariationSettings()
- */
- public void setFontVariationSettings(@Nullable String fontVariationSettings) {
- final String existingSettings = mTextPaint.getFontVariationSettings();
- if (fontVariationSettings == existingSettings
- || (fontVariationSettings != null
- && fontVariationSettings.equals(existingSettings))) {
- return;
- }
- mTextPaint.setFontVariationSettings(fontVariationSettings);
-
- if (mLayout != null) {
- nullLayouts();
- requestLayout();
- invalidate();
- }
- }
-
- /**
* Sets the text color for all the states (normal, selected,
* focused) to be this color.
*
@@ -7612,13 +7738,13 @@
}
if (isAutoSizeEnabled()) {
- if (mNeedsAutoSize) {
+ if (mNeedsAutoSizeText) {
// Call auto-size after the width and height have been calculated.
autoSizeText();
}
// Always try to auto-size if enabled. Functions that do not want to trigger auto-sizing
// after the next measuring round should set this to false.
- mNeedsAutoSize = true;
+ mNeedsAutoSizeText = true;
}
setMeasuredDimension(width, height);
@@ -9377,7 +9503,7 @@
* auto-size.
*/
private boolean isAutoSizeEnabled() {
- return supportsAutoSizeText() && mAutoSizeType != AUTO_SIZE_TYPE_NONE;
+ return supportsAutoSizeText() && mAutoSizeTextType != AUTO_SIZE_TEXT_TYPE_NONE;
}
/**
diff --git a/core/java/com/android/internal/os/KernelUidCpuTimeReader.java b/core/java/com/android/internal/os/KernelUidCpuTimeReader.java
index c828d11..e8919ed 100644
--- a/core/java/com/android/internal/os/KernelUidCpuTimeReader.java
+++ b/core/java/com/android/internal/os/KernelUidCpuTimeReader.java
@@ -120,7 +120,7 @@
sb.append(" s=");
TimeUtils.formatDuration(systemTimeDeltaUs / 1000, sb);
sb.append(" p=").append(powerDeltaMaUs / 1000).append("mAms");
- Slog.wtf(TAG, sb.toString());
+ Slog.e(TAG, sb.toString());
userTimeDeltaUs = 0;
systemTimeDeltaUs = 0;
diff --git a/core/java/com/android/internal/os/ZygoteInit.java b/core/java/com/android/internal/os/ZygoteInit.java
index 8eb75c0..a3b066a 100644
--- a/core/java/com/android/internal/os/ZygoteInit.java
+++ b/core/java/com/android/internal/os/ZygoteInit.java
@@ -25,7 +25,6 @@
import android.icu.text.DecimalFormatSymbols;
import android.icu.util.ULocale;
import android.net.LocalServerSocket;
-import android.opengl.EGL14;
import android.os.IInstalld;
import android.os.Process;
import android.os.RemoteException;
@@ -125,9 +124,6 @@
bootTimingsTraceLog.traceBegin("PreloadResources");
preloadResources();
bootTimingsTraceLog.traceEnd(); // PreloadResources
- bootTimingsTraceLog.traceBegin("PreloadOpenGL");
- preloadOpenGL();
- bootTimingsTraceLog.traceEnd(); // PreloadOpenGL
preloadSharedLibraries();
preloadTextResources();
// Ask the WebViewFactory to do any initialization that must run in the zygote process,
@@ -177,12 +173,6 @@
System.loadLibrary("jnigraphics");
}
- private static void preloadOpenGL() {
- if (!SystemProperties.getBoolean(PROPERTY_DISABLE_OPENGL_PRELOADING, false)) {
- EGL14.eglGetDisplay(EGL14.EGL_DEFAULT_DISPLAY);
- }
- }
-
private static void preloadTextResources() {
Hyphenator.init();
TextView.preloadFontCache();
diff --git a/core/java/com/android/internal/view/menu/ActionMenuItem.java b/core/java/com/android/internal/view/menu/ActionMenuItem.java
index c8697dd..1fce0b7 100644
--- a/core/java/com/android/internal/view/menu/ActionMenuItem.java
+++ b/core/java/com/android/internal/view/menu/ActionMenuItem.java
@@ -48,7 +48,7 @@
private MenuItem.OnMenuItemClickListener mClickListener;
private CharSequence mContentDescription;
- private CharSequence mTooltip;
+ private CharSequence mTooltipText;
private static final int NO_ICON = 0;
@@ -290,13 +290,13 @@
}
@Override
- public MenuItem setTooltip(CharSequence tooltip) {
- mTooltip = tooltip;
+ public MenuItem setTooltipText(CharSequence tooltipText) {
+ mTooltipText = tooltipText;
return this;
}
@Override
- public CharSequence getTooltip() {
- return mTooltip;
+ public CharSequence getTooltipText() {
+ return mTooltipText;
}
}
diff --git a/core/java/com/android/internal/view/menu/ActionMenuItemView.java b/core/java/com/android/internal/view/menu/ActionMenuItemView.java
index 4ee5993..92e1d80 100644
--- a/core/java/com/android/internal/view/menu/ActionMenuItemView.java
+++ b/core/java/com/android/internal/view/menu/ActionMenuItemView.java
@@ -193,12 +193,12 @@
setContentDescription(contentDescription);
}
- final CharSequence tooltip = mItemData.getTooltip();
- if (TextUtils.isEmpty(tooltip)) {
+ final CharSequence tooltipText = mItemData.getTooltipText();
+ if (TextUtils.isEmpty(tooltipText)) {
// Use the uncondensed title for tooltip, but only if the title is not shown already.
- setTooltip(visible ? null : mItemData.getTitle());
+ setTooltipText(visible ? null : mItemData.getTitle());
} else {
- setTooltip(tooltip);
+ setTooltipText(tooltipText);
}
}
diff --git a/core/java/com/android/internal/view/menu/IconMenuItemView.java b/core/java/com/android/internal/view/menu/IconMenuItemView.java
index f9ebdbc..6c8f330 100644
--- a/core/java/com/android/internal/view/menu/IconMenuItemView.java
+++ b/core/java/com/android/internal/view/menu/IconMenuItemView.java
@@ -113,7 +113,7 @@
} else {
setContentDescription(contentDescription);
}
- setTooltip(mItemData.getTooltip());
+ setTooltipText(mItemData.getTooltipText());
}
}
diff --git a/core/java/com/android/internal/view/menu/ListMenuItemView.java b/core/java/com/android/internal/view/menu/ListMenuItemView.java
index 7c9f709..43005e6 100644
--- a/core/java/com/android/internal/view/menu/ListMenuItemView.java
+++ b/core/java/com/android/internal/view/menu/ListMenuItemView.java
@@ -115,7 +115,7 @@
setEnabled(itemData.isEnabled());
setSubMenuArrowVisible(itemData.hasSubMenu());
setContentDescription(itemData.getContentDescription());
- setTooltip(itemData.getTooltip());
+ setTooltipText(itemData.getTooltipText());
}
public void setForceShowIcon(boolean forceShow) {
diff --git a/core/java/com/android/internal/view/menu/MenuItemImpl.java b/core/java/com/android/internal/view/menu/MenuItemImpl.java
index cad0276..342943f 100644
--- a/core/java/com/android/internal/view/menu/MenuItemImpl.java
+++ b/core/java/com/android/internal/view/menu/MenuItemImpl.java
@@ -94,7 +94,7 @@
private ContextMenuInfo mMenuInfo;
private CharSequence mContentDescription;
- private CharSequence mTooltip;
+ private CharSequence mTooltipText;
private static String sLanguage;
private static String sPrependShortcutLabel;
@@ -689,8 +689,8 @@
}
@Override
- public MenuItem setTooltip(CharSequence tooltip) {
- mTooltip = tooltip;
+ public MenuItem setTooltipText(CharSequence tooltipText) {
+ mTooltipText = tooltipText;
mMenu.onItemsChanged(false);
@@ -698,7 +698,7 @@
}
@Override
- public CharSequence getTooltip() {
- return mTooltip;
+ public CharSequence getTooltipText() {
+ return mTooltipText;
}
}
diff --git a/core/java/com/android/internal/widget/FloatingToolbar.java b/core/java/com/android/internal/widget/FloatingToolbar.java
index 04e09a8..58e694a 100644
--- a/core/java/com/android/internal/widget/FloatingToolbar.java
+++ b/core/java/com/android/internal/widget/FloatingToolbar.java
@@ -1591,7 +1591,7 @@
} else {
menuButton.setContentDescription(contentDescription);
}
- menuButton.setTooltip(menuItem.getTooltip());
+ menuButton.setTooltipText(menuItem.getTooltipText());
menuButton.setMinimumWidth(minimumWidth);
}
return menuButton;
@@ -1642,17 +1642,17 @@
((ImageButton) menuItemButton
.findViewById(R.id.floating_toolbar_menu_item_image_button))
.setImageDrawable(menuItem.getIcon());
- final CharSequence tooltip = menuItem.getTooltip();
- if (TextUtils.isEmpty(tooltip)) {
- menuItemButton.setTooltip(menuItem.getTitle());
+ final CharSequence tooltipText = menuItem.getTooltipText();
+ if (TextUtils.isEmpty(tooltipText)) {
+ menuItemButton.setTooltipText(menuItem.getTitle());
} else {
- menuItemButton.setTooltip(tooltip);
+ menuItemButton.setTooltipText(tooltipText);
}
} else {
menuItemButton = LayoutInflater.from(context)
.inflate(R.layout.floating_popup_menu_button, null);
((Button) menuItemButton).setText(menuItem.getTitle());
- menuItemButton.setTooltip(menuItem.getTooltip());
+ menuItemButton.setTooltipText(menuItem.getTooltipText());
}
final CharSequence contentDescription = menuItem.getContentDescription();
if (TextUtils.isEmpty(contentDescription)) {
diff --git a/core/java/com/android/internal/widget/LockPatternUtils.java b/core/java/com/android/internal/widget/LockPatternUtils.java
index a43f3a7..a29882b4 100644
--- a/core/java/com/android/internal/widget/LockPatternUtils.java
+++ b/core/java/com/android/internal/widget/LockPatternUtils.java
@@ -298,6 +298,10 @@
getTrustManager().reportUnlockAttempt(true /* authenticated */, userId);
}
+ public void reportPasswordLockout(int timeoutMs, int userId) {
+ getTrustManager().reportUnlockLockout(timeoutMs, userId);
+ }
+
public int getCurrentFailedPasswordAttempts(int userId) {
return getDevicePolicyManager().getCurrentFailedPasswordAttempts(userId);
}
diff --git a/core/java/com/android/internal/widget/ScrollingTabContainerView.java b/core/java/com/android/internal/widget/ScrollingTabContainerView.java
index 4466575..311bfac 100644
--- a/core/java/com/android/internal/widget/ScrollingTabContainerView.java
+++ b/core/java/com/android/internal/widget/ScrollingTabContainerView.java
@@ -471,7 +471,7 @@
if (mIconView != null) {
mIconView.setContentDescription(tab.getContentDescription());
}
- setTooltip(hasText? null : tab.getContentDescription());
+ setTooltipText(hasText? null : tab.getContentDescription());
}
}
diff --git a/core/java/com/android/server/NetworkManagementSocketTagger.java b/core/java/com/android/server/NetworkManagementSocketTagger.java
index 06ef4c9..03f2bc1 100644
--- a/core/java/com/android/server/NetworkManagementSocketTagger.java
+++ b/core/java/com/android/server/NetworkManagementSocketTagger.java
@@ -16,6 +16,7 @@
package com.android.server;
+import android.os.StrictMode;
import android.os.SystemProperties;
import android.util.Log;
import android.util.Slog;
@@ -50,16 +51,20 @@
SocketTagger.set(new NetworkManagementSocketTagger());
}
- public static void setThreadSocketStatsTag(int tag) {
+ public static int setThreadSocketStatsTag(int tag) {
+ final int old = threadSocketTags.get().statsTag;
threadSocketTags.get().statsTag = tag;
+ return old;
}
public static int getThreadSocketStatsTag() {
return threadSocketTags.get().statsTag;
}
- public static void setThreadSocketStatsUid(int uid) {
+ public static int setThreadSocketStatsUid(int uid) {
+ final int old = threadSocketTags.get().statsUid;
threadSocketTags.get().statsUid = uid;
+ return old;
}
@Override
@@ -69,6 +74,9 @@
Log.d(TAG, "tagSocket(" + fd.getInt$() + ") with statsTag=0x"
+ Integer.toHexString(options.statsTag) + ", statsUid=" + options.statsUid);
}
+ if (options.statsTag == -1 && StrictMode.vmUntaggedSocketEnabled()) {
+ StrictMode.onUntaggedSocket();
+ }
// TODO: skip tagging when options would be no-op
tagSocketFd(fd, options.statsTag, options.statsUid);
}
diff --git a/core/java/com/android/server/SystemConfig.java b/core/java/com/android/server/SystemConfig.java
index 168da5f..fcb4c7b 100644
--- a/core/java/com/android/server/SystemConfig.java
+++ b/core/java/com/android/server/SystemConfig.java
@@ -109,6 +109,10 @@
// background while in data-usage save mode, as read from the configuration files.
final ArraySet<String> mAllowInDataUsageSave = new ArraySet<>();
+ // These are the action strings of broadcasts which are whitelisted to
+ // be delivered anonymously even to apps which target O+.
+ final ArraySet<String> mAllowImplicitBroadcasts = new ArraySet<>();
+
// These are the package names of apps which should be in the 'always'
// URL-handling state upon factory reset.
final ArraySet<String> mLinkedApps = new ArraySet<>();
@@ -162,6 +166,10 @@
return mPermissions;
}
+ public ArraySet<String> getAllowImplicitBroadcasts() {
+ return mAllowImplicitBroadcasts;
+ }
+
public ArraySet<String> getAllowInPowerSaveExceptIdle() {
return mAllowInPowerSaveExceptIdle;
}
@@ -438,6 +446,17 @@
XmlUtils.skipCurrentTag(parser);
continue;
+ } else if ("allow-implicit-broadcast".equals(name) && allowAll) {
+ String action = parser.getAttributeValue(null, "action");
+ if (action == null) {
+ Slog.w(TAG, "<allow-implicit-broadcast> without action in " + permFile
+ + " at " + parser.getPositionDescription());
+ } else {
+ mAllowImplicitBroadcasts.add(action);
+ }
+ XmlUtils.skipCurrentTag(parser);
+ continue;
+
} else if ("app-link".equals(name) && allowAppConfigs) {
String pkgname = parser.getAttributeValue(null, "package");
if (pkgname == null) {
diff --git a/core/jni/Android.mk b/core/jni/Android.mk
index 6a9ed8e..0d3ccdc 100644
--- a/core/jni/Android.mk
+++ b/core/jni/Android.mk
@@ -118,7 +118,6 @@
android/graphics/ColorFilter.cpp \
android/graphics/DrawFilter.cpp \
android/graphics/FontFamily.cpp \
- android/graphics/FontUtils.cpp \
android/graphics/CreateJavaOutputStreamAdaptor.cpp \
android/graphics/GIFMovie.cpp \
android/graphics/GraphicBuffer.cpp \
diff --git a/core/jni/android/graphics/FontFamily.cpp b/core/jni/android/graphics/FontFamily.cpp
index 685c93d..15e7165 100644
--- a/core/jni/android/graphics/FontFamily.cpp
+++ b/core/jni/android/graphics/FontFamily.cpp
@@ -30,7 +30,6 @@
#include <android_runtime/android_util_AssetManager.h>
#include <androidfw/AssetManager.h>
#include "Utils.h"
-#include "FontUtils.h"
#include <hwui/MinikinSkia.h>
#include <hwui/Typeface.h>
@@ -40,54 +39,27 @@
namespace android {
-struct NativeFamilyBuilder {
- uint32_t langId;
- int variant;
- std::vector<minikin::Font> fonts;
-};
-
-static jlong FontFamily_initBuilder(JNIEnv* env, jobject clazz, jstring lang, jint variant) {
- NativeFamilyBuilder* builder = new NativeFamilyBuilder();
- if (lang != nullptr) {
- ScopedUtfChars str(env, lang);
- builder->langId = minikin::FontStyle::registerLanguageList(str.c_str());
- } else {
- builder->langId = minikin::FontStyle::registerLanguageList("");
+static jlong FontFamily_create(JNIEnv* env, jobject clazz, jstring lang, jint variant) {
+ if (lang == NULL) {
+ return (jlong)new minikin::FontFamily(variant);
}
- builder->variant = variant;
- return reinterpret_cast<jlong>(builder);
+ ScopedUtfChars str(env, lang);
+ uint32_t langId = minikin::FontStyle::registerLanguageList(str.c_str());
+ return (jlong)new minikin::FontFamily(langId, variant);
}
-static jlong FontFamily_create(jlong builderPtr) {
- if (builderPtr == 0) {
- return 0;
- }
- NativeFamilyBuilder* builder = reinterpret_cast<NativeFamilyBuilder*>(builderPtr);
- minikin::FontFamily* family = new minikin::FontFamily(
- builder->langId, builder->variant, std::move(builder->fonts));
- delete builder;
- return reinterpret_cast<jlong>(family);
-}
-
-static void FontFamily_unref(jlong familyPtr) {
+static void FontFamily_unref(JNIEnv* env, jobject clazz, jlong familyPtr) {
minikin::FontFamily* fontFamily = reinterpret_cast<minikin::FontFamily*>(familyPtr);
fontFamily->Unref();
}
-static void addSkTypeface(jlong builderPtr, sk_sp<SkTypeface> face, const void* fontData,
- size_t fontSize, int ttcIndex) {
+static jboolean addSkTypeface(minikin::FontFamily* family, sk_sp<SkTypeface> face,
+ const void* fontData, size_t fontSize, int ttcIndex) {
minikin::MinikinFont* minikinFont =
new MinikinFontSkia(std::move(face), fontData, fontSize, ttcIndex);
- NativeFamilyBuilder* builder = reinterpret_cast<NativeFamilyBuilder*>(builderPtr);
- int weight;
- bool italic;
- if (!minikin::FontFamily::analyzeStyle(minikinFont, &weight, &italic)) {
- ALOGE("analyzeStyle failed. Using default style");
- weight = 400;
- italic = false;
- }
- builder->fonts.push_back(minikin::Font(minikinFont, minikin::FontStyle(weight / 100, italic)));
+ bool result = family->addFont(minikinFont);
minikinFont->Unref();
+ return result;
}
static void release_global_ref(const void* /*data*/, void* context) {
@@ -113,7 +85,7 @@
}
}
-static jboolean FontFamily_addFont(JNIEnv* env, jobject clazz, jlong builderPtr, jobject bytebuf,
+static jboolean FontFamily_addFont(JNIEnv* env, jobject clazz, jlong familyPtr, jobject bytebuf,
jint ttcIndex) {
NPE_CHECK_RETURN_ZERO(env, bytebuf);
const void* fontPtr = env->GetDirectBufferAddress(bytebuf);
@@ -140,11 +112,21 @@
ALOGE("addFont failed to create font");
return false;
}
- addSkTypeface(builderPtr, std::move(face), fontPtr, (size_t)fontSize, ttcIndex);
- return true;
+ minikin::FontFamily* fontFamily = reinterpret_cast<minikin::FontFamily*>(familyPtr);
+ return addSkTypeface(fontFamily, std::move(face), fontPtr, (size_t)fontSize, ttcIndex);
}
-static jboolean FontFamily_addFontWeightStyle(JNIEnv* env, jobject clazz, jlong builderPtr,
+static struct {
+ jmethodID mGet;
+ jmethodID mSize;
+} gListClassInfo;
+
+static struct {
+ jfieldID mTag;
+ jfieldID mStyleValue;
+} gAxisClassInfo;
+
+static jboolean FontFamily_addFontWeightStyle(JNIEnv* env, jobject clazz, jlong familyPtr,
jobject font, jint ttcIndex, jobject listOfAxis, jint weight, jboolean isItalic) {
NPE_CHECK_RETURN_ZERO(env, font);
@@ -152,22 +134,20 @@
std::unique_ptr<SkFontMgr::FontParameters::Axis[]> skiaAxes;
int skiaAxesLength = 0;
if (listOfAxis) {
- ListHelper list(env, listOfAxis);
- jint listSize = list.size();
+ jint listSize = env->CallIntMethod(listOfAxis, gListClassInfo.mSize);
skiaAxes.reset(new SkFontMgr::FontParameters::Axis[listSize]);
skiaAxesLength = listSize;
for (jint i = 0; i < listSize; ++i) {
- jobject axisObject = list.get(i);
+ jobject axisObject = env->CallObjectMethod(listOfAxis, gListClassInfo.mGet, i);
if (!axisObject) {
skiaAxes[i].fTag = 0;
skiaAxes[i].fStyleValue = 0;
continue;
}
- AxisHelper axis(env, axisObject);
- jint tag = axis.getTag();
- jfloat stylevalue = axis.getStyleValue();
+ jint tag = env->GetIntField(axisObject, gAxisClassInfo.mTag);
+ jfloat stylevalue = env->GetFloatField(axisObject, gAxisClassInfo.mStyleValue);
skiaAxes[i].fTag = tag;
skiaAxes[i].fStyleValue = SkFloatToScalar(stylevalue);
}
@@ -198,11 +178,10 @@
ALOGE("addFont failed to create font, invalid request");
return false;
}
+ minikin::FontFamily* fontFamily = reinterpret_cast<minikin::FontFamily*>(familyPtr);
minikin::MinikinFont* minikinFont =
- new MinikinFontSkia(std::move(face), fontPtr, fontSize, ttcIndex);
- NativeFamilyBuilder* builder = reinterpret_cast<NativeFamilyBuilder*>(builderPtr);
- builder->fonts.push_back(minikin::Font(minikinFont,
- minikin::FontStyle(weight / 100, isItalic)));
+ new MinikinFontSkia(std::move(face), fontPtr, (size_t)fontSize, ttcIndex);
+ fontFamily->addFont(minikinFont, minikin::FontStyle(weight / 100, isItalic));
minikinFont->Unref();
return true;
}
@@ -211,7 +190,7 @@
delete static_cast<Asset*>(context);
}
-static jboolean FontFamily_addFontFromAsset(JNIEnv* env, jobject, jlong builderPtr,
+static jboolean FontFamily_addFontFromAsset(JNIEnv* env, jobject, jlong familyPtr,
jobject jassetMgr, jstring jpath) {
NPE_CHECK_RETURN_ZERO(env, jassetMgr);
NPE_CHECK_RETURN_ZERO(env, jpath);
@@ -243,16 +222,14 @@
ALOGE("addFontFromAsset failed to create font %s", str.c_str());
return false;
}
-
- addSkTypeface(builderPtr, std::move(face), buf, bufSize, 0 /* ttc index */);
- return true;
+ minikin::FontFamily* fontFamily = reinterpret_cast<minikin::FontFamily*>(familyPtr);
+ return addSkTypeface(fontFamily, std::move(face), buf, bufSize, /* ttcIndex */ 0);
}
///////////////////////////////////////////////////////////////////////////////
static const JNINativeMethod gFontFamilyMethods[] = {
- { "nInitBuilder", "(Ljava/lang/String;I)J", (void*)FontFamily_initBuilder },
- { "nCreateFamily", "(J)J", (void*)FontFamily_create },
+ { "nCreateFamily", "(Ljava/lang/String;I)J", (void*)FontFamily_create },
{ "nUnrefFamily", "(J)V", (void*)FontFamily_unref },
{ "nAddFont", "(JLjava/nio/ByteBuffer;I)Z", (void*)FontFamily_addFont },
{ "nAddFontWeightStyle", "(JLjava/nio/ByteBuffer;ILjava/util/List;IZ)Z",
@@ -266,7 +243,14 @@
int err = RegisterMethodsOrDie(env, "android/graphics/FontFamily", gFontFamilyMethods,
NELEM(gFontFamilyMethods));
- init_FontUtils(env);
+ jclass listClass = FindClassOrDie(env, "java/util/List");
+ gListClassInfo.mGet = GetMethodIDOrDie(env, listClass, "get", "(I)Ljava/lang/Object;");
+ gListClassInfo.mSize = GetMethodIDOrDie(env, listClass, "size", "()I");
+
+ jclass axisClass = FindClassOrDie(env, "android/graphics/FontListParser$Axis");
+ gAxisClassInfo.mTag = GetFieldIDOrDie(env, axisClass, "tag", "I");
+ gAxisClassInfo.mStyleValue = GetFieldIDOrDie(env, axisClass, "styleValue", "F");
+
return err;
}
diff --git a/core/jni/android/graphics/FontUtils.cpp b/core/jni/android/graphics/FontUtils.cpp
deleted file mode 100644
index 11c2d29..0000000
--- a/core/jni/android/graphics/FontUtils.cpp
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright (C) 2016 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.
- */
-
-#include "FontUtils.h"
-
-#include "JNIHelp.h"
-#include <core_jni_helpers.h>
-
-namespace android {
-namespace {
-
-static struct {
- jmethodID mGet;
- jmethodID mSize;
-} gListClassInfo;
-
-static struct {
- jfieldID mTag;
- jfieldID mStyleValue;
-} gAxisClassInfo;
-
-} // namespace
-
-jint ListHelper::size() const {
- return mEnv->CallIntMethod(mList, gListClassInfo.mSize);
-}
-
-jobject ListHelper::get(jint index) const {
- return mEnv->CallObjectMethod(mList, gListClassInfo.mGet, index);
-}
-
-jint AxisHelper::getTag() const {
- return mEnv->GetIntField(mAxis, gAxisClassInfo.mTag);
-}
-
-jfloat AxisHelper::getStyleValue() const {
- return mEnv->GetFloatField(mAxis, gAxisClassInfo.mStyleValue);
-}
-
-void init_FontUtils(JNIEnv* env) {
- jclass listClass = FindClassOrDie(env, "java/util/List");
- gListClassInfo.mGet = GetMethodIDOrDie(env, listClass, "get", "(I)Ljava/lang/Object;");
- gListClassInfo.mSize = GetMethodIDOrDie(env, listClass, "size", "()I");
-
- jclass axisClass = FindClassOrDie(env, "android/graphics/FontListParser$Axis");
- gAxisClassInfo.mTag = GetFieldIDOrDie(env, axisClass, "tag", "I");
- gAxisClassInfo.mStyleValue = GetFieldIDOrDie(env, axisClass, "styleValue", "F");
-}
-
-} // namespace android
diff --git a/core/jni/android/graphics/FontUtils.h b/core/jni/android/graphics/FontUtils.h
deleted file mode 100644
index 6fbd5e3..0000000
--- a/core/jni/android/graphics/FontUtils.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Copyright (C) 2016 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_GRAPHICS_FONT_UTILS_H_
-#define _ANDROID_GRAPHICS_FONT_UTILS_H_
-
-#include <jni.h>
-
-namespace android {
-
-// Utility wrapper for java.util.List
-class ListHelper {
-public:
- ListHelper(JNIEnv* env, jobject list) : mEnv(env), mList(list) {}
-
- jint size() const;
- jobject get(jint index) const;
-
-private:
- JNIEnv* mEnv;
- jobject mList;
-};
-
-// Utility wrapper for android.graphics.FontListParser$Axis
-class AxisHelper {
-public:
- AxisHelper(JNIEnv* env, jobject axis) : mEnv(env), mAxis(axis) {}
-
- jint getTag() const;
- jfloat getStyleValue() const;
-
-private:
- JNIEnv* mEnv;
- jobject mAxis;
-};
-
-void init_FontUtils(JNIEnv* env);
-
-}; // namespace android
-
-#endif // _ANDROID_GRAPHICS_FONT_UTILS_H_
diff --git a/core/jni/android/graphics/Typeface.cpp b/core/jni/android/graphics/Typeface.cpp
index 0a0fce3e..c920b8d 100644
--- a/core/jni/android/graphics/Typeface.cpp
+++ b/core/jni/android/graphics/Typeface.cpp
@@ -17,14 +17,12 @@
#include "jni.h"
#include "core_jni_helpers.h"
-#include "FontUtils.h"
#include "GraphicsJNI.h"
#include "ScopedPrimitiveArray.h"
#include "SkTypeface.h"
#include <android_runtime/android_util_AssetManager.h>
#include <androidfw/AssetManager.h>
#include <hwui/Typeface.h>
-#include <minikin/FontFamily.h>
using namespace android;
@@ -42,23 +40,6 @@
return reinterpret_cast<jlong>(face);
}
-static jlong Typeface_createFromTypefaceWithVariation(JNIEnv* env, jobject, jlong familyHandle,
- jobject listOfAxis) {
- std::vector<minikin::FontVariation> variations;
- ListHelper list(env, listOfAxis);
- for (jint i = 0; i < list.size(); i++) {
- jobject axisObject = list.get(i);
- if (axisObject == nullptr) {
- continue;
- }
- AxisHelper axis(env, axisObject);
- variations.push_back(minikin::FontVariation(axis.getTag(), axis.getStyleValue()));
- }
- Typeface* baseTypeface = reinterpret_cast<Typeface*>(familyHandle);
- Typeface* result = Typeface::createFromTypefaceWithVariation(baseTypeface, variations);
- return reinterpret_cast<jlong>(result);
-}
-
static jlong Typeface_createWeightAlias(JNIEnv* env, jobject, jlong familyHandle, jint weight) {
Typeface* family = reinterpret_cast<Typeface*>(familyHandle);
Typeface* face = Typeface::createWeightAlias(family, weight);
@@ -96,8 +77,6 @@
static const JNINativeMethod gTypefaceMethods[] = {
{ "nativeCreateFromTypeface", "(JI)J", (void*)Typeface_createFromTypeface },
- { "nativeCreateFromTypefaceWithVariation", "(JLjava/util/List;)J",
- (void*)Typeface_createFromTypefaceWithVariation },
{ "nativeCreateWeightAlias", "(JI)J", (void*)Typeface_createWeightAlias },
{ "nativeUnref", "(J)V", (void*)Typeface_unref },
{ "nativeGetStyle", "(J)I", (void*)Typeface_getStyle },
diff --git a/core/jni/android_view_RenderNode.cpp b/core/jni/android_view_RenderNode.cpp
index d75d5c1..3eccc42 100644
--- a/core/jni/android_view_RenderNode.cpp
+++ b/core/jni/android_view_RenderNode.cpp
@@ -88,6 +88,7 @@
return;
}
+ node->setStagingDisplayList(nullptr, nullptr);
// Update the valid field, since native has already removed
// the staging DisplayList
env->SetBooleanField(jnode, gRenderNode_validFieldID, false);
diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml
index 7f25cf3..2692bf2 100644
--- a/core/res/AndroidManifest.xml
+++ b/core/res/AndroidManifest.xml
@@ -1269,7 +1269,7 @@
recommendations and scores from the NetworkScoreService.
<p>Not for use by third-party applications. @hide -->
<permission android:name="android.permission.REQUEST_NETWORK_SCORES"
- android:protectionLevel="signature" />
+ android:protectionLevel="signature|setup" />
<!-- ======================================= -->
<!-- Permissions for short range, peripheral networks -->
@@ -2480,13 +2480,23 @@
android:protectionLevel="signature" />
<!-- Allows an application to request installing packages. Apps
- targeting APIs greater than 22 must hold this permission in
+ targeting APIs greater than 25 must hold this permission in
order to use {@link android.content.Intent#ACTION_INSTALL_PACKAGE}.
<p>Protection level: normal
-->
<permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"
android:label="@string/permlab_requestInstallPackages"
android:description="@string/permdesc_requestInstallPackages"
+ android:protectionLevel="signature|appop" />
+
+ <!-- Allows an application to request deleting packages. Apps
+ targeting APIs greater than 25 must hold this permission in
+ order to use {@link android.content.Intent#ACTION_UNINSTALL_PACKAGE}.
+ <p>Protection level: normal
+ -->
+ <permission android:name="android.permission.REQUEST_DELETE_PACKAGES"
+ android:label="@string/permlab_requestDeletePackages"
+ android:description="@string/permdesc_requestDeletePackages"
android:protectionLevel="normal" />
<!-- @SystemApi Allows an application to install packages.
@@ -3127,7 +3137,7 @@
<uses-permission android:name="android.permission.CONFIRM_FULL_BACKUP"/>
- <!-- Allows the holder to access the ephemeral applications on the device.
+ <!-- Allows the holder to access the instant applications on the device.
@hide -->
<permission android:name="android.permission.ACCESS_EPHEMERAL_APPS"
android:protectionLevel="signature" />
diff --git a/core/res/res/values/attrs.xml b/core/res/res/values/attrs.xml
index a5c1a94..7c01dea 100644
--- a/core/res/res/values/attrs.xml
+++ b/core/res/res/values/attrs.xml
@@ -2890,7 +2890,7 @@
<attr name="forceHasOverlappingRendering" format="boolean" />
<!-- Defines text displayed in a small popup window on hover or long press. -->
- <attr name="tooltip" format="string" localization="suggested" />
+ <attr name="tooltipText" format="string" localization="suggested" />
<!-- Whether this view is a root of a keyboard navigation cluster.
See {@link android.view.View#setKeyboardNavigationCluster(boolean)}. -->
@@ -4707,7 +4707,8 @@
screens with limited space for text. -->
<enum name="full" value="2" />
</attr>
- <!-- Specify the type of auto-size. -->
+ <!-- Specify the type of auto-size. Note that this feature is not supported by EditText,
+ works only for TextView -->
<attr name="autoSizeText" format="enum">
<!-- No auto-sizing (default). -->
<enum name="none" value="0" />
@@ -7029,7 +7030,7 @@
<attr name="contentDescription" format="string" />
<!-- The tooltip text associated with the item. -->
- <attr name="tooltip" format="string" />
+ <attr name="tooltipText" format="string" />
</declare-styleable>
diff --git a/core/res/res/values/attrs_manifest.xml b/core/res/res/values/attrs_manifest.xml
index b961394..5235116 100644
--- a/core/res/res/values/attrs_manifest.xml
+++ b/core/res/res/values/attrs_manifest.xml
@@ -776,6 +776,21 @@
<enum name="locked" value="14" />
</attr>
+ <!-- Specify the configuration changes that trigger the system to restart the
+ current activity if any of these configuration changes happen in the system.
+ The valid configuration changes include mcc and mnc which are the same with
+ those in configChanges. By default from Android O, we don't restart the activity
+ even the app doesn't specify mcc or mnc in configChanges. If the app wants to
+ restart, specify them in restartOnConfigChanges. -->
+ <attr name="restartOnConfigChanges">
+ <!-- The IMSI MCC has changed, that is a SIM has been detected and
+ updated the Mobile Country Code. -->
+ <flag name="mcc" value="0x0001" />
+ <!-- The IMSI MNC has changed, that is a SIM has been detected and
+ updated the Mobile Network Code. -->
+ <flag name="mnc" value="0x0002" />
+ </attr>
+
<!-- Specify one or more configuration changes that the activity will
handle itself. If not specified, the activity will be restarted
if any of these configuration changes happen in the system. Otherwise,
@@ -793,10 +808,16 @@
include/utils/ResourceTypes.h. -->
<attr name="configChanges">
<!-- The IMSI MCC has changed, that is a SIM has been detected and
- updated the Mobile Country Code. -->
+ updated the Mobile Country Code. By default from Android O, we
+ don't restart the activity even the app doesn't specify mcc in
+ configChanges. If the app wants to restart, specify mcc in
+ restartOnConfigChanges. -->
<flag name="mcc" value="0x0001" />
<!-- The IMSI MNC has changed, that is a SIM has been detected and
- updated the Mobile Network Code. -->
+ updated the Mobile Network Code. By default from Android O, we
+ don't restart the activity even the app doesn't specify mnc in
+ configChanges. If the app wants to restart, specify mnc in
+ restartOnConfigChanges. -->
<flag name="mnc" value="0x0002" />
<!-- The locale has changed, that is the user has selected a new
language that text should be displayed in. -->
@@ -843,6 +864,9 @@
<flag name="density" value="0x1000" />
<!-- The layout direction has changed. For example going from LTR to RTL. -->
<flag name="layoutDirection" value="0x2000" />
+ <!-- The colorimetry capabilities of the screen have changed (color gamut
+ or dynamic range). -->
+ <flag name="colorimetry" value="0x4000" />
<!-- The font scaling factor has changed, that is the user has
selected a new global font size. -->
<flag name="fontScale" value="0x40000000" />
@@ -1209,9 +1233,9 @@
-->
<attr name="autoVerify" format="boolean" />
- <!-- Specify whether a component should be visible to ephemeral apps.
+ <!-- Specify whether a component should be visible to instant apps.
-->
- <attr name="visibleToEphemeral" format="boolean" />
+ <attr name="visibleToInstantApps" format="boolean" />
<!-- An XML resource with the application's Network Security Config. -->
<attr name="networkSecurityConfig" format="reference" />
@@ -1597,6 +1621,27 @@
<attr name="name" />
</declare-styleable>
+
+ <!-- The <code>static-library</code> tag declares that this apk is providing itself
+ as a static shared library for other applications to use. Any app can declare such
+ a library and there can be only one static shared library per package. These libraries
+ are updatable, multiple versions can be installed at the same time, and an app links
+ against a specific version simulating static linking while allowing code sharing.
+ Other apks can link to it with the {@link #AndroidManifestUsesLibrary uses-static-library}
+ tag.
+
+ <p>This appears as a child tag of the
+ {@link #AndroidManifestApplication application} tag. -->
+ <declare-styleable name="AndroidManifestStaticLibrary" parent="AndroidManifestApplication">
+ <!-- Required public name of the library, which other components and
+ packages will use when referring to this library. This is a string using
+ Java-style scoping to ensure it is unique. The name should typically
+ be the same as the apk's package name. -->
+ <attr name="name" />
+ <!-- Required specific library version. -->
+ <attr name="version" />
+ </declare-styleable>
+
<!-- The <code>uses-libraries</code> specifies a shared library that this
package requires to be linked against. Specifying this flag tells the
system to include this library's code in your class loader.
@@ -1616,6 +1661,24 @@
<attr name="required" />
</declare-styleable>
+ <!-- The <code>uses-static-library</code> specifies a shared <strong>static</strong>
+ library that this package requires to be statically linked against. Specifying
+ this tag tells the system to include this library's code in your class loader.
+ Depending on a static shared library is equivalent to statically linking with
+ the library at build time while it offers apps to share code defined in such
+ libraries. Hence, static libraries are strictly required.
+
+ <p>This appears as a child tag of the
+ {@link #AndroidManifestApplication application} tag. -->
+ <declare-styleable name="AndroidManifestUsesStaticLibrary" parent="AndroidManifestApplication">
+ <!-- Required name of the library you use. -->
+ <attr name="name" />
+ <!-- Specify which version of the shared library should be statically linked. -->
+ <attr name="version" />
+ <!-- The SHA-256 digest of the library signing certificate. -->
+ <attr name="certDigest" format="string" />
+ </declare-styleable>
+
<!-- The <code>supports-screens</code> specifies the screen dimensions an
application supports. By default a modern application supports all
screen sizes and must explicitly disable certain screen sizes here;
@@ -1759,7 +1822,7 @@
<attr name="exported" />
<attr name="singleUser" />
<attr name="directBootAware" />
- <attr name="visibleToEphemeral" />
+ <attr name="visibleToInstantApps" />
</declare-styleable>
<!-- Attributes that can be supplied in an AndroidManifest.xml
@@ -1849,7 +1912,7 @@
client to bind to the service as if it were running it its own package. The service
must also be {@link android.R.attr#exported} if this flag is set. -->
<attr name="externalService" format="boolean" />
- <attr name="visibleToEphemeral" />
+ <attr name="visibleToInstantApps" />
</declare-styleable>
<!-- The <code>receiver</code> tag declares an
@@ -1917,6 +1980,7 @@
<attr name="launchMode" />
<attr name="screenOrientation" />
<attr name="configChanges" />
+ <attr name="restartOnConfigChanges" />
<attr name="permission" />
<attr name="multiprocess" />
<attr name="process" />
@@ -1971,7 +2035,7 @@
This attribute is ignored if the activity isn't a launcher. -->
<attr name="onTopLauncher" format="boolean" />
<attr name="rotationAnimation" />
- <attr name="visibleToEphemeral" />
+ <attr name="visibleToInstantApps" />
</declare-styleable>
<!-- The <code>activity-alias</code> tag declares a new
diff --git a/core/res/res/values/colors_device_defaults.xml b/core/res/res/values/colors_device_defaults.xml
index 8f0350a..e2498df7 100644
--- a/core/res/res/values/colors_device_defaults.xml
+++ b/core/res/res/values/colors_device_defaults.xml
@@ -20,11 +20,14 @@
<color name="primary_device_default_dark">@color/primary_material_dark</color>
<color name="primary_device_default_light">@color/primary_material_light</color>
<color name="primary_device_default_settings">@color/primary_material_settings</color>
+ <color name="primary_device_default_settings_light">@color/primary_material_settings_light</color>
<color name="primary_dark_device_default_dark">@color/primary_dark_material_dark</color>
<color name="primary_dark_device_default_light">@color/primary_dark_material_light</color>
<color name="primary_dark_device_default_settings">@color/primary_dark_material_settings</color>
+ <color name="primary_dark_device_default_settings_light">@color/primary_dark_material_settings_light</color>
<color name="secondary_device_default_settings">@color/secondary_material_settings</color>
+ <color name="secondary_device_default_settings_light">@color/secondary_material_settings_light</color>
<color name="tertiary_device_default_settings">@color/tertiary_material_settings</color>
<color name="quaternary_device_default_settings">@color/quaternary_material_settings</color>
diff --git a/core/res/res/values/colors_material.xml b/core/res/res/values/colors_material.xml
index 835b8b60..db89c22 100644
--- a/core/res/res/values/colors_material.xml
+++ b/core/res/res/values/colors_material.xml
@@ -27,12 +27,15 @@
<color name="primary_material_dark">@color/material_grey_900</color>
<color name="primary_material_light">@color/material_grey_100</color>
<color name="primary_material_settings">@color/material_blue_grey_900</color>
+ <color name="primary_material_settings_light">@color/material_grey_100</color>
<color name="primary_dark_material_dark">@color/black</color>
<color name="primary_dark_material_light">@color/material_grey_600</color>
<color name="primary_dark_material_light_light_status_bar">@color/material_grey_300</color>
<color name="primary_dark_material_settings">@color/material_blue_grey_950</color>
+ <color name="primary_dark_material_settings_light">@color/material_grey_300</color>
<color name="secondary_material_settings">@color/material_blue_grey_800</color>
+ <color name="secondary_material_settings_light">@color/material_grey_200</color>
<color name="tertiary_material_settings">@color/material_blue_grey_700</color>
<color name="quaternary_material_settings">@color/material_blue_grey_200</color>
@@ -88,6 +91,7 @@
<color name="material_grey_800">#ff424242</color>
<color name="material_grey_600">#ff757575</color>
<color name="material_grey_300">#ffe0e0e0</color>
+ <color name="material_grey_200">#ffeeeeee</color>
<color name="material_grey_100">#fff5f5f5</color>
<color name="material_grey_50">#fffafafa</color>
diff --git a/core/res/res/values/public.xml b/core/res/res/values/public.xml
index 099fe08..060c59e 100644
--- a/core/res/res/values/public.xml
+++ b/core/res/res/values/public.xml
@@ -2764,7 +2764,7 @@
<public name="fontStyle" />
<public name="font" />
<public name="fontWeight" />
- <public name="tooltip" />
+ <public name="tooltipText" />
<public name="autoSizeText" />
<public name="autoSizeStepGranularity" />
<public name="autoSizeStepSizeSet" />
@@ -2775,7 +2775,7 @@
<public name="layout_marginVertical" />
<public name="paddingHorizontal" />
<public name="paddingVertical" />
- <public name="visibleToEphemeral" />
+ <public name="visibleToInstantApps" />
<public name="keyboardNavigationCluster" />
<public name="keyboardNavigationSection" />
<public name="nextClusterForward" />
@@ -2785,6 +2785,8 @@
<public name="appCategory" />
<public name="autoSizeMaxTextSize" />
<public name="supportsDismissingWindow" />
+ <public name="restartOnConfigChanges" />
+ <public name="certDigest" />
</public-group>
<public-group type="style" first-id="0x010302e0">
diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml
index d252f23..d09b190 100644
--- a/core/res/res/values/strings.xml
+++ b/core/res/res/values/strings.xml
@@ -397,7 +397,7 @@
<string name="network_logging_notification_title">Network traffic is being monitored</string>
<!-- Content text for a notification. Tapping opens a dialog with more information on network
logging. [CHAR LIMIT=NONE]-->
- <string name="network_logging_notification_text">Tap for more details</string>
+ <string name="network_logging_notification_text">Tap to learn more</string>
<!-- Factory reset warning dialog strings--> <skip />
<!-- Shows up in the dialog's title to warn about an impeding factory reset. [CHAR LIMIT=NONE] -->
@@ -3190,6 +3190,11 @@
<!-- Description of an application permission that lets it read install sessions. -->
<string name="permdesc_requestInstallPackages">Allows an application to request installation of packages.</string>
+ <!-- Title of an application permission that lets it read install sessions. -->
+ <string name="permlab_requestDeletePackages">request delete packages</string>
+ <!-- Description of an application permission that lets it read install sessions. -->
+ <string name="permdesc_requestDeletePackages">Allows an application to request deletion of packages.</string>
+
<!-- Title of an application permission that lets it ask user to ignore battery optimizations for that app. -->
<string name="permlab_requestIgnoreBatteryOptimizations">ask to ignore battery optimizations</string>
<!-- Description of an application permission that lets it ask user to ignore battery optimizations for that app-->
diff --git a/core/res/res/values/styles.xml b/core/res/res/values/styles.xml
index 842b575..faf451b 100644
--- a/core/res/res/values/styles.xml
+++ b/core/res/res/values/styles.xml
@@ -1290,7 +1290,7 @@
<style name="Widget.ActionButton.Overflow">
<item name="src">@drawable/ic_menu_more</item>
<item name="contentDescription">@string/action_menu_overflow_description</item>
- <item name="tooltip">@string/action_menu_overflow_description</item>
+ <item name="tooltipText">@string/action_menu_overflow_description</item>
</style>
<style name="Widget.ActionButton.CloseMode">
diff --git a/core/res/res/values/styles_holo.xml b/core/res/res/values/styles_holo.xml
index 12b8164..dc32b26 100644
--- a/core/res/res/values/styles_holo.xml
+++ b/core/res/res/values/styles_holo.xml
@@ -660,7 +660,7 @@
<item name="src">@drawable/ic_menu_moreoverflow_holo_dark</item>
<item name="background">?attr/actionBarItemBackground</item>
<item name="contentDescription">@string/action_menu_overflow_description</item>
- <item name="tooltip">@string/action_menu_overflow_description</item>
+ <item name="tooltipText">@string/action_menu_overflow_description</item>
</style>
<style name="Widget.Holo.ActionButton.TextButton" parent="Widget.Holo.ButtonBar.Button" />
@@ -995,7 +995,7 @@
<style name="Widget.Holo.Light.ActionButton.Overflow">
<item name="src">@drawable/ic_menu_moreoverflow_holo_light</item>
<item name="contentDescription">@string/action_menu_overflow_description</item>
- <item name="tooltip">@string/action_menu_overflow_description</item>
+ <item name="tooltipText">@string/action_menu_overflow_description</item>
</style>
<style name="Widget.Holo.Light.ActionBar.TabView" parent="Widget.Holo.ActionBar.TabView" />
diff --git a/core/res/res/values/styles_material.xml b/core/res/res/values/styles_material.xml
index 709200e..0b326e9 100644
--- a/core/res/res/values/styles_material.xml
+++ b/core/res/res/values/styles_material.xml
@@ -944,7 +944,7 @@
<item name="src">@drawable/ic_menu_moreoverflow_material</item>
<item name="background">?attr/actionBarItemBackground</item>
<item name="contentDescription">@string/action_menu_overflow_description</item>
- <item name="tooltip">@string/action_menu_overflow_description</item>
+ <item name="tooltipText">@string/action_menu_overflow_description</item>
<item name="minWidth">@dimen/action_button_min_width_overflow_material</item>
<item name="minHeight">@dimen/action_button_min_height_material</item>
<item name="paddingStart">@dimen/action_bar_overflow_padding_start_material</item>
diff --git a/core/res/res/values/themes_device_defaults.xml b/core/res/res/values/themes_device_defaults.xml
index 6bd6e1c..5961cb0 100644
--- a/core/res/res/values/themes_device_defaults.xml
+++ b/core/res/res/values/themes_device_defaults.xml
@@ -736,20 +736,12 @@
<!-- DeviceDefault theme for a window that should look like the Settings app. -->
<style name="Theme.DeviceDefault.Settings" parent="Theme.Material.Settings">
<!-- Color palette -->
- <item name="colorPrimary">@color/primary_device_default_settings</item>
- <item name="colorPrimaryDark">@color/primary_dark_device_default_settings</item>
- <item name="colorSecondary">@color/secondary_device_default_settings</item>
+ <item name="colorPrimary">@color/primary_device_default_settings_light</item>
+ <item name="colorPrimaryDark">@color/primary_dark_device_default_settings_light</item>
+ <item name="colorSecondary">@color/secondary_device_default_settings_light</item>
<item name="colorAccent">@color/accent_device_default_light</item>
</style>
- <!-- @hide DeviceDefault theme that should look like the Settings app. The action bar will use a
- light background and accent color for text and icon. -->
- <style name="Theme.DeviceDefault.Settings.LightActionBar">
- <!-- ActionBar -->
- <item name="actionBarTheme">@style/ThemeOverlay.DeviceDefault.ActionBar.Accent</item>
- <item name="actionBarStyle">@style/Widget.DeviceDefault.Light.ActionBar</item>
- </style>
-
<!-- @hide DeviceDefault theme for a window that should use Settings theme colors
but has a full dark palette. ONLY USED FOR QUICK SETTINGS THEME -->
<style name="Theme.DeviceDefault.QuickSettings" parent="Theme.Material">
@@ -817,12 +809,6 @@
<style name="ThemeOverlay.DeviceDefault" />
- <!-- @hide Theme overlay that inherits from material actionbar, and use accent color for
- primary text -->
- <style name="ThemeOverlay.DeviceDefault.ActionBar.Accent" parent="ThemeOverlay.Material.ActionBar">
- <item name="textColorPrimary">@color/btn_colored_borderless_text_material</item>
- </style>
-
<style name="ThemeOverlay.DeviceDefault.Accent">
<item name="colorAccent">@color/accent_device_default_dark</item>
</style>
diff --git a/core/res/res/values/themes_material.xml b/core/res/res/values/themes_material.xml
index d0f202b..3587fec 100644
--- a/core/res/res/values/themes_material.xml
+++ b/core/res/res/values/themes_material.xml
@@ -1323,10 +1323,10 @@
</style>
<!-- Default theme for Settings and activities launched from Settings. -->
- <style name="Theme.Material.Settings" parent="Theme.Material.Light.DarkActionBar">
- <item name="colorPrimary">@color/primary_material_settings</item>
- <item name="colorPrimaryDark">@color/primary_dark_material_settings</item>
- <item name="colorSecondary">@color/secondary_material_settings</item>
+ <style name="Theme.Material.Settings" parent="Theme.Material.Light.LightStatusBar">
+ <item name="colorPrimary">@color/primary_material_settings_light</item>
+ <item name="colorPrimaryDark">@color/primary_dark_material_settings_light</item>
+ <item name="colorSecondary">@color/secondary_material_settings_light</item>
<item name="presentationTheme">@style/Theme.Material.Settings.Dialog.Presentation</item>
<item name="searchDialogTheme">@style/Theme.Material.Settings.SearchBar</item>
diff --git a/core/tests/coretests/src/android/app/ApplicationPackageManagerTest.java b/core/tests/coretests/src/android/app/ApplicationPackageManagerTest.java
new file mode 100644
index 0000000..f60bf94
--- /dev/null
+++ b/core/tests/coretests/src/android/app/ApplicationPackageManagerTest.java
@@ -0,0 +1,242 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.app;
+
+import android.content.Context;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.IPackageManager;
+import android.content.pm.PackageInfo;
+import android.os.storage.StorageManager;
+import android.os.storage.VolumeInfo;
+
+import junit.framework.TestCase;
+
+import org.mockito.Mockito;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import static android.os.storage.VolumeInfo.STATE_MOUNTED;
+import static android.os.storage.VolumeInfo.STATE_UNMOUNTED;
+
+public class ApplicationPackageManagerTest extends TestCase {
+ private static final String sInternalVolPath = "/data";
+ private static final String sAdoptedVolPath = "/mnt/expand/123";
+ private static final String sPublicVolPath = "/emulated";
+ private static final String sPrivateUnmountedVolPath = "/private";
+
+ private static final String sInternalVolUuid = null; //StorageManager.UUID_PRIVATE_INTERNAL
+ private static final String sAdoptedVolUuid = "adopted";
+ private static final String sPublicVolUuid = "emulated";
+ private static final String sPrivateUnmountedVolUuid = "private";
+
+ private static final VolumeInfo sInternalVol = new VolumeInfo("private",
+ VolumeInfo.TYPE_PRIVATE, null /*DiskInfo*/, null /*partGuid*/);
+
+ private static final VolumeInfo sAdoptedVol = new VolumeInfo("adopted",
+ VolumeInfo.TYPE_PRIVATE, null /*DiskInfo*/, null /*partGuid*/);
+
+ private static final VolumeInfo sPublicVol = new VolumeInfo("public",
+ VolumeInfo.TYPE_PUBLIC, null /*DiskInfo*/, null /*partGuid*/);
+
+ private static final VolumeInfo sPrivateUnmountedVol = new VolumeInfo("private2",
+ VolumeInfo.TYPE_PRIVATE, null /*DiskInfo*/, null /*partGuid*/);
+
+ private static final List<VolumeInfo> sVolumes = new ArrayList<>();
+
+ static {
+ sInternalVol.path = sInternalVolPath;
+ sInternalVol.state = STATE_MOUNTED;
+ sInternalVol.fsUuid = sInternalVolUuid;
+
+ sAdoptedVol.path = sAdoptedVolPath;
+ sAdoptedVol.state = STATE_MOUNTED;
+ sAdoptedVol.fsUuid = sAdoptedVolUuid;
+
+ sPublicVol.state = STATE_MOUNTED;
+ sPublicVol.path = sPublicVolPath;
+ sPublicVol.fsUuid = sPublicVolUuid;
+
+ sPrivateUnmountedVol.state = STATE_UNMOUNTED;
+ sPrivateUnmountedVol.path = sPrivateUnmountedVolPath;
+ sPrivateUnmountedVol.fsUuid = sPrivateUnmountedVolUuid;
+
+ sVolumes.add(sInternalVol);
+ sVolumes.add(sAdoptedVol);
+ sVolumes.add(sPublicVol);
+ sVolumes.add(sPrivateUnmountedVol);
+ }
+
+ private static final class MockedApplicationPackageManager extends ApplicationPackageManager {
+ private boolean mForceAllowOnExternal = false;
+ private boolean mAllow3rdPartyOnInternal = true;
+
+ public MockedApplicationPackageManager() {
+ super(null, null);
+ }
+
+ public void setForceAllowOnExternal(boolean forceAllowOnExternal) {
+ mForceAllowOnExternal = forceAllowOnExternal;
+ }
+
+ public void setAllow3rdPartyOnInternal(boolean allow3rdPartyOnInternal) {
+ mAllow3rdPartyOnInternal = allow3rdPartyOnInternal;
+ }
+
+ @Override
+ public boolean isForceAllowOnExternal(Context context) {
+ return mForceAllowOnExternal;
+ }
+
+ @Override
+ public boolean isAllow3rdPartyOnInternal(Context context) {
+ return mAllow3rdPartyOnInternal;
+ }
+ }
+
+ private StorageManager getMockedStorageManager() {
+ StorageManager storageManager = Mockito.mock(StorageManager.class);
+ Mockito.when(storageManager.getVolumes()).thenReturn(sVolumes);
+ Mockito.when(storageManager.findVolumeById(VolumeInfo.ID_PRIVATE_INTERNAL))
+ .thenReturn(sInternalVol);
+ Mockito.when(storageManager.findVolumeByUuid(sAdoptedVolUuid))
+ .thenReturn(sAdoptedVol);
+ Mockito.when(storageManager.findVolumeByUuid(sPublicVolUuid))
+ .thenReturn(sPublicVol);
+ Mockito.when(storageManager.findVolumeByUuid(sPrivateUnmountedVolUuid))
+ .thenReturn(sPrivateUnmountedVol);
+ return storageManager;
+ }
+
+ private void verifyReturnedVolumes(List<VolumeInfo> actualVols, VolumeInfo... exptectedVols) {
+ boolean failed = false;
+ if (actualVols.size() != exptectedVols.length) {
+ failed = true;
+ } else {
+ for (VolumeInfo vol : exptectedVols) {
+ if (!actualVols.contains(vol)) {
+ failed = true;
+ break;
+ }
+ }
+ }
+
+ if (failed) {
+ fail("Wrong volumes returned.\n Expected: " + Arrays.toString(exptectedVols)
+ + "\n Actual: " + Arrays.toString(actualVols.toArray()));
+ }
+ }
+
+ public void testGetCandidateVolumes_systemApp() throws Exception {
+ ApplicationInfo sysAppInfo = new ApplicationInfo();
+ sysAppInfo.flags = ApplicationInfo.FLAG_SYSTEM;
+
+ StorageManager storageManager = getMockedStorageManager();
+ IPackageManager pm = Mockito.mock(IPackageManager.class);
+
+ MockedApplicationPackageManager appPkgMgr = new MockedApplicationPackageManager();
+
+ appPkgMgr.setAllow3rdPartyOnInternal(true);
+ appPkgMgr.setForceAllowOnExternal(true);
+ List<VolumeInfo> candidates =
+ appPkgMgr.getPackageCandidateVolumes(sysAppInfo, storageManager, pm);
+ verifyReturnedVolumes(candidates, sInternalVol);
+
+ appPkgMgr.setAllow3rdPartyOnInternal(true);
+ appPkgMgr.setForceAllowOnExternal(false);
+ candidates = appPkgMgr.getPackageCandidateVolumes(sysAppInfo, storageManager, pm);
+ verifyReturnedVolumes(candidates, sInternalVol);
+
+ appPkgMgr.setAllow3rdPartyOnInternal(false);
+ appPkgMgr.setForceAllowOnExternal(false);
+ candidates = appPkgMgr.getPackageCandidateVolumes(sysAppInfo, storageManager, pm);
+ verifyReturnedVolumes(candidates, sInternalVol);
+
+ appPkgMgr.setAllow3rdPartyOnInternal(false);
+ appPkgMgr.setForceAllowOnExternal(true);
+ candidates = appPkgMgr.getPackageCandidateVolumes(sysAppInfo, storageManager, pm);
+ verifyReturnedVolumes(candidates, sInternalVol);
+ }
+
+ public void testGetCandidateVolumes_3rdParty_internalOnly() throws Exception {
+ ApplicationInfo appInfo = new ApplicationInfo();
+ StorageManager storageManager = getMockedStorageManager();
+
+ IPackageManager pm = Mockito.mock(IPackageManager.class);
+ Mockito.when(pm.isPackageDeviceAdminOnAnyUser(Mockito.anyString())).thenReturn(false);
+
+ MockedApplicationPackageManager appPkgMgr = new MockedApplicationPackageManager();
+
+ // must allow 3rd party on internal, otherwise the app wouldn't have been installed before.
+ appPkgMgr.setAllow3rdPartyOnInternal(true);
+
+ // INSTALL_LOCATION_INTERNAL_ONLY AND INSTALL_LOCATION_UNSPECIFIED are treated the same.
+ int[] locations = {PackageInfo.INSTALL_LOCATION_INTERNAL_ONLY,
+ PackageInfo.INSTALL_LOCATION_UNSPECIFIED};
+
+ for (int location : locations) {
+ appInfo.installLocation = location;
+ appPkgMgr.setForceAllowOnExternal(true);
+ List<VolumeInfo> candidates = appPkgMgr.getPackageCandidateVolumes(
+ appInfo, storageManager, pm);
+ verifyReturnedVolumes(candidates, sInternalVol, sAdoptedVol);
+
+ appPkgMgr.setForceAllowOnExternal(false);
+ candidates = appPkgMgr.getPackageCandidateVolumes(appInfo, storageManager, pm);
+ verifyReturnedVolumes(candidates, sInternalVol);
+ }
+ }
+
+ public void testGetCandidateVolumes_3rdParty_auto() throws Exception {
+ ApplicationInfo appInfo = new ApplicationInfo();
+ StorageManager storageManager = getMockedStorageManager();
+
+ IPackageManager pm = Mockito.mock(IPackageManager.class);
+
+ MockedApplicationPackageManager appPkgMgr = new MockedApplicationPackageManager();
+ appPkgMgr.setForceAllowOnExternal(true);
+
+ // INSTALL_LOCATION_AUTO AND INSTALL_LOCATION_PREFER_EXTERNAL are treated the same.
+ int[] locations = {PackageInfo.INSTALL_LOCATION_AUTO,
+ PackageInfo.INSTALL_LOCATION_PREFER_EXTERNAL};
+
+ for (int location : locations) {
+ appInfo.installLocation = location;
+ appInfo.flags = 0;
+
+ appInfo.volumeUuid = sInternalVolUuid;
+ Mockito.when(pm.isPackageDeviceAdminOnAnyUser(Mockito.anyString())).thenReturn(false);
+ appPkgMgr.setAllow3rdPartyOnInternal(true);
+ List<VolumeInfo> candidates = appPkgMgr.getPackageCandidateVolumes(
+ appInfo, storageManager, pm);
+ verifyReturnedVolumes(candidates, sInternalVol, sAdoptedVol);
+
+ appInfo.volumeUuid = sInternalVolUuid;
+ appPkgMgr.setAllow3rdPartyOnInternal(true);
+ Mockito.when(pm.isPackageDeviceAdminOnAnyUser(Mockito.anyString())).thenReturn(true);
+ candidates = appPkgMgr.getPackageCandidateVolumes(appInfo, storageManager, pm);
+ verifyReturnedVolumes(candidates, sInternalVol);
+
+ appInfo.flags = ApplicationInfo.FLAG_EXTERNAL_STORAGE;
+ appInfo.volumeUuid = sAdoptedVolUuid;
+ appPkgMgr.setAllow3rdPartyOnInternal(false);
+ candidates = appPkgMgr.getPackageCandidateVolumes(appInfo, storageManager, pm);
+ verifyReturnedVolumes(candidates, sAdoptedVol);
+ }
+ }
+}
diff --git a/core/tests/coretests/src/android/content/pm/PackageParserTest.java b/core/tests/coretests/src/android/content/pm/PackageParserTest.java
index 2a3c22c..ca4141a 100644
--- a/core/tests/coretests/src/android/content/pm/PackageParserTest.java
+++ b/core/tests/coretests/src/android/content/pm/PackageParserTest.java
@@ -215,4 +215,46 @@
// DEV: Released API 20
verifyComputeTargetSdkVersion(NEWER_VERSION, NEWER_PRE_RELEASE, true, -1);
}
+
+ /**
+ * Unit test for PackageParser.getActivityConfigChanges().
+ * If the bit is 1 in the original configChanges, it is still 1 in the final configChanges.
+ * If the bit is 0 in the original configChanges and the bit is not set to 1 in
+ * restartOnConfigChanges, the bit is changed to 1 in the final configChanges by default.
+ */
+ @Test
+ public void testGetActivityConfigChanges() {
+ // Not set in either configChanges or restartOnConfigChanges.
+ int configChanges = 0x0000; // 00000000.
+ int restartOnConfigChanges = 0x0000; // 00000000.
+ int finalConfigChanges =
+ PackageParser.getActivityConfigChanges(configChanges, restartOnConfigChanges);
+ assertEquals(0x0003, finalConfigChanges); // Should be 00000011.
+
+ // Not set in configChanges, but set in restartOnConfigChanges.
+ configChanges = 0x0000; // 00000000.
+ restartOnConfigChanges = 0x0003; // 00000011.
+ finalConfigChanges =
+ PackageParser.getActivityConfigChanges(configChanges, restartOnConfigChanges);
+ assertEquals(0x0000, finalConfigChanges); // Should be 00000000.
+
+ // Set in configChanges.
+ configChanges = 0x0003; // 00000011.
+ restartOnConfigChanges = 0X0000; // 00000000.
+ finalConfigChanges =
+ PackageParser.getActivityConfigChanges(configChanges, restartOnConfigChanges);
+ assertEquals(0x0003, finalConfigChanges); // Should be 00000011.
+
+ restartOnConfigChanges = 0x0003; // 00000011.
+ finalConfigChanges =
+ PackageParser.getActivityConfigChanges(configChanges, restartOnConfigChanges);
+ assertEquals(0x0003, finalConfigChanges); // Should still be 00000011.
+
+ // Other bit set in configChanges.
+ configChanges = 0x0080; // 10000000, orientation.
+ restartOnConfigChanges = 0x0000; // 00000000.
+ finalConfigChanges =
+ PackageParser.getActivityConfigChanges(configChanges, restartOnConfigChanges);
+ assertEquals(0x0083, finalConfigChanges); // Should be 10000011.
+ }
}
diff --git a/core/tests/coretests/src/android/net/RecommendationRequestTest.java b/core/tests/coretests/src/android/net/RecommendationRequestTest.java
index 39c1691..bd25500 100644
--- a/core/tests/coretests/src/android/net/RecommendationRequestTest.java
+++ b/core/tests/coretests/src/android/net/RecommendationRequestTest.java
@@ -3,6 +3,7 @@
import android.net.wifi.ScanResult;
import android.net.wifi.WifiConfiguration;
import android.os.Parcel;
+import android.os.SystemClock;
import android.test.AndroidTestCase;
public class RecommendationRequestTest extends AndroidTestCase {
@@ -10,6 +11,8 @@
private WifiConfiguration mDefaultConfig;
private WifiConfiguration mConnectedConfig;
private WifiConfiguration[] mConnectableConfigs;
+ private int mLastSelectedNetworkId;
+ private long mLastSelectedNetworkTimestamp;
@Override
public void setUp() throws Exception {
@@ -35,6 +38,8 @@
mConnectedConfig = new WifiConfiguration();
mConnectedConfig.SSID = "connected_config";
mConnectableConfigs = new WifiConfiguration[] {mDefaultConfig, mConnectedConfig};
+ mLastSelectedNetworkId = 5;
+ mLastSelectedNetworkTimestamp = SystemClock.elapsedRealtime();
}
public void testParceling() throws Exception {
@@ -43,6 +48,7 @@
.setScanResults(mScanResults)
.setConnectedWifiConfig(mConnectedConfig)
.setConnectableConfigs(mConnectableConfigs)
+ .setLastSelectedNetwork(mLastSelectedNetworkId, mLastSelectedNetworkTimestamp)
.build();
RecommendationRequest parceled = passThroughParcel(request);
@@ -60,6 +66,8 @@
for (int i = 0; i < parceledConfigs.length; i++) {
assertEquals(mConnectableConfigs[i].SSID, parceledConfigs[i].SSID);
}
+ assertEquals(mLastSelectedNetworkId, parceled.getLastSelectedNetworkId());
+ assertEquals(mLastSelectedNetworkTimestamp, parceled.getLastSelectedNetworkTimestamp());
}
public void testParceling_nullScanResults() throws Exception {
@@ -82,6 +90,16 @@
assertNull(parceledConfigs);
}
+ public void testParceling_unsetLastSelectedNetwork() throws Exception {
+ RecommendationRequest request = new RecommendationRequest.Builder()
+ .build();
+
+ RecommendationRequest parceled = passThroughParcel(request);
+
+ assertEquals(0, parceled.getLastSelectedNetworkId());
+ assertEquals(0, parceled.getLastSelectedNetworkTimestamp());
+ }
+
private RecommendationRequest passThroughParcel(RecommendationRequest request) {
Parcel p = Parcel.obtain();
RecommendationRequest output = null;
diff --git a/data/etc/Android.mk b/data/etc/Android.mk
index 6718259..b2c6840 100644
--- a/data/etc/Android.mk
+++ b/data/etc/Android.mk
@@ -18,6 +18,14 @@
########################
include $(CLEAR_VARS)
+LOCAL_MODULE := framework-sysconfig.xml
+LOCAL_MODULE_CLASS := ETC
+LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/sysconfig
+LOCAL_SRC_FILES := $(LOCAL_MODULE)
+include $(BUILD_PREBUILT)
+
+########################
+include $(CLEAR_VARS)
LOCAL_MODULE := platform.xml
LOCAL_MODULE_CLASS := ETC
LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/permissions
@@ -31,4 +39,3 @@
LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/permissions
LOCAL_SRC_FILES := $(LOCAL_MODULE)
include $(BUILD_PREBUILT)
-
diff --git a/data/etc/framework-sysconfig.xml b/data/etc/framework-sysconfig.xml
new file mode 100644
index 0000000..2f18de0
--- /dev/null
+++ b/data/etc/framework-sysconfig.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2017 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<!-- These are configurations that must exist on all Android devices. -->
+<config>
+
+ <!-- Broadcast actions that are currently exempted from O+ background
+ delivery restrictions. -->
+ <allow-implicit-broadcast action="android.intent.action.SIM_STATE_CHANGED" />
+ <allow-implicit-broadcast action="android.intent.action.PACKAGE_CHANGED" />
+
+</config>
diff --git a/docs/html/guide/topics/resources/providing-resources.jd b/docs/html/guide/topics/resources/providing-resources.jd
index 77e8d77..021a07e 100644
--- a/docs/html/guide/topics/resources/providing-resources.jd
+++ b/docs/html/guide/topics/resources/providing-resources.jd
@@ -565,6 +565,38 @@
method, which indicates whether the screen is round.</p>
</td>
</tr>
+ <tr id="WideColorGamutQualifier">
+ <td>Wide Color Gamut</td>
+ <td>
+ <code>widecg</code><br/>
+ <code>nowidecg</code>
+ </td>
+ <td>
+ <ul class="nolist">
+ <li>{@code widecg}: Displays with a wide color gamut such as Display P3 or AdobeRGB</li>
+ <li>{@code nowidecg}: Displays with a narrow color gamut such as sRGB</li>
+ </ul>
+ <p><em>Added in API level 26.</em></p>
+ <p>Also see the {@link android.content.res.Configuration#isScreenWideColorGamut()} configuration
+ method, which indicates whether the screen has a wide color gamut.</p>
+ </td>
+ </tr>
+ <tr id="HDRQualifier">
+ <td>High Dynamic Range (HDR)</td>
+ <td>
+ <code>highdr</code><br/>
+ <code>lowdr</code>
+ </td>
+ <td>
+ <ul class="nolist">
+ <li>{@code highdr}: Displays with a high-dynamic range</li>
+ <li>{@code lowdr}: Displays with a low/standard dynamic range</li>
+ </ul>
+ <p><em>Added in API level 26.</em></p>
+ <p>Also see the {@link android.content.res.Configuration#isScreenHdr()} configuration
+ method, which indicates whether the screen has a HDR capabilities.</p>
+ </td>
+ </tr>
<tr id="OrientationQualifier">
<td>Screen orientation</td>
<td>
diff --git a/graphics/java/android/graphics/FontFamily.java b/graphics/java/android/graphics/FontFamily.java
index 2733c43f..e48bf79 100644
--- a/graphics/java/android/graphics/FontFamily.java
+++ b/graphics/java/android/graphics/FontFamily.java
@@ -18,7 +18,6 @@
import android.content.res.AssetManager;
import android.util.Log;
-import dalvik.annotation.optimization.CriticalNative;
import java.io.FileInputStream;
import java.io.IOException;
@@ -40,11 +39,11 @@
*/
public long mNativePtr;
- // Points native font family builder. Must be zero after freezing this family.
- private long mBuilderPtr;
-
public FontFamily() {
- mBuilderPtr = nInitBuilder(null, 0);
+ mNativePtr = nCreateFamily(null, 0);
+ if (mNativePtr == 0) {
+ throw new IllegalStateException("error creating native FontFamily");
+ }
}
public FontFamily(String lang, String variant) {
@@ -54,15 +53,10 @@
} else if ("elegant".equals(variant)) {
varEnum = 2;
}
- mBuilderPtr = nInitBuilder(lang, varEnum);
- }
-
- public void freeze() {
- if (mBuilderPtr == 0) {
- throw new IllegalStateException("This FontFamily is already frozen");
+ mNativePtr = nCreateFamily(lang, varEnum);
+ if (mNativePtr == 0) {
+ throw new IllegalStateException("error creating native FontFamily");
}
- mNativePtr = nCreateFamily(mBuilderPtr);
- mBuilderPtr = 0;
}
@Override
@@ -75,14 +69,11 @@
}
public boolean addFont(String path, int ttcIndex) {
- if (mBuilderPtr == 0) {
- throw new IllegalStateException("Unable to call addFont after freezing.");
- }
try (FileInputStream file = new FileInputStream(path)) {
FileChannel fileChannel = file.getChannel();
long fontSize = fileChannel.size();
ByteBuffer fontBuffer = fileChannel.map(FileChannel.MapMode.READ_ONLY, 0, fontSize);
- return nAddFont(mBuilderPtr, fontBuffer, ttcIndex);
+ return nAddFont(mNativePtr, fontBuffer, ttcIndex);
} catch (IOException e) {
Log.e(TAG, "Error mapping font file " + path);
return false;
@@ -91,29 +82,19 @@
public boolean addFontWeightStyle(ByteBuffer font, int ttcIndex, List<FontListParser.Axis> axes,
int weight, boolean style) {
- if (mBuilderPtr == 0) {
- throw new IllegalStateException("Unable to call addFontWeightStyle after freezing.");
- }
- return nAddFontWeightStyle(mBuilderPtr, font, ttcIndex, axes, weight, style);
+ return nAddFontWeightStyle(mNativePtr, font, ttcIndex, axes, weight, style);
}
public boolean addFontFromAsset(AssetManager mgr, String path) {
- if (mBuilderPtr == 0) {
- throw new IllegalStateException("Unable to call addFontFromAsset after freezing.");
- }
- return nAddFontFromAsset(mBuilderPtr, mgr, path);
+ return nAddFontFromAsset(mNativePtr, mgr, path);
}
- private static native long nInitBuilder(String lang, int variant);
-
- @CriticalNative
- private static native long nCreateFamily(long mBuilderPtr);
-
- @CriticalNative
+ private static native long nCreateFamily(String lang, int variant);
private static native void nUnrefFamily(long nativePtr);
- private static native boolean nAddFont(long builderPtr, ByteBuffer font, int ttcIndex);
- private static native boolean nAddFontWeightStyle(long builderPtr, ByteBuffer font,
+ private static native boolean nAddFont(long nativeFamily, ByteBuffer font, int ttcIndex);
+ private static native boolean nAddFontWeightStyle(long nativeFamily, ByteBuffer font,
int ttcIndex, List<FontListParser.Axis> listOfAxis,
int weight, boolean isItalic);
- private static native boolean nAddFontFromAsset(long builderPtr, AssetManager mgr, String path);
+ private static native boolean nAddFontFromAsset(long nativeFamily, AssetManager mgr,
+ String path);
}
diff --git a/graphics/java/android/graphics/FontListParser.java b/graphics/java/android/graphics/FontListParser.java
index 5b53296..9490436 100644
--- a/graphics/java/android/graphics/FontListParser.java
+++ b/graphics/java/android/graphics/FontListParser.java
@@ -21,7 +21,6 @@
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
-import android.annotation.Nullable;
import com.android.internal.annotations.VisibleForTesting;
import java.io.IOException;
@@ -105,12 +104,9 @@
// Note that a well-formed variation contains a four-character tag and a float as styleValue,
// with spacers in between. The tag is enclosd either by double quotes or single quotes.
@VisibleForTesting
- public static ArrayList<Axis> parseFontVariationSettings(@Nullable String settings) {
- ArrayList<Axis> axisList = new ArrayList<>();
- if (settings == null) {
- return axisList;
- }
+ public static Axis[] parseFontVariationSettings(String settings) {
String[] settingList = settings.split(",");
+ ArrayList<Axis> axisList = new ArrayList<>();
settingLoop:
for (String setting : settingList) {
int pos = 0;
@@ -154,7 +150,7 @@
tagString.charAt(3));
axisList.add(new Axis(tag, styleValue));
}
- return axisList;
+ return axisList.toArray(new Axis[axisList.size()]);
}
@VisibleForTesting
diff --git a/graphics/java/android/graphics/Paint.java b/graphics/java/android/graphics/Paint.java
index 4ee0c34..7815ae1 100644
--- a/graphics/java/android/graphics/Paint.java
+++ b/graphics/java/android/graphics/Paint.java
@@ -71,7 +71,6 @@
private LocaleList mLocales;
private String mFontFeatureSettings;
- private String mFontVariationSettings;
private static final Object sCacheLock = new Object();
@@ -1495,37 +1494,6 @@
}
/**
- * Returns the font variation settings.
- *
- * @return the paint's currently set font variation settings. Default is null.
- *
- * @see #setFontVariationSettings(String)
- */
- public String getFontVariationSettings() {
- return mFontVariationSettings;
- }
-
- /**
- * Set font variation settings.
- *
- * @param settings font variation settings, e.g. "'wdth' 300, 'wght' 1.8"
- *
- * @see #getFontVariationSettings()
- *
- * @param settings the font variation settings. You can pass null or empty string as no
- * variation settings.
- */
- public void setFontVariationSettings(String settings) {
- settings = TextUtils.nullIfEmpty(settings);
- if (settings == mFontVariationSettings
- || (settings != null && settings.equals(mFontVariationSettings))) {
- return;
- }
- mFontVariationSettings = settings;
- setTypeface(Typeface.createFromTypefaceWithVariation(mTypeface, settings));
- }
-
- /**
* Get the current value of hyphen edit.
*
* @return the current hyphen edit value
diff --git a/graphics/java/android/graphics/Typeface.java b/graphics/java/android/graphics/Typeface.java
index 166ef1b..2886f0d 100644
--- a/graphics/java/android/graphics/Typeface.java
+++ b/graphics/java/android/graphics/Typeface.java
@@ -21,7 +21,6 @@
import android.util.LongSparseArray;
import android.util.LruCache;
import android.util.SparseArray;
-import android.graphics.FontListParser;
import org.xmlpull.v1.XmlPullParserException;
@@ -172,15 +171,6 @@
return typeface;
}
- /** @hide */
- public static Typeface createFromTypefaceWithVariation(Typeface family,
- String fontVariationSettings) {
- final long ni = family == null ? 0 : family.native_instance;
- ArrayList<FontListParser.Axis> axes =
- FontListParser.parseFontVariationSettings(fontVariationSettings);
- return new Typeface(nativeCreateFromTypefaceWithVariation(ni, axes));
- }
-
/**
* Returns one of the default typeface objects, based on the specified style
*
@@ -206,7 +196,6 @@
FontFamily fontFamily = new FontFamily();
if (fontFamily.addFontFromAsset(mgr, path)) {
- fontFamily.freeze();
FontFamily[] families = { fontFamily };
typeface = createFromFamiliesWithDefault(families);
sDynamicTypefaceCache.put(key, typeface);
@@ -256,7 +245,6 @@
if (sFallbackFonts != null) {
FontFamily fontFamily = new FontFamily();
if (fontFamily.addFont(path, 0 /* ttcIndex */)) {
- fontFamily.freeze();
FontFamily[] families = { fontFamily };
return createFromFamiliesWithDefault(families);
}
@@ -327,7 +315,6 @@
Log.e(TAG, "Error creating font " + font.fontName + "#" + font.ttcIndex);
}
}
- fontFamily.freeze();
return fontFamily;
}
@@ -453,8 +440,6 @@
}
private static native long nativeCreateFromTypeface(long native_instance, int style);
- private static native long nativeCreateFromTypefaceWithVariation(
- long native_instance, List<FontListParser.Axis> axes);
private static native long nativeCreateWeightAlias(long native_instance, int weight);
private static native void nativeUnref(long native_instance);
private static native int nativeGetStyle(long native_instance);
diff --git a/graphics/tests/graphicstests/src/android/graphics/VariationParserTest.java b/graphics/tests/graphicstests/src/android/graphics/VariationParserTest.java
index 23de416..d046c11 100644
--- a/graphics/tests/graphicstests/src/android/graphics/VariationParserTest.java
+++ b/graphics/tests/graphicstests/src/android/graphics/VariationParserTest.java
@@ -17,7 +17,6 @@
package android.graphics;
import android.test.suitebuilder.annotation.SmallTest;
-import java.util.List;
import junit.framework.TestCase;
@@ -26,92 +25,92 @@
@SmallTest
public void testParseFontVariationSetting() {
int tag = FontListParser.makeTag('w', 'd', 't', 'h');
- List<FontListParser.Axis> axes = FontListParser.parseFontVariationSettings("'wdth' 1");
- assertEquals(tag, axes.get(0).tag);
- assertEquals(1.0f, axes.get(0).styleValue);
+ FontListParser.Axis[] axis = FontListParser.parseFontVariationSettings("'wdth' 1");
+ assertEquals(tag, axis[0].tag);
+ assertEquals(1.0f, axis[0].styleValue);
- axes = FontListParser.parseFontVariationSettings("\"wdth\" 100");
- assertEquals(tag, axes.get(0).tag);
- assertEquals(100.0f, axes.get(0).styleValue);
+ axis = FontListParser.parseFontVariationSettings("\"wdth\" 100");
+ assertEquals(tag, axis[0].tag);
+ assertEquals(100.0f, axis[0].styleValue);
- axes = FontListParser.parseFontVariationSettings(" 'wdth' 100");
- assertEquals(tag, axes.get(0).tag);
- assertEquals(100.0f, axes.get(0).styleValue);
+ axis = FontListParser.parseFontVariationSettings(" 'wdth' 100");
+ assertEquals(tag, axis[0].tag);
+ assertEquals(100.0f, axis[0].styleValue);
- axes = FontListParser.parseFontVariationSettings("\t'wdth' 0.5");
- assertEquals(tag, axes.get(0).tag);
- assertEquals(0.5f, axes.get(0).styleValue);
+ axis = FontListParser.parseFontVariationSettings("\t'wdth' 0.5");
+ assertEquals(tag, axis[0].tag);
+ assertEquals(0.5f, axis[0].styleValue);
tag = FontListParser.makeTag('A', 'X', ' ', ' ');
- axes = FontListParser.parseFontVariationSettings("'AX ' 1");
- assertEquals(tag, axes.get(0).tag);
- assertEquals(1.0f, axes.get(0).styleValue);
+ axis = FontListParser.parseFontVariationSettings("'AX ' 1");
+ assertEquals(tag, axis[0].tag);
+ assertEquals(1.0f, axis[0].styleValue);
- axes = FontListParser.parseFontVariationSettings("'AX '\t1");
- assertEquals(tag, axes.get(0).tag);
- assertEquals(1.0f, axes.get(0).styleValue);
+ axis = FontListParser.parseFontVariationSettings("'AX '\t1");
+ assertEquals(tag, axis[0].tag);
+ assertEquals(1.0f, axis[0].styleValue);
- axes = FontListParser.parseFontVariationSettings("'AX '\n1");
- assertEquals(tag, axes.get(0).tag);
- assertEquals(1.0f, axes.get(0).styleValue);
+ axis = FontListParser.parseFontVariationSettings("'AX '\n1");
+ assertEquals(tag, axis[0].tag);
+ assertEquals(1.0f, axis[0].styleValue);
- axes = FontListParser.parseFontVariationSettings("'AX '\r1");
- assertEquals(tag, axes.get(0).tag);
- assertEquals(1.0f, axes.get(0).styleValue);
+ axis = FontListParser.parseFontVariationSettings("'AX '\r1");
+ assertEquals(tag, axis[0].tag);
+ assertEquals(1.0f, axis[0].styleValue);
- axes = FontListParser.parseFontVariationSettings("'AX '\r\t\n 1");
- assertEquals(tag, axes.get(0).tag);
- assertEquals(1.0f, axes.get(0).styleValue);
+ axis = FontListParser.parseFontVariationSettings("'AX '\r\t\n 1");
+ assertEquals(tag, axis[0].tag);
+ assertEquals(1.0f, axis[0].styleValue);
// Test for invalid input
- axes = FontListParser.parseFontVariationSettings("");
- assertEquals(0, axes.size());
- axes = FontListParser.parseFontVariationSettings("invalid_form");
- assertEquals(0, axes.size());
+ axis = FontListParser.parseFontVariationSettings("");
+ assertEquals(0, axis.length);
+ axis = FontListParser.parseFontVariationSettings("invalid_form");
+ assertEquals(0, axis.length);
// Test with invalid tag
- axes = FontListParser.parseFontVariationSettings("'' 1");
- assertEquals(0, axes.size());
- axes = FontListParser.parseFontVariationSettings("'invalid' 1");
- assertEquals(0, axes.size());
+ axis = FontListParser.parseFontVariationSettings("'' 1");
+ assertEquals(0, axis.length);
+ axis = FontListParser.parseFontVariationSettings("'invalid' 1");
+ assertEquals(0, axis.length);
// Test with invalid styleValue
- axes = FontListParser.parseFontVariationSettings("'wdth' ");
- assertEquals(0, axes.size());
- axes = FontListParser.parseFontVariationSettings("'wdth' x");
- assertEquals(0, axes.size());
- axes = FontListParser.parseFontVariationSettings("'wdth' \t");
- assertEquals(0, axes.size());
- axes = FontListParser.parseFontVariationSettings("'wdth' \n\r");
- assertEquals(0, axes.size());
+ axis = FontListParser.parseFontVariationSettings("'wdth' ");
+ assertEquals(0, axis.length);
+ axis = FontListParser.parseFontVariationSettings("'wdth' x");
+ assertEquals(0, axis.length);
+ axis = FontListParser.parseFontVariationSettings("'wdth' \t");
+ assertEquals(0, axis.length);
+ axis = FontListParser.parseFontVariationSettings("'wdth' \n\r");
+ assertEquals(0, axis.length);
}
@SmallTest
public void testParseFontVariationStyleSettings() {
- List<FontListParser.Axis> axes =
+ FontListParser.Axis[] axis =
FontListParser.parseFontVariationSettings("'wdth' 10,'AX '\r1");
int tag1 = FontListParser.makeTag('w', 'd', 't', 'h');
int tag2 = FontListParser.makeTag('A', 'X', ' ', ' ');
- assertEquals(tag1, axes.get(0).tag);
- assertEquals(10.0f, axes.get(0).styleValue);
- assertEquals(tag2, axes.get(1).tag);
- assertEquals(1.0f, axes.get(1).styleValue);
+ assertEquals(tag1, axis[0].tag);
+ assertEquals(10.0f, axis[0].styleValue);
+ assertEquals(tag2, axis[1].tag);
+ assertEquals(1.0f, axis[1].styleValue);
// Test only spacers are allowed before tag
- axes = FontListParser.parseFontVariationSettings(" 'wdth' 10,ab'wdth' 1");
+ axis = FontListParser.parseFontVariationSettings(" 'wdth' 10,ab'wdth' 1");
tag1 = FontListParser.makeTag('w', 'd', 't', 'h');
- assertEquals(tag1, axes.get(0).tag);
- assertEquals(10.0f, axes.get(0).styleValue);
- assertEquals(1, axes.size());
+ assertEquals(tag1, axis[0].tag);
+ assertEquals(10.0f, axis[0].styleValue);
+ assertEquals(1, axis.length);
}
@SmallTest
public void testInvalidTagCharacters() {
- List<FontListParser.Axis> axes =
+ FontListParser.Axis[] axis =
FontListParser.parseFontVariationSettings("'\u0000\u0000\u0000\u0000' 10");
- assertEquals(0, axes.size());
- axes = FontListParser.parseFontVariationSettings("'\u3042\u3044\u3046\u3048' 10");
- assertEquals(0, axes.size());
+ assertEquals(0, axis.length);
+ axis = FontListParser.parseFontVariationSettings("'\u3042\u3044\u3046\u3048' 10");
+ assertEquals(0, axis.length);
}
@SmallTest
diff --git a/keystore/java/android/security/keystore/KeyProperties.java b/keystore/java/android/security/keystore/KeyProperties.java
index d6b1cf1..bf7a779a 100644
--- a/keystore/java/android/security/keystore/KeyProperties.java
+++ b/keystore/java/android/security/keystore/KeyProperties.java
@@ -45,6 +45,7 @@
PURPOSE_DECRYPT,
PURPOSE_SIGN,
PURPOSE_VERIFY,
+ PURPOSE_WRAP_KEY,
})
public @interface PurposeEnum {}
@@ -69,6 +70,12 @@
public static final int PURPOSE_VERIFY = 1 << 3;
/**
+ * Purpose of key: wrapping key for secure key import.
+ */
+ public static final int PURPOSE_WRAP_KEY = 1 << 4;
+
+
+ /**
* @hide
*/
public static abstract class Purpose {
@@ -84,6 +91,8 @@
return KeymasterDefs.KM_PURPOSE_SIGN;
case PURPOSE_VERIFY:
return KeymasterDefs.KM_PURPOSE_VERIFY;
+ case PURPOSE_WRAP_KEY:
+ return KeymasterDefs.KM_PURPOSE_WRAP_KEY;
default:
throw new IllegalArgumentException("Unknown purpose: " + purpose);
}
@@ -99,6 +108,8 @@
return PURPOSE_SIGN;
case KeymasterDefs.KM_PURPOSE_VERIFY:
return PURPOSE_VERIFY;
+ case KeymasterDefs.KM_PURPOSE_WRAP_KEY:
+ return PURPOSE_WRAP_KEY;
default:
throw new IllegalArgumentException("Unknown purpose: " + purpose);
}
diff --git a/libs/androidfw/ResourceTypes.cpp b/libs/androidfw/ResourceTypes.cpp
index a30c849..a4bcc62 100644
--- a/libs/androidfw/ResourceTypes.cpp
+++ b/libs/androidfw/ResourceTypes.cpp
@@ -1907,6 +1907,8 @@
if (diff != 0) return diff;
diff = (int32_t)(screenLayout2 - o.screenLayout2);
if (diff != 0) return diff;
+ diff = (int32_t)(colorimetry - o.colorimetry);
+ if (diff != 0) return diff;
diff = (int32_t)(uiMode - o.uiMode);
if (diff != 0) return diff;
diff = (int32_t)(smallestScreenWidthDp - o.smallestScreenWidthDp);
@@ -1967,6 +1969,9 @@
if (screenLayout2 != o.screenLayout2) {
return screenLayout2 < o.screenLayout2 ? -1 : 1;
}
+ if (colorimetry != o.colorimetry) {
+ return colorimetry < o.colorimetry ? -1 : 1;
+ }
if (uiMode != o.uiMode) {
return uiMode < o.uiMode ? -1 : 1;
}
@@ -1992,6 +1997,8 @@
if ((screenLayout & MASK_LAYOUTDIR) != (o.screenLayout & MASK_LAYOUTDIR)) diffs |= CONFIG_LAYOUTDIR;
if ((screenLayout & ~MASK_LAYOUTDIR) != (o.screenLayout & ~MASK_LAYOUTDIR)) diffs |= CONFIG_SCREEN_LAYOUT;
if ((screenLayout2 & MASK_SCREENROUND) != (o.screenLayout2 & MASK_SCREENROUND)) diffs |= CONFIG_SCREEN_ROUND;
+ if ((colorimetry & MASK_WIDE_COLOR_GAMUT) != (o.colorimetry & MASK_WIDE_COLOR_GAMUT)) diffs |= CONFIG_COLORIMETRY;
+ if ((colorimetry & MASK_HDR) != (o.colorimetry & MASK_HDR)) diffs |= CONFIG_COLORIMETRY;
if (uiMode != o.uiMode) diffs |= CONFIG_UI_MODE;
if (smallestScreenWidthDp != o.smallestScreenWidthDp) diffs |= CONFIG_SMALLEST_SCREEN_SIZE;
if (screenSizeDp != o.screenSizeDp) diffs |= CONFIG_SCREEN_SIZE;
@@ -2103,6 +2110,17 @@
}
}
+ if (colorimetry || o.colorimetry) {
+ if (((colorimetry^o.colorimetry) & MASK_HDR) != 0) {
+ if (!(colorimetry & MASK_HDR)) return false;
+ if (!(o.colorimetry & MASK_HDR)) return true;
+ }
+ if (((colorimetry^o.colorimetry) & MASK_WIDE_COLOR_GAMUT) != 0) {
+ if (!(colorimetry & MASK_WIDE_COLOR_GAMUT)) return false;
+ if (!(o.colorimetry & MASK_WIDE_COLOR_GAMUT)) return true;
+ }
+ }
+
if (orientation != o.orientation) {
if (!orientation) return false;
if (!o.orientation) return true;
@@ -2390,6 +2408,17 @@
}
}
+ if (colorimetry || o.colorimetry) {
+ if (((colorimetry^o.colorimetry) & MASK_WIDE_COLOR_GAMUT) != 0 &&
+ (requested->colorimetry & MASK_WIDE_COLOR_GAMUT)) {
+ return colorimetry & MASK_WIDE_COLOR_GAMUT;
+ }
+ if (((colorimetry^o.colorimetry) & MASK_HDR) != 0 &&
+ (requested->colorimetry & MASK_HDR)) {
+ return colorimetry & MASK_HDR;
+ }
+ }
+
if ((orientation != o.orientation) && requested->orientation) {
return (orientation);
}
@@ -2639,6 +2668,18 @@
if (screenRound != 0 && screenRound != setScreenRound) {
return false;
}
+
+ const int hdr = colorimetry & MASK_HDR;
+ const int setHdr = settings.colorimetry & MASK_HDR;
+ if (hdr != 0 && hdr != setHdr) {
+ return false;
+ }
+
+ const int wideColorGamut = colorimetry & MASK_WIDE_COLOR_GAMUT;
+ const int setWideColorGamut = settings.colorimetry & MASK_WIDE_COLOR_GAMUT;
+ if (wideColorGamut != 0 && wideColorGamut != setWideColorGamut) {
+ return false;
+ }
}
if (screenSizeDp != 0) {
@@ -2959,6 +3000,34 @@
break;
}
}
+ if ((colorimetry&MASK_HDR) != 0) {
+ if (res.size() > 0) res.append("-");
+ switch (colorimetry&MASK_HDR) {
+ case ResTable_config::HDR_NO:
+ res.append("lowdr");
+ break;
+ case ResTable_config::HDR_YES:
+ res.append("highdr");
+ break;
+ default:
+ res.appendFormat("hdr=%d", dtohs(colorimetry&MASK_HDR));
+ break;
+ }
+ }
+ if ((colorimetry&MASK_WIDE_COLOR_GAMUT) != 0) {
+ if (res.size() > 0) res.append("-");
+ switch (colorimetry&MASK_WIDE_COLOR_GAMUT) {
+ case ResTable_config::WIDE_COLOR_GAMUT_NO:
+ res.append("nowidecg");
+ break;
+ case ResTable_config::WIDE_COLOR_GAMUT_YES:
+ res.append("widecg");
+ break;
+ default:
+ res.appendFormat("wideColorGamut=%d", dtohs(colorimetry&MASK_WIDE_COLOR_GAMUT));
+ break;
+ }
+ }
if (orientation != ORIENTATION_ANY) {
if (res.size() > 0) res.append("-");
switch (orientation) {
diff --git a/libs/androidfw/include/androidfw/ResourceTypes.h b/libs/androidfw/include/androidfw/ResourceTypes.h
index c118b57..1e4aee9 100644
--- a/libs/androidfw/include/androidfw/ResourceTypes.h
+++ b/libs/androidfw/include/androidfw/ResourceTypes.h
@@ -1146,11 +1146,26 @@
SCREENROUND_YES = ACONFIGURATION_SCREENROUND_YES,
};
+ enum {
+ // colorimetry bits for wide-color gamut/narrow-color gamut.
+ MASK_WIDE_COLOR_GAMUT = 0x03,
+ WIDE_COLOR_GAMUT_ANY = ACONFIGURATION_WIDE_COLOR_GAMUT_ANY,
+ WIDE_COLOR_GAMUT_NO = ACONFIGURATION_WIDE_COLOR_GAMUT_NO,
+ WIDE_COLOR_GAMUT_YES = ACONFIGURATION_WIDE_COLOR_GAMUT_YES,
+
+ // colorimetry bits for HDR/LDR.
+ MASK_HDR = 0x0c,
+ SHIFT_COLORIMETRY_HDR = 2,
+ HDR_ANY = ACONFIGURATION_HDR_ANY << SHIFT_COLORIMETRY_HDR,
+ HDR_NO = ACONFIGURATION_HDR_NO << SHIFT_COLORIMETRY_HDR,
+ HDR_YES = ACONFIGURATION_HDR_YES << SHIFT_COLORIMETRY_HDR,
+ };
+
// An extension of screenConfig.
union {
struct {
uint8_t screenLayout2; // Contains round/notround qualifier.
- uint8_t screenConfigPad1; // Reserved padding.
+ uint8_t colorimetry; // Wide-gamut, HDR, etc.
uint16_t screenConfigPad2; // Reserved padding.
};
uint32_t screenConfig2;
@@ -1193,6 +1208,7 @@
CONFIG_UI_MODE = ACONFIGURATION_UI_MODE,
CONFIG_LAYOUTDIR = ACONFIGURATION_LAYOUTDIR,
CONFIG_SCREEN_ROUND = ACONFIGURATION_SCREEN_ROUND,
+ CONFIG_COLORIMETRY = ACONFIGURATION_COLORIMETRY,
};
// Compare two configuration, returning CONFIG_* flags set for each value
diff --git a/libs/androidfw/tests/Config_test.cpp b/libs/androidfw/tests/Config_test.cpp
index 778c7bf..3e5aca7 100644
--- a/libs/androidfw/tests/Config_test.cpp
+++ b/libs/androidfw/tests/Config_test.cpp
@@ -182,4 +182,24 @@
EXPECT_TRUE(targetConfigC.isBetterThan(targetConfigB, &deviceConfig));
}
+TEST(ConfigTest, ScreenIsWideGamut) {
+ ResTable_config defaultConfig;
+ memset(&defaultConfig, 0, sizeof(defaultConfig));
+
+ ResTable_config wideGamutConfig = defaultConfig;
+ wideGamutConfig.colorimetry = ResTable_config::WIDE_COLOR_GAMUT_YES;
+
+ EXPECT_EQ(defaultConfig.diff(wideGamutConfig), ResTable_config::CONFIG_COLORIMETRY);
+}
+
+TEST(ConfigTest, ScreenIsHdr) {
+ ResTable_config defaultConfig;
+ memset(&defaultConfig, 0, sizeof(defaultConfig));
+
+ ResTable_config hdrConfig = defaultConfig;
+ hdrConfig.colorimetry = ResTable_config::HDR_YES;
+
+ EXPECT_EQ(defaultConfig.diff(hdrConfig), ResTable_config::CONFIG_COLORIMETRY);
+}
+
} // namespace android.
diff --git a/libs/hwui/hwui/MinikinSkia.cpp b/libs/hwui/hwui/MinikinSkia.cpp
index 6a00379..956f66e 100644
--- a/libs/hwui/hwui/MinikinSkia.cpp
+++ b/libs/hwui/hwui/MinikinSkia.cpp
@@ -17,8 +17,7 @@
#include "MinikinSkia.h"
#include <log/log.h>
-#include <SkFontDescriptor.h>
-#include <SkFontMgr.h>
+
#include <SkPaint.h>
#include <SkTypeface.h>
@@ -87,28 +86,6 @@
return mTtcIndex;
}
-minikin::MinikinFont* MinikinFontSkia::createFontWithVariation(
- const std::vector<minikin::FontVariation>& variations) const {
- SkFontMgr::FontParameters params;
-
- int ttcIndex;
- SkStreamAsset* stream = mTypeface->openStream(&ttcIndex);
- LOG_ALWAYS_FATAL_IF(stream == nullptr, "openStream failed");
-
- params.setCollectionIndex(ttcIndex);
- std::vector<SkFontMgr::FontParameters::Axis> skAxes;
- skAxes.resize(variations.size());
- for (size_t i = 0; i < variations.size(); i++) {
- skAxes[i].fTag = variations[i].axisTag;
- skAxes[i].fStyleValue = SkFloatToScalar(variations[i].value);
- }
- params.setAxes(skAxes.data(), skAxes.size());
- sk_sp<SkFontMgr> fm(SkFontMgr::RefDefault());
- sk_sp<SkTypeface> face(fm->createFromStream(stream, params));
-
- return new MinikinFontSkia(std::move(face), mFontData, mFontSize, ttcIndex);
-}
-
uint32_t MinikinFontSkia::packPaintFlags(const SkPaint* paint) {
uint32_t flags = paint->getFlags();
SkPaint::Hinting hinting = paint->getHinting();
diff --git a/libs/hwui/hwui/MinikinSkia.h b/libs/hwui/hwui/MinikinSkia.h
index 249b0cb..3ee916c 100644
--- a/libs/hwui/hwui/MinikinSkia.h
+++ b/libs/hwui/hwui/MinikinSkia.h
@@ -44,8 +44,6 @@
const void* GetFontData() const;
size_t GetFontSize() const;
int GetFontIndex() const;
- minikin::MinikinFont* createFontWithVariation(
- const std::vector<minikin::FontVariation>&) const;
static uint32_t packPaintFlags(const SkPaint* paint);
static void unpackPaintFlags(SkPaint* paint, uint32_t paintFlags);
diff --git a/libs/hwui/hwui/Typeface.cpp b/libs/hwui/hwui/Typeface.cpp
index b69b0cb..ca43156 100644
--- a/libs/hwui/hwui/Typeface.cpp
+++ b/libs/hwui/hwui/Typeface.cpp
@@ -62,7 +62,7 @@
Typeface* Typeface::createFromTypeface(Typeface* src, SkTypeface::Style style) {
Typeface* resolvedFace = Typeface::resolveDefault(src);
Typeface* result = new Typeface;
- if (result != nullptr) {
+ if (result != 0) {
result->fFontCollection = resolvedFace->fFontCollection;
result->fFontCollection->Ref();
result->fSkiaStyle = style;
@@ -72,30 +72,10 @@
return result;
}
-Typeface* Typeface::createFromTypefaceWithVariation(Typeface* src,
- const std::vector<minikin::FontVariation>& variations) {
- Typeface* resolvedFace = Typeface::resolveDefault(src);
- Typeface* result = new Typeface();
- if (result != nullptr) {
- result->fFontCollection =
- resolvedFace->fFontCollection->createCollectionWithVariation(variations);
- if (result->fFontCollection == nullptr) {
- // None of passed axes are supported by this collection.
- // So we will reuse the same collection with incrementing reference count.
- result->fFontCollection = resolvedFace->fFontCollection;
- result->fFontCollection->Ref();
- }
- result->fSkiaStyle = resolvedFace->fSkiaStyle;
- result->fBaseWeight = resolvedFace->fBaseWeight;
- resolveStyle(result);
- }
- return result;
-}
-
Typeface* Typeface::createWeightAlias(Typeface* src, int weight) {
Typeface* resolvedFace = Typeface::resolveDefault(src);
Typeface* result = new Typeface;
- if (result != nullptr) {
+ if (result != 0) {
result->fFontCollection = resolvedFace->fFontCollection;
result->fFontCollection->Ref();
result->fSkiaStyle = resolvedFace->fSkiaStyle;
@@ -150,9 +130,9 @@
sk_sp<SkTypeface> typeface = SkTypeface::MakeFromStream(fontData.release());
LOG_ALWAYS_FATAL_IF(typeface == nullptr, "Failed to make typeface from %s", kRobotoFont);
+ minikin::FontFamily* family = new minikin::FontFamily();
minikin::MinikinFont* font = new MinikinFontSkia(std::move(typeface), data, st.st_size, 0);
- minikin::FontFamily* family = new minikin::FontFamily(
- std::vector<minikin::Font>({ minikin::Font(font, minikin::FontStyle()) }));
+ family->addFont(font);
font->Unref();
std::vector<minikin::FontFamily*> typefaces = { family };
diff --git a/libs/hwui/hwui/Typeface.h b/libs/hwui/hwui/Typeface.h
index 4392ebc..1be630c 100644
--- a/libs/hwui/hwui/Typeface.h
+++ b/libs/hwui/hwui/Typeface.h
@@ -43,9 +43,6 @@
static Typeface* createFromTypeface(Typeface* src, SkTypeface::Style style);
- static Typeface* createFromTypefaceWithVariation(Typeface* src,
- const std::vector<minikin::FontVariation>& variations);
-
static Typeface* createWeightAlias(Typeface* src, int baseweight);
static Typeface* createFromFamilies(const std::vector<minikin::FontFamily*>& families);
diff --git a/libs/hwui/pipeline/skia/GLFunctorDrawable.cpp b/libs/hwui/pipeline/skia/GLFunctorDrawable.cpp
index 419c8a9..6ca8d8b 100644
--- a/libs/hwui/pipeline/skia/GLFunctorDrawable.cpp
+++ b/libs/hwui/pipeline/skia/GLFunctorDrawable.cpp
@@ -19,7 +19,6 @@
#include "RenderNode.h"
#include "SkClipStack.h"
#include <private/hwui/DrawGlInfo.h>
-#include <SkPath.h>
#include <GrContext.h>
namespace android {
@@ -76,9 +75,7 @@
//apply a simple clip with a scissor or a complex clip with a stencil
SkRegion clipRegion;
- SkPath path;
- canvas->getClipStack()->asPath(&path);
- clipRegion.setPath(path, SkRegion(ibounds));
+ canvas->temporary_internal_getRgnClip(&clipRegion);
if (CC_UNLIKELY(clipRegion.isComplex())) {
//It is only a temporary solution to use a scissor to draw the stencil.
//There is a bug 31489986 to implement efficiently non-rectangular clips.
diff --git a/media/java/android/media/PlayerBase.java b/media/java/android/media/PlayerBase.java
index 9819395..bd0a1b4 100644
--- a/media/java/android/media/PlayerBase.java
+++ b/media/java/android/media/PlayerBase.java
@@ -78,6 +78,7 @@
}
mAttributes = attr;
mImplType = implType;
+ mState = AudioPlaybackConfiguration.PLAYER_STATE_IDLE;
};
/**
@@ -138,7 +139,8 @@
void baseStart() {
if (DEBUG) { Log.v(TAG, "baseStart() piid=" + mPlayerIId); }
try {
- getService().playerEvent(mPlayerIId, AudioPlaybackConfiguration.PLAYER_STATE_STARTED);
+ mState = AudioPlaybackConfiguration.PLAYER_STATE_STARTED;
+ getService().playerEvent(mPlayerIId, mState);
} catch (RemoteException e) {
Log.e(TAG, "Error talking to audio service, STARTED state will not be tracked", e);
}
@@ -152,7 +154,8 @@
void basePause() {
if (DEBUG) { Log.v(TAG, "basePause() piid=" + mPlayerIId); }
try {
- getService().playerEvent(mPlayerIId, AudioPlaybackConfiguration.PLAYER_STATE_PAUSED);
+ mState = AudioPlaybackConfiguration.PLAYER_STATE_PAUSED;
+ getService().playerEvent(mPlayerIId, mState);
} catch (RemoteException e) {
Log.e(TAG, "Error talking to audio service, PAUSED state will not be tracked", e);
}
@@ -161,7 +164,8 @@
void baseStop() {
if (DEBUG) { Log.v(TAG, "baseStop() piid=" + mPlayerIId); }
try {
- getService().playerEvent(mPlayerIId, AudioPlaybackConfiguration.PLAYER_STATE_STOPPED);
+ mState = AudioPlaybackConfiguration.PLAYER_STATE_STOPPED;
+ getService().playerEvent(mPlayerIId, mState);
} catch (RemoteException e) {
Log.e(TAG, "Error talking to audio service, STOPPED state will not be tracked", e);
}
@@ -193,7 +197,7 @@
* Releases AppOps related resources.
*/
void baseRelease() {
- if (DEBUG) { Log.v(TAG, "baseRelease() piid=" + mPlayerIId); }
+ if (DEBUG) { Log.v(TAG, "baseRelease() piid=" + mPlayerIId + " state=" + mState); }
try {
if (mState != AudioPlaybackConfiguration.PLAYER_STATE_RELEASED) {
getService().releasePlayer(mPlayerIId);
diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardSecurityContainer.java b/packages/Keyguard/src/com/android/keyguard/KeyguardSecurityContainer.java
index 91c943d..8cdb906 100644
--- a/packages/Keyguard/src/com/android/keyguard/KeyguardSecurityContainer.java
+++ b/packages/Keyguard/src/com/android/keyguard/KeyguardSecurityContainer.java
@@ -290,6 +290,7 @@
monitor.reportFailedStrongAuthUnlockAttempt(userId);
mLockPatternUtils.reportFailedPasswordAttempt(userId);
if (timeoutMs > 0) {
+ mLockPatternUtils.reportPasswordLockout(timeoutMs, userId);
showTimeoutDialog(userId, timeoutMs);
}
}
diff --git a/packages/PrintSpooler/res/values-hi/strings.xml b/packages/PrintSpooler/res/values-hi/strings.xml
index d108c20..f36167e 100644
--- a/packages/PrintSpooler/res/values-hi/strings.xml
+++ b/packages/PrintSpooler/res/values-hi/strings.xml
@@ -26,10 +26,10 @@
<string name="label_color" msgid="1108690305218188969">"रंग"</string>
<string name="label_duplex" msgid="5370037254347072243">"दो-तरफ़ा"</string>
<string name="label_orientation" msgid="2853142581990496477">"अभिविन्यास"</string>
- <string name="label_pages" msgid="7768589729282182230">"पृष्ठ"</string>
+ <string name="label_pages" msgid="7768589729282182230">"पेज"</string>
<string name="destination_default_text" msgid="5422708056807065710">"कोई प्रिंटर चुनें"</string>
<string name="template_all_pages" msgid="3322235982020148762">"सभी <xliff:g id="PAGE_COUNT">%1$s</xliff:g>"</string>
- <string name="template_page_range" msgid="428638530038286328">"पृष्ठ संख्या <xliff:g id="PAGE_COUNT">%1$s</xliff:g>"</string>
+ <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>
@@ -39,7 +39,7 @@
<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>
- <string name="page_description_template" msgid="6831239682256197161">"<xliff:g id="PAGE_COUNT">%2$d</xliff:g> में से पृष्ठ <xliff:g id="CURRENT_PAGE">%1$d</xliff:g>"</string>
+ <string name="page_description_template" msgid="6831239682256197161">"<xliff:g id="PAGE_COUNT">%2$d</xliff:g> में से पेज <xliff:g id="CURRENT_PAGE">%1$d</xliff:g>"</string>
<string name="summary_template" msgid="8899734908625669193">"सारांश, प्रतियां <xliff:g id="COPIES">%1$s</xliff:g>, काग़ज़ का आकार <xliff:g id="PAPER_SIZE">%2$s</xliff:g>"</string>
<string name="expand_handle" msgid="7282974448109280522">"हैंडल विस्तृत करें"</string>
<string name="collapse_handle" msgid="6886637989442507451">"हैंडल संक्षिप्त करें"</string>
diff --git a/packages/SettingsLib/Android.mk b/packages/SettingsLib/Android.mk
index ad07283..67ef40a 100644
--- a/packages/SettingsLib/Android.mk
+++ b/packages/SettingsLib/Android.mk
@@ -12,6 +12,8 @@
android-support-v7-appcompat \
android-support-v14-preference
+LOCAL_STATIC_JAVA_LIBRARY := legacy-android-test
+
LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
LOCAL_JAR_EXCLUDE_FILES := none
@@ -21,4 +23,4 @@
include $(BUILD_STATIC_JAVA_LIBRARY)
# For the test package.
-include $(call all-makefiles-under, $(LOCAL_PATH))
\ No newline at end of file
+include $(call all-makefiles-under, $(LOCAL_PATH))
diff --git a/packages/SettingsLib/res/layout/settings_with_drawer.xml b/packages/SettingsLib/res/layout/settings_with_drawer.xml
index 24a5422..b659cee 100644
--- a/packages/SettingsLib/res/layout/settings_with_drawer.xml
+++ b/packages/SettingsLib/res/layout/settings_with_drawer.xml
@@ -26,12 +26,12 @@
android:orientation="vertical"
android:fitsSystemWindows="true">
<FrameLayout
+ style="?android:attr/actionBarStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="?android:attr/actionBarTheme">
<Toolbar
android:id="@+id/action_bar"
- style="?android:attr/actionBarStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:navigationContentDescription="@*android:string/action_bar_up_description"/>
diff --git a/packages/SettingsLib/res/values-af/arrays.xml b/packages/SettingsLib/res/values-af/arrays.xml
index 4cb349c..b120ffe 100644
--- a/packages/SettingsLib/res/values-af/arrays.xml
+++ b/packages/SettingsLib/res/values-af/arrays.xml
@@ -58,66 +58,22 @@
<item msgid="3878793616631049349">"Gebruik HDCP-kontrolering net vir DRM-inhoud"</item>
<item msgid="45075631231212732">"Gebruik altyd HDCP-kontrolering"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="1852387125374225729">"Verstek"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="4260844283202960798">"aptX"</item>
- <item msgid="7279983368484312990">"aptX-HD"</item>
- <item msgid="2301339338870319651">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="9072025520360316957">"Verstek"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="1190434429082395888">"aptX"</item>
- <item msgid="649699003004233053">"aptX-HD"</item>
- <item msgid="508106435710925399">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
- <item msgid="7102940318360468759">"Verstek"</item>
- <item msgid="8895532488906185219">"44,1 kHz"</item>
- <item msgid="2909915718994807056">"48,0 kHz"</item>
- <item msgid="3347287377354164611">"88,2 kHz"</item>
- <item msgid="1234212100239985373">"96,0 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
- <item msgid="7224433008148687313">"Verstek"</item>
- <item msgid="4482862757811638365">"44,1 kHz"</item>
- <item msgid="354495328188724404">"48,0 kHz"</item>
- <item msgid="7329816882213695083">"88,2 kHz"</item>
- <item msgid="6967397666254430476">"96,0 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
- <item msgid="6694044160540313386">"Verstek"</item>
- <item msgid="5618929009984956469">"16 bis per voorbeeld"</item>
- <item msgid="3412640499234627248">"24 bis per voorbeeld"</item>
- <item msgid="121583001492929387">"32 bis per voorbeeld"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
- <item msgid="5091076677792306320">"Verstek"</item>
- <item msgid="4726688794884191540">"16 bis per voorbeeld"</item>
- <item msgid="305344756485516870">"24 bis per voorbeeld"</item>
- <item msgid="244568657919675099">"32 bis per voorbeeld"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
- <item msgid="13423709606339855">"Verstek"</item>
- <item msgid="4106832974775067314">"Mono"</item>
- <item msgid="5571632958424639155">"Stereo"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
- <item msgid="8128478683963250130">"Verstek"</item>
- <item msgid="8900559293912978337">"Mono"</item>
- <item msgid="8883739882299884241">"Stereo"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
- <item msgid="2944889121850394020">"Klankgehalte verkies (990 kbps/909 kbps)"</item>
- <item msgid="138837449700903545">"Standaard (660 kbps/606 kbps)"</item>
- <item msgid="4777177307869441982">"Verbinding verkies (330 kbps/303 kbps)"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
- <item msgid="172302906231378902">"Klankgehalte verkies (990 kbps/909 kbps)"</item>
- <item msgid="9091111147684472529">"Standaard (660 kbps/606 kbps)"</item>
- <item msgid="3367904477834831032">"Verbinding verkies (330 kbps/303 kbps)"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:0 (7065842274271279580) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:3 (500463122137421129) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:0 (5062108632402595000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3093550793512117000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_titles:0 (3093023430402746802) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_summaries:0 (3214516120190965356) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_titles:0 (2684127272582591429) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_summaries:0 (1081159789834584363) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_titles:0 (5226878858503393706) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_summaries:0 (4118561796005528173) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:0 (3411577996960199959) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:1 (2921767058740704969) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:2 (3682554248829489641) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:0 (7668834469173465015) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:1 (4327143584633311908) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:2 (6155648878105378550) -->
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"Af"</item>
<item msgid="1593289376502312923">"64 K"</item>
diff --git a/packages/SettingsLib/res/values-af/strings.xml b/packages/SettingsLib/res/values-af/strings.xml
index 3672fa9..63fa08c 100644
--- a/packages/SettingsLib/res/values-af/strings.xml
+++ b/packages/SettingsLib/res/values-af/strings.xml
@@ -171,15 +171,23 @@
<string name="mobile_data_always_on" msgid="7745605759775320362">"Sellulêre data altyd aktief"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Deaktiveer absolute volume"</string>
<string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Bluetooth-oudiokodek"</string>
- <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"Kies Bluetooth-A2DP-kodek wat verkies word"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_type_dialog_title (4558347981670553665) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Bluetooth-oudiovoorbeeldkoers"</string>
- <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"Kies Bluetooth-A2DP-kodekvoorbeeldkoers wat verkies word"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_sample_rate_dialog_title (5628790207448471613) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Bluetooth-oudiobisse per voorbeeld"</string>
- <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"Kies die Bluetooth-A2DP-kodekbisse per voorbeeld wat verkies word"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_bits_per_sample_dialog_title (4546131401358681321) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Bluetooth-oudiokanaalmodus"</string>
- <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"Kies Bluetooth-A2DP-kodekkanaalmodus wat verkies word"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"Bluetooth-oudio-LDAC-speelgehalte"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"Kies Bluetooth-A2DP-kodek-LDAC-speelgehalte wat verkies word"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_channel_mode_dialog_title (9133545781346216071) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality (3619694372407843405) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (3181967377574368400) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_streaming_label (5347862512596240506) -->
+ <skip />
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Wys opsies vir draadlose skermsertifisering"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Verhoog Wi-Fi-aantekeningvlak, wys per SSID RSSI in Wi‑Fi-kieser"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"Wanneer dit geaktiveer is, sal Wi-Fi meer aggressief wees om die dataverbinding na selfoon oor te dra wanneer die Wi-Fi-sein swak is"</string>
diff --git a/packages/SettingsLib/res/values-am/arrays.xml b/packages/SettingsLib/res/values-am/arrays.xml
index 0b424b3..5f35d32 100644
--- a/packages/SettingsLib/res/values-am/arrays.xml
+++ b/packages/SettingsLib/res/values-am/arrays.xml
@@ -58,66 +58,22 @@
<item msgid="3878793616631049349">"ለDRM ይዘት ብቻ HDCP ምልከታን ተጠቀም"</item>
<item msgid="45075631231212732">"ሁልጊዜ የHDCP ምልከታ ተጠቀም"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="1852387125374225729">"ነባሪ"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="4260844283202960798">"aptX"</item>
- <item msgid="7279983368484312990">"aptX-HD"</item>
- <item msgid="2301339338870319651">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="9072025520360316957">"ነባሪ"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="1190434429082395888">"aptX"</item>
- <item msgid="649699003004233053">"aptX-HD"</item>
- <item msgid="508106435710925399">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
- <item msgid="7102940318360468759">"ነባሪ"</item>
- <item msgid="8895532488906185219">"44.1 ኪኸ"</item>
- <item msgid="2909915718994807056">"48.0 ኪኸ"</item>
- <item msgid="3347287377354164611">"88.2 ኪኸ"</item>
- <item msgid="1234212100239985373">"96.0 ኪኸ"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
- <item msgid="7224433008148687313">"ነባሪ"</item>
- <item msgid="4482862757811638365">"44.1 ኪኸ"</item>
- <item msgid="354495328188724404">"48.0 ኪኸ"</item>
- <item msgid="7329816882213695083">"88.2 ኪኸ"</item>
- <item msgid="6967397666254430476">"96.0 ኪኸ"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
- <item msgid="6694044160540313386">"ነባሪ"</item>
- <item msgid="5618929009984956469">"16 ቢት/ናሙና"</item>
- <item msgid="3412640499234627248">"24 ቢት/ናሙና"</item>
- <item msgid="121583001492929387">"32 ቢት/ናሙና"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
- <item msgid="5091076677792306320">"ነባሪ"</item>
- <item msgid="4726688794884191540">"16 ቢት/ናሙና"</item>
- <item msgid="305344756485516870">"24 ቢት/ናሙና"</item>
- <item msgid="244568657919675099">"32 ቢት/ናሙና"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
- <item msgid="13423709606339855">"ነባሪ"</item>
- <item msgid="4106832974775067314">"ሞኖ"</item>
- <item msgid="5571632958424639155">"ስቲሪዮ"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
- <item msgid="8128478683963250130">"ነባሪ"</item>
- <item msgid="8900559293912978337">"ሞኖ"</item>
- <item msgid="8883739882299884241">"ስቲሪዮ"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
- <item msgid="2944889121850394020">"የሚመረጠው የድምጽ ጥራት (990ኪቢ/ሴ/909ኪቢ/ሴ)"</item>
- <item msgid="138837449700903545">"መደበኛ (660ኪቢ/ሴ/606ኪቢ/ሴ)"</item>
- <item msgid="4777177307869441982">"የሚመረጠው ግንኙነት (330ኪቢ/ሴ/303ኪቢ/ሴ)"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
- <item msgid="172302906231378902">"የሚመረጠው የድምጽ ጥራት (990ኪቢ/ሴ/909ኪቢ/ሴ)"</item>
- <item msgid="9091111147684472529">"መደበኛ (660ኪቢ/ሴ/606ኪቢ/ሴ)"</item>
- <item msgid="3367904477834831032">"የሚመረጠው ግንኙነት (330ኪቢ/ሴ/303ኪቢ/ሴ)"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:0 (7065842274271279580) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:3 (500463122137421129) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:0 (5062108632402595000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3093550793512117000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_titles:0 (3093023430402746802) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_summaries:0 (3214516120190965356) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_titles:0 (2684127272582591429) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_summaries:0 (1081159789834584363) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_titles:0 (5226878858503393706) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_summaries:0 (4118561796005528173) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:0 (3411577996960199959) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:1 (2921767058740704969) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:2 (3682554248829489641) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:0 (7668834469173465015) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:1 (4327143584633311908) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:2 (6155648878105378550) -->
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"ጠፍቷል"</item>
<item msgid="1593289376502312923">"64 ኪባ"</item>
diff --git a/packages/SettingsLib/res/values-am/strings.xml b/packages/SettingsLib/res/values-am/strings.xml
index 42783ec..8ecef6e 100644
--- a/packages/SettingsLib/res/values-am/strings.xml
+++ b/packages/SettingsLib/res/values-am/strings.xml
@@ -171,15 +171,23 @@
<string name="mobile_data_always_on" msgid="7745605759775320362">"የተንቀስቃሽ ስልክ ውሂብ ሁልጊዜ ንቁ"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"ፍጹማዊ ድምፅን አሰናክል"</string>
<string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"የብሉቱዝ ኦዲዮ ኮዴክ"</string>
- <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"የሚመረጠውን የብሉቱዝ A2DP ኮዴክ ምረጥ"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_type_dialog_title (4558347981670553665) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"የብሉቱዝ ኦዲዮ ናሙና ፍጥነት"</string>
- <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"የሚመረጠውን የብሉቱዝ A2DP ኮዴክ ናሙና ፍጥነት ምረጥ"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_sample_rate_dialog_title (5628790207448471613) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"የብሉቱዝ ኦዲዮ ቢት በናሙና"</string>
- <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"የሚመረጠውን የብሉቱዝ A2DP ኮዴክ ቢት በናሙና ምረጥ"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_bits_per_sample_dialog_title (4546131401358681321) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"የብሉቱዝ ኦዲዮ ሰርጥ ሁነታ"</string>
- <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"የሚመረጠውን የብሉቱዝ A2DP ኮዴክ ሰርጥ ሁነታ ምረጥ"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"የብሉቱዝ ኦዲዮ LDAC መልሶ ማጫወት ጥራት"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"የሚመረጠውን የብሉቱዝ A2DP ኮዴክ LDAC መልሶ ማጫወት ጥራት ይምረጡ"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_channel_mode_dialog_title (9133545781346216071) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality (3619694372407843405) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (3181967377574368400) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_streaming_label (5347862512596240506) -->
+ <skip />
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"የገመድ አልባ ማሳያ እውቅና ማረጋገጫ አማራጮችን አሳይ"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"የWi‑Fi ምዝግብ ማስታወሻ አያያዝ ደረጃ ጨምር፣ በWi‑Fi መምረጫ ውስጥ በአንድ SSID RSSI አሳይ"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"ሲነቃ የWi‑Fi ምልክት ዝቅተኛ ሲሆን Wi‑Fi የውሂብ ግንኙነት ለተንቀሳቃሽ ማስረከብ ላይ ይበልጥ አስገዳጅ ይሆናል"</string>
diff --git a/packages/SettingsLib/res/values-ar/arrays.xml b/packages/SettingsLib/res/values-ar/arrays.xml
index ae61f64..f7f771a 100644
--- a/packages/SettingsLib/res/values-ar/arrays.xml
+++ b/packages/SettingsLib/res/values-ar/arrays.xml
@@ -58,66 +58,22 @@
<item msgid="3878793616631049349">"استخدام التحقق من HDCP لمحتوى DRM فقط"</item>
<item msgid="45075631231212732">"استخدام التحقق من HDCP دومًا"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="1852387125374225729">"افتراضي"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="4260844283202960798">"aptX"</item>
- <item msgid="7279983368484312990">"aptX-HD"</item>
- <item msgid="2301339338870319651">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="9072025520360316957">"افتراضي"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="1190434429082395888">"aptX"</item>
- <item msgid="649699003004233053">"aptX-HD"</item>
- <item msgid="508106435710925399">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
- <item msgid="7102940318360468759">"افتراضي"</item>
- <item msgid="8895532488906185219">"44.1 كيلو هرتز"</item>
- <item msgid="2909915718994807056">"48.0 كيلو هرتز"</item>
- <item msgid="3347287377354164611">"88.2 كيلو هرتز"</item>
- <item msgid="1234212100239985373">"96.0 كيلو هرتز"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
- <item msgid="7224433008148687313">"افتراضي"</item>
- <item msgid="4482862757811638365">"44.1 كيلو هرتز"</item>
- <item msgid="354495328188724404">"48.0 كيلو هرتز"</item>
- <item msgid="7329816882213695083">"88.2 كيلو هرتز"</item>
- <item msgid="6967397666254430476">"96.0 كيلو هرتز"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
- <item msgid="6694044160540313386">"افتراضي"</item>
- <item msgid="5618929009984956469">"16 بت لكل عيّنة"</item>
- <item msgid="3412640499234627248">"24 بت لكل عيّنة"</item>
- <item msgid="121583001492929387">"32 بت لكل عيّنة"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
- <item msgid="5091076677792306320">"افتراضي"</item>
- <item msgid="4726688794884191540">"16 بت لكل عيّنة"</item>
- <item msgid="305344756485516870">"24 بت لكل عيّنة"</item>
- <item msgid="244568657919675099">"32 بت لكل عيّنة"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
- <item msgid="13423709606339855">"افتراضي"</item>
- <item msgid="4106832974775067314">"أحادي"</item>
- <item msgid="5571632958424639155">"استريو"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
- <item msgid="8128478683963250130">"افتراضي"</item>
- <item msgid="8900559293912978337">"أحادي"</item>
- <item msgid="8883739882299884241">"استريو"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
- <item msgid="2944889121850394020">"جودة الصوت المفضّلة (990/909 كيلوبت في الثانية)"</item>
- <item msgid="138837449700903545">"قياسي (660/606 كيلوبت في الثانية)"</item>
- <item msgid="4777177307869441982">"الاتصال المفضّل (330/303 كيلوبت في الثانية)"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
- <item msgid="172302906231378902">"جودة الصوت المفضّلة (990/909 كيلوبت في الثانية)"</item>
- <item msgid="9091111147684472529">"قياسي (660/606 كيلوبت في الثانية)"</item>
- <item msgid="3367904477834831032">"الاتصال المفضّل (330/303 كيلوبت في الثانية)"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:0 (7065842274271279580) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:3 (500463122137421129) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:0 (5062108632402595000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3093550793512117000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_titles:0 (3093023430402746802) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_summaries:0 (3214516120190965356) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_titles:0 (2684127272582591429) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_summaries:0 (1081159789834584363) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_titles:0 (5226878858503393706) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_summaries:0 (4118561796005528173) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:0 (3411577996960199959) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:1 (2921767058740704969) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:2 (3682554248829489641) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:0 (7668834469173465015) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:1 (4327143584633311908) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:2 (6155648878105378550) -->
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"إيقاف"</item>
<item msgid="1593289376502312923">"٦٤ كيلوبايت"</item>
diff --git a/packages/SettingsLib/res/values-ar/strings.xml b/packages/SettingsLib/res/values-ar/strings.xml
index e1b39c11..4a1e916 100644
--- a/packages/SettingsLib/res/values-ar/strings.xml
+++ b/packages/SettingsLib/res/values-ar/strings.xml
@@ -171,15 +171,23 @@
<string name="mobile_data_always_on" msgid="7745605759775320362">"بيانات الجوّال نشطة دائمًا"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"تعطيل مستوى الصوت المطلق"</string>
<string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"ترميز صوت بلوتوث"</string>
- <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"حدّد ترميز بلوتوث A2DP المفضّل"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_type_dialog_title (4558347981670553665) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"معدّل عيّنة صوت بلوتوث"</string>
- <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"حدّد معدّل عيّنة ترميز A2DP بلوتوث المفضّل"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_sample_rate_dialog_title (5628790207448471613) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"وحدات البت لكل عيّنة في صوت بلوتوث"</string>
- <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"حدّد عدد وحدات البت لكل عيّنة المفضّل في ترميز بلوتوث A2DP"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_bits_per_sample_dialog_title (4546131401358681321) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"وضع قناة صوت بلوتوث"</string>
- <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"حدّد وضع القناة المفضّل في ترميز بلوتوث A2DP"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"جودة تشغيل صوت بلوتوث LDAC"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"حدّد جودة التشغيل المفضّلة في ترميز بلوتوث A2DP"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_channel_mode_dialog_title (9133545781346216071) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality (3619694372407843405) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (3181967377574368400) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_streaming_label (5347862512596240506) -->
+ <skip />
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"عرض خيارات شهادة عرض شاشة لاسلكي"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"زيادة مستوى تسجيل Wi-Fi، وعرض لكل SSID RSSI في منتقي Wi-Fi"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"عند تمكينه، سيكون Wi-Fi أكثر حدة في تسليم اتصال البيانات إلى الشبكة الخلوية، وذلك عندما تكون إشارة WiFi منخفضة"</string>
diff --git a/packages/SettingsLib/res/values-az/arrays.xml b/packages/SettingsLib/res/values-az/arrays.xml
index 38b2dc0..9ad0c28 100644
--- a/packages/SettingsLib/res/values-az/arrays.xml
+++ b/packages/SettingsLib/res/values-az/arrays.xml
@@ -58,66 +58,22 @@
<item msgid="3878793616631049349">"Yalnız DRM məzmun oxumaq üçün HDCP istifadə edin"</item>
<item msgid="45075631231212732">"Həmişə HDCP yoxlama istifadə edin"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="1852387125374225729">"Defolt"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="4260844283202960798">"aptX"</item>
- <item msgid="7279983368484312990">"aptX-HD"</item>
- <item msgid="2301339338870319651">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="9072025520360316957">"Defolt"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="1190434429082395888">"aptX"</item>
- <item msgid="649699003004233053">"aptX-HD"</item>
- <item msgid="508106435710925399">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
- <item msgid="7102940318360468759">"Defolt"</item>
- <item msgid="8895532488906185219">"44.1 kHz"</item>
- <item msgid="2909915718994807056">"48.0 kHz"</item>
- <item msgid="3347287377354164611">"88.2 kHz"</item>
- <item msgid="1234212100239985373">"96.0 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
- <item msgid="7224433008148687313">"Defolt"</item>
- <item msgid="4482862757811638365">"44.1 kHz"</item>
- <item msgid="354495328188724404">"48.0 kHz"</item>
- <item msgid="7329816882213695083">"88.2 kHz"</item>
- <item msgid="6967397666254430476">"96.0 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
- <item msgid="6694044160540313386">"Defolt"</item>
- <item msgid="5618929009984956469">"16 bit/nümunə"</item>
- <item msgid="3412640499234627248">"24 bit/nümunə"</item>
- <item msgid="121583001492929387">"32 bit/nümunə"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
- <item msgid="5091076677792306320">"Defolt"</item>
- <item msgid="4726688794884191540">"16 bit/nümunə"</item>
- <item msgid="305344756485516870">"24 bit/nümunə"</item>
- <item msgid="244568657919675099">"32 bit/nümunə"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
- <item msgid="13423709606339855">"Defolt"</item>
- <item msgid="4106832974775067314">"Mono"</item>
- <item msgid="5571632958424639155">"Stereo"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
- <item msgid="8128478683963250130">"Defolt"</item>
- <item msgid="8900559293912978337">"Mono"</item>
- <item msgid="8883739882299884241">"Stereo"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
- <item msgid="2944889121850394020">"Səs keyfiyyəti tərcih edildi (990kbps/909kbps)"</item>
- <item msgid="138837449700903545">"Standart (660kbps/606kbps)"</item>
- <item msgid="4777177307869441982">"Bağlantı tərcih edildi (330kbps/303kbps)"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
- <item msgid="172302906231378902">"Səs keyfiyyəti tərcih edildi (990kbps/909kbps)"</item>
- <item msgid="9091111147684472529">"Standart (660kbps/606kbps)"</item>
- <item msgid="3367904477834831032">"Bağlantı tərcih edildi (330kbps/303kbps)"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:0 (7065842274271279580) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:3 (500463122137421129) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:0 (5062108632402595000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3093550793512117000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_titles:0 (3093023430402746802) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_summaries:0 (3214516120190965356) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_titles:0 (2684127272582591429) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_summaries:0 (1081159789834584363) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_titles:0 (5226878858503393706) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_summaries:0 (4118561796005528173) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:0 (3411577996960199959) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:1 (2921767058740704969) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:2 (3682554248829489641) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:0 (7668834469173465015) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:1 (4327143584633311908) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:2 (6155648878105378550) -->
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"Deaktiv"</item>
<item msgid="1593289376502312923">"64K"</item>
diff --git a/packages/SettingsLib/res/values-az/strings.xml b/packages/SettingsLib/res/values-az/strings.xml
index e625e32..ac854c6 100644
--- a/packages/SettingsLib/res/values-az/strings.xml
+++ b/packages/SettingsLib/res/values-az/strings.xml
@@ -171,15 +171,23 @@
<string name="mobile_data_always_on" msgid="7745605759775320362">"Mobil data həmişə aktivdir"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Mütləq səs həcmi deaktiv edin"</string>
<string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Bluetooth Audio Kodek"</string>
- <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"Tərcih edilmiş Bluetooth A2DP Kodek seçin"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_type_dialog_title (4558347981670553665) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Bluetooth Audio Nümunə Göstəricisi"</string>
- <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"Tərcih edilmiş Bluetooth A2DP Kodek Nümunə Göstəricisi seçin"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_sample_rate_dialog_title (5628790207448471613) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Hər Nümunə Üçün Bluetooth Audio Bit"</string>
- <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"Hər nümunə üçün tərcih edilmiş Bluetooth A2DP Kodek Bit seçin"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_bits_per_sample_dialog_title (4546131401358681321) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Bluetooth Audio Kanal Rejimi"</string>
- <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"Tərcih edilmiş Bluetooth A2DP Kodek Kanal Rejimi seçin"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"Bluetooth Audio LDAC Oxutma Keyfiyyəti"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"Tərcih edilmiş Bluetooth A2DP Kodek LDAC Oxutma Keyfiyyəti seçin"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_channel_mode_dialog_title (9133545781346216071) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality (3619694372407843405) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (3181967377574368400) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_streaming_label (5347862512596240506) -->
+ <skip />
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Simsiz displey sertifikatlaşması üçün seçimləri göstərir"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Wi‑Fi giriş səviyyəsini qaldırın, Wi‑Fi seçəndə hər SSID RSSI üzrə göstərin"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"Aktiv olanda, Wi‑Fi sianqlı zəif olan zaman, Mobil şəbəkə data bağlantısına nisbətən, Wi‑Fi daha aqressiv olacaq"</string>
diff --git a/packages/SettingsLib/res/values-b+sr+Latn/arrays.xml b/packages/SettingsLib/res/values-b+sr+Latn/arrays.xml
index 9f7cf56..bde7f58 100644
--- a/packages/SettingsLib/res/values-b+sr+Latn/arrays.xml
+++ b/packages/SettingsLib/res/values-b+sr+Latn/arrays.xml
@@ -58,66 +58,22 @@
<item msgid="3878793616631049349">"Koristi HDCP proveru samo za DRM sadržaj"</item>
<item msgid="45075631231212732">"Uvek koristi HDCP proveru"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="1852387125374225729">"Podrazumevano"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="4260844283202960798">"aptX"</item>
- <item msgid="7279983368484312990">"aptX-HD"</item>
- <item msgid="2301339338870319651">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="9072025520360316957">"Podrazumevano"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="1190434429082395888">"aptX"</item>
- <item msgid="649699003004233053">"aptX-HD"</item>
- <item msgid="508106435710925399">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
- <item msgid="7102940318360468759">"Podrazumevano"</item>
- <item msgid="8895532488906185219">"44,1 kHz"</item>
- <item msgid="2909915718994807056">"48,0 kHz"</item>
- <item msgid="3347287377354164611">"88,2 kHz"</item>
- <item msgid="1234212100239985373">"96,0 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
- <item msgid="7224433008148687313">"Podrazumevano"</item>
- <item msgid="4482862757811638365">"44,1 kHz"</item>
- <item msgid="354495328188724404">"48,0 kHz"</item>
- <item msgid="7329816882213695083">"88,2 kHz"</item>
- <item msgid="6967397666254430476">"96,0 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
- <item msgid="6694044160540313386">"Podrazumevano"</item>
- <item msgid="5618929009984956469">"16 bitova po uzorku"</item>
- <item msgid="3412640499234627248">"24 bita po uzorku"</item>
- <item msgid="121583001492929387">"32 bita po uzorku"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
- <item msgid="5091076677792306320">"Podrazumevano"</item>
- <item msgid="4726688794884191540">"16 bitova po uzorku"</item>
- <item msgid="305344756485516870">"24 bita po uzorku"</item>
- <item msgid="244568657919675099">"32 bita po uzorku"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
- <item msgid="13423709606339855">"Podrazumevano"</item>
- <item msgid="4106832974775067314">"Mono"</item>
- <item msgid="5571632958424639155">"Stereo"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
- <item msgid="8128478683963250130">"Podrazumevano"</item>
- <item msgid="8900559293912978337">"Mono"</item>
- <item msgid="8883739882299884241">"Stereo"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
- <item msgid="2944889121850394020">"Željeni kvalitet zvuka (990 kb/s/909 kb/s)"</item>
- <item msgid="138837449700903545">"Standardno (660 kb/s/606 kb/s)"</item>
- <item msgid="4777177307869441982">"Željena veza (330 kb/s/303 kb/s)"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
- <item msgid="172302906231378902">"Željeni kvalitet zvuka (990 kb/s/909 kb/s)"</item>
- <item msgid="9091111147684472529">"Standardno (660 kb/s/606 kb/s)"</item>
- <item msgid="3367904477834831032">"Željena veza (330 kb/s/303 kb/s)"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:0 (7065842274271279580) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:3 (500463122137421129) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:0 (5062108632402595000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3093550793512117000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_titles:0 (3093023430402746802) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_summaries:0 (3214516120190965356) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_titles:0 (2684127272582591429) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_summaries:0 (1081159789834584363) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_titles:0 (5226878858503393706) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_summaries:0 (4118561796005528173) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:0 (3411577996960199959) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:1 (2921767058740704969) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:2 (3682554248829489641) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:0 (7668834469173465015) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:1 (4327143584633311908) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:2 (6155648878105378550) -->
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"Isključeno"</item>
<item msgid="1593289376502312923">"64 kB"</item>
diff --git a/packages/SettingsLib/res/values-b+sr+Latn/strings.xml b/packages/SettingsLib/res/values-b+sr+Latn/strings.xml
index 3446a1a..62be8b2 100644
--- a/packages/SettingsLib/res/values-b+sr+Latn/strings.xml
+++ b/packages/SettingsLib/res/values-b+sr+Latn/strings.xml
@@ -171,15 +171,23 @@
<string name="mobile_data_always_on" msgid="7745605759775320362">"Podaci za mobilne uređaje su uvek aktivni"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Onemogući glavno podešavanje jačine zvuka"</string>
<string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Bluetooth audio kodek"</string>
- <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"Izaberite željeni Bluetooth A2DP kodek"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_type_dialog_title (4558347981670553665) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Brzina uzorkovanja za Bluetooth audio"</string>
- <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"Izaberite željenu brzinu uzorkovanja za Bluetooth A2DP kodek"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_sample_rate_dialog_title (5628790207448471613) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Bitova po uzorku za Bluetooth audio"</string>
- <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"Izaberite željeni broj bitova po uzorku za Bluetooth A2DP kodek"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_bits_per_sample_dialog_title (4546131401358681321) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Režim kanala za Bluetooth audio"</string>
- <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"Izaberite željeni režim kanala za Bluetooth A2DP kodek"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"Kvalitet LDAC snimka za Bluetooth audio"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"Izaberite željeni kvalitet LDAC snimka za Bluetooth A2DP kodek"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_channel_mode_dialog_title (9133545781346216071) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality (3619694372407843405) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (3181967377574368400) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_streaming_label (5347862512596240506) -->
+ <skip />
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Prikaz opcija za sertifikaciju bežičnog ekrana"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Povećava nivo evidentiranja za Wi‑Fi. Prikaz po SSID RSSI-u u biraču Wi‑Fi mreže"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"Kada se omogući, Wi‑Fi će biti agresivniji pri prebacivanju mreže za prenos podataka na Mobilnu, kada je Wi‑Fi signal slab"</string>
diff --git a/packages/SettingsLib/res/values-be/arrays.xml b/packages/SettingsLib/res/values-be/arrays.xml
index 1266d2c..50842cf 100644
--- a/packages/SettingsLib/res/values-be/arrays.xml
+++ b/packages/SettingsLib/res/values-be/arrays.xml
@@ -58,66 +58,22 @@
<item msgid="3878793616631049349">"Выкарыстанне праверкі HDCP только для змесціва, абароненага DRM"</item>
<item msgid="45075631231212732">"Заўсёды выкарыстоўваць праверку HDCP"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="1852387125374225729">"Стандартная"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="4260844283202960798">"aptX"</item>
- <item msgid="7279983368484312990">"aptX-HD"</item>
- <item msgid="2301339338870319651">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="9072025520360316957">"Стандартная"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="1190434429082395888">"aptX"</item>
- <item msgid="649699003004233053">"aptX-HD"</item>
- <item msgid="508106435710925399">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
- <item msgid="7102940318360468759">"Стандартная"</item>
- <item msgid="8895532488906185219">"44,1 кГц"</item>
- <item msgid="2909915718994807056">"48,0 кГц"</item>
- <item msgid="3347287377354164611">"88,2 кГц"</item>
- <item msgid="1234212100239985373">"96,0 кГц"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
- <item msgid="7224433008148687313">"Стандартная"</item>
- <item msgid="4482862757811638365">"44,1 кГц"</item>
- <item msgid="354495328188724404">"48,0 кГц"</item>
- <item msgid="7329816882213695083">"88,2 кГц"</item>
- <item msgid="6967397666254430476">"96,0 кГц"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
- <item msgid="6694044160540313386">"Стандартная"</item>
- <item msgid="5618929009984956469">"16 бітаў/сэмпл"</item>
- <item msgid="3412640499234627248">"24 біты/сэмпл"</item>
- <item msgid="121583001492929387">"32 біты/сэмпл"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
- <item msgid="5091076677792306320">"Стандартная"</item>
- <item msgid="4726688794884191540">"16 бітаў/сэмпл"</item>
- <item msgid="305344756485516870">"24 біты/сэмпл"</item>
- <item msgid="244568657919675099">"32 біты/сэмпл"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
- <item msgid="13423709606339855">"Стандартная"</item>
- <item msgid="4106832974775067314">"Мона"</item>
- <item msgid="5571632958424639155">"Стэрэа"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
- <item msgid="8128478683963250130">"Стандартная"</item>
- <item msgid="8900559293912978337">"Мона"</item>
- <item msgid="8883739882299884241">"Стэрэа"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
- <item msgid="2944889121850394020">"Прыярытэтная якасць гуч. (990/909кбіт/с)"</item>
- <item msgid="138837449700903545">"Стандартная (660/606кбіт/с)"</item>
- <item msgid="4777177307869441982">"Прыярытэтнае падключэнне (330/303кбіт/с)"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
- <item msgid="172302906231378902">"Прыярытэтная якасць гуч. (990/909кбіт/с)"</item>
- <item msgid="9091111147684472529">"Стандартная (660/606кбіт/с)"</item>
- <item msgid="3367904477834831032">"Прыярытэтнае падключэнне (330/303кбіт/с)"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:0 (7065842274271279580) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:3 (500463122137421129) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:0 (5062108632402595000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3093550793512117000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_titles:0 (3093023430402746802) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_summaries:0 (3214516120190965356) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_titles:0 (2684127272582591429) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_summaries:0 (1081159789834584363) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_titles:0 (5226878858503393706) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_summaries:0 (4118561796005528173) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:0 (3411577996960199959) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:1 (2921767058740704969) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:2 (3682554248829489641) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:0 (7668834469173465015) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:1 (4327143584633311908) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:2 (6155648878105378550) -->
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"Выкл."</item>
<item msgid="1593289376502312923">"64K"</item>
diff --git a/packages/SettingsLib/res/values-be/strings.xml b/packages/SettingsLib/res/values-be/strings.xml
index f2e1cf6..f50253b 100644
--- a/packages/SettingsLib/res/values-be/strings.xml
+++ b/packages/SettingsLib/res/values-be/strings.xml
@@ -171,15 +171,23 @@
<string name="mobile_data_always_on" msgid="7745605759775320362">"Перадача даных мабільнай сувязі заўсёды актыўна"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Адключыць абсалютны гук"</string>
<string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Кодэк Bluetooth Audio"</string>
- <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"Выберыце прыярытэтны кодэк Bluetooth A2DP"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_type_dialog_title (4558347981670553665) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Частата дыскрэтызацыі Bluetooth Audio"</string>
- <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"Выберыце прыярытэтную частату дыскрэтызацыі для кодэка Bluetooth A2DP"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_sample_rate_dialog_title (5628790207448471613) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Біты на сэмпл для Bluetooth Audio"</string>
- <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"Выберыце прыярытэтную колькасць бітаў на сэмпл для кодэка Bluetooth A2DP"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_bits_per_sample_dialog_title (4546131401358681321) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Канальны рэжым Bluetooth Audio"</string>
- <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"Выберыце прыярытэтны рэжым для кодэка Bluetooth A2DP"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"Якасць прайгравання для Bluetooth Audio LDAC"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"Выберыце прыярытэтную якасць прайгравання для кодэка Bluetooth A2DP LDAC"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_channel_mode_dialog_title (9133545781346216071) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality (3619694372407843405) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (3181967377574368400) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_streaming_label (5347862512596240506) -->
+ <skip />
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Паказаць опцыі сертыфікацыі бесправаднога дысплея"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Падвыс. узровень дэтал-цыі журнала Wi‑Fi у залежн. ад SSID RSSI у Wi‑Fi Picker"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"Калі ўкл., прылада будзе больш інтэнсіўна імкнуцца перайсці з падлуч. да Wi-Fi на падлуч. да маб. сеткі, калі сігнал Wi‑Fi слабы"</string>
diff --git a/packages/SettingsLib/res/values-bg/arrays.xml b/packages/SettingsLib/res/values-bg/arrays.xml
index 93d547d..c97e5f5 100644
--- a/packages/SettingsLib/res/values-bg/arrays.xml
+++ b/packages/SettingsLib/res/values-bg/arrays.xml
@@ -58,66 +58,22 @@
<item msgid="3878793616631049349">"Да се използва проверка с HDCP само за DRM съдържание"</item>
<item msgid="45075631231212732">"Винаги да се използва проверка с HDCP"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="1852387125374225729">"Стандартно"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="4260844283202960798">"aptX"</item>
- <item msgid="7279983368484312990">"aptX-HD"</item>
- <item msgid="2301339338870319651">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="9072025520360316957">"Стандартно"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="1190434429082395888">"aptX"</item>
- <item msgid="649699003004233053">"aptX-HD"</item>
- <item msgid="508106435710925399">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
- <item msgid="7102940318360468759">"Стандартно"</item>
- <item msgid="8895532488906185219">"44,1 кХц"</item>
- <item msgid="2909915718994807056">"48 кХц"</item>
- <item msgid="3347287377354164611">"88,2 кХц"</item>
- <item msgid="1234212100239985373">"96 кХц"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
- <item msgid="7224433008148687313">"Стандартно"</item>
- <item msgid="4482862757811638365">"44,1 кХц"</item>
- <item msgid="354495328188724404">"48 кХц"</item>
- <item msgid="7329816882213695083">"88,2 кХц"</item>
- <item msgid="6967397666254430476">"96 кХц"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
- <item msgid="6694044160540313386">"Стандартно"</item>
- <item msgid="5618929009984956469">"16 бита/дискрет"</item>
- <item msgid="3412640499234627248">"24 бита/дискрет"</item>
- <item msgid="121583001492929387">"32 бита/дискрет"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
- <item msgid="5091076677792306320">"Стандартно"</item>
- <item msgid="4726688794884191540">"16 бита/дискрет"</item>
- <item msgid="305344756485516870">"24 бита/дискрет"</item>
- <item msgid="244568657919675099">"32 бита/дискрет"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
- <item msgid="13423709606339855">"Стандартно"</item>
- <item msgid="4106832974775067314">"Моно"</item>
- <item msgid="5571632958424639155">"Стерео"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
- <item msgid="8128478683963250130">"Стандартно"</item>
- <item msgid="8900559293912978337">"Моно"</item>
- <item msgid="8883739882299884241">"Стерео"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
- <item msgid="2944889121850394020">"Предпоч. кач. на звука (990 или 909 кб/сек)QM"</item>
- <item msgid="138837449700903545">"Стандартно (660 или 606 кб/сек)"</item>
- <item msgid="4777177307869441982">"Предпоч. връзка (330 или 303 кб/сек)"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
- <item msgid="172302906231378902">"Предпоч. кач. на звука (990 или 909 кб/сек)The QM tool is not responding at the moment, and I am not able to check the status of the query."</item>
- <item msgid="9091111147684472529">"Стандартно (660 или 606 кб/сек)"</item>
- <item msgid="3367904477834831032">"Предпоч. връзка (330 или 303 кб/сек)"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:0 (7065842274271279580) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:3 (500463122137421129) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:0 (5062108632402595000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3093550793512117000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_titles:0 (3093023430402746802) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_summaries:0 (3214516120190965356) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_titles:0 (2684127272582591429) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_summaries:0 (1081159789834584363) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_titles:0 (5226878858503393706) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_summaries:0 (4118561796005528173) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:0 (3411577996960199959) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:1 (2921767058740704969) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:2 (3682554248829489641) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:0 (7668834469173465015) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:1 (4327143584633311908) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:2 (6155648878105378550) -->
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"Изключено"</item>
<item msgid="1593289376502312923">"64 КБ"</item>
diff --git a/packages/SettingsLib/res/values-bg/strings.xml b/packages/SettingsLib/res/values-bg/strings.xml
index 21d1a98..c0d43b2 100644
--- a/packages/SettingsLib/res/values-bg/strings.xml
+++ b/packages/SettingsLib/res/values-bg/strings.xml
@@ -171,15 +171,23 @@
<string name="mobile_data_always_on" msgid="7745605759775320362">"Винаги активни клетъчни данни"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Деактивиране на пълната сила на звука"</string>
<string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Аудиокодек за Bluetooth"</string>
- <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"Изберете предпочитания кодек за Bluetooth с профил A2DP"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_type_dialog_title (4558347981670553665) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Честота на дискретизация за звука през Bluetooth"</string>
- <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"Изберете предпочитаната честота на дискретизация за кодека за Bluetooth с профил A2DP"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_sample_rate_dialog_title (5628790207448471613) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Битове на дискрет за звука през Bluetooth"</string>
- <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"Изберете предпочитание за битове на дискрет за кодека за Bluetooth с профил A2DP"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_bits_per_sample_dialog_title (4546131401358681321) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Режим на канала на звука през Bluetooth"</string>
- <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"Изберете предпочитания режим на канала за кодека за Bluetooth с профил A2DP"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"Качество на възпроизвеждане на звука през Bluetooth с технологията LDAC"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"Изберете предпочитаното качество на възпроизвеждане с технологията LDAC за кодека за Bluetooth с профил A2DP"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_channel_mode_dialog_title (9133545781346216071) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality (3619694372407843405) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (3181967377574368400) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_streaming_label (5347862512596240506) -->
+ <skip />
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Показване на опциите за сертифициране на безжичния дисплей"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"По-подробно регистр. на Wi‑Fi – данни за RSSI на SSID в инстр. за избор на Wi‑Fi"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"При активиране предаването на връзката за данни от Wi-Fi към мобилната мрежа ще е по-агресивно, когато Wi-Fi сигналът е слаб"</string>
diff --git a/packages/SettingsLib/res/values-bn/arrays.xml b/packages/SettingsLib/res/values-bn/arrays.xml
index 6ce7b14..faea551 100644
--- a/packages/SettingsLib/res/values-bn/arrays.xml
+++ b/packages/SettingsLib/res/values-bn/arrays.xml
@@ -58,66 +58,22 @@
<item msgid="3878793616631049349">"শুধুমাত্র DRM সামগ্রীর জন্য HDCP চেক করা ব্যবহার করুন"</item>
<item msgid="45075631231212732">"সর্বদা HDCP পরীক্ষণ ব্যবহার করুন"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="1852387125374225729">"ডিফল্ট"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="4260844283202960798">"aptX"</item>
- <item msgid="7279983368484312990">"aptX-HD"</item>
- <item msgid="2301339338870319651">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="9072025520360316957">"ডিফল্ট"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="1190434429082395888">"aptX"</item>
- <item msgid="649699003004233053">"aptX-HD"</item>
- <item msgid="508106435710925399">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
- <item msgid="7102940318360468759">"ডিফল্ট"</item>
- <item msgid="8895532488906185219">"৪৪.১ kHz"</item>
- <item msgid="2909915718994807056">"৪৮.০ kHz"</item>
- <item msgid="3347287377354164611">"৮৮.২ kHz"</item>
- <item msgid="1234212100239985373">"৯৬.০ kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
- <item msgid="7224433008148687313">"ডিফল্ট"</item>
- <item msgid="4482862757811638365">"৪৪.১ kHz"</item>
- <item msgid="354495328188724404">"৪৮.০ kHz"</item>
- <item msgid="7329816882213695083">"৮৮.২ kHz"</item>
- <item msgid="6967397666254430476">"৯৬.০ kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
- <item msgid="6694044160540313386">"ডিফল্ট"</item>
- <item msgid="5618929009984956469">"১৬ বিট/নমুনা"</item>
- <item msgid="3412640499234627248">"২৪ বিট/নমুনা"</item>
- <item msgid="121583001492929387">"৩২ বিট/নমুনা"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
- <item msgid="5091076677792306320">"ডিফল্ট"</item>
- <item msgid="4726688794884191540">"১৬ বিট/নমুনা"</item>
- <item msgid="305344756485516870">"২৪ বিট/নমুনা"</item>
- <item msgid="244568657919675099">"৩২ বিট/নমুনা"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
- <item msgid="13423709606339855">"ডিফল্ট"</item>
- <item msgid="4106832974775067314">"মোনো"</item>
- <item msgid="5571632958424639155">"স্টিরিও"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
- <item msgid="8128478683963250130">"ডিফল্ট"</item>
- <item msgid="8900559293912978337">"মোনো"</item>
- <item msgid="8883739882299884241">"স্টিরিও"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
- <item msgid="2944889121850394020">"পছন্দের শব্দের মান (৯৯০kbps/৯০৯kbps)"</item>
- <item msgid="138837449700903545">"মানক (৬৬০kbps/৬০৬kbps)"</item>
- <item msgid="4777177307869441982">"পছন্দের সংযোগ (৩৩০kbps/৩০৩kbps)"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
- <item msgid="172302906231378902">"পছন্দের শব্দের মান (৯৯০kbps/৯০৯kbps)"</item>
- <item msgid="9091111147684472529">"মানক (৬৬০kbps/৬০৬kbps)"</item>
- <item msgid="3367904477834831032">"পছন্দের সংযোগ (৩৩০kbps/৩০৩kbps)"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:0 (7065842274271279580) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:3 (500463122137421129) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:0 (5062108632402595000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3093550793512117000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_titles:0 (3093023430402746802) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_summaries:0 (3214516120190965356) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_titles:0 (2684127272582591429) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_summaries:0 (1081159789834584363) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_titles:0 (5226878858503393706) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_summaries:0 (4118561796005528173) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:0 (3411577996960199959) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:1 (2921767058740704969) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:2 (3682554248829489641) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:0 (7668834469173465015) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:1 (4327143584633311908) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:2 (6155648878105378550) -->
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"বন্ধ আছে"</item>
<item msgid="1593289376502312923">"৬৪K"</item>
diff --git a/packages/SettingsLib/res/values-bn/strings.xml b/packages/SettingsLib/res/values-bn/strings.xml
index 66fa0673..380ee1c 100644
--- a/packages/SettingsLib/res/values-bn/strings.xml
+++ b/packages/SettingsLib/res/values-bn/strings.xml
@@ -171,15 +171,23 @@
<string name="mobile_data_always_on" msgid="7745605759775320362">"সেলুলার ডেটা সর্বদাই সক্রিয় থাকে"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"চূড়ান্ত ভলিউম অক্ষম করুন"</string>
<string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"ব্লুটুথ অডিও কোডেক"</string>
- <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"পছন্দের ব্লুটুথ A2DP কোডেক বেছে নিন"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_type_dialog_title (4558347981670553665) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"ব্লুটুথ অডিওর নমুনা হার"</string>
- <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"পছন্দের ব্লুটুথ A2DP কোডেক নমুনা হার বেছে নিন"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_sample_rate_dialog_title (5628790207448471613) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"নমুনা প্রতি ব্লুটুথ অডিও বিট"</string>
- <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"নমুনা প্রতি পছন্দের ব্লুটুথ A2DP কোডেক বিট বেছে নিন"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_bits_per_sample_dialog_title (4546131401358681321) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"ব্লুটুথ অডিও চ্যানেল মোড"</string>
- <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"পছন্দের ব্লুটুথ A2DP কোডেক চ্যানেল মোড বেছে নিন"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"ব্লুটুথ অডিও LDAC প্লেব্যাকের মান"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"পছন্দের ব্লুটুথ A2DP কোডেক LDAC প্লেব্যাকের মান বেছে নিন"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_channel_mode_dialog_title (9133545781346216071) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality (3619694372407843405) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (3181967377574368400) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_streaming_label (5347862512596240506) -->
+ <skip />
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"ওয়্যারলেস প্রদর্শন সার্টিফিকেশন জন্য বিকল্পগুলি দেখান"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"ওয়াই-ফাই লগিং স্তর বাড়ান, ওয়াই-ফাই চয়নকারীতে SSID RSSI অনুযায়ী দেখান"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"সক্ষম করা থাকলে, নিম্নমানের ওয়াই-ফাই সিগন্যালের ক্ষেত্রে, সেলুলার-এ ডেটা সংযোগ প্রদান করতে ওয়াই-ফাই আরো বেশি শক্তিশালীভাবে কাজ করবে"</string>
diff --git a/packages/SettingsLib/res/values-bs/arrays.xml b/packages/SettingsLib/res/values-bs/arrays.xml
index 93e0678..6c4cde3 100644
--- a/packages/SettingsLib/res/values-bs/arrays.xml
+++ b/packages/SettingsLib/res/values-bs/arrays.xml
@@ -58,66 +58,22 @@
<item msgid="3878793616631049349">"Koristi HDCP provjeru samo za DRM sadržaj"</item>
<item msgid="45075631231212732">"Uvijek koristi HDCP provjeru"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="1852387125374225729">"Podrazumijevano"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="4260844283202960798">"aptX"</item>
- <item msgid="7279983368484312990">"aptX-HD"</item>
- <item msgid="2301339338870319651">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="9072025520360316957">"Podrazumijevano"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="1190434429082395888">"aptX"</item>
- <item msgid="649699003004233053">"aptX-HD"</item>
- <item msgid="508106435710925399">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
- <item msgid="7102940318360468759">"Zadano"</item>
- <item msgid="8895532488906185219">"44,1 kHz"</item>
- <item msgid="2909915718994807056">"48,0 kHz"</item>
- <item msgid="3347287377354164611">"88,2 kHz"</item>
- <item msgid="1234212100239985373">"96,0 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
- <item msgid="7224433008148687313">"Zadano"</item>
- <item msgid="4482862757811638365">"44,1 kHz"</item>
- <item msgid="354495328188724404">"48,0 kHz"</item>
- <item msgid="7329816882213695083">"88,2 kHz"</item>
- <item msgid="6967397666254430476">"96,0 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
- <item msgid="6694044160540313386">"Podrazumijevano"</item>
- <item msgid="5618929009984956469">"16 bitova/uzorak"</item>
- <item msgid="3412640499234627248">"24 bitova/uzorak"</item>
- <item msgid="121583001492929387">"32 bitova/uzorak"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
- <item msgid="5091076677792306320">"Podrazumijevano"</item>
- <item msgid="4726688794884191540">"16 bitova/uzorak"</item>
- <item msgid="305344756485516870">"24 bitova/uzorak"</item>
- <item msgid="244568657919675099">"32 bitova/uzorak"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
- <item msgid="13423709606339855">"Podrazumijevano"</item>
- <item msgid="4106832974775067314">"Mono"</item>
- <item msgid="5571632958424639155">"Stereo"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
- <item msgid="8128478683963250130">"Podrazumijevano"</item>
- <item msgid="8900559293912978337">"Mono"</item>
- <item msgid="8883739882299884241">"Stereo"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
- <item msgid="2944889121850394020">"Željena kvaliteta zvuka (990kbps/909kbps)"</item>
- <item msgid="138837449700903545">"Standardni (660kbps/606kbps)"</item>
- <item msgid="4777177307869441982">"Željena veza (330kbps/303kbps)"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
- <item msgid="172302906231378902">"Željena kvaliteta zvuka (990kbps/909kbps)"</item>
- <item msgid="9091111147684472529">"Standardni (660kbps/606kbps)"</item>
- <item msgid="3367904477834831032">"Željena veza (330kbps/303kbps)"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:0 (7065842274271279580) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:3 (500463122137421129) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:0 (5062108632402595000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3093550793512117000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_titles:0 (3093023430402746802) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_summaries:0 (3214516120190965356) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_titles:0 (2684127272582591429) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_summaries:0 (1081159789834584363) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_titles:0 (5226878858503393706) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_summaries:0 (4118561796005528173) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:0 (3411577996960199959) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:1 (2921767058740704969) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:2 (3682554248829489641) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:0 (7668834469173465015) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:1 (4327143584633311908) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:2 (6155648878105378550) -->
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"Isključeno"</item>
<item msgid="1593289376502312923">"64K"</item>
diff --git a/packages/SettingsLib/res/values-bs/strings.xml b/packages/SettingsLib/res/values-bs/strings.xml
index f2ae338..bb0e1b5 100644
--- a/packages/SettingsLib/res/values-bs/strings.xml
+++ b/packages/SettingsLib/res/values-bs/strings.xml
@@ -171,15 +171,23 @@
<string name="mobile_data_always_on" msgid="7745605759775320362">"Mobilni podaci uvijek aktivni"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Onemogućite apsolutnu jačinu zvuka"</string>
<string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Bluetooth Audio kodek"</string>
- <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"Izaberite željeni Bluetooth A2DP kodek"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_type_dialog_title (4558347981670553665) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Brzina uzorkovanja za Bluetooth audio"</string>
- <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"Izaberite željenu brzinu uzorkovanja za Bluetooth A2DP kodek"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_sample_rate_dialog_title (5628790207448471613) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Bluetooth audio bitovi po uzorku"</string>
- <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"Izaberite željeni broj bitova po uzorku za Bluetooth A2DP kodek"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_bits_per_sample_dialog_title (4546131401358681321) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Način Bluetooth audio kanala"</string>
- <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"Izaberite željeni način kanala Bluetooth A2DP kodeka"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"Kvaliteta reprodukcije za Bluetooth Audio LDAC"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"Izaberite željenu kvalitetu LDAC reprodukcije za Bluetooth A2DP kodek"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_channel_mode_dialog_title (9133545781346216071) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality (3619694372407843405) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (3181967377574368400) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_streaming_label (5347862512596240506) -->
+ <skip />
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Pokaži opcije za certifikaciju Bežičnog prikaza"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Povećajte nivo Wi-Fi zapisivanja, pokazati po SSID RSSI Wi-Fi Picker"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"Kada je omogućeno, Wi-Fi će biti agresivniji u predavanju podatkovne veze mobilnoj, kada je Wi-Fi signal slab"</string>
diff --git a/packages/SettingsLib/res/values-ca/arrays.xml b/packages/SettingsLib/res/values-ca/arrays.xml
index 6cb4217..fb57ab4 100644
--- a/packages/SettingsLib/res/values-ca/arrays.xml
+++ b/packages/SettingsLib/res/values-ca/arrays.xml
@@ -58,66 +58,22 @@
<item msgid="3878793616631049349">"Utilitza la comprovació HDCP només per a contingut DRM"</item>
<item msgid="45075631231212732">"Utilitza sempre la comprovació HDCP"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="1852387125374225729">"Predeterminat"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="4260844283202960798">"aptX"</item>
- <item msgid="7279983368484312990">"aptX-HD"</item>
- <item msgid="2301339338870319651">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="9072025520360316957">"Predeterminat"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="1190434429082395888">"aptX"</item>
- <item msgid="649699003004233053">"aptX-HD"</item>
- <item msgid="508106435710925399">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
- <item msgid="7102940318360468759">"Predeterminat"</item>
- <item msgid="8895532488906185219">"44,1 kHz"</item>
- <item msgid="2909915718994807056">"48,0 kHz"</item>
- <item msgid="3347287377354164611">"88,2 kHz"</item>
- <item msgid="1234212100239985373">"96,0 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
- <item msgid="7224433008148687313">"Predeterminat"</item>
- <item msgid="4482862757811638365">"44,1 kHz"</item>
- <item msgid="354495328188724404">"48,0 kHz"</item>
- <item msgid="7329816882213695083">"88,2 kHz"</item>
- <item msgid="6967397666254430476">"96,0 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
- <item msgid="6694044160540313386">"Predeterminat"</item>
- <item msgid="5618929009984956469">"16 bits/mostra"</item>
- <item msgid="3412640499234627248">"24 bits/mostra"</item>
- <item msgid="121583001492929387">"32 bits/mostra"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
- <item msgid="5091076677792306320">"Predeterminat"</item>
- <item msgid="4726688794884191540">"16 bits/mostra"</item>
- <item msgid="305344756485516870">"24 bits/mostra"</item>
- <item msgid="244568657919675099">"32 bits/mostra"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
- <item msgid="13423709606339855">"Predeterminat"</item>
- <item msgid="4106832974775067314">"Mono"</item>
- <item msgid="5571632958424639155">"Estèreo"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
- <item msgid="8128478683963250130">"Predeterminat"</item>
- <item msgid="8900559293912978337">"Mono"</item>
- <item msgid="8883739882299884241">"Estèreo"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
- <item msgid="2944889121850394020">"Qualitat del so preferida (990 kbps/909 kbps)"</item>
- <item msgid="138837449700903545">"Estàndard (660 kbps/606 kbps)"</item>
- <item msgid="4777177307869441982">"Connexió preferida (330 kbps/303 kbps)"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
- <item msgid="172302906231378902">"Qualitat del so preferida (990 kbps/909 kbps)"</item>
- <item msgid="9091111147684472529">"Estàndard (660 kbps/606 kbps)"</item>
- <item msgid="3367904477834831032">"Connexió preferida (330 kbps/303 kbps)"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:0 (7065842274271279580) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:3 (500463122137421129) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:0 (5062108632402595000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3093550793512117000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_titles:0 (3093023430402746802) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_summaries:0 (3214516120190965356) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_titles:0 (2684127272582591429) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_summaries:0 (1081159789834584363) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_titles:0 (5226878858503393706) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_summaries:0 (4118561796005528173) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:0 (3411577996960199959) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:1 (2921767058740704969) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:2 (3682554248829489641) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:0 (7668834469173465015) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:1 (4327143584633311908) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:2 (6155648878105378550) -->
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"No"</item>
<item msgid="1593289376502312923">"64 K"</item>
diff --git a/packages/SettingsLib/res/values-ca/strings.xml b/packages/SettingsLib/res/values-ca/strings.xml
index ad83d6b..4571e49 100644
--- a/packages/SettingsLib/res/values-ca/strings.xml
+++ b/packages/SettingsLib/res/values-ca/strings.xml
@@ -171,15 +171,23 @@
<string name="mobile_data_always_on" msgid="7745605759775320362">"Dades mòbils sempre actives"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Desactiva el volum absolut"</string>
<string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Còdec d\'àudio per Bluetooth"</string>
- <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"Selecciona el còdec Bluetooth A2DP preferit"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_type_dialog_title (4558347981670553665) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Velocitat de mostra d’àudio per Bluetooth"</string>
- <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"Selecciona la velocitat de mostra preferida del còdec Bluetooth A2DP"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_sample_rate_dialog_title (5628790207448471613) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Bits per mostra de l\'àudio per Bluetooth"</string>
- <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"Selecciona els bits per mostra preferits del còdec Bluetooth A2DP"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_bits_per_sample_dialog_title (4546131401358681321) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Mode de canal de l\'àudio per Bluetooth"</string>
- <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"Selecciona el mode de canal preferit del còdec Bluetooth A2DP"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"Qualitat de reproducció LDAC de l\'àudio per Bluetooth"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"Selecciona la qualitat de reproducció LDAC preferida del còdec Bluetooth A2DP"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_channel_mode_dialog_title (9133545781346216071) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality (3619694372407843405) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (3181967377574368400) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_streaming_label (5347862512596240506) -->
+ <skip />
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Mostra les opcions de certificació de pantalla sense fil"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Augmenta nivell de registre Wi‑Fi i mostra\'l per SSID RSSI al Selector de Wi‑Fi"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"Si s\'activa, la Wi-Fi serà més agressiva en transferir la connexió de dades al mòbil, si el senyal de la Wi-Fi no és estable"</string>
diff --git a/packages/SettingsLib/res/values-cs/arrays.xml b/packages/SettingsLib/res/values-cs/arrays.xml
index bba5a16..8c96ac3 100644
--- a/packages/SettingsLib/res/values-cs/arrays.xml
+++ b/packages/SettingsLib/res/values-cs/arrays.xml
@@ -58,66 +58,22 @@
<item msgid="3878793616631049349">"Použít kontrolu HDCP pouze pro obsah DRM"</item>
<item msgid="45075631231212732">"Vždy používat kontrolu HDCP"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="1852387125374225729">"Výchozí"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="4260844283202960798">"aptX"</item>
- <item msgid="7279983368484312990">"aptX-HD"</item>
- <item msgid="2301339338870319651">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="9072025520360316957">"Výchozí"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="1190434429082395888">"aptX"</item>
- <item msgid="649699003004233053">"aptX-HD"</item>
- <item msgid="508106435710925399">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
- <item msgid="7102940318360468759">"Výchozí"</item>
- <item msgid="8895532488906185219">"44,1 kHz"</item>
- <item msgid="2909915718994807056">"48,0 kHz"</item>
- <item msgid="3347287377354164611">"88,2 kHz"</item>
- <item msgid="1234212100239985373">"96,0 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
- <item msgid="7224433008148687313">"Výchozí"</item>
- <item msgid="4482862757811638365">"44,1 kHz"</item>
- <item msgid="354495328188724404">"48,0 kHz"</item>
- <item msgid="7329816882213695083">"88,2 kHz"</item>
- <item msgid="6967397666254430476">"96,0 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
- <item msgid="6694044160540313386">"Výchozí"</item>
- <item msgid="5618929009984956469">"16 bitů / vzorek"</item>
- <item msgid="3412640499234627248">"24 bitů / vzorek"</item>
- <item msgid="121583001492929387">"32 bitů / vzorek"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
- <item msgid="5091076677792306320">"Výchozí"</item>
- <item msgid="4726688794884191540">"16 bitů / vzorek"</item>
- <item msgid="305344756485516870">"24 bitů / vzorek"</item>
- <item msgid="244568657919675099">"32 bitů / vzorek"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
- <item msgid="13423709606339855">"Výchozí"</item>
- <item msgid="4106832974775067314">"Mono"</item>
- <item msgid="5571632958424639155">"Stereo"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
- <item msgid="8128478683963250130">"Výchozí"</item>
- <item msgid="8900559293912978337">"Mono"</item>
- <item msgid="8883739882299884241">"Stereo"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
- <item msgid="2944889121850394020">"Přednost kvality zvuku (990 kb/s / 909 kb/s)"</item>
- <item msgid="138837449700903545">"Standardní (660 kb/s / 606 kB/s)"</item>
- <item msgid="4777177307869441982">"Přednost připojení (330 kb/s / 303 kb/s)"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
- <item msgid="172302906231378902">"Přednost kvality zvuku (990 kb/s / 909 kb/s)"</item>
- <item msgid="9091111147684472529">"Standardní (660 kb/s / 606 kB/s)"</item>
- <item msgid="3367904477834831032">"Přednost připojení (330 kb/s / 303 kb/s)"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:0 (7065842274271279580) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:3 (500463122137421129) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:0 (5062108632402595000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3093550793512117000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_titles:0 (3093023430402746802) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_summaries:0 (3214516120190965356) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_titles:0 (2684127272582591429) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_summaries:0 (1081159789834584363) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_titles:0 (5226878858503393706) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_summaries:0 (4118561796005528173) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:0 (3411577996960199959) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:1 (2921767058740704969) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:2 (3682554248829489641) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:0 (7668834469173465015) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:1 (4327143584633311908) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:2 (6155648878105378550) -->
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"Vypnuto"</item>
<item msgid="1593289376502312923">"64 kB"</item>
diff --git a/packages/SettingsLib/res/values-cs/strings.xml b/packages/SettingsLib/res/values-cs/strings.xml
index 706aa91..36017e2 100644
--- a/packages/SettingsLib/res/values-cs/strings.xml
+++ b/packages/SettingsLib/res/values-cs/strings.xml
@@ -171,15 +171,23 @@
<string name="mobile_data_always_on" msgid="7745605759775320362">"Mobilní data jsou vždy aktivní"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Zakázat absolutní hlasitost"</string>
<string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Bluetooth Audio – kodek"</string>
- <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"Vyberte preferovaný kodek Bluetooth A2DP"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_type_dialog_title (4558347981670553665) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Bluetooth Audio – vzorkovací frekvence"</string>
- <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"Vybrat vzorkovací frekvenci pro preferovaný kodek Bluetooth A2DP"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_sample_rate_dialog_title (5628790207448471613) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Bluetooth Audio – počet bitů na vzorek"</string>
- <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"Vybrat počet bitů na vzorek pro preferovaný kodek Bluetooth A2DP"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_bits_per_sample_dialog_title (4546131401358681321) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Bluetooth Audio – režim kanálu"</string>
- <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"Vybrat režim kanálu pro preferovaný kodek Bluetooth A2DP"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"Bluetooth Audio LDAC – kvalita přehrávání"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"Vybrat kvalitu přehrávání pro preferovaný kodek Bluetooth A2DP LDAC"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_channel_mode_dialog_title (9133545781346216071) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality (3619694372407843405) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (3181967377574368400) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_streaming_label (5347862512596240506) -->
+ <skip />
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Zobrazit možnosti certifikace bezdrátového displeje"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Zvýšit úroveň protokolování Wi‑Fi zobrazenou v SSID a RSSI při výběru sítě Wi‑Fi."</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"Pokud je tato možnost zapnuta, bude síť Wi-Fi agresivnější při předávání datového připojení mobilní síti při slabém signálu Wi-Fi."</string>
diff --git a/packages/SettingsLib/res/values-da/arrays.xml b/packages/SettingsLib/res/values-da/arrays.xml
index 6ae0aa8..1b54d4a 100644
--- a/packages/SettingsLib/res/values-da/arrays.xml
+++ b/packages/SettingsLib/res/values-da/arrays.xml
@@ -58,66 +58,22 @@
<item msgid="3878793616631049349">"Brug kun HDCP-kontrol ved DRM-indhold"</item>
<item msgid="45075631231212732">"Brug altid HDCP-kontrol"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="1852387125374225729">"Standard"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="4260844283202960798">"aptX"</item>
- <item msgid="7279983368484312990">"aptX-HD"</item>
- <item msgid="2301339338870319651">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="9072025520360316957">"Standard"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="1190434429082395888">"aptX"</item>
- <item msgid="649699003004233053">"aptX-HD"</item>
- <item msgid="508106435710925399">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
- <item msgid="7102940318360468759">"Standard"</item>
- <item msgid="8895532488906185219">"44,1 kHz"</item>
- <item msgid="2909915718994807056">"48,0 kHz"</item>
- <item msgid="3347287377354164611">"88,2 kHz"</item>
- <item msgid="1234212100239985373">"96,0 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
- <item msgid="7224433008148687313">"Standard"</item>
- <item msgid="4482862757811638365">"44,1 kHz"</item>
- <item msgid="354495328188724404">"48,0 kHz"</item>
- <item msgid="7329816882213695083">"88,2 kHz"</item>
- <item msgid="6967397666254430476">"96,0 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
- <item msgid="6694044160540313386">"Standard"</item>
- <item msgid="5618929009984956469">"16 bit pr. eksempel"</item>
- <item msgid="3412640499234627248">"24 bit pr. eksempel"</item>
- <item msgid="121583001492929387">"32 bit pr. eksempel"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
- <item msgid="5091076677792306320">"Standard"</item>
- <item msgid="4726688794884191540">"16 bit pr. eksempel"</item>
- <item msgid="305344756485516870">"24 bit pr. eksempel"</item>
- <item msgid="244568657919675099">"32 bit pr. eksempel"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
- <item msgid="13423709606339855">"Standard"</item>
- <item msgid="4106832974775067314">"Mono"</item>
- <item msgid="5571632958424639155">"Stereo"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
- <item msgid="8128478683963250130">"Standard"</item>
- <item msgid="8900559293912978337">"Mono"</item>
- <item msgid="8883739882299884241">"Stereo"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
- <item msgid="2944889121850394020">"Lydkvalitet foretrækkes (990 kbps/909 kbps)"</item>
- <item msgid="138837449700903545">"Standard (660 kbps/606 kbps)"</item>
- <item msgid="4777177307869441982">"Forbindelse foretrækkes (330 kbps/303 kbps)"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
- <item msgid="172302906231378902">"Lydkvalitet foretrækkes (990 kbps/909 kbps)"</item>
- <item msgid="9091111147684472529">"Standard (660 kbps/606 kbps)"</item>
- <item msgid="3367904477834831032">"Forbindelse foretrækkes (330 kbps/303 kbps)"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:0 (7065842274271279580) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:3 (500463122137421129) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:0 (5062108632402595000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3093550793512117000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_titles:0 (3093023430402746802) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_summaries:0 (3214516120190965356) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_titles:0 (2684127272582591429) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_summaries:0 (1081159789834584363) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_titles:0 (5226878858503393706) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_summaries:0 (4118561796005528173) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:0 (3411577996960199959) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:1 (2921767058740704969) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:2 (3682554248829489641) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:0 (7668834469173465015) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:1 (4327143584633311908) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:2 (6155648878105378550) -->
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"Fra"</item>
<item msgid="1593289376502312923">"64 kB"</item>
diff --git a/packages/SettingsLib/res/values-da/strings.xml b/packages/SettingsLib/res/values-da/strings.xml
index c6e6fb7..2824b81 100644
--- a/packages/SettingsLib/res/values-da/strings.xml
+++ b/packages/SettingsLib/res/values-da/strings.xml
@@ -171,15 +171,23 @@
<string name="mobile_data_always_on" msgid="7745605759775320362">"Mobildata altid aktiveret"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Deaktiver absolut lydstyrke"</string>
<string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Bluetooth-lydcodec"</string>
- <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"Vælg foretrukken Bluetooth A2DP-codec"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_type_dialog_title (4558347981670553665) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Eksempelfrekvens for Bluetooth-lyd"</string>
- <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"Vælg eksempelfrekvens for foretrukken Bluetooth A2DP-codec"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_sample_rate_dialog_title (5628790207448471613) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Bit pr. eksempel for Bluetooth-lyd"</string>
- <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"Vælg bit pr. eksempel for foretrukken Bluetooth A2DP-codec"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_bits_per_sample_dialog_title (4546131401358681321) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Kanaltilstand for Bluetooth-lyd"</string>
- <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"Vælg kanaltilstand for foretrukken Bluetooth A2DP-codec"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"LDAC-afspilningskvalitet for Bluetooth-lyd"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"Vælg LDAC-afspilningskvalitet for foretrukken Bluetooth A2DP-codec"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_channel_mode_dialog_title (9133545781346216071) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality (3619694372407843405) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (3181967377574368400) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_streaming_label (5347862512596240506) -->
+ <skip />
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Vis valgmuligheder for certificering af trådløs skærm"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Øg mængden af Wi‑Fi-logføring. Vis opdelt efter SSID RSSI i Wi‑Fi-vælgeren"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"Når dette er aktiveret, gennemtvinges en overdragelse af dataforbindelsen fra Wi-Fi til mobilnetværk, når Wi-Fi-signalet er svagt"</string>
diff --git a/packages/SettingsLib/res/values-de/arrays.xml b/packages/SettingsLib/res/values-de/arrays.xml
index 935c2b4..796e58f 100644
--- a/packages/SettingsLib/res/values-de/arrays.xml
+++ b/packages/SettingsLib/res/values-de/arrays.xml
@@ -58,66 +58,22 @@
<item msgid="3878793616631049349">"HDCP-Prüfung nur für DRM-Inhalte verwenden"</item>
<item msgid="45075631231212732">"HDCP-Prüfung immer verwenden"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="1852387125374225729">"Standard"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="4260844283202960798">"aptX"</item>
- <item msgid="7279983368484312990">"aptX-HD"</item>
- <item msgid="2301339338870319651">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="9072025520360316957">"Standard"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="1190434429082395888">"aptX"</item>
- <item msgid="649699003004233053">"aptX-HD"</item>
- <item msgid="508106435710925399">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
- <item msgid="7102940318360468759">"Standard"</item>
- <item msgid="8895532488906185219">"44,1 kHz"</item>
- <item msgid="2909915718994807056">"48 kHz"</item>
- <item msgid="3347287377354164611">"88,2 kHz"</item>
- <item msgid="1234212100239985373">"96 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
- <item msgid="7224433008148687313">"Standard"</item>
- <item msgid="4482862757811638365">"44,1 kHz"</item>
- <item msgid="354495328188724404">"48 kHz"</item>
- <item msgid="7329816882213695083">"88,2 kHz"</item>
- <item msgid="6967397666254430476">"96 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
- <item msgid="6694044160540313386">"Standard"</item>
- <item msgid="5618929009984956469">"16 Bits pro Sample"</item>
- <item msgid="3412640499234627248">"24 Bits pro Sample"</item>
- <item msgid="121583001492929387">"32 Bits pro Sample"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
- <item msgid="5091076677792306320">"Standard"</item>
- <item msgid="4726688794884191540">"16 Bits pro Sample"</item>
- <item msgid="305344756485516870">"24 Bits pro Sample"</item>
- <item msgid="244568657919675099">"32 Bits pro Sample"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
- <item msgid="13423709606339855">"Standard"</item>
- <item msgid="4106832974775067314">"Mono"</item>
- <item msgid="5571632958424639155">"Stereo"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
- <item msgid="8128478683963250130">"Standard"</item>
- <item msgid="8900559293912978337">"Mono"</item>
- <item msgid="8883739882299884241">"Stereo"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
- <item msgid="2944889121850394020">"Bevorzugte Tonqualität (990 kbit/s / 909 kbit/s)"</item>
- <item msgid="138837449700903545">"Standard (660 kbit/s / 606 kbit/s)"</item>
- <item msgid="4777177307869441982">"Bevorzugte Verbindung (330 kbit/s / 303 kbit/s)"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
- <item msgid="172302906231378902">"Bevorzugte Tonqualität (990 kbit/s / 909 kbit/s)"</item>
- <item msgid="9091111147684472529">"Standard (660 kbit/s / 606 kbit/s)"</item>
- <item msgid="3367904477834831032">"Bevorzugte Verbindung (330 kbit/s / 303 kbit/s)"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:0 (7065842274271279580) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:3 (500463122137421129) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:0 (5062108632402595000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3093550793512117000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_titles:0 (3093023430402746802) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_summaries:0 (3214516120190965356) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_titles:0 (2684127272582591429) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_summaries:0 (1081159789834584363) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_titles:0 (5226878858503393706) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_summaries:0 (4118561796005528173) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:0 (3411577996960199959) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:1 (2921767058740704969) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:2 (3682554248829489641) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:0 (7668834469173465015) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:1 (4327143584633311908) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:2 (6155648878105378550) -->
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"Aus"</item>
<item msgid="1593289376502312923">"64.000"</item>
diff --git a/packages/SettingsLib/res/values-de/strings.xml b/packages/SettingsLib/res/values-de/strings.xml
index 0ce1384..632866e 100644
--- a/packages/SettingsLib/res/values-de/strings.xml
+++ b/packages/SettingsLib/res/values-de/strings.xml
@@ -171,15 +171,23 @@
<string name="mobile_data_always_on" msgid="7745605759775320362">"Mobile Datennutzung immer aktiviert"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Maximallautstärke deaktivieren"</string>
<string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Bluetooth-Audio-Codec"</string>
- <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"Bevorzugten Bluetooth-A2DP-Codec auwählen"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_type_dialog_title (4558347981670553665) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Bluetooth-Audio-Abtastrate"</string>
- <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"Bevorzugten Bluetooth-A2DP-Codec auswählen/Abtastrate"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_sample_rate_dialog_title (5628790207448471613) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Bluetooth-Audio/Bits pro Sample"</string>
- <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"Bevorzugten Bluetooth-A2DP-Codec auswählen/Bits Pro Sample"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_bits_per_sample_dialog_title (4546131401358681321) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Modus des Bluetooth-Audiokanals"</string>
- <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"Bevorzugten Bluetooth-A2DP-Codec auswählen/Modus des Kanals"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"LDAC-Wiedergabequalität von Bluetooth-Audio"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"Bevorzugten Bluetooth-A2DP-Codec auswählen/LDAC-Wiedergabequalität"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_channel_mode_dialog_title (9133545781346216071) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality (3619694372407843405) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (3181967377574368400) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_streaming_label (5347862512596240506) -->
+ <skip />
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Optionen zur Zertifizierung für kabellose Übertragung anzeigen"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Level für WLAN-Protokollierung erhöhen, in WiFi Picker pro SSID-RSSI anzeigen"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"Wenn diese Option aktiviert ist, ist WLAN bei schwachem Signal bei der Übergabe der Datenverbindung an den Mobilfunk aggressiver."</string>
diff --git a/packages/SettingsLib/res/values-el/arrays.xml b/packages/SettingsLib/res/values-el/arrays.xml
index 04e1a8c..857420c 100644
--- a/packages/SettingsLib/res/values-el/arrays.xml
+++ b/packages/SettingsLib/res/values-el/arrays.xml
@@ -58,66 +58,22 @@
<item msgid="3878793616631049349">"Χρήση ελέγχου HDCP μόνο για περιεχόμενο DRM"</item>
<item msgid="45075631231212732">"Να χρησιμοποιείται πάντα έλεγχος HDCP"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="1852387125374225729">"Προεπιλογή"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="4260844283202960798">"aptX"</item>
- <item msgid="7279983368484312990">"aptX-HD"</item>
- <item msgid="2301339338870319651">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="9072025520360316957">"Προεπιλογή"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="1190434429082395888">"aptX"</item>
- <item msgid="649699003004233053">"aptX-HD"</item>
- <item msgid="508106435710925399">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
- <item msgid="7102940318360468759">"Προεπιλογή"</item>
- <item msgid="8895532488906185219">"44,1 kHz"</item>
- <item msgid="2909915718994807056">"48,0 kHz"</item>
- <item msgid="3347287377354164611">"88,2 kHz"</item>
- <item msgid="1234212100239985373">"96,0 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
- <item msgid="7224433008148687313">"Προεπιλογή"</item>
- <item msgid="4482862757811638365">"44,1 kHz"</item>
- <item msgid="354495328188724404">"48,0 kHz"</item>
- <item msgid="7329816882213695083">"88,2 kHz"</item>
- <item msgid="6967397666254430476">"96,0 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
- <item msgid="6694044160540313386">"Προεπιλογή"</item>
- <item msgid="5618929009984956469">"16 bit/δείγμα"</item>
- <item msgid="3412640499234627248">"24 bit/δείγμα"</item>
- <item msgid="121583001492929387">"32 bit/δείγμα"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
- <item msgid="5091076677792306320">"Προεπιλογή"</item>
- <item msgid="4726688794884191540">"16 bit/δείγμα"</item>
- <item msgid="305344756485516870">"24 bit/δείγμα"</item>
- <item msgid="244568657919675099">"32 bit/δείγμα"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
- <item msgid="13423709606339855">"Προεπιλογή"</item>
- <item msgid="4106832974775067314">"Μονοφωνικό"</item>
- <item msgid="5571632958424639155">"Στερεοφωνικό"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
- <item msgid="8128478683963250130">"Προεπιλογή"</item>
- <item msgid="8900559293912978337">"Μονοφωνικό"</item>
- <item msgid="8883739882299884241">"Στερεοφωνικό"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
- <item msgid="2944889121850394020">"Προτιμ. ποιότητα ήχου (990kbps/909kbps)"</item>
- <item msgid="138837449700903545">"Τυπική (660kbps/606kbps)"</item>
- <item msgid="4777177307869441982">"Προτιμώμενη σύνδεση (330kbps/303kbps)"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
- <item msgid="172302906231378902">"Προτιμ. ποιότητα ήχου (990kbps/909kbps)"</item>
- <item msgid="9091111147684472529">"Τυπική (660kbps/606kbps)"</item>
- <item msgid="3367904477834831032">"Προτιμώμενη σύνδεση (330kbps/303kbps)"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:0 (7065842274271279580) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:3 (500463122137421129) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:0 (5062108632402595000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3093550793512117000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_titles:0 (3093023430402746802) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_summaries:0 (3214516120190965356) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_titles:0 (2684127272582591429) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_summaries:0 (1081159789834584363) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_titles:0 (5226878858503393706) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_summaries:0 (4118561796005528173) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:0 (3411577996960199959) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:1 (2921767058740704969) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:2 (3682554248829489641) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:0 (7668834469173465015) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:1 (4327143584633311908) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:2 (6155648878105378550) -->
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"Ανενεργό"</item>
<item msgid="1593289376502312923">"64 K"</item>
diff --git a/packages/SettingsLib/res/values-el/strings.xml b/packages/SettingsLib/res/values-el/strings.xml
index 8d3df55..67365a3 100644
--- a/packages/SettingsLib/res/values-el/strings.xml
+++ b/packages/SettingsLib/res/values-el/strings.xml
@@ -171,15 +171,23 @@
<string name="mobile_data_always_on" msgid="7745605759775320362">"Πάντα ενεργά δεδομένα κινητής τηλεφωνίας"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Απενεργοποίηση απόλυτης έντασης"</string>
<string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Κωδικοποιητής ήχου Bluetooth"</string>
- <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"Επιλέξτε τον προτιμώμενο κωδικοποιητή A2DP Bluetooth"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_type_dialog_title (4558347981670553665) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Ρυθμός δειγματοληψίας ήχου Bluetooth"</string>
- <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"Επιλέξτε τον προτιμώμενο ρυθμό δειγματοληψίας του κωδικοποιητή A2DP Bluetooth"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_sample_rate_dialog_title (5628790207448471613) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Bit ανά δείγμα ήχου Bluetooth"</string>
- <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"Επιλέξτε τα προτιμώμενα bit ανά δείγμα για τον κωδικοποιητή A2DP Bluetooth"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_bits_per_sample_dialog_title (4546131401358681321) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Λειτουργία καναλιού ήχου Bluetooth"</string>
- <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"Επιλέξτε την προτιμώμενη λειτουργία καναλιού κωδικοποιητή A2DP Bluetooth"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"Ποιότητα αναπαραγωγής LDAC ήχου Bluetooth"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"Επιλέξτε την προτιμώμενη ποιότητα αναπαραγωγής LDAC του κωδικοποιητή A2DP Bluetooth"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_channel_mode_dialog_title (9133545781346216071) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality (3619694372407843405) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (3181967377574368400) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_streaming_label (5347862512596240506) -->
+ <skip />
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Εμφάνιση επιλογών για πιστοποίηση ασύρματης οθόνης"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Αύξηση επιπέδου καταγ. Wi-Fi, εμφάνιση ανά SSID RSSI στο εργαλείο επιλογής Wi-Fi"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"Όταν είναι ενεργό, το Wi-Fi θα μεταβιβάζει πιο επιθετικά τη σύνδ.δεδομένων σε δίκτυο κινητής τηλ., όταν το σήμα Wi-Fi είναι χαμηλό"</string>
diff --git a/packages/SettingsLib/res/values-en-rAU/arrays.xml b/packages/SettingsLib/res/values-en-rAU/arrays.xml
index 5242be3..4758019 100644
--- a/packages/SettingsLib/res/values-en-rAU/arrays.xml
+++ b/packages/SettingsLib/res/values-en-rAU/arrays.xml
@@ -58,66 +58,22 @@
<item msgid="3878793616631049349">"Use HDCP checking for DRM content only"</item>
<item msgid="45075631231212732">"Always use HDCP checking"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="1852387125374225729">"Default"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="4260844283202960798">"aptX"</item>
- <item msgid="7279983368484312990">"aptX-HD"</item>
- <item msgid="2301339338870319651">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="9072025520360316957">"Default"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="1190434429082395888">"aptX"</item>
- <item msgid="649699003004233053">"aptX-HD"</item>
- <item msgid="508106435710925399">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
- <item msgid="7102940318360468759">"Default"</item>
- <item msgid="8895532488906185219">"44.1 kHz"</item>
- <item msgid="2909915718994807056">"48.0 kHz"</item>
- <item msgid="3347287377354164611">"88.2 kHz"</item>
- <item msgid="1234212100239985373">"96.0 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
- <item msgid="7224433008148687313">"Default"</item>
- <item msgid="4482862757811638365">"44.1 kHz"</item>
- <item msgid="354495328188724404">"48.0 kHz"</item>
- <item msgid="7329816882213695083">"88.2 kHz"</item>
- <item msgid="6967397666254430476">"96.0 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
- <item msgid="6694044160540313386">"Default"</item>
- <item msgid="5618929009984956469">"16 bits/sample"</item>
- <item msgid="3412640499234627248">"24 bits/sample"</item>
- <item msgid="121583001492929387">"32 bits/sample"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
- <item msgid="5091076677792306320">"Default"</item>
- <item msgid="4726688794884191540">"16 bits/sample"</item>
- <item msgid="305344756485516870">"24 bits/sample"</item>
- <item msgid="244568657919675099">"32 bits/sample"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
- <item msgid="13423709606339855">"Default"</item>
- <item msgid="4106832974775067314">"Mono"</item>
- <item msgid="5571632958424639155">"Stereo"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
- <item msgid="8128478683963250130">"Default"</item>
- <item msgid="8900559293912978337">"Mono"</item>
- <item msgid="8883739882299884241">"Stereo"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
- <item msgid="2944889121850394020">"Sound quality preferred (990 Kbps/909 Kbps)"</item>
- <item msgid="138837449700903545">"Standard (660 Kbps/606 Kbps)"</item>
- <item msgid="4777177307869441982">"Connection preferred (330 Kbps/303 Kbps)"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
- <item msgid="172302906231378902">"Sound quality preferred (990 Kbps/909 Kbps)"</item>
- <item msgid="9091111147684472529">"Standard (660 Kbps/606 Kbps)"</item>
- <item msgid="3367904477834831032">"Connection preferred (330 Kbps/303 Kbps)"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:0 (7065842274271279580) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:3 (500463122137421129) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:0 (5062108632402595000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3093550793512117000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_titles:0 (3093023430402746802) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_summaries:0 (3214516120190965356) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_titles:0 (2684127272582591429) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_summaries:0 (1081159789834584363) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_titles:0 (5226878858503393706) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_summaries:0 (4118561796005528173) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:0 (3411577996960199959) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:1 (2921767058740704969) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:2 (3682554248829489641) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:0 (7668834469173465015) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:1 (4327143584633311908) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:2 (6155648878105378550) -->
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"Off"</item>
<item msgid="1593289376502312923">"64 K"</item>
diff --git a/packages/SettingsLib/res/values-en-rAU/strings.xml b/packages/SettingsLib/res/values-en-rAU/strings.xml
index f09206d..bb8fc15 100644
--- a/packages/SettingsLib/res/values-en-rAU/strings.xml
+++ b/packages/SettingsLib/res/values-en-rAU/strings.xml
@@ -171,15 +171,23 @@
<string name="mobile_data_always_on" msgid="7745605759775320362">"Mobile data always active"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Disable absolute volume"</string>
<string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Bluetooth Audio Codec"</string>
- <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"Select Preferred Bluetooth A2DP Codec"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_type_dialog_title (4558347981670553665) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Bluetooth Audio Sample Rate"</string>
- <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"Select Preferred Bluetooth A2DP Codec Sample Rate"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_sample_rate_dialog_title (5628790207448471613) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Bluetooth Audio Bits Per Sample"</string>
- <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"Select Preferred Bluetooth A2DP Codec Bits Per Sample"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_bits_per_sample_dialog_title (4546131401358681321) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Bluetooth Audio Channel Mode"</string>
- <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"Select Preferred Bluetooth A2DP Codec Channel Mode"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"Bluetooth Audio LDAC Playback Quality"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"Select Preferred Bluetooth A2DP Codec LDAC Playback Quality"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_channel_mode_dialog_title (9133545781346216071) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality (3619694372407843405) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (3181967377574368400) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_streaming_label (5347862512596240506) -->
+ <skip />
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Show options for wireless display certification"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Increase Wi‑Fi logging level, show per SSID RSSI in Wi‑Fi Picker"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"When enabled, Wi‑Fi will be more aggressive in handing over the data connection to Mobile, when Wi‑Fi signal is low"</string>
diff --git a/packages/SettingsLib/res/values-en-rGB/arrays.xml b/packages/SettingsLib/res/values-en-rGB/arrays.xml
index 5242be3..4758019 100644
--- a/packages/SettingsLib/res/values-en-rGB/arrays.xml
+++ b/packages/SettingsLib/res/values-en-rGB/arrays.xml
@@ -58,66 +58,22 @@
<item msgid="3878793616631049349">"Use HDCP checking for DRM content only"</item>
<item msgid="45075631231212732">"Always use HDCP checking"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="1852387125374225729">"Default"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="4260844283202960798">"aptX"</item>
- <item msgid="7279983368484312990">"aptX-HD"</item>
- <item msgid="2301339338870319651">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="9072025520360316957">"Default"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="1190434429082395888">"aptX"</item>
- <item msgid="649699003004233053">"aptX-HD"</item>
- <item msgid="508106435710925399">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
- <item msgid="7102940318360468759">"Default"</item>
- <item msgid="8895532488906185219">"44.1 kHz"</item>
- <item msgid="2909915718994807056">"48.0 kHz"</item>
- <item msgid="3347287377354164611">"88.2 kHz"</item>
- <item msgid="1234212100239985373">"96.0 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
- <item msgid="7224433008148687313">"Default"</item>
- <item msgid="4482862757811638365">"44.1 kHz"</item>
- <item msgid="354495328188724404">"48.0 kHz"</item>
- <item msgid="7329816882213695083">"88.2 kHz"</item>
- <item msgid="6967397666254430476">"96.0 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
- <item msgid="6694044160540313386">"Default"</item>
- <item msgid="5618929009984956469">"16 bits/sample"</item>
- <item msgid="3412640499234627248">"24 bits/sample"</item>
- <item msgid="121583001492929387">"32 bits/sample"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
- <item msgid="5091076677792306320">"Default"</item>
- <item msgid="4726688794884191540">"16 bits/sample"</item>
- <item msgid="305344756485516870">"24 bits/sample"</item>
- <item msgid="244568657919675099">"32 bits/sample"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
- <item msgid="13423709606339855">"Default"</item>
- <item msgid="4106832974775067314">"Mono"</item>
- <item msgid="5571632958424639155">"Stereo"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
- <item msgid="8128478683963250130">"Default"</item>
- <item msgid="8900559293912978337">"Mono"</item>
- <item msgid="8883739882299884241">"Stereo"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
- <item msgid="2944889121850394020">"Sound quality preferred (990 Kbps/909 Kbps)"</item>
- <item msgid="138837449700903545">"Standard (660 Kbps/606 Kbps)"</item>
- <item msgid="4777177307869441982">"Connection preferred (330 Kbps/303 Kbps)"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
- <item msgid="172302906231378902">"Sound quality preferred (990 Kbps/909 Kbps)"</item>
- <item msgid="9091111147684472529">"Standard (660 Kbps/606 Kbps)"</item>
- <item msgid="3367904477834831032">"Connection preferred (330 Kbps/303 Kbps)"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:0 (7065842274271279580) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:3 (500463122137421129) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:0 (5062108632402595000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3093550793512117000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_titles:0 (3093023430402746802) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_summaries:0 (3214516120190965356) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_titles:0 (2684127272582591429) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_summaries:0 (1081159789834584363) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_titles:0 (5226878858503393706) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_summaries:0 (4118561796005528173) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:0 (3411577996960199959) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:1 (2921767058740704969) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:2 (3682554248829489641) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:0 (7668834469173465015) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:1 (4327143584633311908) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:2 (6155648878105378550) -->
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"Off"</item>
<item msgid="1593289376502312923">"64 K"</item>
diff --git a/packages/SettingsLib/res/values-en-rGB/strings.xml b/packages/SettingsLib/res/values-en-rGB/strings.xml
index f09206d..bb8fc15 100644
--- a/packages/SettingsLib/res/values-en-rGB/strings.xml
+++ b/packages/SettingsLib/res/values-en-rGB/strings.xml
@@ -171,15 +171,23 @@
<string name="mobile_data_always_on" msgid="7745605759775320362">"Mobile data always active"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Disable absolute volume"</string>
<string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Bluetooth Audio Codec"</string>
- <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"Select Preferred Bluetooth A2DP Codec"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_type_dialog_title (4558347981670553665) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Bluetooth Audio Sample Rate"</string>
- <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"Select Preferred Bluetooth A2DP Codec Sample Rate"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_sample_rate_dialog_title (5628790207448471613) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Bluetooth Audio Bits Per Sample"</string>
- <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"Select Preferred Bluetooth A2DP Codec Bits Per Sample"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_bits_per_sample_dialog_title (4546131401358681321) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Bluetooth Audio Channel Mode"</string>
- <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"Select Preferred Bluetooth A2DP Codec Channel Mode"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"Bluetooth Audio LDAC Playback Quality"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"Select Preferred Bluetooth A2DP Codec LDAC Playback Quality"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_channel_mode_dialog_title (9133545781346216071) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality (3619694372407843405) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (3181967377574368400) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_streaming_label (5347862512596240506) -->
+ <skip />
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Show options for wireless display certification"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Increase Wi‑Fi logging level, show per SSID RSSI in Wi‑Fi Picker"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"When enabled, Wi‑Fi will be more aggressive in handing over the data connection to Mobile, when Wi‑Fi signal is low"</string>
diff --git a/packages/SettingsLib/res/values-en-rIN/arrays.xml b/packages/SettingsLib/res/values-en-rIN/arrays.xml
index 5242be3..4758019 100644
--- a/packages/SettingsLib/res/values-en-rIN/arrays.xml
+++ b/packages/SettingsLib/res/values-en-rIN/arrays.xml
@@ -58,66 +58,22 @@
<item msgid="3878793616631049349">"Use HDCP checking for DRM content only"</item>
<item msgid="45075631231212732">"Always use HDCP checking"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="1852387125374225729">"Default"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="4260844283202960798">"aptX"</item>
- <item msgid="7279983368484312990">"aptX-HD"</item>
- <item msgid="2301339338870319651">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="9072025520360316957">"Default"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="1190434429082395888">"aptX"</item>
- <item msgid="649699003004233053">"aptX-HD"</item>
- <item msgid="508106435710925399">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
- <item msgid="7102940318360468759">"Default"</item>
- <item msgid="8895532488906185219">"44.1 kHz"</item>
- <item msgid="2909915718994807056">"48.0 kHz"</item>
- <item msgid="3347287377354164611">"88.2 kHz"</item>
- <item msgid="1234212100239985373">"96.0 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
- <item msgid="7224433008148687313">"Default"</item>
- <item msgid="4482862757811638365">"44.1 kHz"</item>
- <item msgid="354495328188724404">"48.0 kHz"</item>
- <item msgid="7329816882213695083">"88.2 kHz"</item>
- <item msgid="6967397666254430476">"96.0 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
- <item msgid="6694044160540313386">"Default"</item>
- <item msgid="5618929009984956469">"16 bits/sample"</item>
- <item msgid="3412640499234627248">"24 bits/sample"</item>
- <item msgid="121583001492929387">"32 bits/sample"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
- <item msgid="5091076677792306320">"Default"</item>
- <item msgid="4726688794884191540">"16 bits/sample"</item>
- <item msgid="305344756485516870">"24 bits/sample"</item>
- <item msgid="244568657919675099">"32 bits/sample"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
- <item msgid="13423709606339855">"Default"</item>
- <item msgid="4106832974775067314">"Mono"</item>
- <item msgid="5571632958424639155">"Stereo"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
- <item msgid="8128478683963250130">"Default"</item>
- <item msgid="8900559293912978337">"Mono"</item>
- <item msgid="8883739882299884241">"Stereo"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
- <item msgid="2944889121850394020">"Sound quality preferred (990 Kbps/909 Kbps)"</item>
- <item msgid="138837449700903545">"Standard (660 Kbps/606 Kbps)"</item>
- <item msgid="4777177307869441982">"Connection preferred (330 Kbps/303 Kbps)"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
- <item msgid="172302906231378902">"Sound quality preferred (990 Kbps/909 Kbps)"</item>
- <item msgid="9091111147684472529">"Standard (660 Kbps/606 Kbps)"</item>
- <item msgid="3367904477834831032">"Connection preferred (330 Kbps/303 Kbps)"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:0 (7065842274271279580) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:3 (500463122137421129) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:0 (5062108632402595000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3093550793512117000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_titles:0 (3093023430402746802) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_summaries:0 (3214516120190965356) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_titles:0 (2684127272582591429) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_summaries:0 (1081159789834584363) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_titles:0 (5226878858503393706) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_summaries:0 (4118561796005528173) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:0 (3411577996960199959) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:1 (2921767058740704969) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:2 (3682554248829489641) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:0 (7668834469173465015) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:1 (4327143584633311908) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:2 (6155648878105378550) -->
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"Off"</item>
<item msgid="1593289376502312923">"64 K"</item>
diff --git a/packages/SettingsLib/res/values-en-rIN/strings.xml b/packages/SettingsLib/res/values-en-rIN/strings.xml
index f09206d..bb8fc15 100644
--- a/packages/SettingsLib/res/values-en-rIN/strings.xml
+++ b/packages/SettingsLib/res/values-en-rIN/strings.xml
@@ -171,15 +171,23 @@
<string name="mobile_data_always_on" msgid="7745605759775320362">"Mobile data always active"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Disable absolute volume"</string>
<string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Bluetooth Audio Codec"</string>
- <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"Select Preferred Bluetooth A2DP Codec"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_type_dialog_title (4558347981670553665) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Bluetooth Audio Sample Rate"</string>
- <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"Select Preferred Bluetooth A2DP Codec Sample Rate"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_sample_rate_dialog_title (5628790207448471613) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Bluetooth Audio Bits Per Sample"</string>
- <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"Select Preferred Bluetooth A2DP Codec Bits Per Sample"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_bits_per_sample_dialog_title (4546131401358681321) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Bluetooth Audio Channel Mode"</string>
- <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"Select Preferred Bluetooth A2DP Codec Channel Mode"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"Bluetooth Audio LDAC Playback Quality"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"Select Preferred Bluetooth A2DP Codec LDAC Playback Quality"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_channel_mode_dialog_title (9133545781346216071) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality (3619694372407843405) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (3181967377574368400) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_streaming_label (5347862512596240506) -->
+ <skip />
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Show options for wireless display certification"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Increase Wi‑Fi logging level, show per SSID RSSI in Wi‑Fi Picker"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"When enabled, Wi‑Fi will be more aggressive in handing over the data connection to Mobile, when Wi‑Fi signal is low"</string>
diff --git a/packages/SettingsLib/res/values-es-rUS/arrays.xml b/packages/SettingsLib/res/values-es-rUS/arrays.xml
index d574edd..4df4952 100644
--- a/packages/SettingsLib/res/values-es-rUS/arrays.xml
+++ b/packages/SettingsLib/res/values-es-rUS/arrays.xml
@@ -58,66 +58,22 @@
<item msgid="3878793616631049349">"Usar comprobación HDCP para contenido DRM solamente"</item>
<item msgid="45075631231212732">"Siempre utilizar comprobación HDCP"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="1852387125374225729">"Predeterminado"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="4260844283202960798">"aptX"</item>
- <item msgid="7279983368484312990">"aptX-HD"</item>
- <item msgid="2301339338870319651">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="9072025520360316957">"Predeterminado"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="1190434429082395888">"aptX"</item>
- <item msgid="649699003004233053">"aptX-HD"</item>
- <item msgid="508106435710925399">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
- <item msgid="7102940318360468759">"Predeterminado"</item>
- <item msgid="8895532488906185219">"44.1 kHz"</item>
- <item msgid="2909915718994807056">"48.0 kHz"</item>
- <item msgid="3347287377354164611">"88.2 kHz"</item>
- <item msgid="1234212100239985373">"96.0 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
- <item msgid="7224433008148687313">"Predeterminado"</item>
- <item msgid="4482862757811638365">"44.1 kHz"</item>
- <item msgid="354495328188724404">"48.0 kHz"</item>
- <item msgid="7329816882213695083">"88.2 kHz"</item>
- <item msgid="6967397666254430476">"96.0 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
- <item msgid="6694044160540313386">"Predeterminado"</item>
- <item msgid="5618929009984956469">"16 bits/muestra"</item>
- <item msgid="3412640499234627248">"24 bits/muestra"</item>
- <item msgid="121583001492929387">"32 bits/muestra"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
- <item msgid="5091076677792306320">"Predeterminado"</item>
- <item msgid="4726688794884191540">"16 bits/muestra"</item>
- <item msgid="305344756485516870">"24 bits/muestra"</item>
- <item msgid="244568657919675099">"32 bits/muestra"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
- <item msgid="13423709606339855">"Predeterminado"</item>
- <item msgid="4106832974775067314">"Mono"</item>
- <item msgid="5571632958424639155">"Estéreo"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
- <item msgid="8128478683963250130">"Predeterminado"</item>
- <item msgid="8900559293912978337">"Mono"</item>
- <item msgid="8883739882299884241">"Estéreo"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
- <item msgid="2944889121850394020">"Calidad de sonido (990 kbps/909 kbps)"</item>
- <item msgid="138837449700903545">"Estándar (660 kbps/606 kbps)"</item>
- <item msgid="4777177307869441982">"Conexión preferida (330 kbps/303 kbps)"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
- <item msgid="172302906231378902">"Calidad de sonido (990 kbps/909 kbps)"</item>
- <item msgid="9091111147684472529">"Estándar (660 kbps/606 kbps)"</item>
- <item msgid="3367904477834831032">"Conexión preferida (330 kbps/303 kbps)"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:0 (7065842274271279580) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:3 (500463122137421129) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:0 (5062108632402595000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3093550793512117000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_titles:0 (3093023430402746802) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_summaries:0 (3214516120190965356) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_titles:0 (2684127272582591429) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_summaries:0 (1081159789834584363) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_titles:0 (5226878858503393706) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_summaries:0 (4118561796005528173) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:0 (3411577996960199959) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:1 (2921767058740704969) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:2 (3682554248829489641) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:0 (7668834469173465015) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:1 (4327143584633311908) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:2 (6155648878105378550) -->
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"Desactivado"</item>
<item msgid="1593289376502312923">"64 K"</item>
diff --git a/packages/SettingsLib/res/values-es-rUS/strings.xml b/packages/SettingsLib/res/values-es-rUS/strings.xml
index 59eb2eb..9d9a087 100644
--- a/packages/SettingsLib/res/values-es-rUS/strings.xml
+++ b/packages/SettingsLib/res/values-es-rUS/strings.xml
@@ -171,15 +171,23 @@
<string name="mobile_data_always_on" msgid="7745605759775320362">"Datos móviles siempre activos"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Inhabilitar volumen absoluto"</string>
<string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Códec del audio Bluetooth"</string>
- <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"Selecciona el códec A2DP de Bluetooth preferido"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_type_dialog_title (4558347981670553665) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Frecuencia de muestreo del audio Bluetooth"</string>
- <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"Selecciona la frecuencia de muestreo preferida del códec A2DP de Bluetooth"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_sample_rate_dialog_title (5628790207448471613) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Bits por muestra del audio Bluetooth"</string>
- <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"Selecciona los bits por muestra del códec A2DP de Bluetooth preferidos"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_bits_per_sample_dialog_title (4546131401358681321) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Modo de canal del audio Bluetooth"</string>
- <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"Selecciona el modo de canal del códec A2DP de Bluetooth preferido"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"Calidad de reproducción LDAC del audio Bluetooth"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"Selecciona la calidad de reproducción LDAC preferida del códec A2DP del audio Bluetooth"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_channel_mode_dialog_title (9133545781346216071) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality (3619694372407843405) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (3181967377574368400) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_streaming_label (5347862512596240506) -->
+ <skip />
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Mostrar opciones de certificación de pantalla inalámbrica"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Aumentar nivel de registro Wi-Fi; mostrar por SSID RSSI en el selector de Wi-Fi"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"Si está habilitada, la conexión Wi‑Fi será más intensa al transferir la conexión de datos al celular (si la señal Wi‑Fi es débil)."</string>
diff --git a/packages/SettingsLib/res/values-es/arrays.xml b/packages/SettingsLib/res/values-es/arrays.xml
index a2ce809..bf492c7 100644
--- a/packages/SettingsLib/res/values-es/arrays.xml
+++ b/packages/SettingsLib/res/values-es/arrays.xml
@@ -58,66 +58,22 @@
<item msgid="3878793616631049349">"Utilizar comprobación de HDCP solo para contenido DRM"</item>
<item msgid="45075631231212732">"Utilizar siempre comprobación de HDCP"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="1852387125374225729">"Predeterminado"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="4260844283202960798">"aptX"</item>
- <item msgid="7279983368484312990">"aptX-HD"</item>
- <item msgid="2301339338870319651">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="9072025520360316957">"Predeterminado"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="1190434429082395888">"aptX"</item>
- <item msgid="649699003004233053">"aptX-HD"</item>
- <item msgid="508106435710925399">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
- <item msgid="7102940318360468759">"Predeterminado"</item>
- <item msgid="8895532488906185219">"44,1 kHz"</item>
- <item msgid="2909915718994807056">"48 kHz"</item>
- <item msgid="3347287377354164611">"88,2 kHz"</item>
- <item msgid="1234212100239985373">"96 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
- <item msgid="7224433008148687313">"Predeterminado"</item>
- <item msgid="4482862757811638365">"44,1 kHz"</item>
- <item msgid="354495328188724404">"48 kHz"</item>
- <item msgid="7329816882213695083">"88,2 kHz"</item>
- <item msgid="6967397666254430476">"96 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
- <item msgid="6694044160540313386">"Predeterminado"</item>
- <item msgid="5618929009984956469">"16 bits por muestra"</item>
- <item msgid="3412640499234627248">"24 bits por muestra"</item>
- <item msgid="121583001492929387">"32 bits por muestra"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
- <item msgid="5091076677792306320">"Predeterminado"</item>
- <item msgid="4726688794884191540">"16 bits por muestra"</item>
- <item msgid="305344756485516870">"24 bits por muestra"</item>
- <item msgid="244568657919675099">"32 bits por muestra"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
- <item msgid="13423709606339855">"Predeterminado"</item>
- <item msgid="4106832974775067314">"Mono"</item>
- <item msgid="5571632958424639155">"Estéreo"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
- <item msgid="8128478683963250130">"Predeterminado"</item>
- <item msgid="8900559293912978337">"Mono"</item>
- <item msgid="8883739882299884241">"Estéreo"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
- <item msgid="2944889121850394020">"Calidad sonido pref. (990 kbps/909 kbps)"</item>
- <item msgid="138837449700903545">"Estándar (660 kbps / 606 kbps)"</item>
- <item msgid="4777177307869441982">"Conexión preferida (330 kbps / 303 kbps)"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
- <item msgid="172302906231378902">"Calidad sonido pref. (990 kbps/909 kbps)"</item>
- <item msgid="9091111147684472529">"Estándar (660 kbps / 606 kbps)"</item>
- <item msgid="3367904477834831032">"Conexión preferida (330 kbps / 303 kbps)"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:0 (7065842274271279580) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:3 (500463122137421129) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:0 (5062108632402595000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3093550793512117000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_titles:0 (3093023430402746802) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_summaries:0 (3214516120190965356) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_titles:0 (2684127272582591429) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_summaries:0 (1081159789834584363) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_titles:0 (5226878858503393706) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_summaries:0 (4118561796005528173) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:0 (3411577996960199959) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:1 (2921767058740704969) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:2 (3682554248829489641) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:0 (7668834469173465015) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:1 (4327143584633311908) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:2 (6155648878105378550) -->
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"No"</item>
<item msgid="1593289376502312923">"64 K"</item>
diff --git a/packages/SettingsLib/res/values-es/strings.xml b/packages/SettingsLib/res/values-es/strings.xml
index e4c9ba9..2e4be1c 100644
--- a/packages/SettingsLib/res/values-es/strings.xml
+++ b/packages/SettingsLib/res/values-es/strings.xml
@@ -171,15 +171,23 @@
<string name="mobile_data_always_on" msgid="7745605759775320362">"Datos móviles siempre activos"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Inhabilitar volumen absoluto"</string>
<string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Códec de audio por Bluetooth"</string>
- <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"Selecciona el códec A2DP de Bluetooth preferido"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_type_dialog_title (4558347981670553665) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Porcentaje de muestreo de audio por Bluetooth"</string>
- <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"Selecciona el porcentaje de muestreo del códec A2DP de Bluetooth preferido"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_sample_rate_dialog_title (5628790207448471613) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Bits de audio por Bluetooth por muestra"</string>
- <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"Selecciona los bits del códec A2DP de Bluetooth preferidos por muestra"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_bits_per_sample_dialog_title (4546131401358681321) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Modo de canal de audio por Bluetooth"</string>
- <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"Selecciona el modo de canal del códec A2DP de Bluetooth preferido"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"Calidad de la reproducción LDAC de audio por Bluetooth"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"Selecciona la calidad de la reproducción LDAC del códec A2DP de Bluetooth preferida"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_channel_mode_dialog_title (9133545781346216071) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality (3619694372407843405) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (3181967377574368400) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_streaming_label (5347862512596240506) -->
+ <skip />
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Mostrar opciones para la certificación de la pantalla inalámbrica"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Aumentar el nivel de logging de Wi-Fi, mostrar por SSID RSSI en el selector Wi-Fi"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"Si está habilitada, la conexión Wi‑Fi será más agresiva al transferir la conexión de datos al móvil (si la señal Wi‑Fi no es estable)"</string>
diff --git a/packages/SettingsLib/res/values-et/arrays.xml b/packages/SettingsLib/res/values-et/arrays.xml
index ba8e8de..ca60dfa 100644
--- a/packages/SettingsLib/res/values-et/arrays.xml
+++ b/packages/SettingsLib/res/values-et/arrays.xml
@@ -58,66 +58,22 @@
<item msgid="3878793616631049349">"Kasuta HDCP-kontrolli ainult DRM-sisu korral"</item>
<item msgid="45075631231212732">"Kasuta alati HDCP-kontrollimist"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="1852387125374225729">"Vaikeseade"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="4260844283202960798">"aptX"</item>
- <item msgid="7279983368484312990">"aptX-HD"</item>
- <item msgid="2301339338870319651">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="9072025520360316957">"Vaikeseade"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="1190434429082395888">"aptX"</item>
- <item msgid="649699003004233053">"aptX-HD"</item>
- <item msgid="508106435710925399">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
- <item msgid="7102940318360468759">"Vaikeseade"</item>
- <item msgid="8895532488906185219">"44,1 kHz"</item>
- <item msgid="2909915718994807056">"48,0 kHz"</item>
- <item msgid="3347287377354164611">"88,2 kHz"</item>
- <item msgid="1234212100239985373">"96,0 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
- <item msgid="7224433008148687313">"Vaikeseade"</item>
- <item msgid="4482862757811638365">"44,1 kHz"</item>
- <item msgid="354495328188724404">"48,0 kHz"</item>
- <item msgid="7329816882213695083">"88,2 kHz"</item>
- <item msgid="6967397666254430476">"96,0 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
- <item msgid="6694044160540313386">"Vaikeseade"</item>
- <item msgid="5618929009984956469">"16 bitti diskreedi kohta"</item>
- <item msgid="3412640499234627248">"24 bitti diskreedi kohta"</item>
- <item msgid="121583001492929387">"32 bitti diskreedi kohta"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
- <item msgid="5091076677792306320">"Vaikeseade"</item>
- <item msgid="4726688794884191540">"16 bitti diskreedi kohta"</item>
- <item msgid="305344756485516870">"24 bitti diskreedi kohta"</item>
- <item msgid="244568657919675099">"32 bitti diskreedi kohta"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
- <item msgid="13423709606339855">"Vaikeseade"</item>
- <item msgid="4106832974775067314">"Mono"</item>
- <item msgid="5571632958424639155">"Stereo"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
- <item msgid="8128478683963250130">"Vaikeseade"</item>
- <item msgid="8900559293912978337">"Mono"</item>
- <item msgid="8883739882299884241">"Stereo"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
- <item msgid="2944889121850394020">"Eelist. helikvaliteeti (990/909 kbit/s)"</item>
- <item msgid="138837449700903545">"Standardne (660/606 kbit/s)"</item>
- <item msgid="4777177307869441982">"Eelistatakse ühendust (330/303 kbit/s)"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
- <item msgid="172302906231378902">"Eelist. helikvaliteeti (990/909 kbit/s)"</item>
- <item msgid="9091111147684472529">"Standardne (660/606 kbit/s)"</item>
- <item msgid="3367904477834831032">"Eelistatakse ühendust (330/303 kbit/s)"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:0 (7065842274271279580) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:3 (500463122137421129) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:0 (5062108632402595000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3093550793512117000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_titles:0 (3093023430402746802) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_summaries:0 (3214516120190965356) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_titles:0 (2684127272582591429) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_summaries:0 (1081159789834584363) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_titles:0 (5226878858503393706) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_summaries:0 (4118561796005528173) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:0 (3411577996960199959) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:1 (2921767058740704969) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:2 (3682554248829489641) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:0 (7668834469173465015) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:1 (4327143584633311908) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:2 (6155648878105378550) -->
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"Väljas"</item>
<item msgid="1593289376502312923">"64 000"</item>
diff --git a/packages/SettingsLib/res/values-et/strings.xml b/packages/SettingsLib/res/values-et/strings.xml
index a7b066a..c51e2eb 100644
--- a/packages/SettingsLib/res/values-et/strings.xml
+++ b/packages/SettingsLib/res/values-et/strings.xml
@@ -171,15 +171,23 @@
<string name="mobile_data_always_on" msgid="7745605759775320362">"Mobiilne andmeside on alati aktiivne"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Keela absoluutne helitugevus"</string>
<string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Bluetoothi heli kodek"</string>
- <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"Eelistatud Bluetooth A2DP kodeki valimine"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_type_dialog_title (4558347981670553665) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Bluetoothi heli diskreetimissagedus"</string>
- <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"Bluetooth A2DP kodeki eelistatud diskreetimissageduse valimine"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_sample_rate_dialog_title (5628790207448471613) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Bluetoothi heli bitte diskreedi kohta"</string>
- <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"Bluetooth A2DP kodeki eelistatud bittide arvu valimine diskreedi kohta"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_bits_per_sample_dialog_title (4546131401358681321) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Bluetoothi heli kanalirežiim"</string>
- <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"Bluetooth A2DP kodeki eelistatud kanalirežiimi valimine"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"Bluetoothi heli LDAC esituskvaliteet"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"Bluetooth A2DP kodeki eelistatud LDAC esituskvaliteedi valimine"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_channel_mode_dialog_title (9133545781346216071) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality (3619694372407843405) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (3181967377574368400) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_streaming_label (5347862512596240506) -->
+ <skip />
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Juhtmeta ekraaniühenduse sertifitseerimisvalikute kuvamine"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Suurenda WiFi logimistaset, kuva WiFi valijas SSID RSSI järgi"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"Kui see on lubatud, siis püüab WiFi nõrga WiFi-signaali korral agressiivsemalt anda andmeside ühenduse üle mobiilsele andmesidele"</string>
diff --git a/packages/SettingsLib/res/values-eu/arrays.xml b/packages/SettingsLib/res/values-eu/arrays.xml
index 222aba0..807d562 100644
--- a/packages/SettingsLib/res/values-eu/arrays.xml
+++ b/packages/SettingsLib/res/values-eu/arrays.xml
@@ -58,66 +58,22 @@
<item msgid="3878793616631049349">"Erabili HDCP egiaztapena DRM edukirako soilik"</item>
<item msgid="45075631231212732">"Erabili beti HDCP egiaztapena"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="1852387125374225729">"Lehenetsia"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="4260844283202960798">"aptX"</item>
- <item msgid="7279983368484312990">"aptX-HD"</item>
- <item msgid="2301339338870319651">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="9072025520360316957">"Lehenetsia"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="1190434429082395888">"aptX"</item>
- <item msgid="649699003004233053">"aptX-HD"</item>
- <item msgid="508106435710925399">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
- <item msgid="7102940318360468759">"Lehenetsia"</item>
- <item msgid="8895532488906185219">"44,1 kHz"</item>
- <item msgid="2909915718994807056">"48,0 kHz"</item>
- <item msgid="3347287377354164611">"88,2 kHz"</item>
- <item msgid="1234212100239985373">"96,0 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
- <item msgid="7224433008148687313">"Lehenetsia"</item>
- <item msgid="4482862757811638365">"44,1 kHz"</item>
- <item msgid="354495328188724404">"48,0 kHz"</item>
- <item msgid="7329816882213695083">"88,2 kHz"</item>
- <item msgid="6967397666254430476">"96,0 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
- <item msgid="6694044160540313386">"Lehenetsia"</item>
- <item msgid="5618929009984956469">"16 bit lagin bakoitzeko"</item>
- <item msgid="3412640499234627248">"24 bit lagin bakoitzeko"</item>
- <item msgid="121583001492929387">"32 bit lagin bakoitzeko"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
- <item msgid="5091076677792306320">"Lehenetsia"</item>
- <item msgid="4726688794884191540">"16 bit lagin bakoitzeko"</item>
- <item msgid="305344756485516870">"24 bit lagin bakoitzeko"</item>
- <item msgid="244568657919675099">"32 bit lagin bakoitzeko"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
- <item msgid="13423709606339855">"Lehenetsia"</item>
- <item msgid="4106832974775067314">"Monoa"</item>
- <item msgid="5571632958424639155">"Estereoa"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
- <item msgid="8128478683963250130">"Lehenetsia"</item>
- <item msgid="8900559293912978337">"Monoa"</item>
- <item msgid="8883739882299884241">"Estereoa"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
- <item msgid="2944889121850394020">"Soinu-kalitate hobetsia (990 kb/s edo 909 kb/s)"</item>
- <item msgid="138837449700903545">"Arrunta (660 kb/s edo 606 kb/s)"</item>
- <item msgid="4777177307869441982">"Konexio hobetsia (330 kb/s edo 303 kb/s)"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
- <item msgid="172302906231378902">"Soinu-kalitate hobetsia (990 kb/s edo 909 kb/s)"</item>
- <item msgid="9091111147684472529">"Arrunta (660 kb/s edo 606 kb/s)"</item>
- <item msgid="3367904477834831032">"Konexio hobetsia (330 kb/s edo 303 kb/s)"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:0 (7065842274271279580) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:3 (500463122137421129) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:0 (5062108632402595000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3093550793512117000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_titles:0 (3093023430402746802) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_summaries:0 (3214516120190965356) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_titles:0 (2684127272582591429) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_summaries:0 (1081159789834584363) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_titles:0 (5226878858503393706) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_summaries:0 (4118561796005528173) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:0 (3411577996960199959) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:1 (2921767058740704969) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:2 (3682554248829489641) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:0 (7668834469173465015) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:1 (4327143584633311908) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:2 (6155648878105378550) -->
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"Desaktibatuta"</item>
<item msgid="1593289376502312923">"64 K"</item>
diff --git a/packages/SettingsLib/res/values-eu/strings.xml b/packages/SettingsLib/res/values-eu/strings.xml
index 514d136..98177d2f 100644
--- a/packages/SettingsLib/res/values-eu/strings.xml
+++ b/packages/SettingsLib/res/values-eu/strings.xml
@@ -171,15 +171,23 @@
<string name="mobile_data_always_on" msgid="7745605759775320362">"Mugikorreko datuak beti aktibo"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Desgaitu bolumen absolutua"</string>
<string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Bluetooth bidezko audioaren kodeka"</string>
- <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"Hautatu Bluetooth A2DP kodek hobetsia"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_type_dialog_title (4558347981670553665) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Bluetooth bidezko audioaren lagin-abiadura"</string>
- <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"Hautatu Bluetooth A2DP kodekaren lagin-abiadura hobetsia"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_sample_rate_dialog_title (5628790207448471613) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Bluetooth bidezko audioaren lagin bakoitzeko bit kopurua"</string>
- <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"Hautatu Bluetooth A2DP kodekaren lagin bakoitzeko bit kopuru hobetsia"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_bits_per_sample_dialog_title (4546131401358681321) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Bluetooth bidezko audioaren kanalaren modua"</string>
- <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"Hautatu Bluetooth A2DP kodekaren kanalaren modu hobetsia"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"Bluetooth bidezko audioaren LDAC erreprodukzioaren kalitatea"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"Hautatu Bluetooth A2DP kodekaren LDAC erreprodukzioaren kalitate hobetsia"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_channel_mode_dialog_title (9133545781346216071) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality (3619694372407843405) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (3181967377574368400) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_streaming_label (5347862512596240506) -->
+ <skip />
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Erakutsi hari gabeko bistaratze-egiaztapenaren aukerak"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Erakutsi datu gehiago Wi-Fi sareetan saioa hasterakoan. Erakutsi sarearen identifikatzailea eta seinalearen indarra Wi‑Fi sareen hautagailuan."</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"Aukera hori gaituz gero, gailua errazago aldatuko da datu mugikorren konexiora Wi-Fi seinalea ahultzen dela nabaritutakoan"</string>
diff --git a/packages/SettingsLib/res/values-fa/arrays.xml b/packages/SettingsLib/res/values-fa/arrays.xml
index 1ff0d25..293639c 100644
--- a/packages/SettingsLib/res/values-fa/arrays.xml
+++ b/packages/SettingsLib/res/values-fa/arrays.xml
@@ -58,66 +58,22 @@
<item msgid="3878793616631049349">"استفاده از بررسی HDCP فقط برای محتوای DRM"</item>
<item msgid="45075631231212732">"همیشه از بررسی HDCP استفاده شود"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="1852387125374225729">"پیشفرض"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="4260844283202960798">"aptX"</item>
- <item msgid="7279983368484312990">"aptX-HD"</item>
- <item msgid="2301339338870319651">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="9072025520360316957">"پیشفرض"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="1190434429082395888">"aptX"</item>
- <item msgid="649699003004233053">"aptX-HD"</item>
- <item msgid="508106435710925399">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
- <item msgid="7102940318360468759">"پیشفرض"</item>
- <item msgid="8895532488906185219">"۴۴٫۱ کیلوهرتز"</item>
- <item msgid="2909915718994807056">"۴۸٫۰ کیلوهرتز"</item>
- <item msgid="3347287377354164611">"۸۸٫۲ کیلوهرتز"</item>
- <item msgid="1234212100239985373">"۹۶٫۰ کیلوهرتز"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
- <item msgid="7224433008148687313">"پیشفرض"</item>
- <item msgid="4482862757811638365">"۴۴٫۱ کیلوهرتز"</item>
- <item msgid="354495328188724404">"۴۸٫۰ کیلوهرتز"</item>
- <item msgid="7329816882213695083">"۸۸٫۲ کیلوهرتز"</item>
- <item msgid="6967397666254430476">"۹۶٫۰ کیلوهرتز"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
- <item msgid="6694044160540313386">"پیشفرض"</item>
- <item msgid="5618929009984956469">"۱۶ بیت در هر نمونه"</item>
- <item msgid="3412640499234627248">"۲۴ بیت در هر نمونه"</item>
- <item msgid="121583001492929387">"۳۲ بیت در هر نمونه"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
- <item msgid="5091076677792306320">"پیشفرض"</item>
- <item msgid="4726688794884191540">"۱۶ بیت در هر نمونه"</item>
- <item msgid="305344756485516870">"۲۴ بیت در هر نمونه"</item>
- <item msgid="244568657919675099">"۳۲ بیت در هر نمونه"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
- <item msgid="13423709606339855">"پیشفرض"</item>
- <item msgid="4106832974775067314">"مونو"</item>
- <item msgid="5571632958424639155">"استریو"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
- <item msgid="8128478683963250130">"پیشفرض"</item>
- <item msgid="8900559293912978337">"مونو"</item>
- <item msgid="8883739882299884241">"استریو"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
- <item msgid="2944889121850394020">"کیفیت صدای ترجیحی (۹۹۰کیلوبیت در ثانیه/۹۰۹کیلوبیت در ثانیه)"</item>
- <item msgid="138837449700903545">"استاندارد (۶۶۰کیلوبیت در ثانیه/۶۰۶کیلوبیت در ثانیه)"</item>
- <item msgid="4777177307869441982">"اتصال ترجیحی (۳۳۰کیلوبیت در ثانیه/۳۰۳کیلوبیت در ثانیه)"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
- <item msgid="172302906231378902">"کیفیت صدای ترجیحی (۹۹۰کیلوبیت در ثانیه/۹۰۹کیلوبیت در ثانیه)"</item>
- <item msgid="9091111147684472529">"استاندارد (۶۶۰کیلوبیت در ثانیه/۶۰۶کیلوبیت در ثانیه)"</item>
- <item msgid="3367904477834831032">"اتصال ترجیحی (۳۳۰کیلوبیت در ثانیه/۳۰۳کیلوبیت در ثانیه)"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:0 (7065842274271279580) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:3 (500463122137421129) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:0 (5062108632402595000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3093550793512117000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_titles:0 (3093023430402746802) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_summaries:0 (3214516120190965356) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_titles:0 (2684127272582591429) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_summaries:0 (1081159789834584363) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_titles:0 (5226878858503393706) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_summaries:0 (4118561796005528173) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:0 (3411577996960199959) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:1 (2921767058740704969) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:2 (3682554248829489641) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:0 (7668834469173465015) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:1 (4327143584633311908) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:2 (6155648878105378550) -->
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"خاموش"</item>
<item msgid="1593289376502312923">"۶۴ هزار"</item>
diff --git a/packages/SettingsLib/res/values-fa/strings.xml b/packages/SettingsLib/res/values-fa/strings.xml
index d6518e1..9f0b639 100644
--- a/packages/SettingsLib/res/values-fa/strings.xml
+++ b/packages/SettingsLib/res/values-fa/strings.xml
@@ -171,15 +171,23 @@
<string name="mobile_data_always_on" msgid="7745605759775320362">"داده سلولی همیشه فعال"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"غیرفعال کردن میزان صدای مطلق"</string>
<string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"کدک بلوتوث صوتی"</string>
- <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"انتخاب کدک A2DP در بلوتوث ترجیحی"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_type_dialog_title (4558347981670553665) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"سرعت نمونه بلوتوث صوتی"</string>
- <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"انتخاب سرعت نمونه کدک A2DP بلوتوث ترجیحی"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_sample_rate_dialog_title (5628790207448471613) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"بیتهای بلوتوث صوتی در هر نمونه"</string>
- <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"انتخاب بیتهای کدک A2DP بلوتوث ترجیحی هر نمونه"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_bits_per_sample_dialog_title (4546131401358681321) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"حالت کانال بلوتوث صوتی"</string>
- <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"انتخاب حالت کانال کدک A2DP بلوتوث ترجیحی"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"کیفیت پخش LDAC بلوتوث صوتی"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"انتخاب کیفیت پخش LDAC کدک A2DP بلوتوث ترجیحی"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_channel_mode_dialog_title (9133545781346216071) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality (3619694372407843405) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (3181967377574368400) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_streaming_label (5347862512596240506) -->
+ <skip />
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"نمایش گزینهها برای گواهینامه نمایش بیسیم"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"افزایش سطح گزارشگیری Wi‑Fi، نمایش به ازای SSID RSSI در انتخابکننده Wi‑Fi"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"وقتی فعال است، در شرایط پایین بودن سیگنال، Wi‑Fi برای واگذار کردن اتصال داده به شبکه سلولی فعالتر خواهد بود."</string>
diff --git a/packages/SettingsLib/res/values-fi/arrays.xml b/packages/SettingsLib/res/values-fi/arrays.xml
index 5d842a4..2808bf2 100644
--- a/packages/SettingsLib/res/values-fi/arrays.xml
+++ b/packages/SettingsLib/res/values-fi/arrays.xml
@@ -58,66 +58,22 @@
<item msgid="3878793616631049349">"Käytä HDCP-tarkistusta vain DRM-suojatulle sisällölle"</item>
<item msgid="45075631231212732">"Käytä aina HDCP-tarkistusta"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="1852387125374225729">"Oletus"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="4260844283202960798">"aptX"</item>
- <item msgid="7279983368484312990">"aptX-HD"</item>
- <item msgid="2301339338870319651">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="9072025520360316957">"Oletus"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="1190434429082395888">"aptX"</item>
- <item msgid="649699003004233053">"aptX-HD"</item>
- <item msgid="508106435710925399">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
- <item msgid="7102940318360468759">"Oletus"</item>
- <item msgid="8895532488906185219">"44,1 kHz"</item>
- <item msgid="2909915718994807056">"48,0 kHz"</item>
- <item msgid="3347287377354164611">"88,2 kHz"</item>
- <item msgid="1234212100239985373">"96,0 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
- <item msgid="7224433008148687313">"Oletus"</item>
- <item msgid="4482862757811638365">"44,1 kHz"</item>
- <item msgid="354495328188724404">"48,0 kHz"</item>
- <item msgid="7329816882213695083">"88,2 kHz"</item>
- <item msgid="6967397666254430476">"96,0 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
- <item msgid="6694044160540313386">"Oletus"</item>
- <item msgid="5618929009984956469">"16 bittiä/näyte"</item>
- <item msgid="3412640499234627248">"24 bittiä/näyte"</item>
- <item msgid="121583001492929387">"32 bittiä/näyte"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
- <item msgid="5091076677792306320">"Oletus"</item>
- <item msgid="4726688794884191540">"16 bittiä/näyte"</item>
- <item msgid="305344756485516870">"24 bittiä/näyte"</item>
- <item msgid="244568657919675099">"32 bittiä/näyte"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
- <item msgid="13423709606339855">"Oletus"</item>
- <item msgid="4106832974775067314">"Mono"</item>
- <item msgid="5571632958424639155">"Stereo"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
- <item msgid="8128478683963250130">"Oletus"</item>
- <item msgid="8900559293912978337">"Mono"</item>
- <item msgid="8883739882299884241">"Stereo"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
- <item msgid="2944889121850394020">"Äänenlaatu etusijalla (990 kbps / 909 kbps)"</item>
- <item msgid="138837449700903545">"Vakio (660 kbps / 606 kbps)"</item>
- <item msgid="4777177307869441982">"Yhteys etusijalla (330 kbps / 303 kbps)"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
- <item msgid="172302906231378902">"Äänenlaatu etusijalla (990 kbps / 909 kbps)"</item>
- <item msgid="9091111147684472529">"Vakio (660 kbps / 606 kbps)"</item>
- <item msgid="3367904477834831032">"Yhteys etusijalla (330 kbps / 303 kbps)"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:0 (7065842274271279580) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:3 (500463122137421129) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:0 (5062108632402595000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3093550793512117000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_titles:0 (3093023430402746802) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_summaries:0 (3214516120190965356) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_titles:0 (2684127272582591429) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_summaries:0 (1081159789834584363) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_titles:0 (5226878858503393706) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_summaries:0 (4118561796005528173) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:0 (3411577996960199959) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:1 (2921767058740704969) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:2 (3682554248829489641) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:0 (7668834469173465015) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:1 (4327143584633311908) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:2 (6155648878105378550) -->
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"Ei käytössä"</item>
<item msgid="1593289376502312923">"64 kt"</item>
diff --git a/packages/SettingsLib/res/values-fi/strings.xml b/packages/SettingsLib/res/values-fi/strings.xml
index 2332fc5..7f78001 100644
--- a/packages/SettingsLib/res/values-fi/strings.xml
+++ b/packages/SettingsLib/res/values-fi/strings.xml
@@ -171,15 +171,23 @@
<string name="mobile_data_always_on" msgid="7745605759775320362">"Mobiilidata on aina käytössä"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Poista yleinen äänenvoimakkuuden säätö käytöstä"</string>
<string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Bluetooth-äänen koodekki"</string>
- <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"Valitse ensisijainen Bluetooth A2DP ‑koodekki"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_type_dialog_title (4558347981670553665) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Bluetooth-ääninäytteen siirtonopeus"</string>
- <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"Valitse ensisijainen Bluetooth A2DP ‑koodekkinäytteen siirtonopeus"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_sample_rate_dialog_title (5628790207448471613) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Bluetooth-äänen bittiä/näyte-arvo"</string>
- <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"Valitse ensisijainen Bluetooth A2DP ‑koodekin bittiä/näyte-arvo"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_bits_per_sample_dialog_title (4546131401358681321) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Bluetooth-äänen kanavatila"</string>
- <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"Valitse ensisijainen Bluetooth A2DP ‑koodekin kanavatila"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"Bluetooth-äänen LDAC-toiston laatu"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"Valitse ensisijainen Bluetooth A2DP ‑koodekin LDAC-toiston laatu"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_channel_mode_dialog_title (9133545781346216071) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality (3619694372407843405) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (3181967377574368400) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_streaming_label (5347862512596240506) -->
+ <skip />
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Näytä langattoman näytön sertifiointiin liittyvät asetukset"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Lisää Wi‑Fin lokikirjaustasoa, näytä SSID RSSI -kohtaisesti Wi‑Fi-valitsimessa."</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"Kun asetus on käytössä, Wi-Fi siirtää datayhteyden aggressiivisemmin matkapuhelinverkolle, jos Wi-Fi-signaali on heikko."</string>
diff --git a/packages/SettingsLib/res/values-fr-rCA/arrays.xml b/packages/SettingsLib/res/values-fr-rCA/arrays.xml
index c50e576..7c403bf 100644
--- a/packages/SettingsLib/res/values-fr-rCA/arrays.xml
+++ b/packages/SettingsLib/res/values-fr-rCA/arrays.xml
@@ -58,66 +58,22 @@
<item msgid="3878793616631049349">"Utiliser la vérification HDCP uniquement pour le contenu GDN"</item>
<item msgid="45075631231212732">"Toujours utiliser la vérification HDCP"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="1852387125374225729">"Par défaut"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="4260844283202960798">"aptX"</item>
- <item msgid="7279983368484312990">"aptX-HD"</item>
- <item msgid="2301339338870319651">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="9072025520360316957">"Par défaut"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="1190434429082395888">"aptX"</item>
- <item msgid="649699003004233053">"aptX-HD"</item>
- <item msgid="508106435710925399">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
- <item msgid="7102940318360468759">"Par défaut"</item>
- <item msgid="8895532488906185219">"44,1 kHz"</item>
- <item msgid="2909915718994807056">"48,0 kHz"</item>
- <item msgid="3347287377354164611">"88,2 kHz"</item>
- <item msgid="1234212100239985373">"96,0 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
- <item msgid="7224433008148687313">"Par défaut"</item>
- <item msgid="4482862757811638365">"44,1 kHz"</item>
- <item msgid="354495328188724404">"48,0 kHz"</item>
- <item msgid="7329816882213695083">"88,2 kHz"</item>
- <item msgid="6967397666254430476">"96,0 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
- <item msgid="6694044160540313386">"Par défaut"</item>
- <item msgid="5618929009984956469">"16 bits par échantillon"</item>
- <item msgid="3412640499234627248">"24 bits par échantillon"</item>
- <item msgid="121583001492929387">"32 bits par échantillon"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
- <item msgid="5091076677792306320">"Par défaut"</item>
- <item msgid="4726688794884191540">"16 bits par échantillon"</item>
- <item msgid="305344756485516870">"24 bits par échantillon"</item>
- <item msgid="244568657919675099">"32 bits par échantillon"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
- <item msgid="13423709606339855">"Par défaut"</item>
- <item msgid="4106832974775067314">"Mono"</item>
- <item msgid="5571632958424639155">"Stéréo"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
- <item msgid="8128478683963250130">"Par défaut"</item>
- <item msgid="8900559293912978337">"Mono"</item>
- <item msgid="8883739882299884241">"Stéréo"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
- <item msgid="2944889121850394020">"Qualité sonore préférée (990 kbps/909 kbps)"</item>
- <item msgid="138837449700903545">"Standard (660 kbps/606 kbps)"</item>
- <item msgid="4777177307869441982">"Connexion préférée (330 kbps/303 kbps)"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
- <item msgid="172302906231378902">"Qualité sonore préférée (990 kbps/909 kbps)"</item>
- <item msgid="9091111147684472529">"Standard (660 kbps/606 kbps)"</item>
- <item msgid="3367904477834831032">"Connexion préférée (330 kbps/303 kbps)"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:0 (7065842274271279580) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:3 (500463122137421129) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:0 (5062108632402595000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3093550793512117000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_titles:0 (3093023430402746802) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_summaries:0 (3214516120190965356) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_titles:0 (2684127272582591429) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_summaries:0 (1081159789834584363) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_titles:0 (5226878858503393706) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_summaries:0 (4118561796005528173) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:0 (3411577996960199959) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:1 (2921767058740704969) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:2 (3682554248829489641) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:0 (7668834469173465015) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:1 (4327143584633311908) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:2 (6155648878105378550) -->
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"Désactivé"</item>
<item msgid="1593289376502312923">"64 ko"</item>
diff --git a/packages/SettingsLib/res/values-fr-rCA/strings.xml b/packages/SettingsLib/res/values-fr-rCA/strings.xml
index aedc9ca..cd0ab25 100644
--- a/packages/SettingsLib/res/values-fr-rCA/strings.xml
+++ b/packages/SettingsLib/res/values-fr-rCA/strings.xml
@@ -171,15 +171,23 @@
<string name="mobile_data_always_on" msgid="7745605759775320362">"Données cellulaires toujours actives"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Désactiver le volume absolu"</string>
<string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Codec audio Bluetooth"</string>
- <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"Sélectionnez le codec Bluetooth A2DP préféré"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_type_dialog_title (4558347981670553665) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Taux d\'échantillonnage pour l\'audio Bluetooth"</string>
- <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"Sélectionnez le taux d\'échantillonnage préféré pour le codec Bluetooth A2DP"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_sample_rate_dialog_title (5628790207448471613) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Bits par échantillon pour l\'audio Bluetooth"</string>
- <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"Sélectionnez le nombre de bits par échantillon préféré pour le codec Bluetooth A2DP"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_bits_per_sample_dialog_title (4546131401358681321) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Mode de canal pour l\'audio Bluetooth"</string>
- <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"Sélectionnez le mode de canal préféré pour le codec Bluetooth A2DP"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"Qualité de lecture LDAC pour l\'audio Bluetooth"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"Sélectionnez la qualité de lecture LDAC préférée pour le codec Bluetooth A2DP"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_channel_mode_dialog_title (9133545781346216071) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality (3619694372407843405) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (3181967377574368400) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_streaming_label (5347862512596240506) -->
+ <skip />
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Afficher les options pour la certification d\'affichage sans fil"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Détailler davantage les données Wi-Fi, afficher par SSID RSSI dans sélect. Wi-Fi"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"Si cette option est activée, le passage du Wi-Fi aux données cellulaires est forcé lorsque le signal Wi-Fi est faible"</string>
diff --git a/packages/SettingsLib/res/values-fr/arrays.xml b/packages/SettingsLib/res/values-fr/arrays.xml
index cda881c..c63275f 100644
--- a/packages/SettingsLib/res/values-fr/arrays.xml
+++ b/packages/SettingsLib/res/values-fr/arrays.xml
@@ -58,66 +58,22 @@
<item msgid="3878793616631049349">"Utiliser la vérification HDCP uniquement pour le contenu DRM"</item>
<item msgid="45075631231212732">"Toujours utiliser la vérification HDCP"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="1852387125374225729">"Par défaut"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="4260844283202960798">"aptX"</item>
- <item msgid="7279983368484312990">"aptX-HD"</item>
- <item msgid="2301339338870319651">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="9072025520360316957">"Par défaut"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="1190434429082395888">"aptX"</item>
- <item msgid="649699003004233053">"aptX-HD"</item>
- <item msgid="508106435710925399">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
- <item msgid="7102940318360468759">"Par défaut"</item>
- <item msgid="8895532488906185219">"44,1 kHz"</item>
- <item msgid="2909915718994807056">"48 kHz"</item>
- <item msgid="3347287377354164611">"88,2 kHz"</item>
- <item msgid="1234212100239985373">"96 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
- <item msgid="7224433008148687313">"Par défaut"</item>
- <item msgid="4482862757811638365">"44,1 kHz"</item>
- <item msgid="354495328188724404">"48 kHz"</item>
- <item msgid="7329816882213695083">"88,2 kHz"</item>
- <item msgid="6967397666254430476">"96 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
- <item msgid="6694044160540313386">"Par défaut"</item>
- <item msgid="5618929009984956469">"16 bits par échantillon"</item>
- <item msgid="3412640499234627248">"24 bits par échantillon"</item>
- <item msgid="121583001492929387">"32 bits par échantillon"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
- <item msgid="5091076677792306320">"Par défaut"</item>
- <item msgid="4726688794884191540">"16 bits par échantillon"</item>
- <item msgid="305344756485516870">"24 bits par échantillon"</item>
- <item msgid="244568657919675099">"32 bits par échantillon"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
- <item msgid="13423709606339855">"Par défaut"</item>
- <item msgid="4106832974775067314">"Mono"</item>
- <item msgid="5571632958424639155">"Stéréo"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
- <item msgid="8128478683963250130">"Par défaut"</item>
- <item msgid="8900559293912978337">"Mono"</item>
- <item msgid="8883739882299884241">"Stéréo"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
- <item msgid="2944889121850394020">"Qualité audio prioritaire (990/909 kbit/s)"</item>
- <item msgid="138837449700903545">"Standard (660/606 kbit/s)"</item>
- <item msgid="4777177307869441982">"Connexion prioritaire (330/303 kbits/s)"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
- <item msgid="172302906231378902">"Qualité audio prioritaire (990/909 kbit/s)"</item>
- <item msgid="9091111147684472529">"Standard (660/606 kbit/s)"</item>
- <item msgid="3367904477834831032">"Connexion prioritaire (330/303 kbits/s)"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:0 (7065842274271279580) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:3 (500463122137421129) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:0 (5062108632402595000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3093550793512117000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_titles:0 (3093023430402746802) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_summaries:0 (3214516120190965356) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_titles:0 (2684127272582591429) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_summaries:0 (1081159789834584363) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_titles:0 (5226878858503393706) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_summaries:0 (4118561796005528173) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:0 (3411577996960199959) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:1 (2921767058740704969) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:2 (3682554248829489641) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:0 (7668834469173465015) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:1 (4327143584633311908) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:2 (6155648878105378550) -->
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"Désactivé"</item>
<item msgid="1593289376502312923">"64 Ko"</item>
diff --git a/packages/SettingsLib/res/values-fr/strings.xml b/packages/SettingsLib/res/values-fr/strings.xml
index 8ba0b0f..8587e28 100644
--- a/packages/SettingsLib/res/values-fr/strings.xml
+++ b/packages/SettingsLib/res/values-fr/strings.xml
@@ -171,15 +171,23 @@
<string name="mobile_data_always_on" msgid="7745605759775320362">"Données mobiles toujours actives"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Désactiver le volume absolu"</string>
<string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Codec audio Bluetooth"</string>
- <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"Sélectionner le codec A2DP Bluetooth prioritaire"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_type_dialog_title (4558347981670553665) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Taux d\'échantillonnage audio Bluetooth"</string>
- <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"Sélectionner le taux d\'échantillonnage pour le codec A2DP Bluetooth prioritaire"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_sample_rate_dialog_title (5628790207448471613) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Nombre de bits par échantillon pour l\'audio Bluetooth"</string>
- <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"Sélectionner le nombre de bits par échantillon pour le codec A2DP Bluetooth prioritaire"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_bits_per_sample_dialog_title (4546131401358681321) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Mode de chaîne de l\'audio Bluetooth"</string>
- <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"Sélectionner le mode de chaîne pour le codec A2DP Bluetooth prioritaire"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"Qualité de lecture LDAC de l\'audio Bluetooth"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"Sélectionner la qualité de lecture LDAC pour le codec A2DP Bluetooth prioritaire"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_channel_mode_dialog_title (9133545781346216071) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality (3619694372407843405) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (3181967377574368400) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_streaming_label (5347862512596240506) -->
+ <skip />
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Afficher les options de la certification de l\'affichage sans fil"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Détailler plus infos Wi-Fi, afficher par RSSI de SSID dans outil sélection Wi-Fi"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"Si cette option est activée, le passage du Wi-Fi aux données mobiles est forcé en cas de signal Wi-Fi faible."</string>
diff --git a/packages/SettingsLib/res/values-gl/arrays.xml b/packages/SettingsLib/res/values-gl/arrays.xml
index e581368..2a89199 100644
--- a/packages/SettingsLib/res/values-gl/arrays.xml
+++ b/packages/SettingsLib/res/values-gl/arrays.xml
@@ -58,66 +58,22 @@
<item msgid="3878793616631049349">"Utiliza a comprobación HDCP só para contido DRM"</item>
<item msgid="45075631231212732">"Utilizar sempre a comprobación HDCP"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="1852387125374225729">"Predeterminado"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="4260844283202960798">"aptX"</item>
- <item msgid="7279983368484312990">"aptX-HD"</item>
- <item msgid="2301339338870319651">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="9072025520360316957">"Predeterminado"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="1190434429082395888">"aptX"</item>
- <item msgid="649699003004233053">"aptX-HD"</item>
- <item msgid="508106435710925399">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
- <item msgid="7102940318360468759">"Predeterminado"</item>
- <item msgid="8895532488906185219">"44,1 kHz"</item>
- <item msgid="2909915718994807056">"48,0 kHz"</item>
- <item msgid="3347287377354164611">"88,2 kHz"</item>
- <item msgid="1234212100239985373">"96,0 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
- <item msgid="7224433008148687313">"Predeterminado"</item>
- <item msgid="4482862757811638365">"44,1 kHz"</item>
- <item msgid="354495328188724404">"48,0 kHz"</item>
- <item msgid="7329816882213695083">"88,2 kHz"</item>
- <item msgid="6967397666254430476">"96,0 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
- <item msgid="6694044160540313386">"Predeterminado"</item>
- <item msgid="5618929009984956469">"16 bits/mostra"</item>
- <item msgid="3412640499234627248">"24 bits/mostra"</item>
- <item msgid="121583001492929387">"32 bits/mostra"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
- <item msgid="5091076677792306320">"Predeterminado"</item>
- <item msgid="4726688794884191540">"16 bits/mostra"</item>
- <item msgid="305344756485516870">"24 bits/mostra"</item>
- <item msgid="244568657919675099">"32 bits/mostra"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
- <item msgid="13423709606339855">"Predeterminado"</item>
- <item msgid="4106832974775067314">"Mono"</item>
- <item msgid="5571632958424639155">"Estéreo"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
- <item msgid="8128478683963250130">"Predeterminado"</item>
- <item msgid="8900559293912978337">"Mono"</item>
- <item msgid="8883739882299884241">"Estéreo"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
- <item msgid="2944889121850394020">"Calidade preferida (990 kbps/909 kbps)"</item>
- <item msgid="138837449700903545">"Estándar (660 kbps/606 kbps)"</item>
- <item msgid="4777177307869441982">"Conexión preferida (330 kbps/303 kbps)"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
- <item msgid="172302906231378902">"Calidade preferida (990 kbps/909 kbps)"</item>
- <item msgid="9091111147684472529">"Estándar (660 kbps/606 kbps)"</item>
- <item msgid="3367904477834831032">"Conexión preferida (330 kbps/303 kbps)"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:0 (7065842274271279580) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:3 (500463122137421129) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:0 (5062108632402595000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3093550793512117000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_titles:0 (3093023430402746802) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_summaries:0 (3214516120190965356) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_titles:0 (2684127272582591429) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_summaries:0 (1081159789834584363) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_titles:0 (5226878858503393706) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_summaries:0 (4118561796005528173) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:0 (3411577996960199959) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:1 (2921767058740704969) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:2 (3682554248829489641) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:0 (7668834469173465015) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:1 (4327143584633311908) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:2 (6155648878105378550) -->
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"Desactivado"</item>
<item msgid="1593289376502312923">"64 K"</item>
diff --git a/packages/SettingsLib/res/values-gl/strings.xml b/packages/SettingsLib/res/values-gl/strings.xml
index 6a9a1ec..6820575 100644
--- a/packages/SettingsLib/res/values-gl/strings.xml
+++ b/packages/SettingsLib/res/values-gl/strings.xml
@@ -171,15 +171,23 @@
<string name="mobile_data_always_on" msgid="7745605759775320362">"Datos móbiles sempre activados"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Desactivar volume absoluto"</string>
<string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Códec de audio por Bluetooth"</string>
- <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"Seleccionar códec A2DP de Bluetooth preferido"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_type_dialog_title (4558347981670553665) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Taxa de mostraxe de audio por Bluetooth"</string>
- <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"Seleccionar taxa de mostraxe do códec A2DP de Bluetooth preferido"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_sample_rate_dialog_title (5628790207448471613) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Bits por mostra de audio por Bluetooth"</string>
- <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"Seleccionar bits por mostra do códec A2DP de Bluetooth preferido"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_bits_per_sample_dialog_title (4546131401358681321) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Modo de canle de audio por Bluetooth"</string>
- <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"Seleccionar modo de canle do códec A2DP de Bluetooth preferido"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"Calidade de reprodución de LDAC de audio por Bluetooth"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"Seleccionar calidade de reprodución de LDAC do códec A2DP de Bluetooth preferido"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_channel_mode_dialog_title (9133545781346216071) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality (3619694372407843405) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (3181967377574368400) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_streaming_label (5347862512596240506) -->
+ <skip />
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Mostra opcións para o certificado de visualización sen fíos"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Aumentar o nivel de rexistro da wifi, mostrar por SSID RSSI no selector de wifi"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"Cando está activada esta función, a wifi será máis agresiva ao entregar a conexión de datos ao móbil, cando o sinal wifi é feble"</string>
diff --git a/packages/SettingsLib/res/values-gu/arrays.xml b/packages/SettingsLib/res/values-gu/arrays.xml
index 742103b..d41cfbc 100644
--- a/packages/SettingsLib/res/values-gu/arrays.xml
+++ b/packages/SettingsLib/res/values-gu/arrays.xml
@@ -58,66 +58,22 @@
<item msgid="3878793616631049349">"ફક્ત DRM સામગ્રી માટે HDCP તપાસનો ઉપયોગ કરો"</item>
<item msgid="45075631231212732">"હંમેશા HDCP તપાસનો ઉપયોગ કરો"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="1852387125374225729">"ડિફૉલ્ટ"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="4260844283202960798">"aptX"</item>
- <item msgid="7279983368484312990">"aptX-HD"</item>
- <item msgid="2301339338870319651">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="9072025520360316957">"ડિફૉલ્ટ"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="1190434429082395888">"aptX"</item>
- <item msgid="649699003004233053">"aptX-HD"</item>
- <item msgid="508106435710925399">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
- <item msgid="7102940318360468759">"ડિફૉલ્ટ"</item>
- <item msgid="8895532488906185219">"44.1 kHz"</item>
- <item msgid="2909915718994807056">"48.0 kHz"</item>
- <item msgid="3347287377354164611">"88.2 kHz"</item>
- <item msgid="1234212100239985373">"96.0 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
- <item msgid="7224433008148687313">"ડિફૉલ્ટ"</item>
- <item msgid="4482862757811638365">"44.1 kHz"</item>
- <item msgid="354495328188724404">"48.0 kHz"</item>
- <item msgid="7329816882213695083">"88.2 kHz"</item>
- <item msgid="6967397666254430476">"96.0 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
- <item msgid="6694044160540313386">"ડિફૉલ્ટ"</item>
- <item msgid="5618929009984956469">"16 બિટ/નમૂનો"</item>
- <item msgid="3412640499234627248">"24 બિટ/નમૂનો"</item>
- <item msgid="121583001492929387">"32 બિટ/નમૂનો"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
- <item msgid="5091076677792306320">"ડિફૉલ્ટ"</item>
- <item msgid="4726688794884191540">"16 બિટ/નમૂનો"</item>
- <item msgid="305344756485516870">"24 બિટ/નમૂનો"</item>
- <item msgid="244568657919675099">"32 બિટ/નમૂનો"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
- <item msgid="13423709606339855">"ડિફૉલ્ટ"</item>
- <item msgid="4106832974775067314">"મૉનો"</item>
- <item msgid="5571632958424639155">"સ્ટીરિઓ"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
- <item msgid="8128478683963250130">"ડિફૉલ્ટ"</item>
- <item msgid="8900559293912978337">"મૉનો"</item>
- <item msgid="8883739882299884241">"સ્ટીરિઓ"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
- <item msgid="2944889121850394020">"પસંદગીની અવાજ ગુણવત્તા (990kbps/909kbps)"</item>
- <item msgid="138837449700903545">"માનક (660kbps/606kbps)"</item>
- <item msgid="4777177307869441982">"પસંદગીનું કનેક્શન (330kbps/303kbps)"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
- <item msgid="172302906231378902">"પસંદગીની અવાજ ગુણવત્તા (990kbps/909kbps)"</item>
- <item msgid="9091111147684472529">"માનક (660kbps/606kbps)"</item>
- <item msgid="3367904477834831032">"પસંદગીનું કનેક્શન (330kbps/303kbps)"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:0 (7065842274271279580) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:3 (500463122137421129) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:0 (5062108632402595000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3093550793512117000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_titles:0 (3093023430402746802) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_summaries:0 (3214516120190965356) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_titles:0 (2684127272582591429) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_summaries:0 (1081159789834584363) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_titles:0 (5226878858503393706) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_summaries:0 (4118561796005528173) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:0 (3411577996960199959) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:1 (2921767058740704969) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:2 (3682554248829489641) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:0 (7668834469173465015) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:1 (4327143584633311908) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:2 (6155648878105378550) -->
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"બંધ"</item>
<item msgid="1593289376502312923">"64K"</item>
diff --git a/packages/SettingsLib/res/values-gu/strings.xml b/packages/SettingsLib/res/values-gu/strings.xml
index e61e6e2..8e68ab0 100644
--- a/packages/SettingsLib/res/values-gu/strings.xml
+++ b/packages/SettingsLib/res/values-gu/strings.xml
@@ -171,15 +171,23 @@
<string name="mobile_data_always_on" msgid="7745605759775320362">"સેલ્યુલર ડેટા હંમેશા સક્રિય"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"ચોક્કસ વૉલ્યૂમને અક્ષમ કરો"</string>
<string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Bluetooth ઑડિઓ કોડેક"</string>
- <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"પસંદગીના Bluetooth A2DP કોડેકને પસંદ કરો"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_type_dialog_title (4558347981670553665) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Bluetooth ઑડિઓ નમૂના દર"</string>
- <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"પસંદગીના Bluetooth A2DP કોડેક નમૂના દરને પસંદ કરો"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_sample_rate_dialog_title (5628790207448471613) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"નમૂના દીઠ Bluetooth ઑડિઓ બિટ"</string>
- <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"નમૂના દીઠ પસંદગીના Bluetooth A2DP કોડેક બિટને પસંદ કરો"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_bits_per_sample_dialog_title (4546131401358681321) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Bluetooth ઑડિઓ ચેનલ મોડ"</string>
- <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"પસંદગીના Bluetooth A2DP કોડેક ચેનલ મોડને પસંદ કરો"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"Bluetooth ઑડિઓ LDAC પ્લેબેક ગુણવત્તા"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"પસંદગીની Bluetooth A2DP કોડેક LDAC પ્લેબેક ગુણવત્તા પસંદ કરો"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_channel_mode_dialog_title (9133545781346216071) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality (3619694372407843405) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (3181967377574368400) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_streaming_label (5347862512596240506) -->
+ <skip />
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"વાયરલેસ ડિસ્પ્લે પ્રમાણપત્ર માટેના વિકલ્પો બતાવો"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Wi‑Fi લોગિંગ સ્તર વધારો, Wi‑Fi પીકરમાં SSID RSSI દીઠ બતાવો"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"જ્યારે સક્ષમ હોય, ત્યારે Wi‑Fi સિગ્નલ ઓછા હોવા પર, સેલ્યુલર પર ડેટા કનેક્શન મોકલવામાં વધુ આક્રમક હશે"</string>
diff --git a/packages/SettingsLib/res/values-hi/arrays.xml b/packages/SettingsLib/res/values-hi/arrays.xml
index 11b83c9..489e8e7 100644
--- a/packages/SettingsLib/res/values-hi/arrays.xml
+++ b/packages/SettingsLib/res/values-hi/arrays.xml
@@ -58,66 +58,22 @@
<item msgid="3878793616631049349">"HDCP जांच का उपयोग केवल DRM सामग्री के लिए करें"</item>
<item msgid="45075631231212732">"हमेशा HDCP जांच का उपयोग करें"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="1852387125374225729">"डिफ़ॉल्ट"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="4260844283202960798">"aptX"</item>
- <item msgid="7279983368484312990">"aptX-HD"</item>
- <item msgid="2301339338870319651">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="9072025520360316957">"डिफ़ॉल्ट"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="1190434429082395888">"aptX"</item>
- <item msgid="649699003004233053">"aptX-HD"</item>
- <item msgid="508106435710925399">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
- <item msgid="7102940318360468759">"डिफ़ॉल्ट"</item>
- <item msgid="8895532488906185219">"44.1 kHz"</item>
- <item msgid="2909915718994807056">"48.0 kHz"</item>
- <item msgid="3347287377354164611">"88.2 kHz"</item>
- <item msgid="1234212100239985373">"96.0 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
- <item msgid="7224433008148687313">"डिफ़ॉल्ट"</item>
- <item msgid="4482862757811638365">"44.1 kHz"</item>
- <item msgid="354495328188724404">"48.0 kHz"</item>
- <item msgid="7329816882213695083">"88.2 kHz"</item>
- <item msgid="6967397666254430476">"96.0 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
- <item msgid="6694044160540313386">"डिफ़ॉल्ट"</item>
- <item msgid="5618929009984956469">"16 बिट/नमूना"</item>
- <item msgid="3412640499234627248">"24 बिट/नमूना"</item>
- <item msgid="121583001492929387">"32 बिट/नमूना"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
- <item msgid="5091076677792306320">"डिफ़ॉल्ट"</item>
- <item msgid="4726688794884191540">"16 बिट/नमूना"</item>
- <item msgid="305344756485516870">"24 बिट/नमूना"</item>
- <item msgid="244568657919675099">"32 बिट/नमूना"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
- <item msgid="13423709606339855">"डिफ़ॉल्ट"</item>
- <item msgid="4106832974775067314">"मोनो"</item>
- <item msgid="5571632958424639155">"स्टीरियो"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
- <item msgid="8128478683963250130">"डिफ़ॉल्ट"</item>
- <item msgid="8900559293912978337">"मोनो"</item>
- <item msgid="8883739882299884241">"स्टीरियो"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
- <item msgid="2944889121850394020">"पसंदीदा ध्वनि गुणवत्ता (990kbps/909kbps)"</item>
- <item msgid="138837449700903545">"मानक (660kbps/606kbps)"</item>
- <item msgid="4777177307869441982">"पसंदीदा कनेक्शन (330kbps/303kbps)"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
- <item msgid="172302906231378902">"पसंदीदा ध्वनि गुणवत्ता (990kbps/909kbps)"</item>
- <item msgid="9091111147684472529">"मानक (660kbps/606kbps)"</item>
- <item msgid="3367904477834831032">"पसंदीदा कनेक्शन (330kbps/303kbps)"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:0 (7065842274271279580) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:3 (500463122137421129) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:0 (5062108632402595000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3093550793512117000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_titles:0 (3093023430402746802) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_summaries:0 (3214516120190965356) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_titles:0 (2684127272582591429) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_summaries:0 (1081159789834584363) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_titles:0 (5226878858503393706) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_summaries:0 (4118561796005528173) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:0 (3411577996960199959) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:1 (2921767058740704969) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:2 (3682554248829489641) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:0 (7668834469173465015) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:1 (4327143584633311908) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:2 (6155648878105378550) -->
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"बंद"</item>
<item msgid="1593289376502312923">"64K"</item>
diff --git a/packages/SettingsLib/res/values-hi/strings.xml b/packages/SettingsLib/res/values-hi/strings.xml
index 7ba3d54..fd01c6b 100644
--- a/packages/SettingsLib/res/values-hi/strings.xml
+++ b/packages/SettingsLib/res/values-hi/strings.xml
@@ -171,15 +171,23 @@
<string name="mobile_data_always_on" msgid="7745605759775320362">"सेल्युलर डेटा हमेशा सक्रिय"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"पूर्ण वॉल्यूम अक्षम करें"</string>
<string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"ब्लूटूथ ऑडियो कोडेक"</string>
- <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"पसंदीदा ब्लूटूथ A2DP कोडेक चुनें"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_type_dialog_title (4558347981670553665) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"ब्लूटूथ ऑडियो नमूना दर"</string>
- <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"पसंदीदा ब्लूटूथ A2DP कोडेक नमूना दर चुनें"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_sample_rate_dialog_title (5628790207448471613) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"ब्लूटूथ ऑडियो बिट प्रति नमूना"</string>
- <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"पसंदीदा ब्लूटूथ A2DP कोडेक बिट प्रति नमूना चुनें"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_bits_per_sample_dialog_title (4546131401358681321) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"ब्लूटूथ ऑडियो चैनल मोड"</string>
- <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"पसंदीदा ब्लूटूथ A2DP कोडेक चैनल मोड चुनें"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"ब्लूटूथ ऑडियो LDAC प्लेबैक गुणवत्ता"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"पसंदीदा ब्लूटूथ A2DP कोडेक LDAC प्लेबैक गुणवत्ता चुनें"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_channel_mode_dialog_title (9133545781346216071) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality (3619694372407843405) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (3181967377574368400) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_streaming_label (5347862512596240506) -->
+ <skip />
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"वायरलेस दिखाई देने के लिए प्रमाणन विकल्प दिखाएं"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"वाई-फ़ाई प्रवेश स्तर बढ़ाएं, वाई-फ़ाई पिकर में प्रति SSID RSSI दिखाएं"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"इसके सक्षम होने पर, जब वाई-फ़ाई संकेत कमज़ोर हों तो वाई-फ़ाई, डेटा कनेक्शन को सेल्यूलर पर अधिक बलपूर्वक भेजेगा"</string>
diff --git a/packages/SettingsLib/res/values-hr/arrays.xml b/packages/SettingsLib/res/values-hr/arrays.xml
index 06e3f51..8415bee 100644
--- a/packages/SettingsLib/res/values-hr/arrays.xml
+++ b/packages/SettingsLib/res/values-hr/arrays.xml
@@ -58,66 +58,22 @@
<item msgid="3878793616631049349">"Upotrebljavaj HDCP provjeru samo za DRM sadržaj"</item>
<item msgid="45075631231212732">"Uvijek upotrebljavaj HDCP provjeru"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="1852387125374225729">"Zadano"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="4260844283202960798">"aptX"</item>
- <item msgid="7279983368484312990">"aptX-HD"</item>
- <item msgid="2301339338870319651">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="9072025520360316957">"Zadano"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="1190434429082395888">"aptX"</item>
- <item msgid="649699003004233053">"aptX-HD"</item>
- <item msgid="508106435710925399">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
- <item msgid="7102940318360468759">"Zadano"</item>
- <item msgid="8895532488906185219">"44,1 kHz"</item>
- <item msgid="2909915718994807056">"48,0 kHz"</item>
- <item msgid="3347287377354164611">"88,2 kHz"</item>
- <item msgid="1234212100239985373">"96,0 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
- <item msgid="7224433008148687313">"Zadano"</item>
- <item msgid="4482862757811638365">"44,1 kHz"</item>
- <item msgid="354495328188724404">"48,0 kHz"</item>
- <item msgid="7329816882213695083">"88,2 kHz"</item>
- <item msgid="6967397666254430476">"96,0 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
- <item msgid="6694044160540313386">"Zadano"</item>
- <item msgid="5618929009984956469">"16 bitova po uzorku"</item>
- <item msgid="3412640499234627248">"24 bita po uzorku"</item>
- <item msgid="121583001492929387">"32 bita po uzorku"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
- <item msgid="5091076677792306320">"Zadano"</item>
- <item msgid="4726688794884191540">"16 bitova po uzorku"</item>
- <item msgid="305344756485516870">"24 bita po uzorku"</item>
- <item msgid="244568657919675099">"32 bita po uzorku"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
- <item msgid="13423709606339855">"Zadano"</item>
- <item msgid="4106832974775067314">"Mono"</item>
- <item msgid="5571632958424639155">"Stereo"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
- <item msgid="8128478683963250130">"Zadano"</item>
- <item msgid="8900559293912978337">"Mono"</item>
- <item msgid="8883739882299884241">"Stereo"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
- <item msgid="2944889121850394020">"Željena kval. zvuka (990 kb/s / 909 kb/s)"</item>
- <item msgid="138837449700903545">"Standardna (660 kb/s / 606 kb/s)"</item>
- <item msgid="4777177307869441982">"Željeno povezivanje (330 kb/s / 303 kb/s)"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
- <item msgid="172302906231378902">"Željena kval. zvuka (990 kb/s / 909 kb/s)"</item>
- <item msgid="9091111147684472529">"Standardna (660 kb/s / 606 kb/s)"</item>
- <item msgid="3367904477834831032">"Željeno povezivanje (330 kb/s / 303 kb/s)"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:0 (7065842274271279580) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:3 (500463122137421129) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:0 (5062108632402595000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3093550793512117000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_titles:0 (3093023430402746802) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_summaries:0 (3214516120190965356) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_titles:0 (2684127272582591429) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_summaries:0 (1081159789834584363) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_titles:0 (5226878858503393706) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_summaries:0 (4118561796005528173) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:0 (3411577996960199959) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:1 (2921767058740704969) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:2 (3682554248829489641) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:0 (7668834469173465015) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:1 (4327143584633311908) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:2 (6155648878105378550) -->
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"Isključeno"</item>
<item msgid="1593289376502312923">"64 KB"</item>
diff --git a/packages/SettingsLib/res/values-hr/strings.xml b/packages/SettingsLib/res/values-hr/strings.xml
index 598e5cb..21fdce5 100644
--- a/packages/SettingsLib/res/values-hr/strings.xml
+++ b/packages/SettingsLib/res/values-hr/strings.xml
@@ -171,15 +171,23 @@
<string name="mobile_data_always_on" msgid="7745605759775320362">"Mobilni podaci uvijek aktivni"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Onemogući apsolutnu glasnoću"</string>
<string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Kodek za Bluetooth Audio"</string>
- <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"Odabir željenog Bluetooth A2DP kodeka"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_type_dialog_title (4558347981670553665) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Brzina uzorka za Bluetooth Audio"</string>
- <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"Odabir željenu brzinu uzorka Bluetooth A2DP kodeka"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_sample_rate_dialog_title (5628790207448471613) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Bitovi po uzorku za Bluetooth Audio"</string>
- <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"Odabir željenog broja bitova po uzorku za Bluetooth A2DP kodek"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_bits_per_sample_dialog_title (4546131401358681321) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Način kanala za Bluetooth Audio"</string>
- <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"Odabir željenog načina kanala Bluetooth A2DP kodeka"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"LDAC kvaliteta reprodukcije za Bluetooth Audio"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"Odabir željene kvalitete reprodukcije Bluetooth A2DP kodeka LDAC"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_channel_mode_dialog_title (9133545781346216071) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality (3619694372407843405) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (3181967377574368400) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_streaming_label (5347862512596240506) -->
+ <skip />
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Prikaži opcije za certifikaciju bežičnog prikaza"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Povećana razina prijave na Wi‑Fi, prikaz po SSID RSSI-ju u Biraču Wi‑Fi-ja"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"Ako je omogućeno, Wi-Fi će aktivno prebacivati podatkovnu vezu mobilnoj mreži kada je Wi-Fi signal slab."</string>
diff --git a/packages/SettingsLib/res/values-hu/arrays.xml b/packages/SettingsLib/res/values-hu/arrays.xml
index 4cc67a3..9f314ac 100644
--- a/packages/SettingsLib/res/values-hu/arrays.xml
+++ b/packages/SettingsLib/res/values-hu/arrays.xml
@@ -58,66 +58,22 @@
<item msgid="3878793616631049349">"Csak DRM-tartalomhoz használjon HDCP ellenőrzést"</item>
<item msgid="45075631231212732">"Mindig használjon HDCP ellenőrzést"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="1852387125374225729">"Alapértelmezett"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="4260844283202960798">"aptX"</item>
- <item msgid="7279983368484312990">"aptX-HD"</item>
- <item msgid="2301339338870319651">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="9072025520360316957">"Alapértelmezett"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="1190434429082395888">"aptX"</item>
- <item msgid="649699003004233053">"aptX-HD"</item>
- <item msgid="508106435710925399">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
- <item msgid="7102940318360468759">"Alapértelmezett"</item>
- <item msgid="8895532488906185219">"44,1 kHz"</item>
- <item msgid="2909915718994807056">"48 kHz"</item>
- <item msgid="3347287377354164611">"88,2 kHz"</item>
- <item msgid="1234212100239985373">"96 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
- <item msgid="7224433008148687313">"Alapértelmezett"</item>
- <item msgid="4482862757811638365">"44,1 kHz"</item>
- <item msgid="354495328188724404">"48 kHz"</item>
- <item msgid="7329816882213695083">"88,2 kHz"</item>
- <item msgid="6967397666254430476">"96 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
- <item msgid="6694044160540313386">"Alapértelmezett"</item>
- <item msgid="5618929009984956469">"16 bit/minta"</item>
- <item msgid="3412640499234627248">"24 bit/minta"</item>
- <item msgid="121583001492929387">"32 bit/minta"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
- <item msgid="5091076677792306320">"Alapértelmezett"</item>
- <item msgid="4726688794884191540">"16 bit/minta"</item>
- <item msgid="305344756485516870">"24 bit/minta"</item>
- <item msgid="244568657919675099">"32 bit/minta"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
- <item msgid="13423709606339855">"Alapértelmezett"</item>
- <item msgid="4106832974775067314">"Monó"</item>
- <item msgid="5571632958424639155">"Sztereó"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
- <item msgid="8128478683963250130">"Alapértelmezett"</item>
- <item msgid="8900559293912978337">"Monó"</item>
- <item msgid="8883739882299884241">"Sztereó"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
- <item msgid="2944889121850394020">"Minőség előnyben részesítése (990 kbps/909 kbps)"</item>
- <item msgid="138837449700903545">"Alapértelmezett (660 kbps/606 kbps)"</item>
- <item msgid="4777177307869441982">"Kapcsolat előnyben részesítése (330 kbps/303 kbps)"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
- <item msgid="172302906231378902">"Minőség előnyben részesítése (990 kbps/909 kbps)"</item>
- <item msgid="9091111147684472529">"Alapértelmezett (660 kbps/606 kbps)"</item>
- <item msgid="3367904477834831032">"Kapcsolat előnyben részesítése (330 kbps/303 kbps)"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:0 (7065842274271279580) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:3 (500463122137421129) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:0 (5062108632402595000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3093550793512117000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_titles:0 (3093023430402746802) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_summaries:0 (3214516120190965356) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_titles:0 (2684127272582591429) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_summaries:0 (1081159789834584363) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_titles:0 (5226878858503393706) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_summaries:0 (4118561796005528173) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:0 (3411577996960199959) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:1 (2921767058740704969) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:2 (3682554248829489641) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:0 (7668834469173465015) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:1 (4327143584633311908) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:2 (6155648878105378550) -->
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"Ki"</item>
<item msgid="1593289376502312923">"64 KB"</item>
diff --git a/packages/SettingsLib/res/values-hu/strings.xml b/packages/SettingsLib/res/values-hu/strings.xml
index f4be3ec..63c38d0 100644
--- a/packages/SettingsLib/res/values-hu/strings.xml
+++ b/packages/SettingsLib/res/values-hu/strings.xml
@@ -171,15 +171,23 @@
<string name="mobile_data_always_on" msgid="7745605759775320362">"A mobilhálózati adatforgalom mindig aktív"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Abszolút hangerő funkció letiltása"</string>
<string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Bluetooth hang – Kodek"</string>
- <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"Előnyben részesített kodek kiválasztása a Bluetooth A2DP profiljához"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_type_dialog_title (4558347981670553665) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Bluetooth hang – mintavételezési gyakoriság"</string>
- <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"Kodek előnyben részesített mintavételezési gyakoriságának kiválasztása a Bluetooth A2DP profiljához"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_sample_rate_dialog_title (5628790207448471613) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Bluetooth hang – bit/minta"</string>
- <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"Kodek előnyben részesített bit/minta mennyiségének kiválasztása a Bluetooth A2DP profiljához"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_bits_per_sample_dialog_title (4546131401358681321) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Bluetooth hang – Csatornamód"</string>
- <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"Kodek előnyben részesített csatornamódjának kiválasztása a Bluetooth A2DP profiljához"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"Bluetooth hang – LDAC lejátszási minőség"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"Kodek előnyben részesített LDAC lejátszási minőségének kiválasztása a Bluetooth A2DP profiljához"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_channel_mode_dialog_title (9133545781346216071) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality (3619694372407843405) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (3181967377574368400) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_streaming_label (5347862512596240506) -->
+ <skip />
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Vezeték nélküli kijelző tanúsítványával kapcsolatos lehetőségek megjelenítése"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Wi‑Fi-naplózási szint növelése, RSSI/SSID megjelenítése a Wi‑Fi-választóban"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"Ha engedélyezi, a Wi-Fi agresszívebben fogja átadni az adatkapcsolatot a mobilhálózatnak gyenge Wi-Fi-jel esetén"</string>
diff --git a/packages/SettingsLib/res/values-hy/arrays.xml b/packages/SettingsLib/res/values-hy/arrays.xml
index 1d72787..057399e 100644
--- a/packages/SettingsLib/res/values-hy/arrays.xml
+++ b/packages/SettingsLib/res/values-hy/arrays.xml
@@ -58,66 +58,22 @@
<item msgid="3878793616631049349">"Օգտագործել HDCP-ը` միայն DRM-ի բովանդակությունը ստուգելու համար"</item>
<item msgid="45075631231212732">"Միշտ օգտագործել HDCP ստուգումը"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="1852387125374225729">"Կանխադրված"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="4260844283202960798">"aptX"</item>
- <item msgid="7279983368484312990">"aptX-HD"</item>
- <item msgid="2301339338870319651">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="9072025520360316957">"Կանխադրված"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="1190434429082395888">"aptX"</item>
- <item msgid="649699003004233053">"aptX-HD"</item>
- <item msgid="508106435710925399">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
- <item msgid="7102940318360468759">"Կանխադրված"</item>
- <item msgid="8895532488906185219">"44,1 կՀց"</item>
- <item msgid="2909915718994807056">"48,0 կՀց"</item>
- <item msgid="3347287377354164611">"88,2 կՀց"</item>
- <item msgid="1234212100239985373">"96,0 կՀց"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
- <item msgid="7224433008148687313">"Կանխադրված"</item>
- <item msgid="4482862757811638365">"44,1 կՀց"</item>
- <item msgid="354495328188724404">"48,0 կՀց"</item>
- <item msgid="7329816882213695083">"88,2 կՀց"</item>
- <item msgid="6967397666254430476">"96,0 կՀց"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
- <item msgid="6694044160540313386">"Կանխադրված"</item>
- <item msgid="5618929009984956469">"16 բիթ/նմուշ"</item>
- <item msgid="3412640499234627248">"24 բիթ/նմուշ"</item>
- <item msgid="121583001492929387">"32 բիթ/նմուշ"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
- <item msgid="5091076677792306320">"Կանխադրված"</item>
- <item msgid="4726688794884191540">"16 բիթ/նմուշ"</item>
- <item msgid="305344756485516870">"24 բիթ/նմուշ"</item>
- <item msgid="244568657919675099">"32 բիթ/նմուշ"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
- <item msgid="13423709606339855">"Կանխադրված"</item>
- <item msgid="4106832974775067314">"Մոնո"</item>
- <item msgid="5571632958424639155">"Ստերեո"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
- <item msgid="8128478683963250130">"Կանխադրված"</item>
- <item msgid="8900559293912978337">"Մոնո"</item>
- <item msgid="8883739882299884241">"Ստերեո"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
- <item msgid="2944889121850394020">"Նախընտրած ձայնի որակ (990 կբ/վ / 909 կբ/վ)"</item>
- <item msgid="138837449700903545">"Ստանդարտ (660 կբ/վ / 606 կբ/վ)"</item>
- <item msgid="4777177307869441982">"Նախընտրած կապ (330 կբ/վ / 303 կբ/վ)"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
- <item msgid="172302906231378902">"Նախընտրած ձայնի որակ (990 կբ/վ / 909 կբ/վ)"</item>
- <item msgid="9091111147684472529">"Ստանդարտ (660 կբ/վ / 606 կբ/վ)"</item>
- <item msgid="3367904477834831032">"Նախընտրած կապ (330 կբ/վ / 303 կբ/վ)"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:0 (7065842274271279580) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:3 (500463122137421129) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:0 (5062108632402595000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3093550793512117000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_titles:0 (3093023430402746802) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_summaries:0 (3214516120190965356) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_titles:0 (2684127272582591429) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_summaries:0 (1081159789834584363) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_titles:0 (5226878858503393706) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_summaries:0 (4118561796005528173) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:0 (3411577996960199959) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:1 (2921767058740704969) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:2 (3682554248829489641) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:0 (7668834469173465015) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:1 (4327143584633311908) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:2 (6155648878105378550) -->
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"Անջատված է"</item>
<item msgid="1593289376502312923">"64ԿԲ"</item>
diff --git a/packages/SettingsLib/res/values-hy/strings.xml b/packages/SettingsLib/res/values-hy/strings.xml
index 5ee1570..b4efac1 100644
--- a/packages/SettingsLib/res/values-hy/strings.xml
+++ b/packages/SettingsLib/res/values-hy/strings.xml
@@ -171,15 +171,23 @@
<string name="mobile_data_always_on" msgid="7745605759775320362">"Բջջային տվյալները՝ միշտ ակտիվացրած"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Անջատել ձայնի բացարձակ ուժգնությունը"</string>
<string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Bluetooth աուդիո կոդեկ"</string>
- <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"Ընտրեք Bluetooth A2DP նախընտրելի կոդեկը"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_type_dialog_title (4558347981670553665) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Bluetooth աուդիոյի Ընդհատավորման հաճախականությունը"</string>
- <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"Ընտրեք Bluetooth A2DP կոդեկի Ընդհատավորման նախընտրելի հաճախականությունը"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_sample_rate_dialog_title (5628790207448471613) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Bluetooth աուդիո, բիթ / նմուշ"</string>
- <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"Ընտրեք Bluetooth A2DP կոդեկի նախընտրելի որակը, բիթ / նմուշ"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_bits_per_sample_dialog_title (4546131401358681321) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Bluetooth աուդիո կապուղու ռեժիմը"</string>
- <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"Ընտրեք Bluetooth A2DP կոդեկի կապուղու նախընտրելի ռեժիմը"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"Bluetooth աուդիո LDAC նվագարկման որակը"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"Ընտրեք Bluetooth A2DP կոդեկի LDAC նվագարկման նախընտրելի որակը"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_channel_mode_dialog_title (9133545781346216071) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality (3619694372407843405) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (3181967377574368400) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_streaming_label (5347862512596240506) -->
+ <skip />
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Ցույց տալ անլար էկրանի հավաստագրման ընտրանքները"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Բարձրացնել մակարդակը, Wi‑Fi ընտրիչում ամեն մի SSID-ի համար ցույց տալ RSSI"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"Եթե այս գործառույթը միացված է, Wi‑Fi-ի թույլ ազդանշանի դեպքում Wi‑Fi ինտերնետից անցումը բջջային ինտերնետին ավելի կտրուկ կլինի"</string>
diff --git a/packages/SettingsLib/res/values-in/arrays.xml b/packages/SettingsLib/res/values-in/arrays.xml
index be3d89c..1ccf993 100644
--- a/packages/SettingsLib/res/values-in/arrays.xml
+++ b/packages/SettingsLib/res/values-in/arrays.xml
@@ -58,66 +58,22 @@
<item msgid="3878793616631049349">"Gunakan pemeriksaan HDCP untuk konten DRM saja"</item>
<item msgid="45075631231212732">"Selalu gunakan pemeriksaan HDCP"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="1852387125374225729">"Default"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="4260844283202960798">"aptX"</item>
- <item msgid="7279983368484312990">"aptX-HD"</item>
- <item msgid="2301339338870319651">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="9072025520360316957">"Default"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="1190434429082395888">"aptX"</item>
- <item msgid="649699003004233053">"aptX-HD"</item>
- <item msgid="508106435710925399">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
- <item msgid="7102940318360468759">"Default"</item>
- <item msgid="8895532488906185219">"44,1 kHz"</item>
- <item msgid="2909915718994807056">"48,0 kHz"</item>
- <item msgid="3347287377354164611">"88,2 kHz"</item>
- <item msgid="1234212100239985373">"96,0 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
- <item msgid="7224433008148687313">"Default"</item>
- <item msgid="4482862757811638365">"44,1 kHz"</item>
- <item msgid="354495328188724404">"48,0 kHz"</item>
- <item msgid="7329816882213695083">"88,2 kHz"</item>
- <item msgid="6967397666254430476">"96,0 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
- <item msgid="6694044160540313386">"Default"</item>
- <item msgid="5618929009984956469">"16 bit/sampel"</item>
- <item msgid="3412640499234627248">"24 bit/sampel"</item>
- <item msgid="121583001492929387">"32 bit/sampel"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
- <item msgid="5091076677792306320">"Default"</item>
- <item msgid="4726688794884191540">"16 bit/sampel"</item>
- <item msgid="305344756485516870">"24 bit/sampel"</item>
- <item msgid="244568657919675099">"32 bit/sampel"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
- <item msgid="13423709606339855">"Default"</item>
- <item msgid="4106832974775067314">"Mono"</item>
- <item msgid="5571632958424639155">"Stereo"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
- <item msgid="8128478683963250130">"Default"</item>
- <item msgid="8900559293912978337">"Mono"</item>
- <item msgid="8883739882299884241">"Stereo"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
- <item msgid="2944889121850394020">"Kualitas suara yang disukai (990kbps/909kbps)"</item>
- <item msgid="138837449700903545">"Standar (660kbps/606kbps)"</item>
- <item msgid="4777177307869441982">"Sambungan yang disukai (330kbps/303kbps)"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
- <item msgid="172302906231378902">"Kualitas suara yang disukai (990kbps/909kbps)"</item>
- <item msgid="9091111147684472529">"Standar (660kbps/606kbps)"</item>
- <item msgid="3367904477834831032">"Sambungan yang disukai (330kbps/303kbps)"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:0 (7065842274271279580) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:3 (500463122137421129) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:0 (5062108632402595000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3093550793512117000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_titles:0 (3093023430402746802) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_summaries:0 (3214516120190965356) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_titles:0 (2684127272582591429) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_summaries:0 (1081159789834584363) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_titles:0 (5226878858503393706) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_summaries:0 (4118561796005528173) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:0 (3411577996960199959) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:1 (2921767058740704969) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:2 (3682554248829489641) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:0 (7668834469173465015) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:1 (4327143584633311908) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:2 (6155648878105378550) -->
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"Nonaktif"</item>
<item msgid="1593289376502312923">"64 K"</item>
diff --git a/packages/SettingsLib/res/values-in/strings.xml b/packages/SettingsLib/res/values-in/strings.xml
index 97eca8e..a2f13ae 100644
--- a/packages/SettingsLib/res/values-in/strings.xml
+++ b/packages/SettingsLib/res/values-in/strings.xml
@@ -171,15 +171,23 @@
<string name="mobile_data_always_on" msgid="7745605759775320362">"Data seluler selalu aktif"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Nonaktifkan volume absolut"</string>
<string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Codec Audio Bluetooth"</string>
- <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"Pilih Codec A2DP Bluetooth Yang Disukai"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_type_dialog_title (4558347981670553665) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Frekuensi Sampel Audio Bluetooth"</string>
- <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"Pilih Frekuensi Sampel Codec A2DP Bluetooth Yang Disukai"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_sample_rate_dialog_title (5628790207448471613) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Bit Per Sampel Audio Bluetooth"</string>
- <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"Pilih Bit Per Sampel Codec A2DP Bluetooth Yang Disukai"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_bits_per_sample_dialog_title (4546131401358681321) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Mode Channel Audio Bluetooth"</string>
- <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"Pilih Mode Channel Codec A2DP Bluetooth Yang Disukai"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"Kualitas Pemutaran LDAC Audio Bluetooth"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"Pilih Kualitas Pemutaran LDAC Codec A2DP Bluetooth Yang Disukai"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_channel_mode_dialog_title (9133545781346216071) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality (3619694372407843405) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (3181967377574368400) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_streaming_label (5347862512596240506) -->
+ <skip />
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Tampilkan opsi untuk sertifikasi layar nirkabel"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Tingkatkan level pencatatan log Wi-Fi, tampilkan per SSID RSSI di Pemilih Wi‑Fi"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"Jika diaktifkan, Wi-Fi akan menjadi lebih agresif dalam mengalihkan sambungan data ke Seluler saat sinyal Wi-Fi lemah"</string>
diff --git a/packages/SettingsLib/res/values-is/arrays.xml b/packages/SettingsLib/res/values-is/arrays.xml
index dbb1636..94ce957 100644
--- a/packages/SettingsLib/res/values-is/arrays.xml
+++ b/packages/SettingsLib/res/values-is/arrays.xml
@@ -58,66 +58,22 @@
<item msgid="3878793616631049349">"Nota HDCP-athugun aðeins fyrir höfundarréttarvarið efni"</item>
<item msgid="45075631231212732">"Nota alltaf HDCP-eftirlit"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="1852387125374225729">"Sjálfgefið"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="4260844283202960798">"aptX"</item>
- <item msgid="7279983368484312990">"aptX-HD"</item>
- <item msgid="2301339338870319651">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="9072025520360316957">"Sjálfgefið"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="1190434429082395888">"aptX"</item>
- <item msgid="649699003004233053">"aptX-HD"</item>
- <item msgid="508106435710925399">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
- <item msgid="7102940318360468759">"Sjálfgefið"</item>
- <item msgid="8895532488906185219">"44,1 kHz"</item>
- <item msgid="2909915718994807056">"48,0 kHz"</item>
- <item msgid="3347287377354164611">"88,2 kHz"</item>
- <item msgid="1234212100239985373">"96,0 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
- <item msgid="7224433008148687313">"Sjálfgefið"</item>
- <item msgid="4482862757811638365">"44,1 kHz"</item>
- <item msgid="354495328188724404">"48,0 kHz"</item>
- <item msgid="7329816882213695083">"88,2 kHz"</item>
- <item msgid="6967397666254430476">"96,0 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
- <item msgid="6694044160540313386">"Sjálfgefið"</item>
- <item msgid="5618929009984956469">"16 bitar/úrtak"</item>
- <item msgid="3412640499234627248">"24 bitar/úrtak"</item>
- <item msgid="121583001492929387">"32 bitar/úrtak"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
- <item msgid="5091076677792306320">"Sjálfgefið"</item>
- <item msgid="4726688794884191540">"16 bitar/úrtak"</item>
- <item msgid="305344756485516870">"24 bitar/úrtak"</item>
- <item msgid="244568657919675099">"32 bitar/úrtak"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
- <item msgid="13423709606339855">"Sjálfgefið"</item>
- <item msgid="4106832974775067314">"Einóma"</item>
- <item msgid="5571632958424639155">"Víðóma"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
- <item msgid="8128478683963250130">"Sjálfgefið"</item>
- <item msgid="8900559293912978337">"Einóma"</item>
- <item msgid="8883739882299884241">"Víðóma"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
- <item msgid="2944889121850394020">"Hljóðgæði í forgangi (990kb/s / 909kb/s)"</item>
- <item msgid="138837449700903545">"Venjulegt (660kb/s / 606kb/s)"</item>
- <item msgid="4777177307869441982">"Tenging í forgangi (330kb/s / 303kb/s)"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
- <item msgid="172302906231378902">"Hljóðgæði í forgangi (990kb/s / 909kb/s)"</item>
- <item msgid="9091111147684472529">"Venjulegt (660kb/s / 606kb/s)"</item>
- <item msgid="3367904477834831032">"Tenging í forgangi (330kb/s / 303kb/s)"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:0 (7065842274271279580) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:3 (500463122137421129) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:0 (5062108632402595000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3093550793512117000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_titles:0 (3093023430402746802) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_summaries:0 (3214516120190965356) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_titles:0 (2684127272582591429) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_summaries:0 (1081159789834584363) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_titles:0 (5226878858503393706) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_summaries:0 (4118561796005528173) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:0 (3411577996960199959) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:1 (2921767058740704969) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:2 (3682554248829489641) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:0 (7668834469173465015) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:1 (4327143584633311908) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:2 (6155648878105378550) -->
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"Slökkt"</item>
<item msgid="1593289376502312923">"64 k"</item>
diff --git a/packages/SettingsLib/res/values-is/strings.xml b/packages/SettingsLib/res/values-is/strings.xml
index 4cecdbc..f50f97e 100644
--- a/packages/SettingsLib/res/values-is/strings.xml
+++ b/packages/SettingsLib/res/values-is/strings.xml
@@ -171,15 +171,23 @@
<string name="mobile_data_always_on" msgid="7745605759775320362">"Alltaf kveikt á farsímagögnum"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Slökkva á samstillingu hljóðstyrks"</string>
<string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Bluetooth hljóðkóðari"</string>
- <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"Veldu Bluetooth A2DP kóðara"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_type_dialog_title (4558347981670553665) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Bluetooth hljóðtökutíðni"</string>
- <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"Veldu Bluetooth A2DP kóðaratökutíðni"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_sample_rate_dialog_title (5628790207448471613) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Bluetooth hljóðbitar í úrtaki"</string>
- <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"Veldu Bluetooth A2DP kóðarabita í úrtaki"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_bits_per_sample_dialog_title (4546131401358681321) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Hljóðrásarstilling Bluetooth"</string>
- <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"Veldu Bluetooth A2DP stillingu kóðararásar"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"Bluetooth LDAC gæði hljóðspilunar"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"Veldu Bluetooth LDAC spilunargæði A2DP kóðara"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_channel_mode_dialog_title (9133545781346216071) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality (3619694372407843405) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (3181967377574368400) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_streaming_label (5347862512596240506) -->
+ <skip />
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Sýna valkosti fyrir vottun þráðlausra skjáa"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Auka skráningarstig Wi-Fi, sýna RSSI fyrir hvert SSID í Wi-Fi vali"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"Þegar þetta er virkt mun Wi-Fi ganga harðar fram í að færa gagnatenginguna yfir til símkerfisins þegar Wi-Fi merkið er lélegt"</string>
diff --git a/packages/SettingsLib/res/values-it/arrays.xml b/packages/SettingsLib/res/values-it/arrays.xml
index 5349086..d5ca891c 100644
--- a/packages/SettingsLib/res/values-it/arrays.xml
+++ b/packages/SettingsLib/res/values-it/arrays.xml
@@ -58,66 +58,22 @@
<item msgid="3878793616631049349">"Usa la verifica HDCP solo per contenuti DRM"</item>
<item msgid="45075631231212732">"Usa sempre la verifica HDCP"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="1852387125374225729">"Valore predefinito"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="4260844283202960798">"aptX"</item>
- <item msgid="7279983368484312990">"aptX-HD"</item>
- <item msgid="2301339338870319651">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="9072025520360316957">"Valore predefinito"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="1190434429082395888">"aptX"</item>
- <item msgid="649699003004233053">"aptX-HD"</item>
- <item msgid="508106435710925399">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
- <item msgid="7102940318360468759">"Valore predefinito"</item>
- <item msgid="8895532488906185219">"44.1 kHz"</item>
- <item msgid="2909915718994807056">"48.0 kHz"</item>
- <item msgid="3347287377354164611">"88.2 kHz"</item>
- <item msgid="1234212100239985373">"96.0 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
- <item msgid="7224433008148687313">"Valore predefinito"</item>
- <item msgid="4482862757811638365">"44.1 kHz"</item>
- <item msgid="354495328188724404">"48.0 kHz"</item>
- <item msgid="7329816882213695083">"88.2 kHz"</item>
- <item msgid="6967397666254430476">"96.0 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
- <item msgid="6694044160540313386">"Valore predefinito"</item>
- <item msgid="5618929009984956469">"16 bit/campione"</item>
- <item msgid="3412640499234627248">"24 bit/campione"</item>
- <item msgid="121583001492929387">"32 bit/campione"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
- <item msgid="5091076677792306320">"Valore predefinito"</item>
- <item msgid="4726688794884191540">"16 bit/campione"</item>
- <item msgid="305344756485516870">"24 bit/campione"</item>
- <item msgid="244568657919675099">"32 bit/campione"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
- <item msgid="13423709606339855">"Valore predefinito"</item>
- <item msgid="4106832974775067314">"Mono"</item>
- <item msgid="5571632958424639155">"Stereo"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
- <item msgid="8128478683963250130">"Valore predefinito"</item>
- <item msgid="8900559293912978337">"Mono"</item>
- <item msgid="8883739882299884241">"Stereo"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
- <item msgid="2944889121850394020">"Qualità audio preferita (990 kbps/909 kbps)"</item>
- <item msgid="138837449700903545">"Standard (660 kbps/606 kbps)"</item>
- <item msgid="4777177307869441982">"Collegamento preferito (330 kbps/303 kbps)"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
- <item msgid="172302906231378902">"Qualità audio preferita (990 kbps/909 kbps)"</item>
- <item msgid="9091111147684472529">"Standard (660 kbps/606 kbps)"</item>
- <item msgid="3367904477834831032">"Collegamento preferito (330 kbps/303 kbps)"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:0 (7065842274271279580) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:3 (500463122137421129) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:0 (5062108632402595000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3093550793512117000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_titles:0 (3093023430402746802) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_summaries:0 (3214516120190965356) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_titles:0 (2684127272582591429) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_summaries:0 (1081159789834584363) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_titles:0 (5226878858503393706) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_summaries:0 (4118561796005528173) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:0 (3411577996960199959) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:1 (2921767058740704969) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:2 (3682554248829489641) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:0 (7668834469173465015) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:1 (4327143584633311908) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:2 (6155648878105378550) -->
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"Off"</item>
<item msgid="1593289376502312923">"64 kB"</item>
diff --git a/packages/SettingsLib/res/values-it/strings.xml b/packages/SettingsLib/res/values-it/strings.xml
index a33fa87..14f41fa 100644
--- a/packages/SettingsLib/res/values-it/strings.xml
+++ b/packages/SettingsLib/res/values-it/strings.xml
@@ -171,15 +171,23 @@
<string name="mobile_data_always_on" msgid="7745605759775320362">"Dati cellulare sempre attivi"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Disattiva volume assoluto"</string>
<string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Codec audio Bluetooth"</string>
- <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"Seleziona codec A2DP Bluetooth preferito"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_type_dialog_title (4558347981670553665) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Frequenza di campionamento audio Bluetooth"</string>
- <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"Seleziona frequenza di campionamento preferita codec A2DP Bluetooth"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_sample_rate_dialog_title (5628790207448471613) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Bit per campione dell\'audio Bluetooth"</string>
- <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"Seleziona bit per campione preferiti codec A2DP Bluetooth"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_bits_per_sample_dialog_title (4546131401358681321) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Modalità canale audio Bluetooth"</string>
- <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"Seleziona modalità canale preferita codec A2DP Bluetooth"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"Qualità di riproduzione LDAC audio Bluetooth"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"Seleziona qualità di riproduzione preferita LDAC codec A2DP Bluetooth"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_channel_mode_dialog_title (9133545781346216071) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality (3619694372407843405) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (3181967377574368400) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_streaming_label (5347862512596240506) -->
+ <skip />
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Mostra opzioni per la certificazione display wireless"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Aumenta il livello di registrazione Wi-Fi, mostrando il SSID RSSI nel selettore Wi-Fi"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"Quando questa impostazione è attivata, il Wi-Fi sarà più aggressivo nel passare la connessione dati al cellulare, quando il segnale Wi-Fi è basso"</string>
diff --git a/packages/SettingsLib/res/values-iw/arrays.xml b/packages/SettingsLib/res/values-iw/arrays.xml
index f1e7be9..94af5f1 100644
--- a/packages/SettingsLib/res/values-iw/arrays.xml
+++ b/packages/SettingsLib/res/values-iw/arrays.xml
@@ -58,66 +58,22 @@
<item msgid="3878793616631049349">"השתמש בבדיקת HDCP עבור תוכן DRM בלבד"</item>
<item msgid="45075631231212732">"תמיד השתמש בבדיקת HDCP"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="1852387125374225729">"ברירת מחדל"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="4260844283202960798">"aptX"</item>
- <item msgid="7279983368484312990">"aptX-HD"</item>
- <item msgid="2301339338870319651">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="9072025520360316957">"ברירת מחדל"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="1190434429082395888">"aptX"</item>
- <item msgid="649699003004233053">"aptX-HD"</item>
- <item msgid="508106435710925399">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
- <item msgid="7102940318360468759">"ברירת מחדל"</item>
- <item msgid="8895532488906185219">"44.1 קילו-הרץ"</item>
- <item msgid="2909915718994807056">"48.0 קילו-הרץ"</item>
- <item msgid="3347287377354164611">"88.2 קילו-הרץ"</item>
- <item msgid="1234212100239985373">"96.0 קילו-הרץ"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
- <item msgid="7224433008148687313">"ברירת מחדל"</item>
- <item msgid="4482862757811638365">"44.1 קילו-הרץ"</item>
- <item msgid="354495328188724404">"48.0 קילו-הרץ"</item>
- <item msgid="7329816882213695083">"88.2 קילו-הרץ"</item>
- <item msgid="6967397666254430476">"96.0 קילו-הרץ"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
- <item msgid="6694044160540313386">"ברירת מחדל"</item>
- <item msgid="5618929009984956469">"16 סיביות לדגימה"</item>
- <item msgid="3412640499234627248">"24 סיביות לדגימה"</item>
- <item msgid="121583001492929387">"32 סיביות לדגימה"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
- <item msgid="5091076677792306320">"ברירת מחדל"</item>
- <item msgid="4726688794884191540">"16 סיביות לדגימה"</item>
- <item msgid="305344756485516870">"24 סיביות לדגימה"</item>
- <item msgid="244568657919675099">"32 סיביות לדגימה"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
- <item msgid="13423709606339855">"ברירת מחדל"</item>
- <item msgid="4106832974775067314">"מונו"</item>
- <item msgid="5571632958424639155">"סטריאו"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
- <item msgid="8128478683963250130">"ברירת מחדל"</item>
- <item msgid="8900559293912978337">"מונו"</item>
- <item msgid="8883739882299884241">"סטריאו"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
- <item msgid="2944889121850394020">"איכות צליל מועדפת (990kbps/909kbps)"</item>
- <item msgid="138837449700903545">"רגילה (660kbps/606kbps)"</item>
- <item msgid="4777177307869441982">"חיבור מועדף (330kbps/303kbps)"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
- <item msgid="172302906231378902">"איכות צליל מועדפת (990kbps/909kbps)"</item>
- <item msgid="9091111147684472529">"רגילה (660kbps/606kbps)"</item>
- <item msgid="3367904477834831032">"חיבור מועדף (330kbps/303kbps)"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:0 (7065842274271279580) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:3 (500463122137421129) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:0 (5062108632402595000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3093550793512117000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_titles:0 (3093023430402746802) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_summaries:0 (3214516120190965356) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_titles:0 (2684127272582591429) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_summaries:0 (1081159789834584363) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_titles:0 (5226878858503393706) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_summaries:0 (4118561796005528173) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:0 (3411577996960199959) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:1 (2921767058740704969) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:2 (3682554248829489641) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:0 (7668834469173465015) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:1 (4327143584633311908) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:2 (6155648878105378550) -->
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"כבוי"</item>
<item msgid="1593289376502312923">"64K"</item>
diff --git a/packages/SettingsLib/res/values-iw/strings.xml b/packages/SettingsLib/res/values-iw/strings.xml
index 45dd7e7..5b26091 100644
--- a/packages/SettingsLib/res/values-iw/strings.xml
+++ b/packages/SettingsLib/res/values-iw/strings.xml
@@ -171,15 +171,23 @@
<string name="mobile_data_always_on" msgid="7745605759775320362">"נתונים סלולריים פעילים תמיד"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"השבת עוצמת קול מוחלטת"</string>
<string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Codec אודיו ל-Bluetooth"</string>
- <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"בחר codec A2DP מועדף ל-Bluetooth"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_type_dialog_title (4558347981670553665) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"קצב דגימה של אודיו ל-Bluetooth"</string>
- <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"בחר קצב דגימה מועדף ב-codec A2DP ל-Bluetooth"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_sample_rate_dialog_title (5628790207448471613) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"מספר סיביות לדגימה באודיו ל-Bluetooth"</string>
- <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"בחר מספר מועדף של סיביות לדגימה ב-codec A2DP ל-Bluetooth"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_bits_per_sample_dialog_title (4546131401358681321) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"מצב של ערוץ אודיו ל-Bluetooth"</string>
- <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"בחר מצב ערוץ מועדף ב-codec A2DP ל-Bluetooth"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"איכות נגינה של אודיו LDAC ל-Bluetooth"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"בחר איכות נגינה מועדפת ב-codec A2DP ל-Bluetooth"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_channel_mode_dialog_title (9133545781346216071) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality (3619694372407843405) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (3181967377574368400) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_streaming_label (5347862512596240506) -->
+ <skip />
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"הצג אפשרויות עבור אישור של תצוגת WiFi"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"העלה את רמת הרישום של Wi‑Fi ביומן, הצג לכל SSID RSSI ב-Wi‑Fi Picker"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"כשתכונה זו מופעלת, Wi-Fi יתנהג בצורה אגרסיבית יותר בעת העברת חיבור הנתונים לרשת הסלולרית כשאות ה-Wi-Fi חלש."</string>
diff --git a/packages/SettingsLib/res/values-ja/arrays.xml b/packages/SettingsLib/res/values-ja/arrays.xml
index cc00934..c8599d2 100644
--- a/packages/SettingsLib/res/values-ja/arrays.xml
+++ b/packages/SettingsLib/res/values-ja/arrays.xml
@@ -58,66 +58,22 @@
<item msgid="3878793616631049349">"DRMコンテンツにのみHDCPチェックを使用する"</item>
<item msgid="45075631231212732">"HDCPチェックを常に使用する"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="1852387125374225729">"デフォルト"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="4260844283202960798">"aptX"</item>
- <item msgid="7279983368484312990">"aptX-HD"</item>
- <item msgid="2301339338870319651">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="9072025520360316957">"デフォルト"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="1190434429082395888">"aptX"</item>
- <item msgid="649699003004233053">"aptX-HD"</item>
- <item msgid="508106435710925399">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
- <item msgid="7102940318360468759">"デフォルト"</item>
- <item msgid="8895532488906185219">"44.1 kHz"</item>
- <item msgid="2909915718994807056">"48.0 kHz"</item>
- <item msgid="3347287377354164611">"88.2 kHz"</item>
- <item msgid="1234212100239985373">"96.0 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
- <item msgid="7224433008148687313">"デフォルト"</item>
- <item msgid="4482862757811638365">"44.1 kHz"</item>
- <item msgid="354495328188724404">"48.0 kHz"</item>
- <item msgid="7329816882213695083">"88.2 kHz"</item>
- <item msgid="6967397666254430476">"96.0 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
- <item msgid="6694044160540313386">"デフォルト"</item>
- <item msgid="5618929009984956469">"16 ビット / サンプル"</item>
- <item msgid="3412640499234627248">"24 ビット / サンプル"</item>
- <item msgid="121583001492929387">"32 ビット / サンプル"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
- <item msgid="5091076677792306320">"デフォルト"</item>
- <item msgid="4726688794884191540">"16 ビット / サンプル"</item>
- <item msgid="305344756485516870">"24 ビット / サンプル"</item>
- <item msgid="244568657919675099">"32 ビット / サンプル"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
- <item msgid="13423709606339855">"デフォルト"</item>
- <item msgid="4106832974775067314">"モノラル"</item>
- <item msgid="5571632958424639155">"ステレオ"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
- <item msgid="8128478683963250130">"デフォルト"</item>
- <item msgid="8900559293912978337">"モノラル"</item>
- <item msgid="8883739882299884241">"ステレオ"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
- <item msgid="2944889121850394020">"優先する音質(990 kbps / 909 kbps)"</item>
- <item msgid="138837449700903545">"標準(660 kbps / 606 kbps)"</item>
- <item msgid="4777177307869441982">"優先する接続(330 kbps / 303 kbps)"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
- <item msgid="172302906231378902">"優先する音質(990 kbps / 909 kbps)"</item>
- <item msgid="9091111147684472529">"標準(660 kbps / 606 kbps)"</item>
- <item msgid="3367904477834831032">"優先する接続(330 kbps / 303 kbps)"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:0 (7065842274271279580) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:3 (500463122137421129) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:0 (5062108632402595000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3093550793512117000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_titles:0 (3093023430402746802) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_summaries:0 (3214516120190965356) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_titles:0 (2684127272582591429) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_summaries:0 (1081159789834584363) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_titles:0 (5226878858503393706) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_summaries:0 (4118561796005528173) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:0 (3411577996960199959) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:1 (2921767058740704969) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:2 (3682554248829489641) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:0 (7668834469173465015) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:1 (4327143584633311908) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:2 (6155648878105378550) -->
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"OFF"</item>
<item msgid="1593289376502312923">"64 K"</item>
diff --git a/packages/SettingsLib/res/values-ja/strings.xml b/packages/SettingsLib/res/values-ja/strings.xml
index 12a8734..72f4595 100644
--- a/packages/SettingsLib/res/values-ja/strings.xml
+++ b/packages/SettingsLib/res/values-ja/strings.xml
@@ -171,15 +171,23 @@
<string name="mobile_data_always_on" msgid="7745605759775320362">"モバイルデータを常にON"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"絶対音量を無効にする"</string>
<string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Bluetooth オーディオ コーデック"</string>
- <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"優先する Bluetooth A2DP コーデックを選択"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_type_dialog_title (4558347981670553665) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Bluetooth オーディオ サンプルレート"</string>
- <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"優先する Bluetooth A2DP コーデック サンプルレートを選択"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_sample_rate_dialog_title (5628790207448471613) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"サンプルあたりの Bluetooth オーディオ ビット"</string>
- <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"優先するサンプルあたりの Bluetooth A2DP コーデック ビットを選択"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_bits_per_sample_dialog_title (4546131401358681321) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Bluetooth オーディオ チャンネル モード"</string>
- <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"優先する Bluetooth A2DP コーデック チャンネル モードを選択"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"Bluetooth オーディオ LDAC 再生音質"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"優先する Bluetooth A2DP コーデック LDAC 再生音質を選択"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_channel_mode_dialog_title (9133545781346216071) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality (3619694372407843405) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (3181967377574368400) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_streaming_label (5347862512596240506) -->
+ <skip />
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"ワイヤレスディスプレイ認証のオプションを表示"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Wi-Fiログレベルを上げて、Wi-Fi選択ツールでSSID RSSIごとに表示します"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"有効にすると、Wi-Fiの電波強度が弱い場合は強制的にモバイルデータ接続に切り替わるようになります"</string>
diff --git a/packages/SettingsLib/res/values-ka/arrays.xml b/packages/SettingsLib/res/values-ka/arrays.xml
index 0e6eb7c..60779fe 100644
--- a/packages/SettingsLib/res/values-ka/arrays.xml
+++ b/packages/SettingsLib/res/values-ka/arrays.xml
@@ -58,66 +58,22 @@
<item msgid="3878793616631049349">"HDCP შემოწმების გამოყენება მხოლოდ DRM კონტენტის შემთხვევაში"</item>
<item msgid="45075631231212732">"ყოველთვის გამოიყენე HDCP შემოწმება"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="1852387125374225729">"ნაგულისხმევი"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="4260844283202960798">"aptX"</item>
- <item msgid="7279983368484312990">"aptX-HD"</item>
- <item msgid="2301339338870319651">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="9072025520360316957">"ნაგულისხმევი"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="1190434429082395888">"aptX"</item>
- <item msgid="649699003004233053">"aptX-HD"</item>
- <item msgid="508106435710925399">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
- <item msgid="7102940318360468759">"ნაგულისხმევი"</item>
- <item msgid="8895532488906185219">"44,1 კჰც"</item>
- <item msgid="2909915718994807056">"48,0 კჰც"</item>
- <item msgid="3347287377354164611">"88,2 კჰც"</item>
- <item msgid="1234212100239985373">"96,0 კჰც"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
- <item msgid="7224433008148687313">"ნაგულისხმევი"</item>
- <item msgid="4482862757811638365">"44,1 კჰც"</item>
- <item msgid="354495328188724404">"48,0 კჰც"</item>
- <item msgid="7329816882213695083">"88,2 კჰც"</item>
- <item msgid="6967397666254430476">"96,0 კჰც"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
- <item msgid="6694044160540313386">"ნაგულისხმევი"</item>
- <item msgid="5618929009984956469">"16 ბიტი/ნიმუში"</item>
- <item msgid="3412640499234627248">"24 ბიტი/ნიმუში"</item>
- <item msgid="121583001492929387">"32 ბიტი/ნიმუში"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
- <item msgid="5091076677792306320">"ნაგულისხმევი"</item>
- <item msgid="4726688794884191540">"16 ბიტი/ნიმუში"</item>
- <item msgid="305344756485516870">"24 ბიტი/ნიმუში"</item>
- <item msgid="244568657919675099">"32 ბიტი/ნიმუში"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
- <item msgid="13423709606339855">"ნაგულისხმევი"</item>
- <item msgid="4106832974775067314">"მონო"</item>
- <item msgid="5571632958424639155">"სტერეო"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
- <item msgid="8128478683963250130">"ნაგულისხმევი"</item>
- <item msgid="8900559293912978337">"მონო"</item>
- <item msgid="8883739882299884241">"სტერეო"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
- <item msgid="2944889121850394020">"სასურველია ხმის ხარისხი (990/909 კბიტი/წმ)"</item>
- <item msgid="138837449700903545">"სტანდარტული (660/606 კბიტი/წმ)"</item>
- <item msgid="4777177307869441982">"სასურველია კავშირი (330/303 კბიტი/წმ)"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
- <item msgid="172302906231378902">"სასურველია ხმის ხარისხი (990/909 კბიტი/წმ)"</item>
- <item msgid="9091111147684472529">"სტანდარტული (660/606 კბიტი/წმ)"</item>
- <item msgid="3367904477834831032">"სასურველია კავშირი (330/303 კბიტი/წმ)"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:0 (7065842274271279580) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:3 (500463122137421129) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:0 (5062108632402595000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3093550793512117000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_titles:0 (3093023430402746802) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_summaries:0 (3214516120190965356) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_titles:0 (2684127272582591429) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_summaries:0 (1081159789834584363) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_titles:0 (5226878858503393706) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_summaries:0 (4118561796005528173) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:0 (3411577996960199959) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:1 (2921767058740704969) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:2 (3682554248829489641) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:0 (7668834469173465015) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:1 (4327143584633311908) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:2 (6155648878105378550) -->
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"გამორთული"</item>
<item msgid="1593289376502312923">"64 კბაიტი"</item>
diff --git a/packages/SettingsLib/res/values-ka/strings.xml b/packages/SettingsLib/res/values-ka/strings.xml
index 18c2def..058562e 100644
--- a/packages/SettingsLib/res/values-ka/strings.xml
+++ b/packages/SettingsLib/res/values-ka/strings.xml
@@ -171,15 +171,23 @@
<string name="mobile_data_always_on" msgid="7745605759775320362">"ფიჭური მონაცემები ყოველთვის აქტიურია"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"ხმის აბსოლუტური სიძლიერის გათიშვა"</string>
<string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Bluetooth აუდიოს კოდეკი"</string>
- <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"აირჩიეთ Bluetooth A2DP-ის სასურველი კოდეკი"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_type_dialog_title (4558347981670553665) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Bluetooth აუდიოს დისკრეტიზაციის სიხშირე"</string>
- <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"აირჩიეთ Bluetooth A2DP კოდეკის დისკრეტიზაციის სასურველი სიხშირე"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_sample_rate_dialog_title (5628790207448471613) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Bluetooth აუდიოს ბიტების რაოდენობა ნიმუშზე"</string>
- <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"აირჩიეთ Bluetooth A2DP კოდეკის ბიტების სასურველი რაოდენობა ნიმუშზე"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_bits_per_sample_dialog_title (4546131401358681321) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Bluetooth აუდიოს არხის რეჟიმი"</string>
- <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"აირჩიეთ Bluetooth A2DP კოდეკის არხის სასურველი რეჟიმი"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"Bluetooth აუდიოს LDAC დაკვრის ხარისხი"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"აირჩიეთ Bluetooth A2DP კოდეკის LDAC დაკვრის სასურველი ხარისხი"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_channel_mode_dialog_title (9133545781346216071) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality (3619694372407843405) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (3181967377574368400) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_streaming_label (5347862512596240506) -->
+ <skip />
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"უსადენო ეკრანის სერტიფიცირების ვარიანტების ჩვენება"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Wi‑Fi-ს აღრიცხვის დონის გაზრდა, Wi‑Fi ამომრჩეველში ყოველ SSID RSSI-ზე ჩვენება"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"თუ ჩართულია, Wi‑Fi სიგნალის შესუსტების შემთხვევაში Wi-Fi უფრო აქტიურად შეეცდება გადაიყვანოს ინტერნეტ-კავშირი მობილურ ინტერნეტზე"</string>
diff --git a/packages/SettingsLib/res/values-kk/arrays.xml b/packages/SettingsLib/res/values-kk/arrays.xml
index 4c1c819..f743606 100644
--- a/packages/SettingsLib/res/values-kk/arrays.xml
+++ b/packages/SettingsLib/res/values-kk/arrays.xml
@@ -58,66 +58,22 @@
<item msgid="3878793616631049349">"HDCP (кең жолақты сандық мазмұн қорғау) тексеруді DRM (авторлық құқықты техникалық қорғау) мазмұны үшін ғана қолданыңыз"</item>
<item msgid="45075631231212732">"Әрқашан HDCP (жоғары кең жолақты сандық мазмұн қорғаушы) тексерулерін қолданыңыз"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="1852387125374225729">"Әдепкі"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="4260844283202960798">"aptX"</item>
- <item msgid="7279983368484312990">"aptX-HD"</item>
- <item msgid="2301339338870319651">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="9072025520360316957">"Әдепкі"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="1190434429082395888">"aptX"</item>
- <item msgid="649699003004233053">"aptX-HD"</item>
- <item msgid="508106435710925399">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
- <item msgid="7102940318360468759">"Әдепкі"</item>
- <item msgid="8895532488906185219">"44,1 кГц"</item>
- <item msgid="2909915718994807056">"48,0 кГц"</item>
- <item msgid="3347287377354164611">"88,2 кГц"</item>
- <item msgid="1234212100239985373">"96,0 кГц"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
- <item msgid="7224433008148687313">"Әдепкі"</item>
- <item msgid="4482862757811638365">"44,1 кГц"</item>
- <item msgid="354495328188724404">"48,0 кГц"</item>
- <item msgid="7329816882213695083">"88,2 кГц"</item>
- <item msgid="6967397666254430476">"96,0 кГц"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
- <item msgid="6694044160540313386">"Әдепкі"</item>
- <item msgid="5618929009984956469">"16 бит/үлгі"</item>
- <item msgid="3412640499234627248">"24 бит/үлгі"</item>
- <item msgid="121583001492929387">"32 бит/үлгі"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
- <item msgid="5091076677792306320">"Әдепкі"</item>
- <item msgid="4726688794884191540">"16 бит/үлгі"</item>
- <item msgid="305344756485516870">"24 бит/үлгі"</item>
- <item msgid="244568657919675099">"32 бит/үлгі"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
- <item msgid="13423709606339855">"Әдепкі"</item>
- <item msgid="4106832974775067314">"Моно"</item>
- <item msgid="5571632958424639155">"Стерео"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
- <item msgid="8128478683963250130">"Әдепкі"</item>
- <item msgid="8900559293912978337">"Моно"</item>
- <item msgid="8883739882299884241">"Стерео"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
- <item msgid="2944889121850394020">"Таңдаулы дыбыс сапасы (990 кбит/с не 909 кбит/с)"</item>
- <item msgid="138837449700903545">"Стандартты (660 кбит/с не 606 кбит/с)"</item>
- <item msgid="4777177307869441982">"Таңдаулы байланыс (330 кбит/с не 303 кбит/с)"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
- <item msgid="172302906231378902">"Таңдаулы дыбыс сапасы (990 кбит/с не 909 кбит/с)"</item>
- <item msgid="9091111147684472529">"Стандартты (660 кбит/с не 606 кбит/с)"</item>
- <item msgid="3367904477834831032">"Таңдаулы байланыс (330 кбит/с не 303 кбит/с)"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:0 (7065842274271279580) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:3 (500463122137421129) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:0 (5062108632402595000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3093550793512117000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_titles:0 (3093023430402746802) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_summaries:0 (3214516120190965356) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_titles:0 (2684127272582591429) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_summaries:0 (1081159789834584363) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_titles:0 (5226878858503393706) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_summaries:0 (4118561796005528173) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:0 (3411577996960199959) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:1 (2921767058740704969) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:2 (3682554248829489641) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:0 (7668834469173465015) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:1 (4327143584633311908) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:2 (6155648878105378550) -->
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"Өшірулі"</item>
<item msgid="1593289376502312923">"64 КБ"</item>
diff --git a/packages/SettingsLib/res/values-kk/strings.xml b/packages/SettingsLib/res/values-kk/strings.xml
index 862d06f..69610fa 100644
--- a/packages/SettingsLib/res/values-kk/strings.xml
+++ b/packages/SettingsLib/res/values-kk/strings.xml
@@ -171,15 +171,23 @@
<string name="mobile_data_always_on" msgid="7745605759775320362">"Ұялы деректер әрқашан белсенді"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Абсолютті дыбыс деңгейін өшіру"</string>
<string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Bluetooth аудимазмұн кодегі"</string>
- <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"Таңдаулы Bluetooth A2DP кодегін таңдау"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_type_dialog_title (4558347981670553665) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Bluetooth аудиомазмұны бойынша үлгі жиілігі"</string>
- <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"Таңдаулы Bluetooth A2DP кодегі бойынша үлгі жиілігі"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_sample_rate_dialog_title (5628790207448471613) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Bluetooth аудиомазмұны бойынша әр үлгіге келетін биттер саны"</string>
- <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"Таңдаулы Bluetooth A2DP кодегі бойынша әр үлгіге келетін биттер санын таңдау"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_bits_per_sample_dialog_title (4546131401358681321) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Bluetooth аудиомазмұны бойынша арна режимі"</string>
- <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"Таңдаулы Bluetooth A2DP кодегі бойынша арна режимі"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"Bluetooth аудиомазмұны бойынша LDAC ойнату сапасы"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"Таңдаулы Bluetooth A2DP кодегі бойынша LDAC ойнату сапасын таңдау"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_channel_mode_dialog_title (9133545781346216071) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality (3619694372407843405) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (3181967377574368400) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_streaming_label (5347862512596240506) -->
+ <skip />
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Сымсыз дисплей растау опцияларын көрсету"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Wi‑Fi жур. тір. дең. арт., Wi‑Fi желісін таңдағышта әр SSID RSSI бойынша көрсету"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"Wi‑Fi сигналы әлсіз болғанда, деректер байланысы мәжбүрлі түрде ұялы желіге ауысады"</string>
diff --git a/packages/SettingsLib/res/values-km/arrays.xml b/packages/SettingsLib/res/values-km/arrays.xml
index 569603f..470112a 100644
--- a/packages/SettingsLib/res/values-km/arrays.xml
+++ b/packages/SettingsLib/res/values-km/arrays.xml
@@ -58,66 +58,22 @@
<item msgid="3878793616631049349">"ប្រើការពិនិត្យ HDCP សម្រាប់តែមាតិកា DRM ប៉ុណ្ណោះ"</item>
<item msgid="45075631231212732">"ប្រើការពិនិត្យ HDCP ជានិច្ច"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="1852387125374225729">"លំនាំដើម"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="4260844283202960798">"aptX"</item>
- <item msgid="7279983368484312990">"aptX-HD"</item>
- <item msgid="2301339338870319651">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="9072025520360316957">"លំនាំដើម"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="1190434429082395888">"aptX"</item>
- <item msgid="649699003004233053">"aptX-HD"</item>
- <item msgid="508106435710925399">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
- <item msgid="7102940318360468759">"លំនាំដើម"</item>
- <item msgid="8895532488906185219">"44.1 kHz"</item>
- <item msgid="2909915718994807056">"48.0 kHz"</item>
- <item msgid="3347287377354164611">"88.2 kHz"</item>
- <item msgid="1234212100239985373">"96.0 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
- <item msgid="7224433008148687313">"លំនាំដើម"</item>
- <item msgid="4482862757811638365">"44.1 kHz"</item>
- <item msgid="354495328188724404">"48.0 kHz"</item>
- <item msgid="7329816882213695083">"88.2 kHz"</item>
- <item msgid="6967397666254430476">"96.0 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
- <item msgid="6694044160540313386">"លំនាំដើម"</item>
- <item msgid="5618929009984956469">"16 ប៊ីត/គំរូ"</item>
- <item msgid="3412640499234627248">"24 ប៊ីត/គំរូ"</item>
- <item msgid="121583001492929387">"32 ប៊ីត/គំរូ"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
- <item msgid="5091076677792306320">"លំនាំដើម"</item>
- <item msgid="4726688794884191540">"16 ប៊ីត/គំរូ"</item>
- <item msgid="305344756485516870">"24 ប៊ីត/គំរូ"</item>
- <item msgid="244568657919675099">"32 ប៊ីត/គំរូ"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
- <item msgid="13423709606339855">"លំនាំដើម"</item>
- <item msgid="4106832974775067314">"ម៉ូណូ"</item>
- <item msgid="5571632958424639155">"ស្តេរ៉េអូ"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
- <item msgid="8128478683963250130">"លំនាំដើម"</item>
- <item msgid="8900559293912978337">"ម៉ូណូ"</item>
- <item msgid="8883739882299884241">"ស្តេរ៉េអូ"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
- <item msgid="2944889121850394020">"គុណភាពសំឡេងដែលគួរប្រើ (990kbps/909kbps)"</item>
- <item msgid="138837449700903545">"ស្តង់ដា (660kbps/606kbps)"</item>
- <item msgid="4777177307869441982">"ការតភ្ជាប់ដែលគួរប្រើ (330kbps/303kbps)"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
- <item msgid="172302906231378902">"គុណភាពសំឡេងដែលគួរប្រើ (990kbps/909kbps)"</item>
- <item msgid="9091111147684472529">"ស្តង់ដា (660kbps/606kbps)"</item>
- <item msgid="3367904477834831032">"ការតភ្ជាប់ដែលគួរប្រើ (330kbps/303kbps)"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:0 (7065842274271279580) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:3 (500463122137421129) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:0 (5062108632402595000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3093550793512117000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_titles:0 (3093023430402746802) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_summaries:0 (3214516120190965356) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_titles:0 (2684127272582591429) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_summaries:0 (1081159789834584363) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_titles:0 (5226878858503393706) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_summaries:0 (4118561796005528173) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:0 (3411577996960199959) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:1 (2921767058740704969) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:2 (3682554248829489641) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:0 (7668834469173465015) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:1 (4327143584633311908) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:2 (6155648878105378550) -->
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"បិទ"</item>
<item msgid="1593289376502312923">"64K"</item>
diff --git a/packages/SettingsLib/res/values-km/strings.xml b/packages/SettingsLib/res/values-km/strings.xml
index b7bddd8..205f01b 100644
--- a/packages/SettingsLib/res/values-km/strings.xml
+++ b/packages/SettingsLib/res/values-km/strings.xml
@@ -171,15 +171,23 @@
<string name="mobile_data_always_on" msgid="7745605759775320362">"ទិន្នន័យចល័តសកម្មជានិច្ច"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"បិទកម្រិតសំឡេងលឺខ្លាំង"</string>
<string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"កូឌិកសំឡេងប៊្លូធូស"</string>
- <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"ជ្រើសរើសកូឌិកសម្រាប់ប៊្លូធូស A2DP ដែលគួរប្រើ"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_type_dialog_title (4558347981670553665) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"អត្រាគំរូសំឡេងប៊្លូធូស"</string>
- <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"ជ្រើសរើសអត្រាគំរូកូឌិកសម្រាប់ប៊្លូធូស A2DP ដែលគួរប្រើ"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_sample_rate_dialog_title (5628790207448471613) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"កម្រិតប៊ីតក្នុងមួយគំរូនៃសំឡេងប៊្លូធូស"</string>
- <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"ជ្រើសរើសកម្រិតប៊ីតក្នុងមួយគំរូនៃកូឌិកប៊្លូធូស A2DP ដែលគួរប្រើ"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_bits_per_sample_dialog_title (4546131401358681321) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"មុខងាររលកសញ្ញាសំឡេងប៊្លូធូស"</string>
- <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"ជ្រើសរើសមុខងាររលកសញ្ញាកូឌិកប៊្លូធូស A2DP ដែលគួរប្រើ"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"គុណភាពចាក់សម្រាប់សំឡេងប៊្លូធូស LDAC"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"ជ្រើសរើសគុណភាពចាក់ LDAC កូឌិក សម្រាប់ប៊្លូធូស A2DP ដែលគួរប្រើ"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_channel_mode_dialog_title (9133545781346216071) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality (3619694372407843405) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (3181967377574368400) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_streaming_label (5347862512596240506) -->
+ <skip />
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"បង្ហាញជម្រើសសម្រាប់វិញ្ញាបនបត្របង្ហាញឥតខ្សែ"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"បង្កើនកម្រិតកំណត់ហេតុវ៉ាយហ្វាយបង្ហាញក្នុង SSID RSSI ក្នុងកម្មវិធីជ្រើសវ៉ាយហ្វាយ"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"ពេលបានបើក វ៉ាយហ្វាយនឹងកាន់តែបង្ខំក្នុងការបញ្ជូនការភ្ជាប់ទិន្នន័យទៅបណ្ដាញចល័ត នៅពេលសញ្ញាវ៉ាយហ្វាយយឺត"</string>
diff --git a/packages/SettingsLib/res/values-kn/arrays.xml b/packages/SettingsLib/res/values-kn/arrays.xml
index ae3e97d..d26f95a 100644
--- a/packages/SettingsLib/res/values-kn/arrays.xml
+++ b/packages/SettingsLib/res/values-kn/arrays.xml
@@ -58,66 +58,22 @@
<item msgid="3878793616631049349">"DRM ವಿಷಯಗಳಿಗೆ ಮಾತ್ರ HDCP ಪರೀಕ್ಷಿಸುವಿಕೆಯನ್ನು ಬಳಸು"</item>
<item msgid="45075631231212732">"HDCP ಪರಿಶೀಲನೆಯನ್ನು ಯಾವಾಗಲೂ ಬಳಸು"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="1852387125374225729">"ಡಿಫಾಲ್ಟ್"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="4260844283202960798">"aptX"</item>
- <item msgid="7279983368484312990">"aptX-HD"</item>
- <item msgid="2301339338870319651">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="9072025520360316957">"ಡಿಫಾಲ್ಟ್"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="1190434429082395888">"aptX"</item>
- <item msgid="649699003004233053">"aptX-HD"</item>
- <item msgid="508106435710925399">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
- <item msgid="7102940318360468759">"ಡಿಫಾಲ್ಟ್"</item>
- <item msgid="8895532488906185219">"44.1 kHz"</item>
- <item msgid="2909915718994807056">"48.0 kHz"</item>
- <item msgid="3347287377354164611">"88.2 kHz"</item>
- <item msgid="1234212100239985373">"96.0 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
- <item msgid="7224433008148687313">"ಡಿಫಾಲ್ಟ್"</item>
- <item msgid="4482862757811638365">"44.1 kHz"</item>
- <item msgid="354495328188724404">"48.0 kHz"</item>
- <item msgid="7329816882213695083">"88.2 kHz"</item>
- <item msgid="6967397666254430476">"96.0 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
- <item msgid="6694044160540313386">"ಡಿಫಾಲ್ಟ್"</item>
- <item msgid="5618929009984956469">"16 ಬಿಟ್ಸ್/ಮಾದರಿ"</item>
- <item msgid="3412640499234627248">"24 ಬಿಟ್ಸ್/ಮಾದರಿ"</item>
- <item msgid="121583001492929387">"32 ಬಿಟ್ಸ್/ಮಾದರಿ"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
- <item msgid="5091076677792306320">"ಡಿಫಾಲ್ಟ್"</item>
- <item msgid="4726688794884191540">"16 ಬಿಟ್ಸ್/ಮಾದರಿ"</item>
- <item msgid="305344756485516870">"24 ಬಿಟ್ಸ್/ಮಾದರಿ"</item>
- <item msgid="244568657919675099">"32 ಬಿಟ್ಸ್/ಮಾದರಿ"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
- <item msgid="13423709606339855">"ಡಿಫಾಲ್ಟ್"</item>
- <item msgid="4106832974775067314">"ಮೊನೊ"</item>
- <item msgid="5571632958424639155">"ಸ್ಟೀರಿಯೊ"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
- <item msgid="8128478683963250130">"ಡಿಫಾಲ್ಟ್"</item>
- <item msgid="8900559293912978337">"ಮೊನೊ"</item>
- <item msgid="8883739882299884241">"ಸ್ಟೀರಿಯೊ"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
- <item msgid="2944889121850394020">"ಧ್ವನಿಯ ಗುಣಮಟ್ಟಕ್ಕೆ ಆದ್ಯತೆ ನೀಡಲಾಗಿದೆ (990kbps/909kbps)"</item>
- <item msgid="138837449700903545">"ಪ್ರಮಾಣಿತ (660kbps/606kbps)"</item>
- <item msgid="4777177307869441982">"ಸಂಪರ್ಕಕ್ಕೆ ಆದ್ಯತೆ ನೀಡಲಾಗಿದೆ (330kbps/303kbps)"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
- <item msgid="172302906231378902">"ಧ್ವನಿಯ ಗುಣಮಟ್ಟಕ್ಕೆ ಆದ್ಯತೆ ನೀಡಲಾಗಿದೆ (990kbps/909kbps)"</item>
- <item msgid="9091111147684472529">"ಪ್ರಮಾಣಿತ (660kbps/606kbps)"</item>
- <item msgid="3367904477834831032">"ಸಂಪರ್ಕಕ್ಕೆ ಆದ್ಯತೆ ನೀಡಲಾಗಿದೆ (330kbps/303kbps)"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:0 (7065842274271279580) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:3 (500463122137421129) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:0 (5062108632402595000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3093550793512117000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_titles:0 (3093023430402746802) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_summaries:0 (3214516120190965356) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_titles:0 (2684127272582591429) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_summaries:0 (1081159789834584363) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_titles:0 (5226878858503393706) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_summaries:0 (4118561796005528173) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:0 (3411577996960199959) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:1 (2921767058740704969) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:2 (3682554248829489641) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:0 (7668834469173465015) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:1 (4327143584633311908) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:2 (6155648878105378550) -->
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"ಆಫ್"</item>
<item msgid="1593289376502312923">"64K"</item>
diff --git a/packages/SettingsLib/res/values-kn/strings.xml b/packages/SettingsLib/res/values-kn/strings.xml
index 5ac99d3..e43883e 100644
--- a/packages/SettingsLib/res/values-kn/strings.xml
+++ b/packages/SettingsLib/res/values-kn/strings.xml
@@ -171,15 +171,23 @@
<string name="mobile_data_always_on" msgid="7745605759775320362">"ಸೆಲ್ಯುಲರ್ ಡೇಟಾ ಯಾವಾಗಲೂ ಸಕ್ರಿಯ"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"ಸಂಪೂರ್ಣ ವಾಲ್ಯೂಮ್ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿ"</string>
<string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"ಬ್ಲೂಟೂತ್ ಆಡಿಯೋ ಕೋಡೆಕ್"</string>
- <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"ಪ್ರಾಶಸ್ತ್ಯದ ಬ್ಲೂಟೂತ್ A2DP ಕೋಡೆಕ್ ಅನ್ನು ಆಯ್ಕೆ ಮಾಡಿ"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_type_dialog_title (4558347981670553665) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"ಬ್ಲೂಟೂತ್ ಆಡಿಯೋ ಮಾದರಿ ದರ"</string>
- <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"ಪ್ರಾಶಸ್ತ್ಯದ ಬ್ಲೂಟೂಥ್ A2DP ಕೋಡೆಕ್ ಮಾದರಿ ದರವನ್ನು ಆಯ್ಕೆ ಮಾಡಿ"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_sample_rate_dialog_title (5628790207448471613) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"ಬ್ಲೂಟೂತ್ ಆಡಿಯೊ ಬಿಟ್ಸ್ನ ಪ್ರತಿ ಮಾದರಿ"</string>
- <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"ಪ್ರಾಶಸ್ತ್ಯದ ಬ್ಲೂಟೂತ್ A2DP ಕೋಡೆಕ್ ಬಿಟ್ಸ್ನ ಪ್ರತಿ ಮಾದರಿಯನ್ನು ಆಯ್ಕೆಮಾಡಿ"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_bits_per_sample_dialog_title (4546131401358681321) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"ಬ್ಲೂಟೂತ್ ಆಡಿಯೋ ಚಾನೆಲ್ ಮೋಡ್"</string>
- <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"ಪ್ರಾಶಸ್ತ್ಯದ ಬ್ಲೂಟೂತ್ A2DP ಕೋಡೆಕ್ ಚಾನಲ್ ಮೋಡ್ ಅನ್ನು ಆಯ್ಕೆಮಾಡಿ"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"ಬ್ಲೂಟೂತ್ ಆಡಿಯೊ LDAC ಪ್ಲೇಬ್ಯಾಕ್ ಗುಣಮಟ್ಟ"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"ಪ್ರಾಶಸ್ತ್ಯದ ಬ್ಲೂಟೂತ್ A2DP ಕೋಡೆಕ್ LDAC ಪ್ಲೇಬ್ಯಾಕ್ ಗುಣಮಟ್ಟವನ್ನು ಆಯ್ಕೆಮಾಡಿ"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_channel_mode_dialog_title (9133545781346216071) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality (3619694372407843405) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (3181967377574368400) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_streaming_label (5347862512596240506) -->
+ <skip />
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"ವೈರ್ಲೆಸ್ ಪ್ರದರ್ಶನ ಪ್ರಮಾಣೀಕರಣಕ್ಕಾಗಿ ಆಯ್ಕೆಗಳನ್ನು ತೋರಿಸು"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Wi‑Fi ಲಾಗಿಂಗ್ ಮಟ್ಟನ್ನು ಹೆಚ್ಚಿಸಿ, Wi‑Fi ಆಯ್ಕೆಯಲ್ಲಿ ಪ್ರತಿಯೊಂದು SSID RSSI ತೋರಿಸಿ"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"ಸಕ್ರಿಯಗೊಂಡರೆ, Wi‑Fi ಸಿಗ್ನಲ್ ದುರ್ಬಲವಾಗಿದ್ದರೂ ಕೂಡ, ಸೆಲ್ಯುಲರ್ಗೆ ಡೇಟಾ ಸಂಪರ್ಕವನ್ನು ಹಸ್ತಾಂತರಿಸುವಲ್ಲಿ Wi‑Fi ಹೆಚ್ಚು ಆಕ್ರಮಣಕಾರಿಯಾಗಿರುತ್ತದೆ"</string>
diff --git a/packages/SettingsLib/res/values-ko/arrays.xml b/packages/SettingsLib/res/values-ko/arrays.xml
index f709e88..3c8424a 100644
--- a/packages/SettingsLib/res/values-ko/arrays.xml
+++ b/packages/SettingsLib/res/values-ko/arrays.xml
@@ -58,66 +58,22 @@
<item msgid="3878793616631049349">"DRM 콘텐츠에 대해서만 HDCP 확인 사용"</item>
<item msgid="45075631231212732">"항상 HDCP 확인 사용"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="1852387125374225729">"기본값"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="4260844283202960798">"aptX"</item>
- <item msgid="7279983368484312990">"aptX-HD"</item>
- <item msgid="2301339338870319651">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="9072025520360316957">"기본값"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="1190434429082395888">"aptX"</item>
- <item msgid="649699003004233053">"aptX-HD"</item>
- <item msgid="508106435710925399">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
- <item msgid="7102940318360468759">"기본값"</item>
- <item msgid="8895532488906185219">"44.1kHz"</item>
- <item msgid="2909915718994807056">"48.0kHz"</item>
- <item msgid="3347287377354164611">"88.2kHz"</item>
- <item msgid="1234212100239985373">"96.0kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
- <item msgid="7224433008148687313">"기본값"</item>
- <item msgid="4482862757811638365">"44.1kHz"</item>
- <item msgid="354495328188724404">"48.0kHz"</item>
- <item msgid="7329816882213695083">"88.2kHz"</item>
- <item msgid="6967397666254430476">"96.0kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
- <item msgid="6694044160540313386">"기본값"</item>
- <item msgid="5618929009984956469">"16비트/샘플"</item>
- <item msgid="3412640499234627248">"24비트/샘플"</item>
- <item msgid="121583001492929387">"32비트/샘플"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
- <item msgid="5091076677792306320">"기본값"</item>
- <item msgid="4726688794884191540">"16비트/샘플"</item>
- <item msgid="305344756485516870">"24비트/샘플"</item>
- <item msgid="244568657919675099">"32비트/샘플"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
- <item msgid="13423709606339855">"기본값"</item>
- <item msgid="4106832974775067314">"모노"</item>
- <item msgid="5571632958424639155">"스테레오"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
- <item msgid="8128478683963250130">"기본값"</item>
- <item msgid="8900559293912978337">"모노"</item>
- <item msgid="8883739882299884241">"스테레오"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
- <item msgid="2944889121850394020">"음질 우선(990kbps/909kbps)"</item>
- <item msgid="138837449700903545">"표준(660kbps/606kbps)"</item>
- <item msgid="4777177307869441982">"연결 우선(330kbps/303kbps)"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
- <item msgid="172302906231378902">"음질 우선(990kbps/909kbps)"</item>
- <item msgid="9091111147684472529">"표준(660kbps/606kbps)"</item>
- <item msgid="3367904477834831032">"연결 우선(330kbps/303kbps)"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:0 (7065842274271279580) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:3 (500463122137421129) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:0 (5062108632402595000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3093550793512117000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_titles:0 (3093023430402746802) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_summaries:0 (3214516120190965356) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_titles:0 (2684127272582591429) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_summaries:0 (1081159789834584363) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_titles:0 (5226878858503393706) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_summaries:0 (4118561796005528173) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:0 (3411577996960199959) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:1 (2921767058740704969) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:2 (3682554248829489641) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:0 (7668834469173465015) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:1 (4327143584633311908) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:2 (6155648878105378550) -->
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"사용 안함"</item>
<item msgid="1593289376502312923">"64K"</item>
diff --git a/packages/SettingsLib/res/values-ko/strings.xml b/packages/SettingsLib/res/values-ko/strings.xml
index a21fb25..0a8c727 100644
--- a/packages/SettingsLib/res/values-ko/strings.xml
+++ b/packages/SettingsLib/res/values-ko/strings.xml
@@ -171,15 +171,23 @@
<string name="mobile_data_always_on" msgid="7745605759775320362">"모바일 데이터 항상 활성화"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"절대 볼륨 사용 안함"</string>
<string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"블루투스 오디오 코덱"</string>
- <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"기본 블루투스 A2DP 코덱 선택"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_type_dialog_title (4558347981670553665) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"블루투스 오디오 샘플링 비율"</string>
- <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"기본 블루투스 A2DP 코덱 샘플링 비율 선택"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_sample_rate_dialog_title (5628790207448471613) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"블루투스 오디오 샘플당 비트"</string>
- <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"기본 블루투스 A2DP 코덱 샘플당 비트 선택"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_bits_per_sample_dialog_title (4546131401358681321) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"블루투스 오디오 채널 모드"</string>
- <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"기본 블루투스 A2DP 코덱 채널 모드 선택"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"블루투스 오디오 LDAC 재생 품질"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"기본 블루투스 A2DP 코덱 LDAC 재생 품질 선택"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_channel_mode_dialog_title (9133545781346216071) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality (3619694372407843405) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (3181967377574368400) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_streaming_label (5347862512596240506) -->
+ <skip />
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"무선 디스플레이 인증서 옵션 표시"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Wi‑Fi 로깅 수준을 높이고, Wi‑Fi 선택도구에서 SSID RSSI당 값을 표시합니다."</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"사용 설정하면 Wi-Fi 신호가 약할 때 데이터 연결을 Wi-Fi에서 데이터 네트워크로 더욱 적극적으로 핸드오버합니다."</string>
diff --git a/packages/SettingsLib/res/values-ky/arrays.xml b/packages/SettingsLib/res/values-ky/arrays.xml
index 84d9002..724d0c7 100644
--- a/packages/SettingsLib/res/values-ky/arrays.xml
+++ b/packages/SettingsLib/res/values-ky/arrays.xml
@@ -58,66 +58,22 @@
<item msgid="3878793616631049349">"HDCP текшерүү DRM мазмунуна гана колдонулсун"</item>
<item msgid="45075631231212732">"Ар дайым HDCP текшерүү колдонулсун"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="1852387125374225729">"Демейки"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="4260844283202960798">"aptX"</item>
- <item msgid="7279983368484312990">"aptX-HD"</item>
- <item msgid="2301339338870319651">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="9072025520360316957">"Демейки"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="1190434429082395888">"aptX"</item>
- <item msgid="649699003004233053">"aptX-HD"</item>
- <item msgid="508106435710925399">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
- <item msgid="7102940318360468759">"Демейки"</item>
- <item msgid="8895532488906185219">"44,1 кГц"</item>
- <item msgid="2909915718994807056">"48,0 кГц"</item>
- <item msgid="3347287377354164611">"88,2 кГц"</item>
- <item msgid="1234212100239985373">"96,0 кГц"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
- <item msgid="7224433008148687313">"Демейки"</item>
- <item msgid="4482862757811638365">"44,1 кГц"</item>
- <item msgid="354495328188724404">"48,0 кГц"</item>
- <item msgid="7329816882213695083">"88,2 кГц"</item>
- <item msgid="6967397666254430476">"96,0 кГц"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
- <item msgid="6694044160540313386">"Демейки"</item>
- <item msgid="5618929009984956469">"16 бит/үлгү"</item>
- <item msgid="3412640499234627248">"24 бит/үлгү"</item>
- <item msgid="121583001492929387">"32 бит/үлгү"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
- <item msgid="5091076677792306320">"Демейки"</item>
- <item msgid="4726688794884191540">"16 бит/үлгү"</item>
- <item msgid="305344756485516870">"24 бит/үлгү"</item>
- <item msgid="244568657919675099">"32 бит/үлгү"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
- <item msgid="13423709606339855">"Демейки"</item>
- <item msgid="4106832974775067314">"Моно"</item>
- <item msgid="5571632958424639155">"Стерео"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
- <item msgid="8128478683963250130">"Демейки"</item>
- <item msgid="8900559293912978337">"Моно"</item>
- <item msgid="8883739882299884241">"Стерео"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
- <item msgid="2944889121850394020">"Тандалган добуш сапаты (990Кб/сек./909Кб/сек.)"</item>
- <item msgid="138837449700903545">"Стандарт (660Кб/сек./606Кб/сек.)"</item>
- <item msgid="4777177307869441982">"Тандалган туташуу (330Кб/сек./303Кб/сек.)"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
- <item msgid="172302906231378902">"Тандалган добуш сапаты (990Кб/сек./909Кб/сек.)"</item>
- <item msgid="9091111147684472529">"Стандарт (660Кб/сек./606Кб/сек.)"</item>
- <item msgid="3367904477834831032">"Тандалган туташуу (330Кб/сек./303Кб/сек.)"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:0 (7065842274271279580) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:3 (500463122137421129) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:0 (5062108632402595000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3093550793512117000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_titles:0 (3093023430402746802) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_summaries:0 (3214516120190965356) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_titles:0 (2684127272582591429) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_summaries:0 (1081159789834584363) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_titles:0 (5226878858503393706) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_summaries:0 (4118561796005528173) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:0 (3411577996960199959) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:1 (2921767058740704969) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:2 (3682554248829489641) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:0 (7668834469173465015) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:1 (4327143584633311908) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:2 (6155648878105378550) -->
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"Өчүк"</item>
<item msgid="1593289376502312923">"64K"</item>
diff --git a/packages/SettingsLib/res/values-ky/strings.xml b/packages/SettingsLib/res/values-ky/strings.xml
index d1320da..1a8aee3 100644
--- a/packages/SettingsLib/res/values-ky/strings.xml
+++ b/packages/SettingsLib/res/values-ky/strings.xml
@@ -171,15 +171,23 @@
<string name="mobile_data_always_on" msgid="7745605759775320362">"Уюлдук дайындар ар дайым активдүү"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Үндүн абсолюттук деңгээли өчүрүлсүн"</string>
<string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Bluetooth аудио кодек"</string>
- <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"Керектүү Bluetooth A2DP кодекти тандаңыз"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_type_dialog_title (4558347981670553665) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Bluetooth аудио үлгүсүнүн ылдамдыгы"</string>
- <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"Bluetooth A2DP кодек үлгүсүнүн керектүү ылдамдыгын тандаңыз"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_sample_rate_dialog_title (5628790207448471613) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Бир үлгүдөгү Bluetooth аудио биттери"</string>
- <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"Бир үлгү үчүн керектүү Bluetooth A2DP кодек биттерин тандаңыз"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_bits_per_sample_dialog_title (4546131401358681321) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Bluetooth аудио каналынын режими"</string>
- <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"Bluetooth A2DP кодек каналынын керектүү режимин тандаңыз"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"Bluetooth аудио LDAC ойнотуу сапаты"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"Bluetooth A2DP кодек үчүн керектүү LDAC ойнотуу сапатын тандаңыз"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_channel_mode_dialog_title (9133545781346216071) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality (3619694372407843405) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (3181967377574368400) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_streaming_label (5347862512596240506) -->
+ <skip />
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Зымсыз дисплейди сертификатто мүмкүнчүлүктөрүн көргөзүү"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Wi-Fi Кармагычта Wi‑Fi протокол деңгээлин жогорулатуу жана ар бир SSID RSSI үчүн көрсөтүү."</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"Иштетилгенде, Wi-Fi байланышы үзүл-кесил болуп жатканда, Wi-Fi дайындарды уюктук операторго өжөрлүк менен өткөрөт."</string>
diff --git a/packages/SettingsLib/res/values-lo/arrays.xml b/packages/SettingsLib/res/values-lo/arrays.xml
index 45bb579..4b14eeb 100644
--- a/packages/SettingsLib/res/values-lo/arrays.xml
+++ b/packages/SettingsLib/res/values-lo/arrays.xml
@@ -58,66 +58,22 @@
<item msgid="3878793616631049349">"ໃຊ້ການກວດສອບ HDCP ສຳລັບເນື້ອຫາ DRM ເທົ່ານັ້ນ"</item>
<item msgid="45075631231212732">"ໃຊ້ການກວດສອບ HDCP ສະເໝີ"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="1852387125374225729">"ຄ່າເລີ່ມຕົ້ນ"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="4260844283202960798">"aptX"</item>
- <item msgid="7279983368484312990">"aptX-HD"</item>
- <item msgid="2301339338870319651">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="9072025520360316957">"ຄ່າເລີ່ມຕົ້ນ"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="1190434429082395888">"aptX"</item>
- <item msgid="649699003004233053">"aptX-HD"</item>
- <item msgid="508106435710925399">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
- <item msgid="7102940318360468759">"ຄ່າເລີ່ມຕົ້ນ"</item>
- <item msgid="8895532488906185219">"44.1 kHz"</item>
- <item msgid="2909915718994807056">"48.0 kHz"</item>
- <item msgid="3347287377354164611">"88.2 kHz"</item>
- <item msgid="1234212100239985373">"96.0 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
- <item msgid="7224433008148687313">"ຄ່າເລີ່ມຕົ້ນ"</item>
- <item msgid="4482862757811638365">"44.1 kHz"</item>
- <item msgid="354495328188724404">"48.0 kHz"</item>
- <item msgid="7329816882213695083">"88.2 kHz"</item>
- <item msgid="6967397666254430476">"96.0 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
- <item msgid="6694044160540313386">"ຄ່າເລີ່ມຕົ້ນ"</item>
- <item msgid="5618929009984956469">"16 bits/sample"</item>
- <item msgid="3412640499234627248">"24 bits/sample"</item>
- <item msgid="121583001492929387">"32 bits/sample"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
- <item msgid="5091076677792306320">"ຄ່າເລີ່ມຕົ້ນ"</item>
- <item msgid="4726688794884191540">"16 bits/sample"</item>
- <item msgid="305344756485516870">"24 bits/sample"</item>
- <item msgid="244568657919675099">"32 bits/sample"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
- <item msgid="13423709606339855">"ຄ່າເລີ່ມຕົ້ນ"</item>
- <item msgid="4106832974775067314">"ໂທນດຽວ"</item>
- <item msgid="5571632958424639155">"ສະເຕຣິໂອ"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
- <item msgid="8128478683963250130">"ຄ່າເລີ່ມຕົ້ນ"</item>
- <item msgid="8900559293912978337">"ໂທນດຽວ"</item>
- <item msgid="8883739882299884241">"ສະເຕຣິໂອ"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
- <item msgid="2944889121850394020">"Sound quality preferred (990kbps/909kbps)"</item>
- <item msgid="138837449700903545">"Standard (660kbps/606kbps)"</item>
- <item msgid="4777177307869441982">"Connection preferred (330kbps/303kbps)"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
- <item msgid="172302906231378902">"Sound quality preferred (990kbps/909kbps)"</item>
- <item msgid="9091111147684472529">"Standard (660kbps/606kbps)"</item>
- <item msgid="3367904477834831032">"Connection preferred (330kbps/303kbps)"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:0 (7065842274271279580) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:3 (500463122137421129) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:0 (5062108632402595000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3093550793512117000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_titles:0 (3093023430402746802) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_summaries:0 (3214516120190965356) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_titles:0 (2684127272582591429) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_summaries:0 (1081159789834584363) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_titles:0 (5226878858503393706) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_summaries:0 (4118561796005528173) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:0 (3411577996960199959) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:1 (2921767058740704969) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:2 (3682554248829489641) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:0 (7668834469173465015) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:1 (4327143584633311908) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:2 (6155648878105378550) -->
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"ປິດ"</item>
<item msgid="1593289376502312923">"64K"</item>
diff --git a/packages/SettingsLib/res/values-lo/strings.xml b/packages/SettingsLib/res/values-lo/strings.xml
index 639769a..569c0ce 100644
--- a/packages/SettingsLib/res/values-lo/strings.xml
+++ b/packages/SettingsLib/res/values-lo/strings.xml
@@ -171,15 +171,23 @@
<string name="mobile_data_always_on" msgid="7745605759775320362">"ຂໍ້ມູນມືຖືເປີດຢູ່ສະເໝີ"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"ປິດໃຊ້ລະດັບສຽງສົມບູນ"</string>
<string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Bluetooth Audio Codec"</string>
- <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"Select Preferred Bluetooth A2DP Codec"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_type_dialog_title (4558347981670553665) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Bluetooth Audio Sample Rate"</string>
- <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"Select Preferred Bluetooth A2DP Codec Sample Rate"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_sample_rate_dialog_title (5628790207448471613) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Bluetooth Audio Bits Per Sample"</string>
- <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"Select Preferred Bluetooth A2DP Codec Bits Per Sample"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_bits_per_sample_dialog_title (4546131401358681321) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Bluetooth Audio Channel Mode"</string>
- <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"Select Preferred Bluetooth A2DP Codec Channel Mode"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"Bluetooth Audio LDAC Playback Quality"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"Select Preferred Bluetooth A2DP Codec LDAC Playback Quality"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_channel_mode_dialog_title (9133545781346216071) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality (3619694372407843405) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (3181967377574368400) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_streaming_label (5347862512596240506) -->
+ <skip />
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"ສະແດງໂຕເລືອກສຳລັບການສະແດງການຮັບຮອງລະບົບໄຮ້ສາຍ"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"ເພີ່ມລະດັບການເກັບປະຫວັດ Wi‑Fi, ສະແດງຕໍ່ SSID RSSI ໃນ Wi‑Fi Picker"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"ເມື່ອເປີດນຳໃຊ້ແລ້ວ, ເຄືອຂ່າຍ Wi-Fi ຈະຖືກປ່ຽນໄປໃຊ້ເຄືອຂ່າຍໂທລະສັບແທນຫາກສັນຍານ Wi-Fi ອ່ອນ"</string>
diff --git a/packages/SettingsLib/res/values-lt/arrays.xml b/packages/SettingsLib/res/values-lt/arrays.xml
index b61b6d8..deed74f 100644
--- a/packages/SettingsLib/res/values-lt/arrays.xml
+++ b/packages/SettingsLib/res/values-lt/arrays.xml
@@ -58,66 +58,22 @@
<item msgid="3878793616631049349">"Taikyti HDCP tikrinimą tik DRM turiniui"</item>
<item msgid="45075631231212732">"Visada naudoti HDCP tikrinimą"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="1852387125374225729">"Numatytasis"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="4260844283202960798">"aptX"</item>
- <item msgid="7279983368484312990">"aptX-HD"</item>
- <item msgid="2301339338870319651">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="9072025520360316957">"Numatytasis"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="1190434429082395888">"aptX"</item>
- <item msgid="649699003004233053">"aptX-HD"</item>
- <item msgid="508106435710925399">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
- <item msgid="7102940318360468759">"Numatytasis"</item>
- <item msgid="8895532488906185219">"44,1 kHz"</item>
- <item msgid="2909915718994807056">"48,0 kHz"</item>
- <item msgid="3347287377354164611">"88,2 kHz"</item>
- <item msgid="1234212100239985373">"96,0 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
- <item msgid="7224433008148687313">"Numatytasis"</item>
- <item msgid="4482862757811638365">"44,1 kHz"</item>
- <item msgid="354495328188724404">"48,0 kHz"</item>
- <item msgid="7329816882213695083">"88,2 kHz"</item>
- <item msgid="6967397666254430476">"96,0 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
- <item msgid="6694044160540313386">"Numatytasis"</item>
- <item msgid="5618929009984956469">"16 bitų pavyzdyje"</item>
- <item msgid="3412640499234627248">"24 bitai pavyzdyje"</item>
- <item msgid="121583001492929387">"32 bitai pavyzdyje"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
- <item msgid="5091076677792306320">"Numatytasis"</item>
- <item msgid="4726688794884191540">"16 bitų pavyzdyje"</item>
- <item msgid="305344756485516870">"24 bitai pavyzdyje"</item>
- <item msgid="244568657919675099">"32 bitai pavyzdyje"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
- <item msgid="13423709606339855">"Numatytasis"</item>
- <item msgid="4106832974775067314">"Monofoninis garsas"</item>
- <item msgid="5571632958424639155">"Stereofoninis garsas"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
- <item msgid="8128478683963250130">"Numatytasis"</item>
- <item msgid="8900559293912978337">"Monofoninis garsas"</item>
- <item msgid="8883739882299884241">"Stereofoninis garsas"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
- <item msgid="2944889121850394020">"Pageid. garso kok. (990 KB/s / 909 KB/s)"</item>
- <item msgid="138837449700903545">"Įprasta (660 KB/s / 606 KB/s)"</item>
- <item msgid="4777177307869441982">"Pageidautin. ryšys (330 KB/s / 303 KB/s)"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
- <item msgid="172302906231378902">"Pageid. garso kok. (990 KB/s / 909 KB/s)"</item>
- <item msgid="9091111147684472529">"Įprasta (660 KB/s / 606 KB/s)"</item>
- <item msgid="3367904477834831032">"Pageidautin. ryšys (330 KB/s / 303 KB/s)"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:0 (7065842274271279580) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:3 (500463122137421129) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:0 (5062108632402595000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3093550793512117000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_titles:0 (3093023430402746802) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_summaries:0 (3214516120190965356) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_titles:0 (2684127272582591429) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_summaries:0 (1081159789834584363) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_titles:0 (5226878858503393706) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_summaries:0 (4118561796005528173) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:0 (3411577996960199959) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:1 (2921767058740704969) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:2 (3682554248829489641) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:0 (7668834469173465015) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:1 (4327143584633311908) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:2 (6155648878105378550) -->
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"Išjungta"</item>
<item msgid="1593289376502312923">"64 KB"</item>
diff --git a/packages/SettingsLib/res/values-lt/strings.xml b/packages/SettingsLib/res/values-lt/strings.xml
index 4616b86..28329cc 100644
--- a/packages/SettingsLib/res/values-lt/strings.xml
+++ b/packages/SettingsLib/res/values-lt/strings.xml
@@ -171,15 +171,23 @@
<string name="mobile_data_always_on" msgid="7745605759775320362">"Korinio ryšio duomenys visada aktyvūs"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Išjungti didžiausią garsą"</string>
<string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"„Bluetooth“ garso kodekas"</string>
- <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"Pasirinkite pageidaujamą „Bluetooth“ A2DP kodeką"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_type_dialog_title (4558347981670553665) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"„Bluetooth“ garso pavyzdžio dažnis"</string>
- <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"Pasirinkite pageidaujamą „Bluetooth“ A2DP kodeko pavyzdžio dažnį"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_sample_rate_dialog_title (5628790207448471613) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"„Bluetooth“ garso įrašo bitų skaičius pavyzdyje"</string>
- <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"Pasirinkite pageidaujamą „Bluetooth“ A2DP kodeko bitų skaičių pavyzdyje"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_bits_per_sample_dialog_title (4546131401358681321) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"„Bluetooth“ garso kanalo režimas"</string>
- <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"Pasirinkite pageidaujamą „Bluetooth“ A2DP kodeko kanalo režimą"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"„Bluetooth“ garso LDAC atkūrimo kokybė"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"Pasirinkite pageidaujamą „Bluetooth“ A2DP kodeko LDAC atkūrimo kokybę"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_channel_mode_dialog_title (9133545781346216071) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality (3619694372407843405) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (3181967377574368400) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_streaming_label (5347862512596240506) -->
+ <skip />
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Rodyti belaidžio rodymo sertifikavimo parinktis"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Padidinti „Wi‑Fi“ įrašymo į žurnalą lygį, rodyti SSID RSSI „Wi-Fi“ rinkiklyje"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"Jei įgalinta ši parinktis, „Wi‑Fi“ agresyviau perduos duomenų ryšį į mobiliojo ryšio tinklą, kai „Wi‑Fi“ signalas bus silpnas"</string>
diff --git a/packages/SettingsLib/res/values-lv/arrays.xml b/packages/SettingsLib/res/values-lv/arrays.xml
index 1d8a501..cf8b2c9 100644
--- a/packages/SettingsLib/res/values-lv/arrays.xml
+++ b/packages/SettingsLib/res/values-lv/arrays.xml
@@ -58,66 +58,22 @@
<item msgid="3878793616631049349">"Izmantot HDCP pārbaudi tikai DRM saturam"</item>
<item msgid="45075631231212732">"Vienmēr izmantot HDCP pārbaudi"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="1852387125374225729">"Noklusējums"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="4260844283202960798">"aptX"</item>
- <item msgid="7279983368484312990">"aptX-HD"</item>
- <item msgid="2301339338870319651">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="9072025520360316957">"Noklusējums"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="1190434429082395888">"aptX"</item>
- <item msgid="649699003004233053">"aptX-HD"</item>
- <item msgid="508106435710925399">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
- <item msgid="7102940318360468759">"Noklusējums"</item>
- <item msgid="8895532488906185219">"44,1 kHz"</item>
- <item msgid="2909915718994807056">"48,0 kHz"</item>
- <item msgid="3347287377354164611">"88,2 kHz"</item>
- <item msgid="1234212100239985373">"96,0 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
- <item msgid="7224433008148687313">"Noklusējums"</item>
- <item msgid="4482862757811638365">"44,1 kHz"</item>
- <item msgid="354495328188724404">"48,0 kHz"</item>
- <item msgid="7329816882213695083">"88,2 kHz"</item>
- <item msgid="6967397666254430476">"96,0 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
- <item msgid="6694044160540313386">"Noklusējums"</item>
- <item msgid="5618929009984956469">"16 biti iztvērumā"</item>
- <item msgid="3412640499234627248">"24 biti iztvērumā"</item>
- <item msgid="121583001492929387">"32 biti iztvērumā"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
- <item msgid="5091076677792306320">"Noklusējums"</item>
- <item msgid="4726688794884191540">"16 biti iztvērumā"</item>
- <item msgid="305344756485516870">"24 biti iztvērumā"</item>
- <item msgid="244568657919675099">"32 biti iztvērumā"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
- <item msgid="13423709606339855">"Noklusējums"</item>
- <item msgid="4106832974775067314">"Mono"</item>
- <item msgid="5571632958424639155">"Stereo"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
- <item msgid="8128478683963250130">"Noklusējums"</item>
- <item msgid="8900559293912978337">"Mono"</item>
- <item msgid="8883739882299884241">"Stereo"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
- <item msgid="2944889121850394020">"Vēlamā skaņas kvalitāte (990/909 Kb/s)"</item>
- <item msgid="138837449700903545">"Standarta (660/606 Kb/s)"</item>
- <item msgid="4777177307869441982">"Vēlamais savienojums (330/303 Kb/s)"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
- <item msgid="172302906231378902">"Vēlamā skaņas kvalitāte (990/909 Kb/s)"</item>
- <item msgid="9091111147684472529">"Standarta (660/606 Kb/s)"</item>
- <item msgid="3367904477834831032">"Vēlamais savienojums (330/303 Kb/s)"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:0 (7065842274271279580) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:3 (500463122137421129) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:0 (5062108632402595000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3093550793512117000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_titles:0 (3093023430402746802) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_summaries:0 (3214516120190965356) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_titles:0 (2684127272582591429) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_summaries:0 (1081159789834584363) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_titles:0 (5226878858503393706) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_summaries:0 (4118561796005528173) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:0 (3411577996960199959) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:1 (2921767058740704969) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:2 (3682554248829489641) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:0 (7668834469173465015) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:1 (4327143584633311908) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:2 (6155648878105378550) -->
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"Izslēgts"</item>
<item msgid="1593289376502312923">"64 KB"</item>
diff --git a/packages/SettingsLib/res/values-lv/strings.xml b/packages/SettingsLib/res/values-lv/strings.xml
index dd17509..b64216a 100644
--- a/packages/SettingsLib/res/values-lv/strings.xml
+++ b/packages/SettingsLib/res/values-lv/strings.xml
@@ -171,15 +171,23 @@
<string name="mobile_data_always_on" msgid="7745605759775320362">"Vienmēr aktīvs mobilo datu savienojums"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Atspējot absolūto skaļumu"</string>
<string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Bluetooth audio kodeks"</string>
- <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"Atlasīt vēlamo Bluetooth A2DP kodeku"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_type_dialog_title (4558347981670553665) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Bluetooth audio iztveršanas ātrums"</string>
- <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"Atlasīt vēlamo Bluetooth A2DP kodeka iztveršanas ātrumu"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_sample_rate_dialog_title (5628790207448471613) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Bluetooth audio bitu skaits iztvērumā"</string>
- <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"Atlasīt vēlamo Bluetooth A2DP kodeka bitu skaitu iztvērumā"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_bits_per_sample_dialog_title (4546131401358681321) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Bluetooth audio kanāla režīms"</string>
- <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"Atlasīt vēlamo Bluetooth A2DP kodeka kanāla režīmu"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"Bluetooth audio LDAC atskaņošanas kvalitāte"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"Atlasīt vēlamo Bluetooth A2DP kodeka LDAC atskaņošanas kvalitāti"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_channel_mode_dialog_title (9133545781346216071) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality (3619694372407843405) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (3181967377574368400) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_streaming_label (5347862512596240506) -->
+ <skip />
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Rādīt bezvadu attēlošanas sertifikācijas iespējas"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Palieliniet Wi‑Fi reģistrēšanas līmeni; rādīt katram SSID RSSI Wi‑Fi atlasītājā."</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"Ja opcija ir iespējota un Wi‑Fi signāls ir vājš, datu savienojuma pāreja no Wi-Fi uz mobilo tīklu tiks veikta agresīvāk."</string>
diff --git a/packages/SettingsLib/res/values-mk/arrays.xml b/packages/SettingsLib/res/values-mk/arrays.xml
index 55e60a7..72124f7 100644
--- a/packages/SettingsLib/res/values-mk/arrays.xml
+++ b/packages/SettingsLib/res/values-mk/arrays.xml
@@ -58,66 +58,22 @@
<item msgid="3878793616631049349">"Користи ХДЦП проверка само за ДРМ содржина"</item>
<item msgid="45075631231212732">"Секогаш користи ХДЦП проверка"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="1852387125374225729">"Стандардно"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="4260844283202960798">"aptX"</item>
- <item msgid="7279983368484312990">"aptX-HD"</item>
- <item msgid="2301339338870319651">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="9072025520360316957">"Стандардно"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="1190434429082395888">"aptX"</item>
- <item msgid="649699003004233053">"aptX-HD"</item>
- <item msgid="508106435710925399">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
- <item msgid="7102940318360468759">"Стандардно"</item>
- <item msgid="8895532488906185219">"44,1 kHz"</item>
- <item msgid="2909915718994807056">"48,0 kHz"</item>
- <item msgid="3347287377354164611">"88,2 kHz"</item>
- <item msgid="1234212100239985373">"96,0 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
- <item msgid="7224433008148687313">"Стандардно"</item>
- <item msgid="4482862757811638365">"44,1 kHz"</item>
- <item msgid="354495328188724404">"48,0 kHz"</item>
- <item msgid="7329816882213695083">"88,2 kHz"</item>
- <item msgid="6967397666254430476">"96,0 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
- <item msgid="6694044160540313386">"Стандардно"</item>
- <item msgid="5618929009984956469">"16 бита/семпл"</item>
- <item msgid="3412640499234627248">"24 бита/семпл"</item>
- <item msgid="121583001492929387">"32 бита/семпл"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
- <item msgid="5091076677792306320">"Стандардно"</item>
- <item msgid="4726688794884191540">"16 бита/семпл"</item>
- <item msgid="305344756485516870">"24 бита/семпл"</item>
- <item msgid="244568657919675099">"32 бита/семпл"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
- <item msgid="13423709606339855">"Стандардно"</item>
- <item msgid="4106832974775067314">"Моно"</item>
- <item msgid="5571632958424639155">"Стерео"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
- <item msgid="8128478683963250130">"Стандардно"</item>
- <item msgid="8900559293912978337">"Моно"</item>
- <item msgid="8883739882299884241">"Стерео"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
- <item msgid="2944889121850394020">"Претпочитан квалитет (990kbps/909kbps)"</item>
- <item msgid="138837449700903545">"Стандардно (660kbps/606kbps)"</item>
- <item msgid="4777177307869441982">"Претпочитана врска (330kbps/303kbps)"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
- <item msgid="172302906231378902">"Претпочитан квалитет (990kbps/909kbps)"</item>
- <item msgid="9091111147684472529">"Стандардно (660kbps/606kbps)"</item>
- <item msgid="3367904477834831032">"Претпочитана врска (330kbps/303kbps)"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:0 (7065842274271279580) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:3 (500463122137421129) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:0 (5062108632402595000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3093550793512117000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_titles:0 (3093023430402746802) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_summaries:0 (3214516120190965356) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_titles:0 (2684127272582591429) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_summaries:0 (1081159789834584363) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_titles:0 (5226878858503393706) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_summaries:0 (4118561796005528173) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:0 (3411577996960199959) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:1 (2921767058740704969) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:2 (3682554248829489641) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:0 (7668834469173465015) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:1 (4327143584633311908) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:2 (6155648878105378550) -->
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"Исклучено"</item>
<item msgid="1593289376502312923">"64.000"</item>
diff --git a/packages/SettingsLib/res/values-mk/strings.xml b/packages/SettingsLib/res/values-mk/strings.xml
index e248804..df106ed 100644
--- a/packages/SettingsLib/res/values-mk/strings.xml
+++ b/packages/SettingsLib/res/values-mk/strings.xml
@@ -171,15 +171,23 @@
<string name="mobile_data_always_on" msgid="7745605759775320362">"Мобилниот интернет е секогаш активен"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Оневозможете апсолутна јачина на звук"</string>
<string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Кодек за аудио преку Bluetooth"</string>
- <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"Изберете претпочитан A2DP кодек преку Bluetooth"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_type_dialog_title (4558347981670553665) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Стапка на семпл преку Bluetooth"</string>
- <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"Изберете претпочитана стапка на семпл за A2DP кодекот преку Bluetooth"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_sample_rate_dialog_title (5628790207448471613) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Аудио бит-по-семпл преку Bluetooth"</string>
- <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"Изберете претпочитан бит-по-семпл за A2DP кодекот преку Bluetooth"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_bits_per_sample_dialog_title (4546131401358681321) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Режим на канал за аудио преку Bluetooth"</string>
- <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"Изберете претпочитан режим на канал за кодек за A2DP преку Bluetooth"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"Квалитет на LDAC-аудио репродукција преку Bluetooth"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"Изберете претпочитан квалитет на LDAC-репродукција на A2DP кодекот преку Bluetooth"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_channel_mode_dialog_title (9133545781346216071) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality (3619694372407843405) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (3181967377574368400) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_streaming_label (5347862512596240506) -->
+ <skip />
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Покажи ги опциите за безжичен приказ на сертификат"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Зголеми Wi‑Fi ниво на пријавување, прикажи по SSID RSSI во Wi‑Fi бирач"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"Кога е вклучено, Wi-Fi ќе биде поагресивно при предавање на поврзувањето со податоци на мобилната мрежа при слаб сигнал на Wi-Fi."</string>
diff --git a/packages/SettingsLib/res/values-ml/arrays.xml b/packages/SettingsLib/res/values-ml/arrays.xml
index 57755ed..38ba63a 100644
--- a/packages/SettingsLib/res/values-ml/arrays.xml
+++ b/packages/SettingsLib/res/values-ml/arrays.xml
@@ -58,66 +58,22 @@
<item msgid="3878793616631049349">"DRM ഉള്ളടക്കത്തിനുമാത്രമായി HDCP പരിശോധന ഉപയോഗിക്കുക"</item>
<item msgid="45075631231212732">"എല്ലായ്പ്പോഴും HDCP പരിശോധന ഉപയോഗിക്കുക"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="1852387125374225729">"ഡിഫോൾട്ട്"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="4260844283202960798">"aptX"</item>
- <item msgid="7279983368484312990">"aptX-HD"</item>
- <item msgid="2301339338870319651">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="9072025520360316957">"ഡിഫോൾട്ട്"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="1190434429082395888">"aptX"</item>
- <item msgid="649699003004233053">"aptX-HD"</item>
- <item msgid="508106435710925399">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
- <item msgid="7102940318360468759">"ഡിഫോൾട്ട്"</item>
- <item msgid="8895532488906185219">"44.1 kHz"</item>
- <item msgid="2909915718994807056">"48.0 kHz"</item>
- <item msgid="3347287377354164611">"88.2 kHz"</item>
- <item msgid="1234212100239985373">"96.0 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
- <item msgid="7224433008148687313">"ഡിഫോൾട്ട്"</item>
- <item msgid="4482862757811638365">"44.1 kHz"</item>
- <item msgid="354495328188724404">"48.0 kHz"</item>
- <item msgid="7329816882213695083">"88.2 kHz"</item>
- <item msgid="6967397666254430476">"96.0 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
- <item msgid="6694044160540313386">"ഡിഫോൾട്ട്"</item>
- <item msgid="5618929009984956469">"16 ബിറ്റ്/സാമ്പിൾ"</item>
- <item msgid="3412640499234627248">"24 ബിറ്റ്/സാമ്പിൾ"</item>
- <item msgid="121583001492929387">"32 ബിറ്റ്/സാമ്പിൾ"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
- <item msgid="5091076677792306320">"ഡിഫോൾട്ട്"</item>
- <item msgid="4726688794884191540">"16 ബിറ്റ്/സാമ്പിൾ"</item>
- <item msgid="305344756485516870">"16 ബിറ്റ്/സാമ്പിൾ"</item>
- <item msgid="244568657919675099">"32 ബിറ്റ്/സാമ്പിൾ"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
- <item msgid="13423709606339855">"ഡിഫോൾട്ട്"</item>
- <item msgid="4106832974775067314">"മോണോ"</item>
- <item msgid="5571632958424639155">"സ്റ്റീരിയോ"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
- <item msgid="8128478683963250130">"ഡിഫോൾട്ട്"</item>
- <item msgid="8900559293912978337">"മോണോ"</item>
- <item msgid="8883739882299884241">"സ്റ്റീരിയോ"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
- <item msgid="2944889121850394020">"നിർദ്ദേശിക്കുന്ന ശബ്ദ നിലവാരം (990kbps/909kbps)"</item>
- <item msgid="138837449700903545">"അടിസ്ഥാനം (660kbps/606kbps)"</item>
- <item msgid="4777177307869441982">"നിർദ്ദേശിക്കുന്ന കണക്ഷൻ (330kbps/303kbps)"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
- <item msgid="172302906231378902">"നിർദ്ദേശിക്കുന്ന ശബ്ദ നിലവാരം (990kbps/909kbps)"</item>
- <item msgid="9091111147684472529">"അടിസ്ഥാനം (660kbps/606kbps)"</item>
- <item msgid="3367904477834831032">"നിർദ്ദേശിക്കുന്ന കണക്ഷൻ (330kbps/303kbps)"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:0 (7065842274271279580) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:3 (500463122137421129) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:0 (5062108632402595000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3093550793512117000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_titles:0 (3093023430402746802) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_summaries:0 (3214516120190965356) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_titles:0 (2684127272582591429) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_summaries:0 (1081159789834584363) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_titles:0 (5226878858503393706) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_summaries:0 (4118561796005528173) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:0 (3411577996960199959) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:1 (2921767058740704969) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:2 (3682554248829489641) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:0 (7668834469173465015) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:1 (4327143584633311908) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:2 (6155648878105378550) -->
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"ഓഫ്"</item>
<item msgid="1593289376502312923">"64K"</item>
diff --git a/packages/SettingsLib/res/values-ml/strings.xml b/packages/SettingsLib/res/values-ml/strings.xml
index b88298d..f61b71d 100644
--- a/packages/SettingsLib/res/values-ml/strings.xml
+++ b/packages/SettingsLib/res/values-ml/strings.xml
@@ -171,15 +171,23 @@
<string name="mobile_data_always_on" msgid="7745605759775320362">"സെല്ലുലാർ ഡാറ്റ എല്ലായ്പ്പോഴും സജീവം"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"അബ്സൊല്യൂട്ട് വോളിയം പ്രവർത്തനരഹിതമാക്കുക"</string>
<string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Bluetooth ഓഡിയോ കോഡെക്"</string>
- <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"നിർദ്ദേശിക്കുന്ന Bluetooth A2DP കോഡെക് തിരഞ്ഞെടുക്കുക"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_type_dialog_title (4558347981670553665) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Bluetooth ഓഡിയോ സാമ്പിൾ നിരക്ക്"</string>
- <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"നിർദ്ദേശിക്കുന്ന Bluetooth A2DP കോഡെക് സാമ്പിൾ നിരക്ക് തിരഞ്ഞെടുക്കുക"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_sample_rate_dialog_title (5628790207448471613) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"പ്രതി സാമ്പിളിലെ Bluetooth ഓഡിയോ ബിറ്റ് നി"</string>
- <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"പ്രതി സാമ്പിളിന് നിർദ്ദേശിക്കുന്ന Bluetooth A2DP കോഡെക് ബിറ്റ് നിരക്ക് തിരഞ്ഞെടുക്കുക"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_bits_per_sample_dialog_title (4546131401358681321) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Bluetooth ഓഡിയോ ചാനൽ മോഡ്"</string>
- <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"നിർദ്ദേശിക്കുന്ന Bluetooth A2DP കോഡെക് ചാനൽ മോഡ് തിരഞ്ഞെടുക്കുക"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"Bluetooth ഓഡിയോ LDAC പ്ലേബാക്ക് നിലവാരം"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"നിർദ്ദേശിക്കുന്ന Bluetooth A2DP കോഡെക് LDAC പ്ലേബാക്ക് നിലവാരം തിരഞ്ഞെടുക്കുക"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_channel_mode_dialog_title (9133545781346216071) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality (3619694372407843405) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (3181967377574368400) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_streaming_label (5347862512596240506) -->
+ <skip />
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"വയർലെസ് ഡിസ്പ്ലേ സർട്ടിഫിക്കേഷനായി ഓപ്ഷനുകൾ ദൃശ്യമാക്കുക"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"വൈഫൈ പിക്കറിൽ ഓരോ SSID RSSI പ്രകാരം കാണിക്കാൻ വൈഫൈ ലോഗിംഗ് നില വർദ്ധിപ്പിക്കുക"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"പ്രവർത്തനക്ഷമമായിരിക്കുമ്പോൾ, വൈഫൈ സിഗ്നൽ കുറവായിരിക്കുന്ന സമയത്ത് സെല്ലുലാറിലേക്ക് ഡാറ്റ കണക്ഷൻ മുഖേന കൈമാറുന്നതിൽ വൈഫൈ കൂടുതൽ പ്രവർത്തനക്ഷമമാകും"</string>
diff --git a/packages/SettingsLib/res/values-mn/arrays.xml b/packages/SettingsLib/res/values-mn/arrays.xml
index 88d6517..f4d1ca3 100644
--- a/packages/SettingsLib/res/values-mn/arrays.xml
+++ b/packages/SettingsLib/res/values-mn/arrays.xml
@@ -58,66 +58,22 @@
<item msgid="3878793616631049349">"HDCP шалгахыг зөвхөн DRM контентэд ашиглах"</item>
<item msgid="45075631231212732">"Байнга HDCP шалгахыг ашиглах"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="1852387125374225729">"Өгөгдмөл"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="4260844283202960798">"aptX"</item>
- <item msgid="7279983368484312990">"aptX-HD"</item>
- <item msgid="2301339338870319651">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="9072025520360316957">"Өгөгдмөл"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="1190434429082395888">"aptX"</item>
- <item msgid="649699003004233053">"aptX-HD"</item>
- <item msgid="508106435710925399">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
- <item msgid="7102940318360468759">"Өгөгдмөл"</item>
- <item msgid="8895532488906185219">"44.1 кГц"</item>
- <item msgid="2909915718994807056">"48.0 кГц"</item>
- <item msgid="3347287377354164611">"88.2 кГц"</item>
- <item msgid="1234212100239985373">"96.0 кГц"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
- <item msgid="7224433008148687313">"Өгөгдмөл"</item>
- <item msgid="4482862757811638365">"44.1 кГц"</item>
- <item msgid="354495328188724404">"48.0 кГц"</item>
- <item msgid="7329816882213695083">"88.2 кГц"</item>
- <item msgid="6967397666254430476">"96.0 кГц"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
- <item msgid="6694044160540313386">"Өгөгдмөл"</item>
- <item msgid="5618929009984956469">"16 бит/жишээ"</item>
- <item msgid="3412640499234627248">"24 бит/жишээ"</item>
- <item msgid="121583001492929387">"32 бит/жишээ"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
- <item msgid="5091076677792306320">"Өгөгдмөл"</item>
- <item msgid="4726688794884191540">"16 бит/жишээ"</item>
- <item msgid="305344756485516870">"24 бит/жишээ"</item>
- <item msgid="244568657919675099">"32 бит/жишээ"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
- <item msgid="13423709606339855">"Өгөгдмөл"</item>
- <item msgid="4106832974775067314">"Моно"</item>
- <item msgid="5571632958424639155">"Стерео"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
- <item msgid="8128478683963250130">"Өгөгдмөл"</item>
- <item msgid="8900559293912978337">"Моно"</item>
- <item msgid="8883739882299884241">"Стерео"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
- <item msgid="2944889121850394020">"Давуу дууны чанар (990кб/с/909кб/с)"</item>
- <item msgid="138837449700903545">"Стандарт (660кб/с/606кб/с)"</item>
- <item msgid="4777177307869441982">"Давуу холболт (330кб/с/303kbps)"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
- <item msgid="172302906231378902">"Давуу дууны чанар (990кб/с/909кб/с)"</item>
- <item msgid="9091111147684472529">"Стандарт (660кб/с/606кб/с)"</item>
- <item msgid="3367904477834831032">"Давуу холболт (330кб/с/303kbps)"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:0 (7065842274271279580) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:3 (500463122137421129) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:0 (5062108632402595000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3093550793512117000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_titles:0 (3093023430402746802) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_summaries:0 (3214516120190965356) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_titles:0 (2684127272582591429) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_summaries:0 (1081159789834584363) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_titles:0 (5226878858503393706) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_summaries:0 (4118561796005528173) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:0 (3411577996960199959) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:1 (2921767058740704969) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:2 (3682554248829489641) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:0 (7668834469173465015) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:1 (4327143584633311908) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:2 (6155648878105378550) -->
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"Идэвхгүй"</item>
<item msgid="1593289376502312923">"64000"</item>
diff --git a/packages/SettingsLib/res/values-mn/strings.xml b/packages/SettingsLib/res/values-mn/strings.xml
index f412ac4..940e0b0 100644
--- a/packages/SettingsLib/res/values-mn/strings.xml
+++ b/packages/SettingsLib/res/values-mn/strings.xml
@@ -171,15 +171,23 @@
<string name="mobile_data_always_on" msgid="7745605759775320362">"Үүрэн холбооны датаг үргэлж идэвхтэй байлгана"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Үнэмлэхүй дууны түвшинг идэвхгүй болгох"</string>
<string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Bluetooth аудио кодлогч"</string>
- <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"Давуу Bluetooth A2DP кодлогч сонгох"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_type_dialog_title (4558347981670553665) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Bluetooth аудио жишээний үнэлгээ"</string>
- <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"Давуу Bluetooth A2DP кодлогч жишээний үнэлгээ"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_sample_rate_dialog_title (5628790207448471613) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Жишээ тутмын Bluetooth аудионы бит"</string>
- <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"Жишээ тутмын давуу Bluetooth A2DP кодлогч битийг сонгох"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_bits_per_sample_dialog_title (4546131401358681321) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Bluetooth аудио сувгийн горим"</string>
- <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"Давуу Bluetooth A2DP кодлогч сувгийн горимыг сонгох"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"Bluetooth аудио LDAC тоглуулагчийн чанар"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"Давуу Bluetooth A2DP кодлогч LDAC тоглуулагчийн чанарыг сонгох"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_channel_mode_dialog_title (9133545781346216071) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality (3619694372407843405) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (3181967377574368400) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_streaming_label (5347862512596240506) -->
+ <skip />
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Утасгүй дэлгэцийн сертификатын сонголтыг харуулах"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Wi‑Fi лог-н түвшинг нэмэгдүүлэх, Wi‑Fi Сонгогч дээрх SSID-д ногдох RSSI-г харуулах"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"Идэвхжүүлсэн үед Wi‑Fi дохио сул бол дата холболтыг Үүрэн рүү шилжүүлэхдээ илүү идэвхтэй байх болно"</string>
diff --git a/packages/SettingsLib/res/values-mr/arrays.xml b/packages/SettingsLib/res/values-mr/arrays.xml
index 9204c458..d8c8daf 100644
--- a/packages/SettingsLib/res/values-mr/arrays.xml
+++ b/packages/SettingsLib/res/values-mr/arrays.xml
@@ -58,66 +58,22 @@
<item msgid="3878793616631049349">"केवळ DRM सामग्रीसाठी HDCP तपासणी वापरा"</item>
<item msgid="45075631231212732">"नेहमी HDCP तपासणी वापरा"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="1852387125374225729">"डीफॉल्ट"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="4260844283202960798">"aptX"</item>
- <item msgid="7279983368484312990">"aptX-HD"</item>
- <item msgid="2301339338870319651">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="9072025520360316957">"डीफॉल्ट"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="1190434429082395888">"aptX"</item>
- <item msgid="649699003004233053">"aptX-HD"</item>
- <item msgid="508106435710925399">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
- <item msgid="7102940318360468759">"डीफॉल्ट"</item>
- <item msgid="8895532488906185219">"44.1 kHz"</item>
- <item msgid="2909915718994807056">"48.0 kHz"</item>
- <item msgid="3347287377354164611">"88.2 kHz"</item>
- <item msgid="1234212100239985373">"96.0 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
- <item msgid="7224433008148687313">"डीफॉल्ट"</item>
- <item msgid="4482862757811638365">"44.1 kHz"</item>
- <item msgid="354495328188724404">"48.0 kHz"</item>
- <item msgid="7329816882213695083">"88.2 kHz"</item>
- <item msgid="6967397666254430476">"96.0 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
- <item msgid="6694044160540313386">"डीफॉल्ट"</item>
- <item msgid="5618929009984956469">"16 बिट/नमुना"</item>
- <item msgid="3412640499234627248">"24 बिट/नमुना"</item>
- <item msgid="121583001492929387">"32 बिट/नमुना"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
- <item msgid="5091076677792306320">"डीफॉल्ट"</item>
- <item msgid="4726688794884191540">"16 बिट/नमुना"</item>
- <item msgid="305344756485516870">"24 बिट/नमुना"</item>
- <item msgid="244568657919675099">"32 बिट/नमुना"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
- <item msgid="13423709606339855">"डीफॉल्ट"</item>
- <item msgid="4106832974775067314">"मोनो"</item>
- <item msgid="5571632958424639155">"स्टिरिओ"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
- <item msgid="8128478683963250130">"डीफॉल्ट"</item>
- <item msgid="8900559293912978337">"मोनो"</item>
- <item msgid="8883739882299884241">"स्टिरिओ"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
- <item msgid="2944889121850394020">"प्राधान्य दिलेली ध्वनी गुणवत्ता (990kbps/909kbps)"</item>
- <item msgid="138837449700903545">"मानक (660kbps/606kbps)"</item>
- <item msgid="4777177307869441982">"प्राधान्य दिलेलेे कनेेक्शन (330kbps/303kbps)"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
- <item msgid="172302906231378902">"प्राधान्य दिलेली ध्वनी गुणवत्ता (990kbps/909kbps)"</item>
- <item msgid="9091111147684472529">"मानक (660kbps/606kbps)"</item>
- <item msgid="3367904477834831032">"प्राधान्य दिलेलेे कनेेक्शन (330kbps/303kbps)"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:0 (7065842274271279580) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:3 (500463122137421129) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:0 (5062108632402595000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3093550793512117000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_titles:0 (3093023430402746802) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_summaries:0 (3214516120190965356) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_titles:0 (2684127272582591429) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_summaries:0 (1081159789834584363) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_titles:0 (5226878858503393706) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_summaries:0 (4118561796005528173) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:0 (3411577996960199959) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:1 (2921767058740704969) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:2 (3682554248829489641) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:0 (7668834469173465015) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:1 (4327143584633311908) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:2 (6155648878105378550) -->
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"बंद"</item>
<item msgid="1593289376502312923">"64K"</item>
diff --git a/packages/SettingsLib/res/values-mr/strings.xml b/packages/SettingsLib/res/values-mr/strings.xml
index 8b73d21..6c012c8 100644
--- a/packages/SettingsLib/res/values-mr/strings.xml
+++ b/packages/SettingsLib/res/values-mr/strings.xml
@@ -171,15 +171,23 @@
<string name="mobile_data_always_on" msgid="7745605759775320362">"सेल्युलर डेटा नेहमी सक्रिय"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"संपूर्ण आवाज अक्षम करा"</string>
<string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"ब्लूटूथ ऑडिओ कोडेक"</string>
- <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"प्राधान्यीकृत ब्लूटुथ A2DP कोडेक निवडा"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_type_dialog_title (4558347981670553665) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"ब्लूटूथ ऑडिओ नमुना दर"</string>
- <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"प्राधान्यीकृत ब्लूटुथ A2DP कोडेक नमुना दर निवडा"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_sample_rate_dialog_title (5628790207448471613) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"प्रति नमुना ब्लूटुथ ऑडिओ बिट"</string>
- <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"प्रति नमुना प्राधान्यीकृत ब्लूटुथ A2DP कोडेक बिट निवडा"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_bits_per_sample_dialog_title (4546131401358681321) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"ब्लूटूथ ऑडिओ चॅनेल मोड"</string>
- <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"प्राधान्यीकृत ब्लूटुथ A2DP कोडेक चॅनेल मोड निवडा"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"ब्लूटुथ ऑडिओ LDAC प्लेबॅक गुणवत्ता"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"प्राधान्यीकृत ब्लूटुथ A2DP कोडेक LDAC प्लेबॅक गुणवत्ता निवडा"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_channel_mode_dialog_title (9133545781346216071) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality (3619694372407843405) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (3181967377574368400) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_streaming_label (5347862512596240506) -->
+ <skip />
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"वायरलेस प्रदर्शन प्रमाणिकरणासाठी पर्याय दर्शवा"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"वाय-फाय लॉगिंग स्तर वाढवा, वाय-फाय निवडकामध्ये प्रति SSID RSSI दर्शवा"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"सक्षम केल्यास, वाय-फाय सिग्नल निम्न असताना, वाय-फाय डेटा कनेक्शन सेल्युलरवर बळपूर्वक स्विच करेल."</string>
diff --git a/packages/SettingsLib/res/values-ms/arrays.xml b/packages/SettingsLib/res/values-ms/arrays.xml
index 7ec6fab..5feff37 100644
--- a/packages/SettingsLib/res/values-ms/arrays.xml
+++ b/packages/SettingsLib/res/values-ms/arrays.xml
@@ -58,66 +58,22 @@
<item msgid="3878793616631049349">"Gunakan penyemakan HDCP untuk kandungan DRM sahaja"</item>
<item msgid="45075631231212732">"Sentiasa gunakan penyemakan HDCP"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="1852387125374225729">"Lalai"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="4260844283202960798">"aptX"</item>
- <item msgid="7279983368484312990">"aptX-HD"</item>
- <item msgid="2301339338870319651">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="9072025520360316957">"Lalai"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="1190434429082395888">"aptX"</item>
- <item msgid="649699003004233053">"aptX-HD"</item>
- <item msgid="508106435710925399">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
- <item msgid="7102940318360468759">"Lalai"</item>
- <item msgid="8895532488906185219">"44.1 kHz"</item>
- <item msgid="2909915718994807056">"48.0 kHz"</item>
- <item msgid="3347287377354164611">"88.2 kHz"</item>
- <item msgid="1234212100239985373">"96.0 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
- <item msgid="7224433008148687313">"Lalai"</item>
- <item msgid="4482862757811638365">"44.1 kHz"</item>
- <item msgid="354495328188724404">"48.0 kHz"</item>
- <item msgid="7329816882213695083">"88.2 kHz"</item>
- <item msgid="6967397666254430476">"96.0 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
- <item msgid="6694044160540313386">"Lalai"</item>
- <item msgid="5618929009984956469">"16 bit/sampel"</item>
- <item msgid="3412640499234627248">"24 bit/sampel"</item>
- <item msgid="121583001492929387">"32 bit/sampel"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
- <item msgid="5091076677792306320">"Lalai"</item>
- <item msgid="4726688794884191540">"16 bit/sampel"</item>
- <item msgid="305344756485516870">"24 bit/sampel"</item>
- <item msgid="244568657919675099">"32 bit/sampel"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
- <item msgid="13423709606339855">"Lalai"</item>
- <item msgid="4106832974775067314">"Mono"</item>
- <item msgid="5571632958424639155">"Stereo"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
- <item msgid="8128478683963250130">"Lalai"</item>
- <item msgid="8900559293912978337">"Mono"</item>
- <item msgid="8883739882299884241">"Stereo"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
- <item msgid="2944889121850394020">"Kualiti bunyi dipilih (990kbps/909kbps)"</item>
- <item msgid="138837449700903545">"Standard (660kbps/606kbps)"</item>
- <item msgid="4777177307869441982">"Sambungan yang dipilih (330kbps/303kbps)"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
- <item msgid="172302906231378902">"Kualiti bunyi dipilih (990kbps/909kbps)"</item>
- <item msgid="9091111147684472529">"Standard (660kbps/606kbps)"</item>
- <item msgid="3367904477834831032">"Sambungan yang dipilih (330kbps/303kbps)"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:0 (7065842274271279580) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:3 (500463122137421129) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:0 (5062108632402595000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3093550793512117000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_titles:0 (3093023430402746802) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_summaries:0 (3214516120190965356) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_titles:0 (2684127272582591429) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_summaries:0 (1081159789834584363) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_titles:0 (5226878858503393706) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_summaries:0 (4118561796005528173) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:0 (3411577996960199959) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:1 (2921767058740704969) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:2 (3682554248829489641) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:0 (7668834469173465015) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:1 (4327143584633311908) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:2 (6155648878105378550) -->
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"Mati"</item>
<item msgid="1593289376502312923">"64K"</item>
diff --git a/packages/SettingsLib/res/values-ms/strings.xml b/packages/SettingsLib/res/values-ms/strings.xml
index e57219c..acaab9d 100644
--- a/packages/SettingsLib/res/values-ms/strings.xml
+++ b/packages/SettingsLib/res/values-ms/strings.xml
@@ -171,15 +171,23 @@
<string name="mobile_data_always_on" msgid="7745605759775320362">"Data selular sentiasa aktif"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Lumpuhkan kelantangan mutlak"</string>
<string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Codec Audio Bluetooth"</string>
- <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"Pilih Codec A2DP Bluetooth yang Diingini"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_type_dialog_title (4558347981670553665) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Kadar Sampel Audio Bluetooth"</string>
- <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"Pilih Kadar Sampel Codec A2DP Bluetooth yang Diingini"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_sample_rate_dialog_title (5628790207448471613) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Bit Per Sampel Audio Bluetooth"</string>
- <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"Pilih Bit Per Sampel Codec A2DP Bluetooth yang Diingini"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_bits_per_sample_dialog_title (4546131401358681321) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Mod Saluran Audio Bluetooth"</string>
- <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"Pilih Mod Saluran Codec A2DP Bluetooth yang Diingini"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"Kualiti Main Balik LDAC Audio Bluetooth"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"Pilih Kualiti Main Balik LDAC Codec A2DP Bluetooth yang Diingini"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_channel_mode_dialog_title (9133545781346216071) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality (3619694372407843405) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (3181967377574368400) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_streaming_label (5347862512596240506) -->
+ <skip />
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Tunjukkan pilihan untuk pensijilan paparan wayarles"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Tingkatkan tahap pengelogan Wi-Fi, tunjuk setiap SSID RSSI dalam Pemilih Wi-Fi"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"Apabila didayakan, Wi-Fi akan menjadi lebih agresif dalam menyerahkan sambungan data ke Selular, apabila isyarat Wi-Fi rendah"</string>
diff --git a/packages/SettingsLib/res/values-my/arrays.xml b/packages/SettingsLib/res/values-my/arrays.xml
index f5e3824..9e71ae5 100644
--- a/packages/SettingsLib/res/values-my/arrays.xml
+++ b/packages/SettingsLib/res/values-my/arrays.xml
@@ -58,66 +58,22 @@
<item msgid="3878793616631049349">"DRMအကြောင်းအရာအတွက် HDCPစစ်ဆေးခြင်းကိုသုံးမည်"</item>
<item msgid="45075631231212732">"HDCP checkingအားအမြဲသုံးပါ"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="1852387125374225729">"မူရင်း"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="4260844283202960798">"aptX"</item>
- <item msgid="7279983368484312990">"aptX-HD"</item>
- <item msgid="2301339338870319651">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="9072025520360316957">"မူရင်း"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="1190434429082395888">"aptX"</item>
- <item msgid="649699003004233053">"aptX-HD"</item>
- <item msgid="508106435710925399">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
- <item msgid="7102940318360468759">"မူရင်း"</item>
- <item msgid="8895532488906185219">"၄၄.၁ kHz"</item>
- <item msgid="2909915718994807056">"၄၈.၀ kHz"</item>
- <item msgid="3347287377354164611">"၈၈.၂ kHz"</item>
- <item msgid="1234212100239985373">"၉၆.၀ kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
- <item msgid="7224433008148687313">"မူရင်း"</item>
- <item msgid="4482862757811638365">"၄၄.၁ kHz"</item>
- <item msgid="354495328188724404">"၄၈.၀ kHz"</item>
- <item msgid="7329816882213695083">"၈၈.၂ kHz"</item>
- <item msgid="6967397666254430476">"၉၆.၀ kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
- <item msgid="6694044160540313386">"မူရင်း"</item>
- <item msgid="5618929009984956469">"၁၆ bits/နမူနာ"</item>
- <item msgid="3412640499234627248">"၂၄ bits/နမူနာ"</item>
- <item msgid="121583001492929387">"၃၂ bits/နမူနာ"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
- <item msgid="5091076677792306320">"မူရင်း"</item>
- <item msgid="4726688794884191540">"၁၆ bits/နမူနာ"</item>
- <item msgid="305344756485516870">"၂၄ bits/နမူနာ"</item>
- <item msgid="244568657919675099">"၃၂ bits/နမူနာ"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
- <item msgid="13423709606339855">"မူရင်း"</item>
- <item msgid="4106832974775067314">"မိုနို"</item>
- <item msgid="5571632958424639155">"စတီရီယို"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
- <item msgid="8128478683963250130">"မူရင်း"</item>
- <item msgid="8900559293912978337">"မိုနို"</item>
- <item msgid="8883739882299884241">"စတီရီယို"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
- <item msgid="2944889121850394020">"လိုလားသည့်အသံအရည်အသွေး (၉၉၀kbps/၉၀၉kbps)"</item>
- <item msgid="138837449700903545">"ပုံမှန် (၆၆၀kbps/၆၀၆kbps)"</item>
- <item msgid="4777177307869441982">"လိုလားသည့် မြန်နှုန်း (၃၃၀kbps/၃၀၃kbps)"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
- <item msgid="172302906231378902">"လိုလားသည့်အသံအရည်အသွေး (၉၉၀kbps/၉၀၉kbps)"</item>
- <item msgid="9091111147684472529">"ပုံမှန် (၆၆၀kbps/၆၀၆kbps)"</item>
- <item msgid="3367904477834831032">"လိုလားသည့် ချိတ်ဆက်မှု (၃၃၀kbps/၃၀၃kbps)"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:0 (7065842274271279580) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:3 (500463122137421129) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:0 (5062108632402595000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3093550793512117000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_titles:0 (3093023430402746802) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_summaries:0 (3214516120190965356) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_titles:0 (2684127272582591429) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_summaries:0 (1081159789834584363) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_titles:0 (5226878858503393706) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_summaries:0 (4118561796005528173) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:0 (3411577996960199959) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:1 (2921767058740704969) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:2 (3682554248829489641) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:0 (7668834469173465015) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:1 (4327143584633311908) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:2 (6155648878105378550) -->
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"ပိတ်ပါ"</item>
<item msgid="1593289376502312923">"64K"</item>
diff --git a/packages/SettingsLib/res/values-my/strings.xml b/packages/SettingsLib/res/values-my/strings.xml
index 941b240..2c976d0 100644
--- a/packages/SettingsLib/res/values-my/strings.xml
+++ b/packages/SettingsLib/res/values-my/strings.xml
@@ -171,15 +171,23 @@
<string name="mobile_data_always_on" msgid="7745605759775320362">"ဆဲလ်လူလာဒေတာ အမြဲတမ်းဖွင့်ထားသည်"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"ပကတိ အသံနှုန်း သတ်မှတ်ချက် ပိတ်ရန်"</string>
<string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"ဘလူးတုသ်အသံ ကိုးဒက်ခ်"</string>
- <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"လိုလားသည့် ဘလူးတုသ် A2DP ကိုးဒက်ခ်ကို ရွေးချယ်ပါ"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_type_dialog_title (4558347981670553665) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"ဘလူးတုသ်အသံနမူနာနှုန်း"</string>
- <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"လိုလားသည့် ဘလူးတုသ် A2DP ကိုးဒက်ခ် အသံနမူနာနှုန်းကို ရွေးချယ်ပါ"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_sample_rate_dialog_title (5628790207448471613) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"နမူနာတစ်ခုစီတွင် ပါဝင်သော ဘလူးတုသ်အသံပမာဏ Bits"</string>
- <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"နမူနာတစ်ခုချင်းစီအတွက် လိုလားသည့် ဘလူးတုသ် A2DP ကိုးဒက်ခ် Bits ကို ရွေးပါ"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_bits_per_sample_dialog_title (4546131401358681321) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"ဘလူးတုသ်အသံချန်နယ်မုဒ်"</string>
- <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"လိုလားသည့် ဘလူးတုသ် A2DP ကိုးဒက်ခ် ချန်နယ်မုဒ်ကို ရွေးချယ်ပါ"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"LDAC ဖွင့်ရန် ဘလူးတုသ်အသံ အရည်အသွေး"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"LDAC ဖွင့်ရန် လိုလားသည့် ဘလူးတုသ်အသံ အရည်အသွေးကို ရွေးချယ်ပါ"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_channel_mode_dialog_title (9133545781346216071) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality (3619694372407843405) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (3181967377574368400) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_streaming_label (5347862512596240506) -->
+ <skip />
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"ကြိုးမဲ့ အခင်းအကျင်း အသိအမှတ်ပြုလက်မှတ်အတွက် ရွေးချယ်စရာများပြရန်"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Wi‑Fi မှတ်တမ်းတင်ခြင်း နှုန်းအားမြင့်ကာ၊ Wi‑Fi ရွေးရာတွင် SSID RSSI ဖြင့်ပြပါ"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"ဖွင့်ထားလျှင်၊ Wi‑Fi မှ ဆယ်လူလာသို့ အချက်လက် ချိတ်ဆက်မှုအား လွှဲပြောင်းရာ၌ ပိုမိုထိရောက်ပါသည်၊ WIFI အားနည်းနေချိန်တွင်"</string>
diff --git a/packages/SettingsLib/res/values-nb/arrays.xml b/packages/SettingsLib/res/values-nb/arrays.xml
index bf0b414..1d5d098 100644
--- a/packages/SettingsLib/res/values-nb/arrays.xml
+++ b/packages/SettingsLib/res/values-nb/arrays.xml
@@ -58,66 +58,22 @@
<item msgid="3878793616631049349">"Bruk HDCP-kontroll kun for DRM-innhold"</item>
<item msgid="45075631231212732">"Bruk alltid HDCP-kontroll"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="1852387125374225729">"Standard"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="4260844283202960798">"aptX"</item>
- <item msgid="7279983368484312990">"aptX-HD"</item>
- <item msgid="2301339338870319651">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="9072025520360316957">"Standard"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="1190434429082395888">"aptX"</item>
- <item msgid="649699003004233053">"aptX-HD"</item>
- <item msgid="508106435710925399">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
- <item msgid="7102940318360468759">"Standard"</item>
- <item msgid="8895532488906185219">"44,1 kHz"</item>
- <item msgid="2909915718994807056">"48,0 kHz"</item>
- <item msgid="3347287377354164611">"88,2 kHz"</item>
- <item msgid="1234212100239985373">"96,0 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
- <item msgid="7224433008148687313">"Standard"</item>
- <item msgid="4482862757811638365">"44,1 kHz"</item>
- <item msgid="354495328188724404">"48,0 kHz"</item>
- <item msgid="7329816882213695083">"88,2 kHz"</item>
- <item msgid="6967397666254430476">"96,0 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
- <item msgid="6694044160540313386">"Standard"</item>
- <item msgid="5618929009984956469">"16 bits/sample"</item>
- <item msgid="3412640499234627248">"24 bits/sample"</item>
- <item msgid="121583001492929387">"32 bits/sample"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
- <item msgid="5091076677792306320">"Standard"</item>
- <item msgid="4726688794884191540">"16 bits/sample"</item>
- <item msgid="305344756485516870">"24 bits/sample"</item>
- <item msgid="244568657919675099">"32 bits/sample"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
- <item msgid="13423709606339855">"Standard"</item>
- <item msgid="4106832974775067314">"Mono"</item>
- <item msgid="5571632958424639155">"Stereo"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
- <item msgid="8128478683963250130">"Standard"</item>
- <item msgid="8900559293912978337">"Mono"</item>
- <item msgid="8883739882299884241">"Stereo"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
- <item msgid="2944889121850394020">"Prioriter lydkvalitet (990kbps/909kbps)"</item>
- <item msgid="138837449700903545">"Standard (660kbps/606kbps)"</item>
- <item msgid="4777177307869441982">"Prioriter tilkobling (330kbps/303kbps)"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
- <item msgid="172302906231378902">"Prioriter lydkvalitet (990kbps/909kbps)"</item>
- <item msgid="9091111147684472529">"Standard (660kbps/606kbps)"</item>
- <item msgid="3367904477834831032">"Prioriter tilkobling (330kbps/303kbps)"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:0 (7065842274271279580) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:3 (500463122137421129) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:0 (5062108632402595000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3093550793512117000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_titles:0 (3093023430402746802) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_summaries:0 (3214516120190965356) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_titles:0 (2684127272582591429) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_summaries:0 (1081159789834584363) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_titles:0 (5226878858503393706) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_summaries:0 (4118561796005528173) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:0 (3411577996960199959) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:1 (2921767058740704969) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:2 (3682554248829489641) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:0 (7668834469173465015) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:1 (4327143584633311908) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:2 (6155648878105378550) -->
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"Av"</item>
<item msgid="1593289376502312923">"64K"</item>
diff --git a/packages/SettingsLib/res/values-nb/strings.xml b/packages/SettingsLib/res/values-nb/strings.xml
index 53e0127..02b742a 100644
--- a/packages/SettingsLib/res/values-nb/strings.xml
+++ b/packages/SettingsLib/res/values-nb/strings.xml
@@ -171,15 +171,23 @@
<string name="mobile_data_always_on" msgid="7745605759775320362">"Mobildata er alltid aktiv"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Slå av funksjonen for absolutt volum"</string>
<string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Kodek for Bluetooth-lyd"</string>
- <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"Velg foretrukket A2DP-kodek for Bluetooth"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_type_dialog_title (4558347981670553665) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Samplefrekvens for Bluetooth-lyd"</string>
- <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"Velg foretrukket samplefrekvens fra A2DP-kodek for Bluetooth"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_sample_rate_dialog_title (5628790207448471613) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Bits per sample for Bluetooth-lyd"</string>
- <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"Velg foretrukket bits per sample fra A2DP-kodek for Bluetooth"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_bits_per_sample_dialog_title (4546131401358681321) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Kanalmodus for Bluetooth-lyd"</string>
- <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"Velg foretrukket kanalmodus fra A2DP-kodek for Bluetooth"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"LDAC-avspillingskvalitet for Bluetooth-lyd"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"Velg foretrukket LDAC-avspillingskvalitet fra A2DP-kodek for Bluetooth"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_channel_mode_dialog_title (9133545781346216071) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality (3619694372407843405) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (3181967377574368400) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_streaming_label (5347862512596240506) -->
+ <skip />
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Vis alternativer for sertifisering av trådløs skjerm"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Øk Wi-Fi-loggenivå – vis per SSID RSSI i Wi-Fi-velgeren"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"Hvis dette slås på, overfører Wi-Fi-nettverket datatilkoblingen til mobil mer aggressivt når Wi-Fi-signalet er lavt"</string>
diff --git a/packages/SettingsLib/res/values-ne/arrays.xml b/packages/SettingsLib/res/values-ne/arrays.xml
index d9cd5d2..19597ec 100644
--- a/packages/SettingsLib/res/values-ne/arrays.xml
+++ b/packages/SettingsLib/res/values-ne/arrays.xml
@@ -58,66 +58,22 @@
<item msgid="3878793616631049349">"DRM सामग्रीको लागि मात्र HDCP जाँचको प्रयोग गर्नुहोस्"</item>
<item msgid="45075631231212732">"सधैँ HDCP जाँच प्रयोग गर्नुहोस्"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="1852387125374225729">"पूर्वनिर्धारित मान"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="4260844283202960798">"aptX"</item>
- <item msgid="7279983368484312990">"aptX-HD"</item>
- <item msgid="2301339338870319651">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="9072025520360316957">"पूर्वनिर्धारित मान"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="1190434429082395888">"aptX"</item>
- <item msgid="649699003004233053">"aptX-HD"</item>
- <item msgid="508106435710925399">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
- <item msgid="7102940318360468759">"पूर्वनिर्धारित मान"</item>
- <item msgid="8895532488906185219">"४४.१ kHz"</item>
- <item msgid="2909915718994807056">"४८.० kHz"</item>
- <item msgid="3347287377354164611">"८८.२ kHz"</item>
- <item msgid="1234212100239985373">"९६.० kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
- <item msgid="7224433008148687313">"पूर्वनिर्धारित मान"</item>
- <item msgid="4482862757811638365">"४४.१ kHz"</item>
- <item msgid="354495328188724404">"४८.० kHz"</item>
- <item msgid="7329816882213695083">"८८.२ kHz"</item>
- <item msgid="6967397666254430476">"९६.० kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
- <item msgid="6694044160540313386">"पूर्वनिर्धारित मान"</item>
- <item msgid="5618929009984956469">"१६ बिट/नमूना"</item>
- <item msgid="3412640499234627248">"२४ बिट/नमूना"</item>
- <item msgid="121583001492929387">"३२ बिट/नमूना"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
- <item msgid="5091076677792306320">"पूर्वनिर्धारित मान"</item>
- <item msgid="4726688794884191540">"१६ बिट/नमूना"</item>
- <item msgid="305344756485516870">"२४ बिट/नमूना"</item>
- <item msgid="244568657919675099">"३२ बिट/नमूना"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
- <item msgid="13423709606339855">"पूर्वनिर्धारित मान"</item>
- <item msgid="4106832974775067314">"मोनो"</item>
- <item msgid="5571632958424639155">"स्टेरियो"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
- <item msgid="8128478683963250130">"पूर्वनिर्धारित मान"</item>
- <item msgid="8900559293912978337">"मोनो"</item>
- <item msgid="8883739882299884241">"स्टेरियो"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
- <item msgid="2944889121850394020">"रुचाइएको आवाजको गुणस्तर (९९०kbps/९०९kbps)"</item>
- <item msgid="138837449700903545">"मानक (६६०kbps/६०६kbps)"</item>
- <item msgid="4777177307869441982">"रुचाइएको जडान (३३०kbps/३०३kbps)"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
- <item msgid="172302906231378902">"रुचाइएको आवाजको गुणस्तर (९९०kbps/९०९kbps)"</item>
- <item msgid="9091111147684472529">"मानक (६६०kbps/६०६kbps)"</item>
- <item msgid="3367904477834831032">"रुचाइएको जडान (३३०kbps/३०३kbps)"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:0 (7065842274271279580) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:3 (500463122137421129) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:0 (5062108632402595000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3093550793512117000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_titles:0 (3093023430402746802) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_summaries:0 (3214516120190965356) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_titles:0 (2684127272582591429) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_summaries:0 (1081159789834584363) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_titles:0 (5226878858503393706) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_summaries:0 (4118561796005528173) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:0 (3411577996960199959) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:1 (2921767058740704969) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:2 (3682554248829489641) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:0 (7668834469173465015) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:1 (4327143584633311908) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:2 (6155648878105378550) -->
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"निष्क्रिय गर्नुहोस्"</item>
<item msgid="1593289376502312923">"६४के"</item>
diff --git a/packages/SettingsLib/res/values-ne/strings.xml b/packages/SettingsLib/res/values-ne/strings.xml
index 311af42..12b3b15 100644
--- a/packages/SettingsLib/res/values-ne/strings.xml
+++ b/packages/SettingsLib/res/values-ne/strings.xml
@@ -171,15 +171,23 @@
<string name="mobile_data_always_on" msgid="7745605759775320362">"सेलुलर डेटा सधैं सक्रिय"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"निरपेक्ष आवाज असक्षम गर्नुहोस्"</string>
<string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"ब्लुटुथ अडियोको कोडेक"</string>
- <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"रुचाइको ब्लुटुथ A2DP कोडेक चयन गर्नुहोस्"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_type_dialog_title (4558347981670553665) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"ब्लुटुथ अडियोको नमूना दर"</string>
- <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"रुचाइको ब्लुटुथ A2DP कोडेक नमूना दर चयन गर्नुहोस्"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_sample_rate_dialog_title (5628790207448471613) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"प्रति नमूना ब्लुटुथ अडियोका बिटहरू"</string>
- <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"रुचाइको प्रति नमूना ब्लुटुथ A2DP कोडेकको बिट चयन गर्नुहोस्"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_bits_per_sample_dialog_title (4546131401358681321) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"ब्लुटुथ अडियो च्यानलको मोड"</string>
- <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"रुचाइको ब्लुटुथ A2DP कोडेक च्यानलको मोड चयन गर्नुहोस्"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"ब्लुटुथ अडियो LDAC प्लेब्याकको गुणस्तर"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"रुचाइको ब्लुटुथ A2DP कोडेक LDAC प्लेब्याकको गुणस्तर चयन गर्नुहोस्"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_channel_mode_dialog_title (9133545781346216071) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality (3619694372407843405) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (3181967377574368400) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_streaming_label (5347862512596240506) -->
+ <skip />
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"ताररहित प्रदर्शन प्रमाणीकरणका लागि विकल्पहरू देखाउनुहोस्"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Wi-Fi लग स्तर बढाउनुहोस्, Wi-Fi चयनकर्तामा प्रति SSID RSSI देखाइन्छ"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"Wi-Fi संकेत कम हुँदा, सक्षम जब गरिन्छ, Wi-Fi सेलुलर लागि डेटा जडान सुम्पनामा बढी आक्रामक हुनेछ"</string>
diff --git a/packages/SettingsLib/res/values-nl/arrays.xml b/packages/SettingsLib/res/values-nl/arrays.xml
index 6eb2b67..eaa8402 100644
--- a/packages/SettingsLib/res/values-nl/arrays.xml
+++ b/packages/SettingsLib/res/values-nl/arrays.xml
@@ -58,66 +58,22 @@
<item msgid="3878793616631049349">"HDCP-controle alleen voor DRM-content gebruiken"</item>
<item msgid="45075631231212732">"HDCP-controle altijd gebruiken"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="1852387125374225729">"Standaard"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="4260844283202960798">"aptX"</item>
- <item msgid="7279983368484312990">"aptX-HD"</item>
- <item msgid="2301339338870319651">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="9072025520360316957">"Standaard"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="1190434429082395888">"aptX"</item>
- <item msgid="649699003004233053">"aptX-HD"</item>
- <item msgid="508106435710925399">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
- <item msgid="7102940318360468759">"Standaard"</item>
- <item msgid="8895532488906185219">"44,1 kHz"</item>
- <item msgid="2909915718994807056">"48,0 kHz"</item>
- <item msgid="3347287377354164611">"88,2 kHz"</item>
- <item msgid="1234212100239985373">"96,0 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
- <item msgid="7224433008148687313">"Standaard"</item>
- <item msgid="4482862757811638365">"44,1 kHz"</item>
- <item msgid="354495328188724404">"48,0 kHz"</item>
- <item msgid="7329816882213695083">"88,2 kHz"</item>
- <item msgid="6967397666254430476">"96,0 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
- <item msgid="6694044160540313386">"Standaard"</item>
- <item msgid="5618929009984956469">"16 bits per sample"</item>
- <item msgid="3412640499234627248">"24 bits per sample"</item>
- <item msgid="121583001492929387">"32 bits per sample"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
- <item msgid="5091076677792306320">"Standaard"</item>
- <item msgid="4726688794884191540">"16 bits per sample"</item>
- <item msgid="305344756485516870">"24 bits per sample"</item>
- <item msgid="244568657919675099">"32 bits per sample"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
- <item msgid="13423709606339855">"Standaard"</item>
- <item msgid="4106832974775067314">"Mono"</item>
- <item msgid="5571632958424639155">"Stereo"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
- <item msgid="8128478683963250130">"Standaard"</item>
- <item msgid="8900559293912978337">"Mono"</item>
- <item msgid="8883739882299884241">"Stereo"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
- <item msgid="2944889121850394020">"Voorkeur geluidskwaliteit (990/909 kbps)"</item>
- <item msgid="138837449700903545">"Standaard (660/606 kbps)"</item>
- <item msgid="4777177307869441982">"Voorkeursverbinding (330/303 kbps)"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
- <item msgid="172302906231378902">"Voorkeur geluidskwaliteit (990/909 kbps)"</item>
- <item msgid="9091111147684472529">"Standaard (660/606 kbps)"</item>
- <item msgid="3367904477834831032">"Voorkeursverbinding (330/303 kbps)"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:0 (7065842274271279580) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:3 (500463122137421129) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:0 (5062108632402595000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3093550793512117000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_titles:0 (3093023430402746802) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_summaries:0 (3214516120190965356) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_titles:0 (2684127272582591429) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_summaries:0 (1081159789834584363) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_titles:0 (5226878858503393706) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_summaries:0 (4118561796005528173) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:0 (3411577996960199959) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:1 (2921767058740704969) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:2 (3682554248829489641) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:0 (7668834469173465015) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:1 (4327143584633311908) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:2 (6155648878105378550) -->
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"Uit"</item>
<item msgid="1593289376502312923">"64 K"</item>
diff --git a/packages/SettingsLib/res/values-nl/strings.xml b/packages/SettingsLib/res/values-nl/strings.xml
index 698ff09..9d53379 100644
--- a/packages/SettingsLib/res/values-nl/strings.xml
+++ b/packages/SettingsLib/res/values-nl/strings.xml
@@ -171,15 +171,23 @@
<string name="mobile_data_always_on" msgid="7745605759775320362">"Mobiele data altijd actief"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Absoluut volume uitschakelen"</string>
<string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Bluetooth-audiocodec"</string>
- <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"Voorkeur voor Bluetooth A2DP-codec selecteren"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_type_dialog_title (4558347981670553665) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Bemonsteringsfrequentie (sample rate) van Bluetooth-audio"</string>
- <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"Voorkeur voor bemonsteringsfrequentie (sample rate) voor Bluetooth A2DP-codec selecteren"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_sample_rate_dialog_title (5628790207448471613) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Bits per sample voor Bluetooth-audio"</string>
- <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"Voorkeur voor bits per sample voor Bluetooth A2DP-codec selecteren"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_bits_per_sample_dialog_title (4546131401358681321) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Kanaalmodus voor Bluetooth-audio"</string>
- <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"Voorkeur voor kanaalmodus voor Bluetooth A2DP-codec selecteren"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"LDAC-afspeelkwaliteit voor Bluetooth-audio"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"Voorkeur voor LDAC-afspeelkwaliteit voor Bluetooth A2DP-codec selecteren"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_channel_mode_dialog_title (9133545781346216071) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality (3619694372407843405) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (3181967377574368400) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_streaming_label (5347862512596240506) -->
+ <skip />
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Opties weergeven voor certificering van draadloze weergave"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Logniveau voor wifi verhogen, weergeven per SSID RSSI in wifi-kiezer"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"Indien ingeschakeld, is wifi agressiever bij het overgeven van de gegevensverbinding aan mobiel wanneer het wifi-signaal zwak is"</string>
diff --git a/packages/SettingsLib/res/values-pa/arrays.xml b/packages/SettingsLib/res/values-pa/arrays.xml
index 670a69b..7a100a9 100644
--- a/packages/SettingsLib/res/values-pa/arrays.xml
+++ b/packages/SettingsLib/res/values-pa/arrays.xml
@@ -58,66 +58,22 @@
<item msgid="3878793616631049349">"ਕੇਵਲ DRM ਸਮੱਗਰੀ ਲਈ HDCP ਜਾਂਚ"</item>
<item msgid="45075631231212732">"ਹਮੇਸਾਂ HDCP ਜਾਂਚ ਵਰਤੋ"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="1852387125374225729">"ਪੂਰਵ-ਨਿਰਧਾਰਤ"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="4260844283202960798">"aptX"</item>
- <item msgid="7279983368484312990">"aptX-HD"</item>
- <item msgid="2301339338870319651">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="9072025520360316957">"ਪੂਰਵ-ਨਿਰਧਾਰਤ"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="1190434429082395888">"aptX"</item>
- <item msgid="649699003004233053">"aptX-HD"</item>
- <item msgid="508106435710925399">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
- <item msgid="7102940318360468759">"ਪੂਰਵ-ਨਿਰਧਾਰਤ"</item>
- <item msgid="8895532488906185219">"44.1 kHz"</item>
- <item msgid="2909915718994807056">"48.0 kHz"</item>
- <item msgid="3347287377354164611">"88.2 kHz"</item>
- <item msgid="1234212100239985373">"96.0 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
- <item msgid="7224433008148687313">"ਪੂਰਵ-ਨਿਰਧਾਰਤ"</item>
- <item msgid="4482862757811638365">"44.1 kHz"</item>
- <item msgid="354495328188724404">"48.0 kHz"</item>
- <item msgid="7329816882213695083">"88.2 kHz"</item>
- <item msgid="6967397666254430476">"96.0 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
- <item msgid="6694044160540313386">"ਪੂਰਵ-ਨਿਰਧਾਰਤ"</item>
- <item msgid="5618929009984956469">"16 ਬਿਟਾਂ/ਨਮੂਨਾ"</item>
- <item msgid="3412640499234627248">"24 ਬਿਟਾਂ/ਨਮੂਨਾ"</item>
- <item msgid="121583001492929387">"32 ਬਿਟਾਂ/ਨਮੂਨਾ"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
- <item msgid="5091076677792306320">"ਪੂਰਵ-ਨਿਰਧਾਰਤ"</item>
- <item msgid="4726688794884191540">"16 ਬਿਟਾਂ/ਨਮੂਨਾ"</item>
- <item msgid="305344756485516870">"24 ਬਿਟਾਂ/ਨਮੂਨਾ"</item>
- <item msgid="244568657919675099">"32 ਬਿਟਾਂ/ਨਮੂਨਾ"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
- <item msgid="13423709606339855">"ਪੂਰਵ-ਨਿਰਧਾਰਤ"</item>
- <item msgid="4106832974775067314">"ਮੋਨੋ"</item>
- <item msgid="5571632958424639155">"ਸਟੀਰੀਓ"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
- <item msgid="8128478683963250130">"ਪੂਰਵ-ਨਿਰਧਾਰਤ"</item>
- <item msgid="8900559293912978337">"ਮੋਨੋ"</item>
- <item msgid="8883739882299884241">"ਸਟੀਰੀਓ"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
- <item msgid="2944889121850394020">"ਤਰਜੀਹੀ ਧੁਨੀ ਗੁਣਵੱਤਾ (990kbps/909kbps)"</item>
- <item msgid="138837449700903545">"ਮਿਆਰੀ ਗੁਣਵੱਤਾ (660kbps/606kbps)"</item>
- <item msgid="4777177307869441982">"ਤਰਜੀਹੀ ਕਨੈਕਸ਼ਨ (330kbps/303kbps)"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
- <item msgid="172302906231378902">"ਤਰਜੀਹੀ ਧੁਨੀ ਗੁਣਵੱਤਾ (990kbps/909kbps)"</item>
- <item msgid="9091111147684472529">"ਮਿਆਰੀ ਗੁਣਵੱਤਾ (660kbps/606kbps)"</item>
- <item msgid="3367904477834831032">"ਤਰਜੀਹੀ ਕਨੈਕਸ਼ਨ (330kbps/303kbps)"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:0 (7065842274271279580) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:3 (500463122137421129) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:0 (5062108632402595000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3093550793512117000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_titles:0 (3093023430402746802) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_summaries:0 (3214516120190965356) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_titles:0 (2684127272582591429) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_summaries:0 (1081159789834584363) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_titles:0 (5226878858503393706) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_summaries:0 (4118561796005528173) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:0 (3411577996960199959) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:1 (2921767058740704969) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:2 (3682554248829489641) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:0 (7668834469173465015) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:1 (4327143584633311908) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:2 (6155648878105378550) -->
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"ਬੰਦ"</item>
<item msgid="1593289376502312923">"64K"</item>
diff --git a/packages/SettingsLib/res/values-pa/strings.xml b/packages/SettingsLib/res/values-pa/strings.xml
index 9f717e0..647e573 100644
--- a/packages/SettingsLib/res/values-pa/strings.xml
+++ b/packages/SettingsLib/res/values-pa/strings.xml
@@ -171,15 +171,23 @@
<string name="mobile_data_always_on" msgid="7745605759775320362">"ਸੈਲਿਊਲਰ ਡੇਟਾ ਹਮੇਸ਼ਾ ਕਿਰਿਆਸ਼ੀਲ"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"ਪੂਰਨ ਵੌਲਿਊਮ ਨੂੰ ਅਯੋਗ ਬਣਾਓ"</string>
<string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"ਬਲੂਟੁੱਥ ਔਡੀਓ ਕੋਡੇਕ"</string>
- <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"ਤਰਜੀਹੀ ਬਲੂਟੁੱਥ A2DP ਕੋਡੇਕ ਚੁਣੋ"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_type_dialog_title (4558347981670553665) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"ਬਲੂਟੁੱਥ ਔਡੀਓ ਨਮੂਨਾ ਦਰ"</string>
- <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"ਤਰਜੀਹੀ ਬਲੂਟੁੱਥ A2DP ਕੋਡੇਕ ਨਮੂਨਾ ਦਰ ਚੁਣੋ"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_sample_rate_dialog_title (5628790207448471613) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"ਪ੍ਰਤੀ ਨਮੂਨਾ ਬਲੂਟੁੱਥ ਔਡੀਓ ਬਿਟਾਂ"</string>
- <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"ਪ੍ਰਤੀ ਨਮੂਨਾ ਤਰਜੀਹੀ ਬਲੂਟੁੱਥ A2DP ਕੋਡੇਕ ਬਿਟਾਂ ਚੁਣੋ"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_bits_per_sample_dialog_title (4546131401358681321) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"ਬਲੂਟੁੱਥ ਔਡੀਓ ਚੈਨਲ ਮੋਡ"</string>
- <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"ਤਰਜੀਹੀ ਬਲੂਟੁੱਥ A2DP ਕੋਡੇਕ ਚੈਨਲ ਮੋਡ ਚੁਣੋ"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"ਬਲੂਟੁੱਥ ਔਡੀਓ LDAC ਪਲੇਬੈਕ ਗੁਣਵੱਤਾ"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"ਤਰਜੀਹੀ ਬਲੂਟੁੱਥ A2DP ਕੋਡੇਕ LDAC ਪਲੇਬੈਕ ਗੁਣਵੱਤਾ ਚੁਣੋ"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_channel_mode_dialog_title (9133545781346216071) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality (3619694372407843405) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (3181967377574368400) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_streaming_label (5347862512596240506) -->
+ <skip />
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"ਵਾਇਰਲੈਸ ਡਿਸਪਲੇ ਪ੍ਰਮਾਣੀਕਰਨ ਲਈ ਚੋਣਾਂ ਦਿਖਾਓ"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Wi‑Fi ਲੌਗਿੰਗ ਪੱਧਰ ਵਧਾਓ, Wi‑Fi Picker ਵਿੱਚ ਪ੍ਰਤੀ SSID RSSI ਦਿਖਾਓ"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"ਜਦੋਂ ਸਮਰਥਿਤ ਹੋਵੇ, ਤਾਂ Wi‑Fi ਸੈਲਿਊਲਰ ਨੂੰ ਡੈਟਾ ਕਨੈਕਸ਼ਨ ਹੈਂਡ ਓਵਰ ਕਰਨ ਵਿੱਚ ਵੱਧ ਅਗ੍ਰੈਸਿਵ ਹੋ ਜਾਏਗਾ, ਜਦੋਂ Wi‑Fi ਸਿਗਨਲ ਘੱਟ ਹੋਵੇ"</string>
diff --git a/packages/SettingsLib/res/values-pl/arrays.xml b/packages/SettingsLib/res/values-pl/arrays.xml
index 15a7b51..c813cad 100644
--- a/packages/SettingsLib/res/values-pl/arrays.xml
+++ b/packages/SettingsLib/res/values-pl/arrays.xml
@@ -58,66 +58,22 @@
<item msgid="3878793616631049349">"Użyj sprawdzania HDCP tylko w przypadku treści chronionych DRM"</item>
<item msgid="45075631231212732">"Zawsze używaj sprawdzania HDCP"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="1852387125374225729">"Wartość domyślna"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="4260844283202960798">"aptX"</item>
- <item msgid="7279983368484312990">"aptX-HD"</item>
- <item msgid="2301339338870319651">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="9072025520360316957">"Wartość domyślna"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="1190434429082395888">"aptX"</item>
- <item msgid="649699003004233053">"aptX-HD"</item>
- <item msgid="508106435710925399">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
- <item msgid="7102940318360468759">"Wartość domyślna"</item>
- <item msgid="8895532488906185219">"44,1 kHz"</item>
- <item msgid="2909915718994807056">"48,0 kHz"</item>
- <item msgid="3347287377354164611">"88,2 kHz"</item>
- <item msgid="1234212100239985373">"96,0 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
- <item msgid="7224433008148687313">"Wartość domyślna"</item>
- <item msgid="4482862757811638365">"44,1 kHz"</item>
- <item msgid="354495328188724404">"48,0 kHz"</item>
- <item msgid="7329816882213695083">"88,2 kHz"</item>
- <item msgid="6967397666254430476">"96,0 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
- <item msgid="6694044160540313386">"Wartość domyślna"</item>
- <item msgid="5618929009984956469">"16 bitów/próbkę"</item>
- <item msgid="3412640499234627248">"24 bity/próbkę"</item>
- <item msgid="121583001492929387">"32 bity/próbkę"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
- <item msgid="5091076677792306320">"Wartość domyślna"</item>
- <item msgid="4726688794884191540">"16 bitów/próbkę"</item>
- <item msgid="305344756485516870">"24 bity/próbkę"</item>
- <item msgid="244568657919675099">"32 bity/próbkę"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
- <item msgid="13423709606339855">"Wartość domyślna"</item>
- <item msgid="4106832974775067314">"Mono"</item>
- <item msgid="5571632958424639155">"Stereo"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
- <item msgid="8128478683963250130">"Wartość domyślna"</item>
- <item msgid="8900559293912978337">"Mono"</item>
- <item msgid="8883739882299884241">"Stereo"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
- <item msgid="2944889121850394020">"Preferowana jakość dźwięku (990 kb/s / 909 kb/s)"</item>
- <item msgid="138837449700903545">"Standardowa (660 kb/s / 606 kb/s)"</item>
- <item msgid="4777177307869441982">"Preferowane połączenie (330 kb/s / 303 kb/s)"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
- <item msgid="172302906231378902">"Preferowana jakość dźwięku (990 kb/s / 909 kb/s)"</item>
- <item msgid="9091111147684472529">"Standardowa (660 kb/s / 606 kb/s)"</item>
- <item msgid="3367904477834831032">"Preferowane połączenie (330 kb/s / 303 kb/s)"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:0 (7065842274271279580) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:3 (500463122137421129) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:0 (5062108632402595000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3093550793512117000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_titles:0 (3093023430402746802) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_summaries:0 (3214516120190965356) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_titles:0 (2684127272582591429) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_summaries:0 (1081159789834584363) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_titles:0 (5226878858503393706) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_summaries:0 (4118561796005528173) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:0 (3411577996960199959) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:1 (2921767058740704969) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:2 (3682554248829489641) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:0 (7668834469173465015) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:1 (4327143584633311908) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:2 (6155648878105378550) -->
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"Wył."</item>
<item msgid="1593289376502312923">"64 KB"</item>
diff --git a/packages/SettingsLib/res/values-pl/strings.xml b/packages/SettingsLib/res/values-pl/strings.xml
index 9c841fa..20cb365 100644
--- a/packages/SettingsLib/res/values-pl/strings.xml
+++ b/packages/SettingsLib/res/values-pl/strings.xml
@@ -171,15 +171,23 @@
<string name="mobile_data_always_on" msgid="7745605759775320362">"Dane komórkowe zawsze aktywne"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Wyłącz głośność bezwzględną"</string>
<string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Kodek dźwięku Bluetooth"</string>
- <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"Wybierz preferowany kodek Bluetooth A2DP"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_type_dialog_title (4558347981670553665) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Dźwięk Bluetooth – współczynnik próbkowania"</string>
- <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"Wybierz preferowany współczynnik próbkowania w kodeku Bluetooth A2DP"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_sample_rate_dialog_title (5628790207448471613) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Dźwięk Bluetooth – liczba bitów na próbkę"</string>
- <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"Wybierz preferowaną liczbę bitów na próbkę w kodeku Bluetooth A2DP"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_bits_per_sample_dialog_title (4546131401358681321) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Dźwięk Bluetooth – tryb kanału"</string>
- <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"Wybierz preferowany tryb kanału w kodeku Bluetooth A2DP"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"Dźwięk Bluetooth – jakość dźwięku LDAC"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"Wybierz preferowaną jakość dźwięku LDAC w kodeku Bluetooth A2DP"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_channel_mode_dialog_title (9133545781346216071) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality (3619694372407843405) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (3181967377574368400) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_streaming_label (5347862512596240506) -->
+ <skip />
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Pokaż opcje certyfikacji wyświetlacza bezprzewodowego"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Zwiększ poziom rejestrowania Wi‑Fi, pokazuj według RSSI SSID w selektorze Wi‑Fi"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"Po włączeniu połączenie danych będzie bardziej agresywnie przełączać się z Wi-Fi na sieć komórkową przy słabym sygnale Wi-Fi"</string>
diff --git a/packages/SettingsLib/res/values-pt-rBR/arrays.xml b/packages/SettingsLib/res/values-pt-rBR/arrays.xml
index 4d1f3bb..29e3f41 100644
--- a/packages/SettingsLib/res/values-pt-rBR/arrays.xml
+++ b/packages/SettingsLib/res/values-pt-rBR/arrays.xml
@@ -58,66 +58,22 @@
<item msgid="3878793616631049349">"Usar a verificação HDCP somente para conteúdo DRM"</item>
<item msgid="45075631231212732">"Sempre usar a verificação HDCP"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="1852387125374225729">"Padrão"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="4260844283202960798">"aptX"</item>
- <item msgid="7279983368484312990">"aptX-HD"</item>
- <item msgid="2301339338870319651">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="9072025520360316957">"Padrão"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="1190434429082395888">"aptX"</item>
- <item msgid="649699003004233053">"aptX-HD"</item>
- <item msgid="508106435710925399">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
- <item msgid="7102940318360468759">"Padrão"</item>
- <item msgid="8895532488906185219">"44,1 kHz"</item>
- <item msgid="2909915718994807056">"48 kHz"</item>
- <item msgid="3347287377354164611">"88,2 kHz"</item>
- <item msgid="1234212100239985373">"96 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
- <item msgid="7224433008148687313">"Padrão"</item>
- <item msgid="4482862757811638365">"44,1 kHz"</item>
- <item msgid="354495328188724404">"48 kHz"</item>
- <item msgid="7329816882213695083">"88,2 kHz"</item>
- <item msgid="6967397666254430476">"96 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
- <item msgid="6694044160540313386">"Padrão"</item>
- <item msgid="5618929009984956469">"16 bits/amostra"</item>
- <item msgid="3412640499234627248">"24 bits/amostra"</item>
- <item msgid="121583001492929387">"32 bits/amostra"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
- <item msgid="5091076677792306320">"Padrão"</item>
- <item msgid="4726688794884191540">"16 bits/amostra"</item>
- <item msgid="305344756485516870">"24 bits/amostra"</item>
- <item msgid="244568657919675099">"32 bits/amostra"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
- <item msgid="13423709606339855">"Padrão"</item>
- <item msgid="4106832974775067314">"Mono"</item>
- <item msgid="5571632958424639155">"Estéreo"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
- <item msgid="8128478683963250130">"Padrão"</item>
- <item msgid="8900559293912978337">"Mono"</item>
- <item msgid="8883739882299884241">"Estéreo"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
- <item msgid="2944889121850394020">"Qualidade de som preferencial (990 kbps/909 kbps)"</item>
- <item msgid="138837449700903545">"Padrão (660 kbps/606 kbps)"</item>
- <item msgid="4777177307869441982">"Conexão preferencial (330 kbps/303 kbps)"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
- <item msgid="172302906231378902">"Qualidade de som preferencial (990 kbps/909 kbps)"</item>
- <item msgid="9091111147684472529">"Padrão (660 kbps/606 kbps)"</item>
- <item msgid="3367904477834831032">"Conexão preferencial (330 kbps/303 kbps)"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:0 (7065842274271279580) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:3 (500463122137421129) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:0 (5062108632402595000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3093550793512117000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_titles:0 (3093023430402746802) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_summaries:0 (3214516120190965356) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_titles:0 (2684127272582591429) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_summaries:0 (1081159789834584363) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_titles:0 (5226878858503393706) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_summaries:0 (4118561796005528173) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:0 (3411577996960199959) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:1 (2921767058740704969) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:2 (3682554248829489641) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:0 (7668834469173465015) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:1 (4327143584633311908) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:2 (6155648878105378550) -->
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"Desativado"</item>
<item msgid="1593289376502312923">"64 K"</item>
diff --git a/packages/SettingsLib/res/values-pt-rBR/strings.xml b/packages/SettingsLib/res/values-pt-rBR/strings.xml
index 1c34317..5ad3cd9e 100644
--- a/packages/SettingsLib/res/values-pt-rBR/strings.xml
+++ b/packages/SettingsLib/res/values-pt-rBR/strings.xml
@@ -171,15 +171,23 @@
<string name="mobile_data_always_on" msgid="7745605759775320362">"Dados da rede celular sempre ativos"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Desativar volume absoluto"</string>
<string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Codec de áudio Bluetooth"</string>
- <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"Selecione o codec Bluetooth A2DP preferencial"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_type_dialog_title (4558347981670553665) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Taxa de amostra do áudio Bluetooth"</string>
- <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"Selecione a taxa de amostra do codec Bluetooth A2DP preferencial"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_sample_rate_dialog_title (5628790207448471613) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Bits por amostra do áudio Bluetooth"</string>
- <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"Selecione os bits por amostra do codec Bluetooth A2DP preferencial"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_bits_per_sample_dialog_title (4546131401358681321) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Modo de canal de áudio Bluetooth"</string>
- <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"Selecione o modo de canal do codec Bluetooth A2DP preferencial"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"Qualidade de reprodução LDAC de áudio Bluetooth"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"Selecione a qualidade de reprodução LDAC do codec Bluetooth A2DP preferencial"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_channel_mode_dialog_title (9133545781346216071) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality (3619694372407843405) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (3181967377574368400) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_streaming_label (5347862512596240506) -->
+ <skip />
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Mostrar opções de certificação de Display sem fio"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Aumentar o nível de registro do Wi-Fi; mostrar conforme o RSSI de SSID na Seleção de Wi-Fi"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"Quando ativada, o Wi-Fi será mais agressivo em transferir a conexão de dados para celular, quando o sinal de Wi-Fi estiver fraco"</string>
diff --git a/packages/SettingsLib/res/values-pt-rPT/arrays.xml b/packages/SettingsLib/res/values-pt-rPT/arrays.xml
index 7332f8a..cf4d1c8 100644
--- a/packages/SettingsLib/res/values-pt-rPT/arrays.xml
+++ b/packages/SettingsLib/res/values-pt-rPT/arrays.xml
@@ -58,66 +58,22 @@
<item msgid="3878793616631049349">"Utilizar a verificação HDCP para conteúdo DRM apenas"</item>
<item msgid="45075631231212732">"Utilizar sempre a verificação HDCP"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="1852387125374225729">"Predefinição"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="4260844283202960798">"aptX"</item>
- <item msgid="7279983368484312990">"aptX-HD"</item>
- <item msgid="2301339338870319651">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="9072025520360316957">"Predefinição"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="1190434429082395888">"aptX"</item>
- <item msgid="649699003004233053">"aptX-HD"</item>
- <item msgid="508106435710925399">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
- <item msgid="7102940318360468759">"Predefinição"</item>
- <item msgid="8895532488906185219">"44,1 kHz"</item>
- <item msgid="2909915718994807056">"48,0 kHz"</item>
- <item msgid="3347287377354164611">"88,2 kHz"</item>
- <item msgid="1234212100239985373">"96,0 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
- <item msgid="7224433008148687313">"Predefinição"</item>
- <item msgid="4482862757811638365">"44,1 kHz"</item>
- <item msgid="354495328188724404">"48,0 kHz"</item>
- <item msgid="7329816882213695083">"88,2 kHz"</item>
- <item msgid="6967397666254430476">"96,0 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
- <item msgid="6694044160540313386">"Predefinição"</item>
- <item msgid="5618929009984956469">"16 bits/amostra"</item>
- <item msgid="3412640499234627248">"24 bits/amostra"</item>
- <item msgid="121583001492929387">"32 bits/amostra"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
- <item msgid="5091076677792306320">"Predefinição"</item>
- <item msgid="4726688794884191540">"16 bits/amostra"</item>
- <item msgid="305344756485516870">"24 bits/amostra"</item>
- <item msgid="244568657919675099">"32 bits/amostra"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
- <item msgid="13423709606339855">"Predefinição"</item>
- <item msgid="4106832974775067314">"Mono"</item>
- <item msgid="5571632958424639155">"Estéreo"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
- <item msgid="8128478683963250130">"Predefinição"</item>
- <item msgid="8900559293912978337">"Mono"</item>
- <item msgid="8883739882299884241">"Estéreo"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
- <item msgid="2944889121850394020">"Qual. som preferida (990 kbps/909 kbps)"</item>
- <item msgid="138837449700903545">"Padrão (660 kbps/606 kbps)"</item>
- <item msgid="4777177307869441982">"Ligação preferida (330 kbps/303 kbps)"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
- <item msgid="172302906231378902">"Qual. som preferida (990 kbps/909 kbps)"</item>
- <item msgid="9091111147684472529">"Padrão (660 kbps/606 kbps)"</item>
- <item msgid="3367904477834831032">"Ligação preferida (330 kbps/303 kbps)"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:0 (7065842274271279580) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:3 (500463122137421129) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:0 (5062108632402595000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3093550793512117000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_titles:0 (3093023430402746802) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_summaries:0 (3214516120190965356) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_titles:0 (2684127272582591429) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_summaries:0 (1081159789834584363) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_titles:0 (5226878858503393706) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_summaries:0 (4118561796005528173) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:0 (3411577996960199959) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:1 (2921767058740704969) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:2 (3682554248829489641) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:0 (7668834469173465015) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:1 (4327143584633311908) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:2 (6155648878105378550) -->
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"Desativado"</item>
<item msgid="1593289376502312923">"64 K"</item>
diff --git a/packages/SettingsLib/res/values-pt-rPT/strings.xml b/packages/SettingsLib/res/values-pt-rPT/strings.xml
index c519b61..f8ceac2 100644
--- a/packages/SettingsLib/res/values-pt-rPT/strings.xml
+++ b/packages/SettingsLib/res/values-pt-rPT/strings.xml
@@ -171,15 +171,23 @@
<string name="mobile_data_always_on" msgid="7745605759775320362">"Dados móveis sempre ativados"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Desativar volume absoluto"</string>
<string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Codec de áudio Bluetooth"</string>
- <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"Selecionar Codec A2DP Bluetooth preferido"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_type_dialog_title (4558347981670553665) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Taxa de amostragem de áudio Bluetooth"</string>
- <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"Selecionar Taxa de amostragem de codec A2DP Bluetooth"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_sample_rate_dialog_title (5628790207448471613) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Bits por amostra de áudio Bluetooth"</string>
- <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"Selecionar Bits por amostra de codec A2DP Bluetooth preferido"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_bits_per_sample_dialog_title (4546131401358681321) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Modo de canal áudio Bluetooth"</string>
- <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"Selecionar Modo de canal de codec A2DP Bluetooth preferido"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"Qualidade de reprodução LDAC de áudio Bluetooth"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"Selecionar Qualidade de reprodução LDAC de codec A2DP Bluetooth"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_channel_mode_dialog_title (9133545781346216071) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality (3619694372407843405) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (3181967377574368400) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_streaming_label (5347862512596240506) -->
+ <skip />
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Mostrar opções da certificação de display sem fios"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Aumentar o nível de reg. de Wi-Fi, mostrar por RSSI de SSID no Selec. de Wi-Fi"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"Se estiver ativado, o Wi-Fi será mais agressivo ao transmitir a lig. de dados p/ a rede móvel quando o sinal Wi-Fi estiver fraco"</string>
diff --git a/packages/SettingsLib/res/values-pt/arrays.xml b/packages/SettingsLib/res/values-pt/arrays.xml
index 4d1f3bb..29e3f41 100644
--- a/packages/SettingsLib/res/values-pt/arrays.xml
+++ b/packages/SettingsLib/res/values-pt/arrays.xml
@@ -58,66 +58,22 @@
<item msgid="3878793616631049349">"Usar a verificação HDCP somente para conteúdo DRM"</item>
<item msgid="45075631231212732">"Sempre usar a verificação HDCP"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="1852387125374225729">"Padrão"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="4260844283202960798">"aptX"</item>
- <item msgid="7279983368484312990">"aptX-HD"</item>
- <item msgid="2301339338870319651">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="9072025520360316957">"Padrão"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="1190434429082395888">"aptX"</item>
- <item msgid="649699003004233053">"aptX-HD"</item>
- <item msgid="508106435710925399">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
- <item msgid="7102940318360468759">"Padrão"</item>
- <item msgid="8895532488906185219">"44,1 kHz"</item>
- <item msgid="2909915718994807056">"48 kHz"</item>
- <item msgid="3347287377354164611">"88,2 kHz"</item>
- <item msgid="1234212100239985373">"96 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
- <item msgid="7224433008148687313">"Padrão"</item>
- <item msgid="4482862757811638365">"44,1 kHz"</item>
- <item msgid="354495328188724404">"48 kHz"</item>
- <item msgid="7329816882213695083">"88,2 kHz"</item>
- <item msgid="6967397666254430476">"96 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
- <item msgid="6694044160540313386">"Padrão"</item>
- <item msgid="5618929009984956469">"16 bits/amostra"</item>
- <item msgid="3412640499234627248">"24 bits/amostra"</item>
- <item msgid="121583001492929387">"32 bits/amostra"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
- <item msgid="5091076677792306320">"Padrão"</item>
- <item msgid="4726688794884191540">"16 bits/amostra"</item>
- <item msgid="305344756485516870">"24 bits/amostra"</item>
- <item msgid="244568657919675099">"32 bits/amostra"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
- <item msgid="13423709606339855">"Padrão"</item>
- <item msgid="4106832974775067314">"Mono"</item>
- <item msgid="5571632958424639155">"Estéreo"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
- <item msgid="8128478683963250130">"Padrão"</item>
- <item msgid="8900559293912978337">"Mono"</item>
- <item msgid="8883739882299884241">"Estéreo"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
- <item msgid="2944889121850394020">"Qualidade de som preferencial (990 kbps/909 kbps)"</item>
- <item msgid="138837449700903545">"Padrão (660 kbps/606 kbps)"</item>
- <item msgid="4777177307869441982">"Conexão preferencial (330 kbps/303 kbps)"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
- <item msgid="172302906231378902">"Qualidade de som preferencial (990 kbps/909 kbps)"</item>
- <item msgid="9091111147684472529">"Padrão (660 kbps/606 kbps)"</item>
- <item msgid="3367904477834831032">"Conexão preferencial (330 kbps/303 kbps)"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:0 (7065842274271279580) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:3 (500463122137421129) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:0 (5062108632402595000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3093550793512117000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_titles:0 (3093023430402746802) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_summaries:0 (3214516120190965356) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_titles:0 (2684127272582591429) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_summaries:0 (1081159789834584363) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_titles:0 (5226878858503393706) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_summaries:0 (4118561796005528173) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:0 (3411577996960199959) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:1 (2921767058740704969) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:2 (3682554248829489641) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:0 (7668834469173465015) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:1 (4327143584633311908) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:2 (6155648878105378550) -->
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"Desativado"</item>
<item msgid="1593289376502312923">"64 K"</item>
diff --git a/packages/SettingsLib/res/values-pt/strings.xml b/packages/SettingsLib/res/values-pt/strings.xml
index 1c34317..5ad3cd9e 100644
--- a/packages/SettingsLib/res/values-pt/strings.xml
+++ b/packages/SettingsLib/res/values-pt/strings.xml
@@ -171,15 +171,23 @@
<string name="mobile_data_always_on" msgid="7745605759775320362">"Dados da rede celular sempre ativos"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Desativar volume absoluto"</string>
<string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Codec de áudio Bluetooth"</string>
- <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"Selecione o codec Bluetooth A2DP preferencial"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_type_dialog_title (4558347981670553665) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Taxa de amostra do áudio Bluetooth"</string>
- <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"Selecione a taxa de amostra do codec Bluetooth A2DP preferencial"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_sample_rate_dialog_title (5628790207448471613) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Bits por amostra do áudio Bluetooth"</string>
- <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"Selecione os bits por amostra do codec Bluetooth A2DP preferencial"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_bits_per_sample_dialog_title (4546131401358681321) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Modo de canal de áudio Bluetooth"</string>
- <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"Selecione o modo de canal do codec Bluetooth A2DP preferencial"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"Qualidade de reprodução LDAC de áudio Bluetooth"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"Selecione a qualidade de reprodução LDAC do codec Bluetooth A2DP preferencial"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_channel_mode_dialog_title (9133545781346216071) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality (3619694372407843405) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (3181967377574368400) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_streaming_label (5347862512596240506) -->
+ <skip />
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Mostrar opções de certificação de Display sem fio"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Aumentar o nível de registro do Wi-Fi; mostrar conforme o RSSI de SSID na Seleção de Wi-Fi"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"Quando ativada, o Wi-Fi será mais agressivo em transferir a conexão de dados para celular, quando o sinal de Wi-Fi estiver fraco"</string>
diff --git a/packages/SettingsLib/res/values-ro/arrays.xml b/packages/SettingsLib/res/values-ro/arrays.xml
index a6a0757..dc03065 100644
--- a/packages/SettingsLib/res/values-ro/arrays.xml
+++ b/packages/SettingsLib/res/values-ro/arrays.xml
@@ -58,66 +58,22 @@
<item msgid="3878793616631049349">"Utilizează verificarea HDCP numai pentru conținut DRM"</item>
<item msgid="45075631231212732">"Utilizează întotdeauna verificarea HDCP"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="1852387125374225729">"Prestabilit"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="4260844283202960798">"aptX"</item>
- <item msgid="7279983368484312990">"aptX-HD"</item>
- <item msgid="2301339338870319651">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="9072025520360316957">"Prestabilit"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="1190434429082395888">"aptX"</item>
- <item msgid="649699003004233053">"aptX-HD"</item>
- <item msgid="508106435710925399">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
- <item msgid="7102940318360468759">"Prestabilit"</item>
- <item msgid="8895532488906185219">"44,1 kHz"</item>
- <item msgid="2909915718994807056">"48,0 kHz"</item>
- <item msgid="3347287377354164611">"88,2 kHz"</item>
- <item msgid="1234212100239985373">"96,0 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
- <item msgid="7224433008148687313">"Prestabilit"</item>
- <item msgid="4482862757811638365">"44,1 kHz"</item>
- <item msgid="354495328188724404">"48,0 kHz"</item>
- <item msgid="7329816882213695083">"88,2 kHz"</item>
- <item msgid="6967397666254430476">"96,0 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
- <item msgid="6694044160540313386">"Prestabilit"</item>
- <item msgid="5618929009984956469">"16 biți/eșantion"</item>
- <item msgid="3412640499234627248">"24 biți/eșantion"</item>
- <item msgid="121583001492929387">"32 biți/eșantion"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
- <item msgid="5091076677792306320">"Prestabilit"</item>
- <item msgid="4726688794884191540">"16 biți/eșantion"</item>
- <item msgid="305344756485516870">"24 biți/eșantion"</item>
- <item msgid="244568657919675099">"32 biți/eșantion"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
- <item msgid="13423709606339855">"Prestabilit"</item>
- <item msgid="4106832974775067314">"Mono"</item>
- <item msgid="5571632958424639155">"Stereo"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
- <item msgid="8128478683963250130">"Prestabilit"</item>
- <item msgid="8900559293912978337">"Mono"</item>
- <item msgid="8883739882299884241">"Stereo"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
- <item msgid="2944889121850394020">"Cal. pref. sunet (990 kbps/909 kbps)"</item>
- <item msgid="138837449700903545">"Standard (660 kbps/606 kbps)"</item>
- <item msgid="4777177307869441982">"Conexiune preferată (330 kbps/303 kbps)"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
- <item msgid="172302906231378902">"Cal. pref. sunet (990 kbps/909 kbps)"</item>
- <item msgid="9091111147684472529">"Standard (660 kbps/606 kbps)"</item>
- <item msgid="3367904477834831032">"Conexiune preferată (330 kbps/303 kbps)"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:0 (7065842274271279580) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:3 (500463122137421129) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:0 (5062108632402595000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3093550793512117000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_titles:0 (3093023430402746802) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_summaries:0 (3214516120190965356) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_titles:0 (2684127272582591429) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_summaries:0 (1081159789834584363) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_titles:0 (5226878858503393706) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_summaries:0 (4118561796005528173) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:0 (3411577996960199959) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:1 (2921767058740704969) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:2 (3682554248829489641) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:0 (7668834469173465015) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:1 (4327143584633311908) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:2 (6155648878105378550) -->
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"Dezactivată"</item>
<item msgid="1593289376502312923">"64 KB"</item>
diff --git a/packages/SettingsLib/res/values-ro/strings.xml b/packages/SettingsLib/res/values-ro/strings.xml
index 512ba3a..8714926 100644
--- a/packages/SettingsLib/res/values-ro/strings.xml
+++ b/packages/SettingsLib/res/values-ro/strings.xml
@@ -171,15 +171,23 @@
<string name="mobile_data_always_on" msgid="7745605759775320362">"Conexiunea de date mobile este întotdeauna activată"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Dezactivați volumul absolut"</string>
<string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Codec audio Bluetooth"</string>
- <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"Selectați codecul Bluetooth A2DP preferat"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_type_dialog_title (4558347981670553665) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Rată de eșantionare audio Bluetooth"</string>
- <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"Selectați rata de eșantionare codec Bluetooth A2DP preferată"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_sample_rate_dialog_title (5628790207448471613) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Biți audio Bluetooth per eșantion"</string>
- <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"Selectați biții codecului Bluetooth A2DP preferați per eșantion"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_bits_per_sample_dialog_title (4546131401358681321) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Modul canal audio Bluetooth"</string>
- <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"Selectați modul canal codec pentru Bluetooth A2DP preferat"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"Calitatea redării Bluetooth audio LDAC"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"Selectați calitatea redării LDAC a codecului pentru Bluetooth A2DP preferată"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_channel_mode_dialog_title (9133545781346216071) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality (3619694372407843405) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (3181967377574368400) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_streaming_label (5347862512596240506) -->
+ <skip />
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Afișați opțiunile pentru certificarea Ecran wireless"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Măriți niv. de înr. prin Wi‑Fi, afișați în fcț. de SSID RSSI în Selectorul Wi‑Fi"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"Când este activată, funcția Wi-Fi va fi mai agresivă la predarea conexiunii de date către mobil când semnalul Wi-Fi este slab"</string>
diff --git a/packages/SettingsLib/res/values-ru/arrays.xml b/packages/SettingsLib/res/values-ru/arrays.xml
index 1080b01..bf192a5 100644
--- a/packages/SettingsLib/res/values-ru/arrays.xml
+++ b/packages/SettingsLib/res/values-ru/arrays.xml
@@ -58,66 +58,22 @@
<item msgid="3878793616631049349">"Использовать проверку HDCP только для DRM-контента"</item>
<item msgid="45075631231212732">"Всегда использовать проверку HDCP"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="1852387125374225729">"По умолчанию"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="4260844283202960798">"aptX"</item>
- <item msgid="7279983368484312990">"aptX-HD"</item>
- <item msgid="2301339338870319651">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="9072025520360316957">"По умолчанию"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="1190434429082395888">"aptX"</item>
- <item msgid="649699003004233053">"aptX-HD"</item>
- <item msgid="508106435710925399">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
- <item msgid="7102940318360468759">"По умолчанию"</item>
- <item msgid="8895532488906185219">"44,1 кГц"</item>
- <item msgid="2909915718994807056">"48 кГц"</item>
- <item msgid="3347287377354164611">"88,2 кГц"</item>
- <item msgid="1234212100239985373">"96 кГц"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
- <item msgid="7224433008148687313">"По умолчанию"</item>
- <item msgid="4482862757811638365">"44,1 кГц"</item>
- <item msgid="354495328188724404">"48 кГц"</item>
- <item msgid="7329816882213695083">"88,2 кГц"</item>
- <item msgid="6967397666254430476">"96 кГц"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
- <item msgid="6694044160540313386">"По умолчанию"</item>
- <item msgid="5618929009984956469">"16 бит/отсчет"</item>
- <item msgid="3412640499234627248">"24 бит/отсчет"</item>
- <item msgid="121583001492929387">"32 бит/отсчет"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
- <item msgid="5091076677792306320">"По умолчанию"</item>
- <item msgid="4726688794884191540">"16 бит/отсчет"</item>
- <item msgid="305344756485516870">"24 бит/отсчет"</item>
- <item msgid="244568657919675099">"32 бит/отсчет"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
- <item msgid="13423709606339855">"По умолчанию"</item>
- <item msgid="4106832974775067314">"Моно"</item>
- <item msgid="5571632958424639155">"Стерео"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
- <item msgid="8128478683963250130">"По умолчанию"</item>
- <item msgid="8900559293912978337">"Моно"</item>
- <item msgid="8883739882299884241">"Стерео"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
- <item msgid="2944889121850394020">"Предпочтит. качество звука (990 кбит/с/909 кбит/с)"</item>
- <item msgid="138837449700903545">"Стандартное (660 кбит/с/606 кбит/с)"</item>
- <item msgid="4777177307869441982">"Предпочтит. соединение (330 кбит/с/303 кбит/с)"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
- <item msgid="172302906231378902">"Предпочтит. качество звука (990 кбит/с/909 кбит/с)"</item>
- <item msgid="9091111147684472529">"Стандартное (660 кбит/с/606 кбит/с)"</item>
- <item msgid="3367904477834831032">"Предпочтит. соединение (330 кбит/с/303 кбит/с)"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:0 (7065842274271279580) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:3 (500463122137421129) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:0 (5062108632402595000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3093550793512117000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_titles:0 (3093023430402746802) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_summaries:0 (3214516120190965356) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_titles:0 (2684127272582591429) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_summaries:0 (1081159789834584363) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_titles:0 (5226878858503393706) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_summaries:0 (4118561796005528173) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:0 (3411577996960199959) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:1 (2921767058740704969) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:2 (3682554248829489641) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:0 (7668834469173465015) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:1 (4327143584633311908) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:2 (6155648878105378550) -->
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"Выкл."</item>
<item msgid="1593289376502312923">"64 КБ"</item>
diff --git a/packages/SettingsLib/res/values-ru/strings.xml b/packages/SettingsLib/res/values-ru/strings.xml
index bad2158..9da906b 100644
--- a/packages/SettingsLib/res/values-ru/strings.xml
+++ b/packages/SettingsLib/res/values-ru/strings.xml
@@ -171,15 +171,23 @@
<string name="mobile_data_always_on" msgid="7745605759775320362">"Не отключать передачу данных"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Отключить абсолютный уровень громкости"</string>
<string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Аудиокодек для передачи через Bluetooth"</string>
- <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"Выберите кодек A2DP для передачи через Bluetooth"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_type_dialog_title (4558347981670553665) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Частота дискретизации при передаче через Bluetooth"</string>
- <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"Выберите частоту дискретизации для кодека A2DP (через Bluetooth)"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_sample_rate_dialog_title (5628790207448471613) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Глубина кодирования звука при передаче через Bluetooth"</string>
- <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"Выберите глубину кодирования звука для кодека A2DP (через Bluetooth)"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_bits_per_sample_dialog_title (4546131401358681321) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Режим аудиоканала Bluetooth"</string>
- <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"Выберите режим аудиоканала для кодека A2DP (через Bluetooth)"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"Качество воспроизведения с кодеком A2DP (через Bluetooth)"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"Выберите качество воспроизведения с кодеком A2DP (через Bluetooth)"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_channel_mode_dialog_title (9133545781346216071) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality (3619694372407843405) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (3181967377574368400) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_streaming_label (5347862512596240506) -->
+ <skip />
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Показывать параметры сертификации беспроводных мониторов"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"При выборе Wi‑Fi указывать в журнале RSSI для каждого SSID"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"Принудительно переключаться на мобильную сеть, если сигнал Wi-Fi слабый"</string>
diff --git a/packages/SettingsLib/res/values-si/arrays.xml b/packages/SettingsLib/res/values-si/arrays.xml
index afc125f..c9a5d12 100644
--- a/packages/SettingsLib/res/values-si/arrays.xml
+++ b/packages/SettingsLib/res/values-si/arrays.xml
@@ -58,66 +58,22 @@
<item msgid="3878793616631049349">"DRM අන්තර්ගත සඳහා පමණක් HDCP පරික්ෂාව භාවිතා කරන්න"</item>
<item msgid="45075631231212732">"සැමවිටම HDCP පිරික්සුම භාවිතා කරන්න"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="1852387125374225729">"පෙරනිමි"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="4260844283202960798">"aptX"</item>
- <item msgid="7279983368484312990">"aptX-HD"</item>
- <item msgid="2301339338870319651">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="9072025520360316957">"පෙරනිමි"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="1190434429082395888">"aptX"</item>
- <item msgid="649699003004233053">"aptX-HD"</item>
- <item msgid="508106435710925399">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
- <item msgid="7102940318360468759">"පෙරනිමි"</item>
- <item msgid="8895532488906185219">"44.1 kHz"</item>
- <item msgid="2909915718994807056">"48.0 kHz"</item>
- <item msgid="3347287377354164611">"88.2 kHz"</item>
- <item msgid="1234212100239985373">"96.0 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
- <item msgid="7224433008148687313">"පෙරනිමි"</item>
- <item msgid="4482862757811638365">"44.1 kHz"</item>
- <item msgid="354495328188724404">"48.0 kHz"</item>
- <item msgid="7329816882213695083">"88.2 kHz"</item>
- <item msgid="6967397666254430476">"96.0 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
- <item msgid="6694044160540313386">"පෙරනිමි"</item>
- <item msgid="5618929009984956469">"බිටු 16/නියැදිය"</item>
- <item msgid="3412640499234627248">"බිටු 24/නියැදිය"</item>
- <item msgid="121583001492929387">"බිටු 32/නියැදිය"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
- <item msgid="5091076677792306320">"පෙරනිමි"</item>
- <item msgid="4726688794884191540">"බිටු 16/නියැදිය"</item>
- <item msgid="305344756485516870">"බිටු 24/නියැදිය"</item>
- <item msgid="244568657919675099">"බිටු 32/නියැදිය"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
- <item msgid="13423709606339855">"පෙරනිමි"</item>
- <item msgid="4106832974775067314">"ඒකල"</item>
- <item msgid="5571632958424639155">"ස්ටීරියෝ"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
- <item msgid="8128478683963250130">"පෙරනිමි"</item>
- <item msgid="8900559293912978337">"ඒකල"</item>
- <item msgid="8883739882299884241">"ස්ටීරියෝ"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
- <item msgid="2944889121850394020">"වඩා කැමති හඬ ගුණත්වය (990kbps/909kbps)"</item>
- <item msgid="138837449700903545">"සම්මත (660kbps/606kbps)"</item>
- <item msgid="4777177307869441982">"වඩා කැමති සබැඳුම (330kbps/303kbps)"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
- <item msgid="172302906231378902">"වඩා කැමති හඬ ගුණත්වය (990kbps/909kbps)"</item>
- <item msgid="9091111147684472529">"සම්මත (660kbps/606kbps)"</item>
- <item msgid="3367904477834831032">"වඩා කැමති සබැඳුම (330kbps/303kbps)"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:0 (7065842274271279580) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:3 (500463122137421129) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:0 (5062108632402595000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3093550793512117000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_titles:0 (3093023430402746802) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_summaries:0 (3214516120190965356) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_titles:0 (2684127272582591429) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_summaries:0 (1081159789834584363) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_titles:0 (5226878858503393706) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_summaries:0 (4118561796005528173) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:0 (3411577996960199959) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:1 (2921767058740704969) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:2 (3682554248829489641) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:0 (7668834469173465015) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:1 (4327143584633311908) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:2 (6155648878105378550) -->
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"ක්රියාවිරහිතය"</item>
<item msgid="1593289376502312923">"64K"</item>
diff --git a/packages/SettingsLib/res/values-si/strings.xml b/packages/SettingsLib/res/values-si/strings.xml
index fb6545b..1ff81e6 100644
--- a/packages/SettingsLib/res/values-si/strings.xml
+++ b/packages/SettingsLib/res/values-si/strings.xml
@@ -171,15 +171,23 @@
<string name="mobile_data_always_on" msgid="7745605759775320362">"සෙලියුලර් දත්ත සැමවිට ක්රියාකාරීය"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"නිරපේක්ෂ හඩ පරිමාව අබල කරන්න"</string>
<string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"බ්ලූටූත් ශ්රව්ය Codec"</string>
- <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"වඩා කැමති බ්ලූටූත් A2DP Codec තෝරන්න"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_type_dialog_title (4558347981670553665) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"බ්ලූටූත් ශ්රව්ය නියැදි අනුපාතය"</string>
- <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"වඩා කැමති බ්ලූටූත් A2DP Codec නියැදි අනුපාතය තෝරන්න"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_sample_rate_dialog_title (5628790207448471613) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"නියැදියකට බ්ලූටූත් ශ්රව්ය බිටු"</string>
- <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"නියැදියකට වඩා කැමති බ්ලූටූත් A2DP Codec බිටු තෝරන්න"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_bits_per_sample_dialog_title (4546131401358681321) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"බ්ලූටූත් ශ්රව්ය නාලිකා ප්රකාරය"</string>
- <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"වඩා කැමති බ්ලූටූත් A2DP Codec නාලිකා ප්රකාරය තෝරන්න"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"බ්ලූටූත් ශ්රව්ය LDAC පසුධාවන ගුණත්වය"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"වඩා කැමති බ්ලූටූත් A2DP Codec පසුධාවන ගුණත්වය තෝරන්න"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_channel_mode_dialog_title (9133545781346216071) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality (3619694372407843405) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (3181967377574368400) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_streaming_label (5347862512596240506) -->
+ <skip />
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"නොරැහැන් සංදර්ශක සහතිකය සඳහා විකල්ප පෙන්වන්න"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Wi‑Fi ලොග් මට්ටම වැඩි කරන්න, Wi‑Fi තෝරනයෙහි SSID RSSI අනුව පෙන්වන්න"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"සබල විට Wi‑Fi සිග්නලය අඩු විට Wi‑Fi දත්ත සම්බන්ධතාවය සෙලියුලර් වෙත භාර දීමට වඩා ආක්රමණික වේ"</string>
diff --git a/packages/SettingsLib/res/values-sk/arrays.xml b/packages/SettingsLib/res/values-sk/arrays.xml
index 91b0351..3dd56cb 100644
--- a/packages/SettingsLib/res/values-sk/arrays.xml
+++ b/packages/SettingsLib/res/values-sk/arrays.xml
@@ -58,66 +58,22 @@
<item msgid="3878793616631049349">"Použiť kontrolu HDCP len pre obsah DRM"</item>
<item msgid="45075631231212732">"Vždy používať kontrolu HDCP"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="1852387125374225729">"Predvolené"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="4260844283202960798">"aptX"</item>
- <item msgid="7279983368484312990">"aptX-HD"</item>
- <item msgid="2301339338870319651">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="9072025520360316957">"Predvolené"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="1190434429082395888">"aptX"</item>
- <item msgid="649699003004233053">"aptX-HD"</item>
- <item msgid="508106435710925399">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
- <item msgid="7102940318360468759">"Predvolené"</item>
- <item msgid="8895532488906185219">"44,1 kHz"</item>
- <item msgid="2909915718994807056">"48,0 kHz"</item>
- <item msgid="3347287377354164611">"88,2 kHz"</item>
- <item msgid="1234212100239985373">"96,0 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
- <item msgid="7224433008148687313">"Predvolené"</item>
- <item msgid="4482862757811638365">"44,1 kHz"</item>
- <item msgid="354495328188724404">"48,0 kHz"</item>
- <item msgid="7329816882213695083">"88,2 kHz"</item>
- <item msgid="6967397666254430476">"96,0 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
- <item msgid="6694044160540313386">"Predvolené"</item>
- <item msgid="5618929009984956469">"16 bitov na vzorku"</item>
- <item msgid="3412640499234627248">"24 bitov na vzorku"</item>
- <item msgid="121583001492929387">"32 bitov na vzorku"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
- <item msgid="5091076677792306320">"Predvolené"</item>
- <item msgid="4726688794884191540">"16 bitov na vzorku"</item>
- <item msgid="305344756485516870">"24 bitov na vzorku"</item>
- <item msgid="244568657919675099">"32 bitov na vzorku"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
- <item msgid="13423709606339855">"Predvolené"</item>
- <item msgid="4106832974775067314">"Mono"</item>
- <item msgid="5571632958424639155">"Stereo"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
- <item msgid="8128478683963250130">"Predvolené"</item>
- <item msgid="8900559293912978337">"Mono"</item>
- <item msgid="8883739882299884241">"Stereo"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
- <item msgid="2944889121850394020">"Preferovaná kvalita zvuku (990/909 kb/s)"</item>
- <item msgid="138837449700903545">"Štandardné (660/606 kb/s)"</item>
- <item msgid="4777177307869441982">"Preferované pripojenie (330/303 kb/s)"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
- <item msgid="172302906231378902">"Preferovaná kvalita zvuku (990/909 kb/s)"</item>
- <item msgid="9091111147684472529">"Štandardné (660/606 kb/s)"</item>
- <item msgid="3367904477834831032">"Preferované pripojenie (330/303 kb/s)"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:0 (7065842274271279580) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:3 (500463122137421129) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:0 (5062108632402595000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3093550793512117000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_titles:0 (3093023430402746802) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_summaries:0 (3214516120190965356) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_titles:0 (2684127272582591429) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_summaries:0 (1081159789834584363) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_titles:0 (5226878858503393706) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_summaries:0 (4118561796005528173) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:0 (3411577996960199959) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:1 (2921767058740704969) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:2 (3682554248829489641) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:0 (7668834469173465015) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:1 (4327143584633311908) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:2 (6155648878105378550) -->
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"Vypnuté"</item>
<item msgid="1593289376502312923">"64 kB"</item>
diff --git a/packages/SettingsLib/res/values-sk/strings.xml b/packages/SettingsLib/res/values-sk/strings.xml
index 65de397..dfdc8f1 100644
--- a/packages/SettingsLib/res/values-sk/strings.xml
+++ b/packages/SettingsLib/res/values-sk/strings.xml
@@ -171,15 +171,23 @@
<string name="mobile_data_always_on" msgid="7745605759775320362">"Mobilné dáta vždy aktívne"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Zakázať absolútnu hlasitosť"</string>
<string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Bluetooth Audio – kodek"</string>
- <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"Vyberte preferovaný kodek Bluetooth A2DP"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_type_dialog_title (4558347981670553665) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Bluetooth Audio – vzorkovacia frekvencia"</string>
- <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"Zvoľte preferovanú vzorkovaciu frekvenciu kodeku Bluetooth A2DP"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_sample_rate_dialog_title (5628790207448471613) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Bluetooth Audio – počet bitov na vzorku"</string>
- <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"Zvoľte preferovaný počet bitov na vzorky kodeku Bluetooth A2DP"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_bits_per_sample_dialog_title (4546131401358681321) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Bluetooth Audio – režim kanála"</string>
- <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"Zvoľte preferovaný režim kanála kodeku Bluetooth A2DP"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"Kvalita prehrávania LDAC Bluetooth Audio"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"Zvoľte preferovanú kvalitu prehrávania LDAC kodeku Bluetooth A2DP"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_channel_mode_dialog_title (9133545781346216071) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality (3619694372407843405) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (3181967377574368400) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_streaming_label (5347862512596240506) -->
+ <skip />
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Zobraziť možnosti certifikácie bezdrôtového zobrazenia"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Zvýšiť úroveň denníkov Wi-Fi, zobrazovať podľa SSID RSSI pri výbere siete Wi-Fi"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"Keď túto možnosť zapnete, Wi-Fi bude agresívnejšie odovzdávať dát. pripoj. na mob. sieť vtedy, keď bude slabý signál Wi-Fi"</string>
diff --git a/packages/SettingsLib/res/values-sl/arrays.xml b/packages/SettingsLib/res/values-sl/arrays.xml
index 6b6e0c8..d717308 100644
--- a/packages/SettingsLib/res/values-sl/arrays.xml
+++ b/packages/SettingsLib/res/values-sl/arrays.xml
@@ -58,66 +58,22 @@
<item msgid="3878793616631049349">"Preverjanje HDCP uporabi samo za vsebino DRM"</item>
<item msgid="45075631231212732">"Vedno uporabi preverjanje HDCP"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="1852387125374225729">"Privzeto"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="4260844283202960798">"aptX"</item>
- <item msgid="7279983368484312990">"aptX-HD"</item>
- <item msgid="2301339338870319651">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="9072025520360316957">"Privzeto"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="1190434429082395888">"aptX"</item>
- <item msgid="649699003004233053">"aptX-HD"</item>
- <item msgid="508106435710925399">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
- <item msgid="7102940318360468759">"Privzeto"</item>
- <item msgid="8895532488906185219">"44,1 kHz"</item>
- <item msgid="2909915718994807056">"48,0 kHz"</item>
- <item msgid="3347287377354164611">"88,2 kHz"</item>
- <item msgid="1234212100239985373">"96,0 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
- <item msgid="7224433008148687313">"Privzeto"</item>
- <item msgid="4482862757811638365">"44,1 kHz"</item>
- <item msgid="354495328188724404">"48,0 kHz"</item>
- <item msgid="7329816882213695083">"88,2 kHz"</item>
- <item msgid="6967397666254430476">"96,0 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
- <item msgid="6694044160540313386">"Privzeto"</item>
- <item msgid="5618929009984956469">"16 bitov/vzorec"</item>
- <item msgid="3412640499234627248">"24 bitov/vzorec"</item>
- <item msgid="121583001492929387">"32 bitov/vzorec"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
- <item msgid="5091076677792306320">"Privzeto"</item>
- <item msgid="4726688794884191540">"16 bitov/vzorec"</item>
- <item msgid="305344756485516870">"24 bitov/vzorec"</item>
- <item msgid="244568657919675099">"32 bitov/vzorec"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
- <item msgid="13423709606339855">"Privzeto"</item>
- <item msgid="4106832974775067314">"Mono"</item>
- <item msgid="5571632958424639155">"Stereo"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
- <item msgid="8128478683963250130">"Privzeto"</item>
- <item msgid="8900559293912978337">"Mono"</item>
- <item msgid="8883739882299884241">"Stereo"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
- <item msgid="2944889121850394020">"Prednostna kakovost zvoka (990/909 kb/s)"</item>
- <item msgid="138837449700903545">"Standardno (660/606 kb/s)"</item>
- <item msgid="4777177307869441982">"Prednostna povezava (330/303 kb/s)"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
- <item msgid="172302906231378902">"Prednostna kakovost zvoka (990/909 kb/s)"</item>
- <item msgid="9091111147684472529">"Standardno (660/606 kb/s)"</item>
- <item msgid="3367904477834831032">"Prednostna povezava (330/303 kb/s)"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:0 (7065842274271279580) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:3 (500463122137421129) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:0 (5062108632402595000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3093550793512117000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_titles:0 (3093023430402746802) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_summaries:0 (3214516120190965356) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_titles:0 (2684127272582591429) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_summaries:0 (1081159789834584363) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_titles:0 (5226878858503393706) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_summaries:0 (4118561796005528173) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:0 (3411577996960199959) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:1 (2921767058740704969) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:2 (3682554248829489641) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:0 (7668834469173465015) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:1 (4327143584633311908) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:2 (6155648878105378550) -->
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"Izklopljeno"</item>
<item msgid="1593289376502312923">"64 K"</item>
diff --git a/packages/SettingsLib/res/values-sl/strings.xml b/packages/SettingsLib/res/values-sl/strings.xml
index ef21240..af564f8 100644
--- a/packages/SettingsLib/res/values-sl/strings.xml
+++ b/packages/SettingsLib/res/values-sl/strings.xml
@@ -171,15 +171,23 @@
<string name="mobile_data_always_on" msgid="7745605759775320362">"Prenos podatkov v mobilnih omrežjih je vedno aktiven"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Onemogočanje absolutnega praga glasnosti"</string>
<string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Zvočni kodek za Bluetooth"</string>
- <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"Izberite prednostni kodek A2DP za Bluetooth"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_type_dialog_title (4558347981670553665) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Hitrost vzorčenja zvoka prek Bluetootha"</string>
- <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"Izberite prednostno hitrost vzorčenja za kodek A2DP za Bluetooth"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_sample_rate_dialog_title (5628790207448471613) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Število bitov na vzorec za zvok prek Bluetootha"</string>
- <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"Izberite prednostno število bitov na vzorec za kodek A2DP za Bluetooth"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_bits_per_sample_dialog_title (4546131401358681321) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Način zvočnega kanala prek Bluetootha"</string>
- <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"Izberite prednostni način kanala za kodek A2DP za Bluetooth"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"Kakovost predvajanja LDAC za zvok prek Bluetootha"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"Izberite prednostno kakovost predvajanja LDAC za kodek A2DP za Bluetooth"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_channel_mode_dialog_title (9133545781346216071) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality (3619694372407843405) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (3181967377574368400) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_streaming_label (5347862512596240506) -->
+ <skip />
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Pokaži možnosti za potrdilo brezžičnega zaslona"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Povečaj raven zapis. dnev. za Wi-Fi; v izbir. Wi‑Fi-ja pokaži glede na SSID RSSI"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"Če je ta možnost omogočena, Wi-Fi odločneje preda podatkovno povezavo mobilnemu omrežju, ko je signal Wi-Fi šibek"</string>
diff --git a/packages/SettingsLib/res/values-sq/arrays.xml b/packages/SettingsLib/res/values-sq/arrays.xml
index e52b9fa..b91f694 100644
--- a/packages/SettingsLib/res/values-sq/arrays.xml
+++ b/packages/SettingsLib/res/values-sq/arrays.xml
@@ -58,66 +58,22 @@
<item msgid="3878793616631049349">"Përdor kontrollin e HDCP-së vetëm për përmbajtjet DRM"</item>
<item msgid="45075631231212732">"Përdor gjithmonë kontrollin e HDCP-së"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="1852387125374225729">"I parazgjedhur"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="4260844283202960798">"aptX"</item>
- <item msgid="7279983368484312990">"aptX-HD"</item>
- <item msgid="2301339338870319651">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="9072025520360316957">"I parazgjedhur"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="1190434429082395888">"aptX"</item>
- <item msgid="649699003004233053">"aptX-HD"</item>
- <item msgid="508106435710925399">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
- <item msgid="7102940318360468759">"I parazgjedhur"</item>
- <item msgid="8895532488906185219">"44,1 kHz"</item>
- <item msgid="2909915718994807056">"48,0 kHz"</item>
- <item msgid="3347287377354164611">"88,2 kHz"</item>
- <item msgid="1234212100239985373">"96,0 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
- <item msgid="7224433008148687313">"I parazgjedhur"</item>
- <item msgid="4482862757811638365">"44,1 kHz"</item>
- <item msgid="354495328188724404">"48,0 kHz"</item>
- <item msgid="7329816882213695083">"88,2 kHz"</item>
- <item msgid="6967397666254430476">"96,0 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
- <item msgid="6694044160540313386">"I parazgjedhur"</item>
- <item msgid="5618929009984956469">"16 bite/shembull"</item>
- <item msgid="3412640499234627248">"24 bite/shembull"</item>
- <item msgid="121583001492929387">"32 bite/shembull"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
- <item msgid="5091076677792306320">"I parazgjedhur"</item>
- <item msgid="4726688794884191540">"16 bite/shembull"</item>
- <item msgid="305344756485516870">"24 bite/shembull"</item>
- <item msgid="244568657919675099">"32 bite/shembull"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
- <item msgid="13423709606339855">"I parazgjedhur"</item>
- <item msgid="4106832974775067314">"Mono"</item>
- <item msgid="5571632958424639155">"Stereo"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
- <item msgid="8128478683963250130">"I parazgjedhur"</item>
- <item msgid="8900559293912978337">"Mono"</item>
- <item msgid="8883739882299884241">"Stereo"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
- <item msgid="2944889121850394020">"Cilësia e preferuar e zërit (990 kbps/909 kbps)"</item>
- <item msgid="138837449700903545">"Standarde (660 kbps/606 kbps)"</item>
- <item msgid="4777177307869441982">"Lidhja e preferuar (330 kbps/303 kbps)"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
- <item msgid="172302906231378902">"Cilësia e preferuar e zërit (990 kbps/909 kbps)"</item>
- <item msgid="9091111147684472529">"Standarde (660 kbps/606 kbps)"</item>
- <item msgid="3367904477834831032">"Lidhja e preferuar (330 kbps/303 kbps)"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:0 (7065842274271279580) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:3 (500463122137421129) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:0 (5062108632402595000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3093550793512117000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_titles:0 (3093023430402746802) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_summaries:0 (3214516120190965356) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_titles:0 (2684127272582591429) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_summaries:0 (1081159789834584363) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_titles:0 (5226878858503393706) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_summaries:0 (4118561796005528173) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:0 (3411577996960199959) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:1 (2921767058740704969) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:2 (3682554248829489641) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:0 (7668834469173465015) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:1 (4327143584633311908) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:2 (6155648878105378550) -->
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"Joaktiv"</item>
<item msgid="1593289376502312923">"64 mijë"</item>
diff --git a/packages/SettingsLib/res/values-sq/strings.xml b/packages/SettingsLib/res/values-sq/strings.xml
index 56c36c0..1017cfc 100644
--- a/packages/SettingsLib/res/values-sq/strings.xml
+++ b/packages/SettingsLib/res/values-sq/strings.xml
@@ -171,15 +171,23 @@
<string name="mobile_data_always_on" msgid="7745605759775320362">"Të dhënat celulare gjithmonë aktive"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Çaktivizo volumin absolut"</string>
<string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Kodeku Bluetooth Audio"</string>
- <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"Zgjidh kodekun e preferuar Bluetooth A2DP"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_type_dialog_title (4558347981670553665) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Shpejtësia e shembullit të Bluetooth Audio"</string>
- <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"Zgjidh shpejtësinë e preferuar të shembullit të kodekut Bluetooth A2DP"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_sample_rate_dialog_title (5628790207448471613) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Bite për shembull Bluetooth Audio"</string>
- <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"Zgjidh bite për shembull të preferuar të kodekut Bluetooth A2DP"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_bits_per_sample_dialog_title (4546131401358681321) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Regjimi i kanalit Bluetooth Audio"</string>
- <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"Zgjidh regjimi e preferuar të kanalit të kodekut Bluetooth A2DP"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"Cilësia e luajtjes së Bluetooth Audio LDAC"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"Zgjidh cilësinë e preferuar të luajtjes të kodekut Bluetooth A2DP"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_channel_mode_dialog_title (9133545781346216071) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality (3619694372407843405) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (3181967377574368400) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_streaming_label (5347862512596240506) -->
+ <skip />
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Shfaq opsionet për certifikimin e ekranit valor"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Rrit nivelin regjistrues të Wi‑Fi duke shfaqur SSID RSSI-në te Zgjedhësi i Wi‑Fi"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"Kur ky funksion aktivizohet, Wi‑Fi bëhet më agresiv në kalimin e lidhjes së të dhënave te rrjeti celular, në rastet kur sinjali Wi‑Fi është i dobët"</string>
diff --git a/packages/SettingsLib/res/values-sr/arrays.xml b/packages/SettingsLib/res/values-sr/arrays.xml
index 8448c10..e767145 100644
--- a/packages/SettingsLib/res/values-sr/arrays.xml
+++ b/packages/SettingsLib/res/values-sr/arrays.xml
@@ -58,66 +58,22 @@
<item msgid="3878793616631049349">"Користи HDCP проверу само за DRM садржај"</item>
<item msgid="45075631231212732">"Увек користи HDCP проверу"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="1852387125374225729">"Подразумевано"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="4260844283202960798">"aptX"</item>
- <item msgid="7279983368484312990">"aptX-HD"</item>
- <item msgid="2301339338870319651">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="9072025520360316957">"Подразумевано"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="1190434429082395888">"aptX"</item>
- <item msgid="649699003004233053">"aptX-HD"</item>
- <item msgid="508106435710925399">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
- <item msgid="7102940318360468759">"Подразумевано"</item>
- <item msgid="8895532488906185219">"44,1 kHz"</item>
- <item msgid="2909915718994807056">"48,0 kHz"</item>
- <item msgid="3347287377354164611">"88,2 kHz"</item>
- <item msgid="1234212100239985373">"96,0 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
- <item msgid="7224433008148687313">"Подразумевано"</item>
- <item msgid="4482862757811638365">"44,1 kHz"</item>
- <item msgid="354495328188724404">"48,0 kHz"</item>
- <item msgid="7329816882213695083">"88,2 kHz"</item>
- <item msgid="6967397666254430476">"96,0 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
- <item msgid="6694044160540313386">"Подразумевано"</item>
- <item msgid="5618929009984956469">"16 битова по узорку"</item>
- <item msgid="3412640499234627248">"24 бита по узорку"</item>
- <item msgid="121583001492929387">"32 бита по узорку"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
- <item msgid="5091076677792306320">"Подразумевано"</item>
- <item msgid="4726688794884191540">"16 битова по узорку"</item>
- <item msgid="305344756485516870">"24 бита по узорку"</item>
- <item msgid="244568657919675099">"32 бита по узорку"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
- <item msgid="13423709606339855">"Подразумевано"</item>
- <item msgid="4106832974775067314">"Моно"</item>
- <item msgid="5571632958424639155">"Стерео"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
- <item msgid="8128478683963250130">"Подразумевано"</item>
- <item msgid="8900559293912978337">"Моно"</item>
- <item msgid="8883739882299884241">"Стерео"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
- <item msgid="2944889121850394020">"Жељени квалитет звука (990 kb/s/909 kb/s)"</item>
- <item msgid="138837449700903545">"Стандардно (660 kb/s/606 kb/s)"</item>
- <item msgid="4777177307869441982">"Жељена веза (330 kb/s/303 kb/s)"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
- <item msgid="172302906231378902">"Жељени квалитет звука (990 kb/s/909 kb/s)"</item>
- <item msgid="9091111147684472529">"Стандардно (660 kb/s/606 kb/s)"</item>
- <item msgid="3367904477834831032">"Жељена веза (330 kb/s/303 kb/s)"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:0 (7065842274271279580) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:3 (500463122137421129) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:0 (5062108632402595000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3093550793512117000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_titles:0 (3093023430402746802) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_summaries:0 (3214516120190965356) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_titles:0 (2684127272582591429) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_summaries:0 (1081159789834584363) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_titles:0 (5226878858503393706) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_summaries:0 (4118561796005528173) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:0 (3411577996960199959) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:1 (2921767058740704969) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:2 (3682554248829489641) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:0 (7668834469173465015) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:1 (4327143584633311908) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:2 (6155648878105378550) -->
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"Искључено"</item>
<item msgid="1593289376502312923">"64 kB"</item>
diff --git a/packages/SettingsLib/res/values-sr/strings.xml b/packages/SettingsLib/res/values-sr/strings.xml
index fd33eab..f6de46b 100644
--- a/packages/SettingsLib/res/values-sr/strings.xml
+++ b/packages/SettingsLib/res/values-sr/strings.xml
@@ -171,15 +171,23 @@
<string name="mobile_data_always_on" msgid="7745605759775320362">"Подаци за мобилне уређаје су увек активни"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Онемогући главно подешавање јачине звука"</string>
<string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Bluetooth аудио кодек"</string>
- <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"Изаберите жељени Bluetooth A2DP кодек"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_type_dialog_title (4558347981670553665) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Брзина узорковања за Bluetooth аудио"</string>
- <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"Изаберите жељену брзину узорковања за Bluetooth A2DP кодек"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_sample_rate_dialog_title (5628790207448471613) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Битова по узорку за Bluetooth аудио"</string>
- <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"Изаберите жељени број битова по узорку за Bluetooth A2DP кодек"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_bits_per_sample_dialog_title (4546131401358681321) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Режим канала за Bluetooth аудио"</string>
- <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"Изаберите жељени режим канала за Bluetooth A2DP кодек"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"Квалитет LDAC снимка за Bluetooth аудио"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"Изаберите жељени квалитет LDAC снимка за Bluetooth A2DP кодек"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_channel_mode_dialog_title (9133545781346216071) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality (3619694372407843405) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (3181967377574368400) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_streaming_label (5347862512596240506) -->
+ <skip />
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Приказ опција за сертификацију бежичног екрана"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Повећава ниво евидентирања за Wi‑Fi. Приказ по SSID RSSI-у у бирачу Wi‑Fi мреже"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"Када се омогући, Wi‑Fi ће бити агресивнији при пребацивању мреже за пренос података на Мобилну, када је Wi‑Fi сигнал слаб"</string>
diff --git a/packages/SettingsLib/res/values-sv/arrays.xml b/packages/SettingsLib/res/values-sv/arrays.xml
index e3e0103..fe395ac 100644
--- a/packages/SettingsLib/res/values-sv/arrays.xml
+++ b/packages/SettingsLib/res/values-sv/arrays.xml
@@ -58,66 +58,22 @@
<item msgid="3878793616631049349">"Använd bara HDCP-kontroll för DRM-innehåll"</item>
<item msgid="45075631231212732">"Använd alltid HDCP-kontroll"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="1852387125374225729">"Standard"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="4260844283202960798">"aptX"</item>
- <item msgid="7279983368484312990">"aptX-HD"</item>
- <item msgid="2301339338870319651">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="9072025520360316957">"Standard"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="1190434429082395888">"aptX"</item>
- <item msgid="649699003004233053">"aptX-HD"</item>
- <item msgid="508106435710925399">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
- <item msgid="7102940318360468759">"Standard"</item>
- <item msgid="8895532488906185219">"44,1 kHz"</item>
- <item msgid="2909915718994807056">"48,0 kHz"</item>
- <item msgid="3347287377354164611">"88,2 kHz"</item>
- <item msgid="1234212100239985373">"96,0 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
- <item msgid="7224433008148687313">"Standard"</item>
- <item msgid="4482862757811638365">"44,1 kHz"</item>
- <item msgid="354495328188724404">"48,0 kHz"</item>
- <item msgid="7329816882213695083">"88,2 kHz"</item>
- <item msgid="6967397666254430476">"96,0 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
- <item msgid="6694044160540313386">"Standard"</item>
- <item msgid="5618929009984956469">"16 bitar/sampling"</item>
- <item msgid="3412640499234627248">"24 bitar/sampling"</item>
- <item msgid="121583001492929387">"32 bitar/sampling"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
- <item msgid="5091076677792306320">"Standard"</item>
- <item msgid="4726688794884191540">"16 bitar/sampling"</item>
- <item msgid="305344756485516870">"24 bitar/sampling"</item>
- <item msgid="244568657919675099">"32 bitar/sampling"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
- <item msgid="13423709606339855">"Standard"</item>
- <item msgid="4106832974775067314">"Mono"</item>
- <item msgid="5571632958424639155">"Stereo"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
- <item msgid="8128478683963250130">"Standard"</item>
- <item msgid="8900559293912978337">"Mono"</item>
- <item msgid="8883739882299884241">"Stereo"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
- <item msgid="2944889121850394020">"Föredragen ljudkvalitet (990 kbit/s eller 909 kbit/s)"</item>
- <item msgid="138837449700903545">"Standard (660 kbit/s eller 606 kbit/s)"</item>
- <item msgid="4777177307869441982">"Föredragen anslutning (330 kbit/s eller 303 kbit/s)"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
- <item msgid="172302906231378902">"Föredragen ljudkvalitet (990 kbit/s eller 909 kbit/s)"</item>
- <item msgid="9091111147684472529">"Standard (660 kbit/s eller 606 kbit/s)"</item>
- <item msgid="3367904477834831032">"Föredragen anslutning (330 kbit/s eller 303 kbit/s)"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:0 (7065842274271279580) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:3 (500463122137421129) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:0 (5062108632402595000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3093550793512117000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_titles:0 (3093023430402746802) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_summaries:0 (3214516120190965356) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_titles:0 (2684127272582591429) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_summaries:0 (1081159789834584363) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_titles:0 (5226878858503393706) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_summaries:0 (4118561796005528173) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:0 (3411577996960199959) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:1 (2921767058740704969) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:2 (3682554248829489641) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:0 (7668834469173465015) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:1 (4327143584633311908) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:2 (6155648878105378550) -->
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"Av"</item>
<item msgid="1593289376502312923">"64 kB"</item>
diff --git a/packages/SettingsLib/res/values-sv/strings.xml b/packages/SettingsLib/res/values-sv/strings.xml
index 3b45fde..d68580b 100644
--- a/packages/SettingsLib/res/values-sv/strings.xml
+++ b/packages/SettingsLib/res/values-sv/strings.xml
@@ -171,15 +171,23 @@
<string name="mobile_data_always_on" msgid="7745605759775320362">"Mobildata alltid aktiverad"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Inaktivera Absolute volume"</string>
<string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Ljudkodek för Bluetooth"</string>
- <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"Välj föredragen A2DP-kodek för Bluetooth"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_type_dialog_title (4558347981670553665) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Samplingsfrekvens för Bluetooth-ljud"</string>
- <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"Välj föredragen samplingsfrekvens för A2DP-kodek för Bluetooth"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_sample_rate_dialog_title (5628790207448471613) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Antar bitar per sampling för Bluetooth-ljud"</string>
- <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"Välj föredraget antal bitar per sampling för A2DP-kodek för Bluetooth"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_bits_per_sample_dialog_title (4546131401358681321) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Kanalläge för Bluetooth-ljud"</string>
- <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"Välj föredraget kanalläge för A2DP-kodek för Bluetooth"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"Uppspelningskvalitet för Bluetooth-ljud via LDAC"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"Välj föredragen uppspelningskvalitet för A2DP-kodek för Bluetooth via LDAC"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_channel_mode_dialog_title (9133545781346216071) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality (3619694372407843405) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (3181967377574368400) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_streaming_label (5347862512596240506) -->
+ <skip />
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Visa certifieringsalternativ för Wi-Fi-skärmdelning"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Öka loggningsnivån för Wi-Fi, visa per SSID RSSI i Wi‑Fi Picker"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"När funktionen har aktiverats kommer dataanslutningen lämnas över från Wi-Fi till mobilen på ett aggressivare sätt när Wi-Fi-signalen är svag"</string>
diff --git a/packages/SettingsLib/res/values-sw/arrays.xml b/packages/SettingsLib/res/values-sw/arrays.xml
index b4aeb1f..a7c4b63 100644
--- a/packages/SettingsLib/res/values-sw/arrays.xml
+++ b/packages/SettingsLib/res/values-sw/arrays.xml
@@ -58,66 +58,22 @@
<item msgid="3878793616631049349">"Tumia ukaguaji wa HDCP kwa maudhui ya DRM pekee"</item>
<item msgid="45075631231212732">"Kila wakati tumia ukakuaji wa HDCP"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="1852387125374225729">"Chaguo-msingi"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="4260844283202960798">"aptX"</item>
- <item msgid="7279983368484312990">"aptX-HD"</item>
- <item msgid="2301339338870319651">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="9072025520360316957">"Chaguo-msingi"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="1190434429082395888">"aptX"</item>
- <item msgid="649699003004233053">"aptX-HD"</item>
- <item msgid="508106435710925399">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
- <item msgid="7102940318360468759">"Chaguo-msingi"</item>
- <item msgid="8895532488906185219">"kHz 44.1"</item>
- <item msgid="2909915718994807056">"kHz 48.0"</item>
- <item msgid="3347287377354164611">"kHz 88.2"</item>
- <item msgid="1234212100239985373">"kHz 96.0"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
- <item msgid="7224433008148687313">"Chaguo-msingi"</item>
- <item msgid="4482862757811638365">"kHz 44.1"</item>
- <item msgid="354495328188724404">"kHz 48.0"</item>
- <item msgid="7329816882213695083">"kHz 88.2"</item>
- <item msgid="6967397666254430476">"kHz 96.0"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
- <item msgid="6694044160540313386">"Chaguo-msingi"</item>
- <item msgid="5618929009984956469">"Biti 16 kwa kila sampuli"</item>
- <item msgid="3412640499234627248">"Biti 24 kwa kila sampuli"</item>
- <item msgid="121583001492929387">"Biti 32 kwa kila sampuli"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
- <item msgid="5091076677792306320">"Chaguo-msingi"</item>
- <item msgid="4726688794884191540">"Biti 16 kwa kila sampuli"</item>
- <item msgid="305344756485516870">"Biti 24 kwa kila sampuli"</item>
- <item msgid="244568657919675099">"Biti 32 kwa kila sampuli"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
- <item msgid="13423709606339855">"Chaguo-msingi"</item>
- <item msgid="4106832974775067314">"Mono"</item>
- <item msgid="5571632958424639155">"Stereo"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
- <item msgid="8128478683963250130">"Chaguo-msingi"</item>
- <item msgid="8900559293912978337">"Mono"</item>
- <item msgid="8883739882299884241">"Stereo"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
- <item msgid="2944889121850394020">"Ubora wa sauti unaopendelewa (kbps990/kbps909)"</item>
- <item msgid="138837449700903545">"Ubora wa sauti wa kawaida (kbps660/kbps606)"</item>
- <item msgid="4777177307869441982">"Muunganisho unaopendelewa (kbps330/kbps303)"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
- <item msgid="172302906231378902">"Ubora wa sauti unaopendelewa (kbps990/kbps909)"</item>
- <item msgid="9091111147684472529">"Ubora wa sauti wa kawaida (kbps660/kbps606)"</item>
- <item msgid="3367904477834831032">"Muunganisho unaopendelewa (kbps330/kbps303)"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:0 (7065842274271279580) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:3 (500463122137421129) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:0 (5062108632402595000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3093550793512117000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_titles:0 (3093023430402746802) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_summaries:0 (3214516120190965356) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_titles:0 (2684127272582591429) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_summaries:0 (1081159789834584363) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_titles:0 (5226878858503393706) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_summaries:0 (4118561796005528173) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:0 (3411577996960199959) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:1 (2921767058740704969) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:2 (3682554248829489641) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:0 (7668834469173465015) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:1 (4327143584633311908) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:2 (6155648878105378550) -->
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"Imezimwa"</item>
<item msgid="1593289376502312923">"K64"</item>
diff --git a/packages/SettingsLib/res/values-sw/strings.xml b/packages/SettingsLib/res/values-sw/strings.xml
index bd1b71a..1b2f876 100644
--- a/packages/SettingsLib/res/values-sw/strings.xml
+++ b/packages/SettingsLib/res/values-sw/strings.xml
@@ -171,15 +171,23 @@
<string name="mobile_data_always_on" msgid="7745605759775320362">"Data ya kifaa cha mkononi inatumika kila wakati"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Zima sauti kamili"</string>
<string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Kodeki ya Sauti ya Bluetooth"</string>
- <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"Chagua Kodeki Unayopendelea ya Bluetooth A2DP"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_type_dialog_title (4558347981670553665) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Kiwango cha Sampuli ya Sauti ya Bluetooth"</string>
- <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"Chagua Kiwango Unachopendelea cha Sampuli ya Kodeki ya Bluetooth A2DP"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_sample_rate_dialog_title (5628790207448471613) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Biti za Sauti ya Bluetooth kwa Kila Sampuli"</string>
- <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"Chagua Biti za Kodeki ya Bluetooth A2DP Unazopendelea kwa Kila Sampuli"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_bits_per_sample_dialog_title (4546131401358681321) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Hali ya Mkondo wa Sauti ya Bluetooth"</string>
- <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"Chagua Hali ya Mkondo wa Kodeki ya Bluetooth A2DP Unayopendelea"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"Ubora wa Kucheza LDAC ya Sauti ya Bluetooth"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"Chagua Ubora Unaopendelea wa Kucheza LDAC ya Kodeki ya Bluetooth A2DP"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_channel_mode_dialog_title (9133545781346216071) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality (3619694372407843405) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (3181967377574368400) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_streaming_label (5347862512596240506) -->
+ <skip />
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Onyesha chaguo za cheti cha kuonyesha pasiwaya"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Ongeza hatua ya uwekaji kumbukumbu ya Wi-Fi, onyesha kwa kila SSID RSSI kwenye Kichukuzi cha Wi-Fi"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"Ikiwashwa, Wifi itakabidhi kwa hima muunganisho wa data kwa mtandao wa Simu za Mkononi, mawimbi ya Wifi yanapokuwa hafifu"</string>
diff --git a/packages/SettingsLib/res/values-ta/arrays.xml b/packages/SettingsLib/res/values-ta/arrays.xml
index 9b3b1d4..efbe16d 100644
--- a/packages/SettingsLib/res/values-ta/arrays.xml
+++ b/packages/SettingsLib/res/values-ta/arrays.xml
@@ -58,66 +58,22 @@
<item msgid="3878793616631049349">"DRM உள்ளடக்கத்திற்கு மட்டும் HDCP சோதனையைப் பயன்படுத்து"</item>
<item msgid="45075631231212732">"HDCP சரிபார்ப்பை எப்போதும் பயன்படுத்து"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="1852387125374225729">"இயல்பு"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="4260844283202960798">"aptX"</item>
- <item msgid="7279983368484312990">"aptX-HD"</item>
- <item msgid="2301339338870319651">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="9072025520360316957">"இயல்பு"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="1190434429082395888">"aptX"</item>
- <item msgid="649699003004233053">"aptX-HD"</item>
- <item msgid="508106435710925399">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
- <item msgid="7102940318360468759">"இயல்பு"</item>
- <item msgid="8895532488906185219">"44.1 kHz"</item>
- <item msgid="2909915718994807056">"48.0 kHz"</item>
- <item msgid="3347287377354164611">"88.2 kHz"</item>
- <item msgid="1234212100239985373">"96.0 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
- <item msgid="7224433008148687313">"இயல்பு"</item>
- <item msgid="4482862757811638365">"44.1 kHz"</item>
- <item msgid="354495328188724404">"48.0 kHz"</item>
- <item msgid="7329816882213695083">"88.2 kHz"</item>
- <item msgid="6967397666254430476">"96.0 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
- <item msgid="6694044160540313386">"இயல்பு"</item>
- <item msgid="5618929009984956469">"16 பிட்கள்/சாம்பிள்"</item>
- <item msgid="3412640499234627248">"24 பிட்கள்/சாம்பிள்"</item>
- <item msgid="121583001492929387">"32 பிட்கள்/சாம்பிள்"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
- <item msgid="5091076677792306320">"இயல்பு"</item>
- <item msgid="4726688794884191540">"16 பிட்கள்/சாம்பிள்"</item>
- <item msgid="305344756485516870">"24 பிட்கள்/சாம்பிள்"</item>
- <item msgid="244568657919675099">"32 பிட்கள்/சாம்பிள்"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
- <item msgid="13423709606339855">"இயல்பு"</item>
- <item msgid="4106832974775067314">"மோனோ"</item>
- <item msgid="5571632958424639155">"ஸ்டீரியோ"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
- <item msgid="8128478683963250130">"இயல்பு"</item>
- <item msgid="8900559293912978337">"மோனோ"</item>
- <item msgid="8883739882299884241">"ஸ்டீரியோ"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
- <item msgid="2944889121850394020">"ஒலித் தரம் (பரிந்துரை) (990kbps/909kbps)"</item>
- <item msgid="138837449700903545">"நிலையானது (660kbps/606kbps)"</item>
- <item msgid="4777177307869441982">"இணைப்பு (பரிந்துரை) (330kbps/303kbps)"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
- <item msgid="172302906231378902">"ஒலித் தரம் (பரிந்துரை) (990kbps/909kbps)"</item>
- <item msgid="9091111147684472529">"நிலையானது (660kbps/606kbps)"</item>
- <item msgid="3367904477834831032">"இணைப்பு (பரிந்துரை) (330kbps/303kbps)"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:0 (7065842274271279580) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:3 (500463122137421129) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:0 (5062108632402595000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3093550793512117000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_titles:0 (3093023430402746802) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_summaries:0 (3214516120190965356) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_titles:0 (2684127272582591429) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_summaries:0 (1081159789834584363) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_titles:0 (5226878858503393706) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_summaries:0 (4118561796005528173) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:0 (3411577996960199959) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:1 (2921767058740704969) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:2 (3682554248829489641) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:0 (7668834469173465015) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:1 (4327143584633311908) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:2 (6155648878105378550) -->
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"முடக்கு"</item>
<item msgid="1593289376502312923">"64K"</item>
diff --git a/packages/SettingsLib/res/values-ta/strings.xml b/packages/SettingsLib/res/values-ta/strings.xml
index c628d5e..a94dd3a 100644
--- a/packages/SettingsLib/res/values-ta/strings.xml
+++ b/packages/SettingsLib/res/values-ta/strings.xml
@@ -171,15 +171,23 @@
<string name="mobile_data_always_on" msgid="7745605759775320362">"செல்லுலார் தரவு எப்போதும் இயக்கத்தில்"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"அப்சல்யூட் ஒலியளவு அம்சத்தை முடக்கு"</string>
<string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"புளூடூத் ஆடியோ கோடெக்"</string>
- <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"பரிந்துரைக்கப்படும் புளூடூத் A2DP கோடெக்கைத் தேர்ந்தெடுக்கவும்"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_type_dialog_title (4558347981670553665) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"புளூடூத் ஆடியோ சாம்பிள் ரேட்"</string>
- <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"பரிந்துரைக்கப்படும் புளூடூத் A2DP கோடெக் சாம்பிள் ரேட்டைத் தேர்ந்தெடுக்கவும்"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_sample_rate_dialog_title (5628790207448471613) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"புளூடூத் ஆடியோ பிட்கள்/சாம்பிள்"</string>
- <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"ஒரு சாம்பிளுக்குப் பரிந்துரைக்கப்படும் புளூடூத் A2DP கோடெக் பிட்களைத் தேர்ந்தெடுக்கவும்"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_bits_per_sample_dialog_title (4546131401358681321) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"புளூடூத் ஆடியோ சேனல் பயன்முறை"</string>
- <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"பரிந்துரைக்கப்படும் புளூடூத் A2DP கோடெக் சேனல் பயன்முறையைத் தேர்ந்தெடுக்கவும்"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"புளூடூத் ஆடியோ LDAC வீடியோவின் தரம்"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"பரிந்துரைக்கப்படும் புளூடூத் A2DP கோடெக் LDAC வீடியோவின் தரத்தைத் தேர்ந்தெடுக்கவும்"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_channel_mode_dialog_title (9133545781346216071) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality (3619694372407843405) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (3181967377574368400) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_streaming_label (5347862512596240506) -->
+ <skip />
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"வயர்லெஸ் காட்சி சான்றுக்கான விருப்பங்களைக் காட்டு"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Wifi நுழைவு அளவை அதிகரித்து, வைஃபை தேர்வியில் ஒவ்வொன்றிற்கும் SSID RSSI ஐ காட்டுக"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"இயக்கப்பட்டதும், வைஃபை சிக்னல் குறையும் போது, வைஃபை முழுமையாக ஒத்துழைக்காமல் இருப்பதால் செல்லுலாரின் தரவு இணைப்புக்கு மாறும்"</string>
diff --git a/packages/SettingsLib/res/values-te/arrays.xml b/packages/SettingsLib/res/values-te/arrays.xml
index beb705a..bee6402 100644
--- a/packages/SettingsLib/res/values-te/arrays.xml
+++ b/packages/SettingsLib/res/values-te/arrays.xml
@@ -58,66 +58,22 @@
<item msgid="3878793616631049349">"DRM కంటెంట్కు మాత్రమే HDCP తనిఖీని ఉపయోగించండి"</item>
<item msgid="45075631231212732">"ఎప్పటికీ HDCP తనిఖీని ఉపయోగించు"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="1852387125374225729">"డిఫాల్ట్"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="4260844283202960798">"aptX"</item>
- <item msgid="7279983368484312990">"aptX-HD"</item>
- <item msgid="2301339338870319651">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="9072025520360316957">"డిఫాల్ట్"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="1190434429082395888">"aptX"</item>
- <item msgid="649699003004233053">"aptX-HD"</item>
- <item msgid="508106435710925399">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
- <item msgid="7102940318360468759">"డిఫాల్ట్"</item>
- <item msgid="8895532488906185219">"44.1 kHz"</item>
- <item msgid="2909915718994807056">"48.0 kHz"</item>
- <item msgid="3347287377354164611">"88.2 kHz"</item>
- <item msgid="1234212100239985373">"96.0 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
- <item msgid="7224433008148687313">"డిఫాల్ట్"</item>
- <item msgid="4482862757811638365">"44.1 kHz"</item>
- <item msgid="354495328188724404">"48.0 kHz"</item>
- <item msgid="7329816882213695083">"88.2 kHz"</item>
- <item msgid="6967397666254430476">"96.0 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
- <item msgid="6694044160540313386">"డిఫాల్ట్"</item>
- <item msgid="5618929009984956469">"16 బిట్లు/నమూనా"</item>
- <item msgid="3412640499234627248">"24 బిట్లు/నమూనా"</item>
- <item msgid="121583001492929387">"32 బిట్లు/నమూనా"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
- <item msgid="5091076677792306320">"డిఫాల్ట్"</item>
- <item msgid="4726688794884191540">"16 బిట్లు/నమూనా"</item>
- <item msgid="305344756485516870">"24 బిట్లు/నమూనా"</item>
- <item msgid="244568657919675099">"32 బిట్లు/నమూనా"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
- <item msgid="13423709606339855">"డిఫాల్ట్"</item>
- <item msgid="4106832974775067314">"మోనో"</item>
- <item msgid="5571632958424639155">"స్టీరియో"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
- <item msgid="8128478683963250130">"డిఫాల్ట్"</item>
- <item msgid="8900559293912978337">"మోనో"</item>
- <item msgid="8883739882299884241">"స్టీరియో"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
- <item msgid="2944889121850394020">"ప్రాధాన్య శబ్ద నాణ్యత (990kbps/909kbps)"</item>
- <item msgid="138837449700903545">"ప్రామాణికం (660kbps/606kbps)"</item>
- <item msgid="4777177307869441982">"ప్రాధాన్య కనెక్షన్ (330kbps/303kbps)"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
- <item msgid="172302906231378902">"ప్రాధాన్య శబ్ద నాణ్యత (990kbps/909kbps)"</item>
- <item msgid="9091111147684472529">"ప్రామాణికం (660kbps/606kbps)"</item>
- <item msgid="3367904477834831032">"ప్రాధాన్య కనెక్షన్ (330kbps/303kbps)"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:0 (7065842274271279580) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:3 (500463122137421129) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:0 (5062108632402595000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3093550793512117000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_titles:0 (3093023430402746802) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_summaries:0 (3214516120190965356) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_titles:0 (2684127272582591429) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_summaries:0 (1081159789834584363) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_titles:0 (5226878858503393706) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_summaries:0 (4118561796005528173) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:0 (3411577996960199959) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:1 (2921767058740704969) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:2 (3682554248829489641) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:0 (7668834469173465015) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:1 (4327143584633311908) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:2 (6155648878105378550) -->
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"ఆఫ్"</item>
<item msgid="1593289376502312923">"64K"</item>
diff --git a/packages/SettingsLib/res/values-te/strings.xml b/packages/SettingsLib/res/values-te/strings.xml
index 0d21371..d96e412 100644
--- a/packages/SettingsLib/res/values-te/strings.xml
+++ b/packages/SettingsLib/res/values-te/strings.xml
@@ -171,15 +171,23 @@
<string name="mobile_data_always_on" msgid="7745605759775320362">"ఎల్లప్పుడూ సెల్యులార్ డేటాను సక్రియంగా ఉంచు"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"సంపూర్ణ వాల్యూమ్ను నిలిపివేయి"</string>
<string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"బ్లూటూత్ ఆడియో కోడెక్"</string>
- <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"ప్రాధాన్య బ్లూటూత్ A2DP కోడెక్ను ఎంచుకోండి"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_type_dialog_title (4558347981670553665) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"బ్లూటూత్ ఆడియో నమూనా రేట్"</string>
- <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"ప్రాధాన్య బ్లూటూత్ A2DP కోడెక్ నమూనా రేట్ను ఎంచుకోండి"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_sample_rate_dialog_title (5628790207448471613) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"ఒక్కో నమూనాకు బ్లూటూత్ ఆడియో బిట్లు"</string>
- <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"ఒక్కో నమూనాకు ప్రాధాన్య బ్లూటూత్ A2DP కోడెక్ బిట్లను ఎంచుకోండి"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_bits_per_sample_dialog_title (4546131401358681321) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"బ్లూటూత్ ఆడియో ఛానెల్ మోడ్"</string>
- <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"ప్రాధాన్య బ్లూటూత్ A2DP కోడెక్ ఛానెల్ మోడ్ను ఎంచుకోండి"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"బ్లూటూత్ ఆడియో LDAC ప్లేబ్యాక్ నాణ్యత"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"ప్రాధాన్య బ్లూటూత్ A2DP కోడెక్ LDAC ప్లేబ్యాక్ నాణ్యతను ఎంచుకోండి"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_channel_mode_dialog_title (9133545781346216071) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality (3619694372407843405) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (3181967377574368400) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_streaming_label (5347862512596240506) -->
+ <skip />
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"వైర్లెస్ ప్రదర్శన ప్రమాణపత్రం కోసం ఎంపికలను చూపు"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Wi‑Fi ఎంపికలో SSID RSSI ప్రకారం చూపబడే Wi‑Fi లాగింగ్ స్థాయిని పెంచండి"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"ప్రారంభించబడినప్పుడు, Wi‑Fi సిగ్నల్ బలహీనంగా ఉంటే డేటా కనెక్షన్ను సెల్యులార్కి మార్చేలా Wi‑Fiపై మరింత తీవ్ర ఒత్తిడి కలుగుతుంది"</string>
diff --git a/packages/SettingsLib/res/values-th/arrays.xml b/packages/SettingsLib/res/values-th/arrays.xml
index 1032337..690ce0c 100644
--- a/packages/SettingsLib/res/values-th/arrays.xml
+++ b/packages/SettingsLib/res/values-th/arrays.xml
@@ -58,66 +58,22 @@
<item msgid="3878793616631049349">"ใช้การตรวจสอบ HDCP สำหรับเนื้อหา DRM เท่านั้น"</item>
<item msgid="45075631231212732">"ใช้การตรวจสอบ HDCP เสมอ"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="1852387125374225729">"ค่าเริ่มต้น"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="4260844283202960798">"aptX"</item>
- <item msgid="7279983368484312990">"aptX-HD"</item>
- <item msgid="2301339338870319651">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="9072025520360316957">"ค่าเริ่มต้น"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="1190434429082395888">"aptX"</item>
- <item msgid="649699003004233053">"aptX-HD"</item>
- <item msgid="508106435710925399">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
- <item msgid="7102940318360468759">"ค่าเริ่มต้น"</item>
- <item msgid="8895532488906185219">"44.1 kHz"</item>
- <item msgid="2909915718994807056">"48.0 kHz"</item>
- <item msgid="3347287377354164611">"88.2 kHz"</item>
- <item msgid="1234212100239985373">"96.0 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
- <item msgid="7224433008148687313">"ค่าเริ่มต้น"</item>
- <item msgid="4482862757811638365">"44.1 kHz"</item>
- <item msgid="354495328188724404">"48.0 kHz"</item>
- <item msgid="7329816882213695083">"88.2 kHz"</item>
- <item msgid="6967397666254430476">"96.0 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
- <item msgid="6694044160540313386">"ค่าเริ่มต้น"</item>
- <item msgid="5618929009984956469">"16 บิต/ตัวอย่าง"</item>
- <item msgid="3412640499234627248">"24 บิต/ตัวอย่าง"</item>
- <item msgid="121583001492929387">"32 บิต/ตัวอย่าง"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
- <item msgid="5091076677792306320">"ค่าเริ่มต้น"</item>
- <item msgid="4726688794884191540">"16 บิต/ตัวอย่าง"</item>
- <item msgid="305344756485516870">"24 บิต/ตัวอย่าง"</item>
- <item msgid="244568657919675099">"32 บิต/ตัวอย่าง"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
- <item msgid="13423709606339855">"ค่าเริ่มต้น"</item>
- <item msgid="4106832974775067314">"โมโน"</item>
- <item msgid="5571632958424639155">"สเตอริโอ"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
- <item msgid="8128478683963250130">"ค่าเริ่มต้น"</item>
- <item msgid="8900559293912978337">"โมโน"</item>
- <item msgid="8883739882299884241">"สเตอริโอ"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
- <item msgid="2944889121850394020">"คุณภาพเสียงที่ต้องการ (990kbps/909kbps)"</item>
- <item msgid="138837449700903545">"มาตรฐาน (660kbps/606kbps)"</item>
- <item msgid="4777177307869441982">"การเชื่อมต่อที่ต้องการ (330kbps/303kbps)"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
- <item msgid="172302906231378902">"คุณภาพเสียงที่ต้องการ (990kbps/909kbps)"</item>
- <item msgid="9091111147684472529">"มาตรฐาน (660kbps/606kbps)"</item>
- <item msgid="3367904477834831032">"การเชื่อมต่อที่ต้องการ (330kbps/303kbps)"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:0 (7065842274271279580) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:3 (500463122137421129) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:0 (5062108632402595000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3093550793512117000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_titles:0 (3093023430402746802) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_summaries:0 (3214516120190965356) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_titles:0 (2684127272582591429) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_summaries:0 (1081159789834584363) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_titles:0 (5226878858503393706) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_summaries:0 (4118561796005528173) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:0 (3411577996960199959) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:1 (2921767058740704969) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:2 (3682554248829489641) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:0 (7668834469173465015) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:1 (4327143584633311908) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:2 (6155648878105378550) -->
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"ปิด"</item>
<item msgid="1593289376502312923">"64 K"</item>
diff --git a/packages/SettingsLib/res/values-th/strings.xml b/packages/SettingsLib/res/values-th/strings.xml
index 60d91b5..3d8af85 100644
--- a/packages/SettingsLib/res/values-th/strings.xml
+++ b/packages/SettingsLib/res/values-th/strings.xml
@@ -171,15 +171,23 @@
<string name="mobile_data_always_on" msgid="7745605759775320362">"เปิดใช้ข้อมูลมือถือเสมอ"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"ปิดใช้การควบคุมระดับเสียงของอุปกรณ์อื่น"</string>
<string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"ตัวแปลงรหัสเสียงบลูทูธ"</string>
- <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"เลือกตัวแปลงรหัสบลูทูธ A2DP ที่ต้องการ"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_type_dialog_title (4558347981670553665) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"อัตราตัวอย่างเสียงบลูทูธ"</string>
- <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"เลือกอัตราตัวอย่างของตัวแปลงรหัสบลูทูธ A2DP ที่ต้องการ"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_sample_rate_dialog_title (5628790207448471613) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"บิตต่อตัวอย่างของเสียงบลูทูธ"</string>
- <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"เลือกบิตต่อตัวอย่างของตัวแปลงรหัสบลูทูธ A2DP ที่ต้องการ"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_bits_per_sample_dialog_title (4546131401358681321) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"โหมดช่องสัญญาณเสียงบลูทูธ"</string>
- <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"เลือกโหมดช่องสัญญาณเสียงของตัวแปลงรหัสบลูทูธ A2DP ที่ต้องการ"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"คุณภาพการเล่นเสียงบลูทูธ LDAC"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"เลือกคุณภาพการเล่น LDAC ของตัวแปลงรหัสบลูทูธ A2DP ที่ต้องการ"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_channel_mode_dialog_title (9133545781346216071) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality (3619694372407843405) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (3181967377574368400) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_streaming_label (5347862512596240506) -->
+ <skip />
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"แสดงตัวเลือกสำหรับการรับรองการแสดงผล แบบไร้สาย"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"เพิ่มระดับการบันทึก Wi‑Fi แสดงต่อ SSID RSSI ในตัวเลือก Wi‑Fi"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"เมื่อเปิดใช้แล้ว Wi-Fi จะส่งผ่านการเชื่อมต่อข้อมูลไปยังเครือข่ายมือถือในทันทีที่พบสัญญาณ Wi-Fi อ่อน"</string>
diff --git a/packages/SettingsLib/res/values-tl/arrays.xml b/packages/SettingsLib/res/values-tl/arrays.xml
index c0e9843..c67be8a 100644
--- a/packages/SettingsLib/res/values-tl/arrays.xml
+++ b/packages/SettingsLib/res/values-tl/arrays.xml
@@ -58,66 +58,22 @@
<item msgid="3878793616631049349">"Gamitin lang ang pagsusuring HDCP para sa nilalamang DRM"</item>
<item msgid="45075631231212732">"Palaging gumamit ng pagsusuring HDCP"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="1852387125374225729">"Default"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="4260844283202960798">"aptX"</item>
- <item msgid="7279983368484312990">"aptX-HD"</item>
- <item msgid="2301339338870319651">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="9072025520360316957">"Default"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="1190434429082395888">"aptX"</item>
- <item msgid="649699003004233053">"aptX-HD"</item>
- <item msgid="508106435710925399">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
- <item msgid="7102940318360468759">"Default"</item>
- <item msgid="8895532488906185219">"44.1 kHz"</item>
- <item msgid="2909915718994807056">"48.0 kHz"</item>
- <item msgid="3347287377354164611">"88.2 kHz"</item>
- <item msgid="1234212100239985373">"96.0 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
- <item msgid="7224433008148687313">"Default"</item>
- <item msgid="4482862757811638365">"44.1 kHz"</item>
- <item msgid="354495328188724404">"48.0 kHz"</item>
- <item msgid="7329816882213695083">"88.2 kHz"</item>
- <item msgid="6967397666254430476">"96.0 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
- <item msgid="6694044160540313386">"Default"</item>
- <item msgid="5618929009984956469">"16 bits/sample"</item>
- <item msgid="3412640499234627248">"24 bits/sample"</item>
- <item msgid="121583001492929387">"32 bits/sample"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
- <item msgid="5091076677792306320">"Default"</item>
- <item msgid="4726688794884191540">"16 bits/sample"</item>
- <item msgid="305344756485516870">"24 bits/sample"</item>
- <item msgid="244568657919675099">"32 bits/sample"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
- <item msgid="13423709606339855">"Default"</item>
- <item msgid="4106832974775067314">"Mono"</item>
- <item msgid="5571632958424639155">"Stereo"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
- <item msgid="8128478683963250130">"Default"</item>
- <item msgid="8900559293912978337">"Mono"</item>
- <item msgid="8883739882299884241">"Stereo"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
- <item msgid="2944889121850394020">"Gustong kalidad tunog (990kbps/909kbps)"</item>
- <item msgid="138837449700903545">"Karaniwan (660kbps/606kbps)"</item>
- <item msgid="4777177307869441982">"Gustong koneksyon (330kbps/303kbps)"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
- <item msgid="172302906231378902">"Gustong kalidad tunog (990kbps/909kbps)"</item>
- <item msgid="9091111147684472529">"Karaniwan (660kbps/606kbps)"</item>
- <item msgid="3367904477834831032">"Gustong koneksyon (330kbps/303kbps)"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:0 (7065842274271279580) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:3 (500463122137421129) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:0 (5062108632402595000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3093550793512117000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_titles:0 (3093023430402746802) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_summaries:0 (3214516120190965356) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_titles:0 (2684127272582591429) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_summaries:0 (1081159789834584363) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_titles:0 (5226878858503393706) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_summaries:0 (4118561796005528173) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:0 (3411577996960199959) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:1 (2921767058740704969) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:2 (3682554248829489641) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:0 (7668834469173465015) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:1 (4327143584633311908) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:2 (6155648878105378550) -->
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"I-off"</item>
<item msgid="1593289376502312923">"64K"</item>
diff --git a/packages/SettingsLib/res/values-tl/strings.xml b/packages/SettingsLib/res/values-tl/strings.xml
index 58781b2..a7ccc2a 100644
--- a/packages/SettingsLib/res/values-tl/strings.xml
+++ b/packages/SettingsLib/res/values-tl/strings.xml
@@ -171,15 +171,23 @@
<string name="mobile_data_always_on" msgid="7745605759775320362">"Palaging aktibo ang cellular data"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"I-disable ang absolute volume"</string>
<string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Bluetooth Audio Codec"</string>
- <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"Piliin ang Gustong Bluetooth A2DP Codec"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_type_dialog_title (4558347981670553665) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Sample na Rate ng Bluetooth Audio"</string>
- <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"Piliin ang Gustong Sample na Rate ng Bluetooth A2DP Codec"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_sample_rate_dialog_title (5628790207448471613) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Bits Per Sample ng Bluetooth Audio"</string>
- <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"Piliin ang Gustong Bits Per Sample ng Bluetooth A2DP Codec"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_bits_per_sample_dialog_title (4546131401358681321) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Channel Mode ng Bluetooth Audio"</string>
- <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"Piliin ang Gustong Channel Mode ng Bluetooth A2DP Codec"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"Playback Quality ng Bluetooth Audio LDAC"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"Piliin ang Gustong Playback Quality ng Bluetooth A2DP Codec LDAC"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_channel_mode_dialog_title (9133545781346216071) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality (3619694372407843405) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (3181967377574368400) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_streaming_label (5347862512596240506) -->
+ <skip />
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Ipakita ang mga opsyon para sa certification ng wireless display"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Pataasin ang antas ng Wi‑Fi logging, ipakita sa bawat SSID RSSI sa Wi‑Fi Picker"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"Kapag naka-enable, mas magiging agresibo ang Wi‑Fi sa paglipat ng koneksyon ng data sa Cellular, kapag mahina ang signal ng Wi‑Fi"</string>
diff --git a/packages/SettingsLib/res/values-tr/arrays.xml b/packages/SettingsLib/res/values-tr/arrays.xml
index ee668c7..00cf236 100644
--- a/packages/SettingsLib/res/values-tr/arrays.xml
+++ b/packages/SettingsLib/res/values-tr/arrays.xml
@@ -58,66 +58,22 @@
<item msgid="3878793616631049349">"HDCP denetimini yalnızca DRM içeriği için kullan"</item>
<item msgid="45075631231212732">"HDCP denetimini her zaman kullan"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="1852387125374225729">"Varsayılan"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="4260844283202960798">"aptX"</item>
- <item msgid="7279983368484312990">"aptX-HD"</item>
- <item msgid="2301339338870319651">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="9072025520360316957">"Varsayılan"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="1190434429082395888">"aptX"</item>
- <item msgid="649699003004233053">"aptX-HD"</item>
- <item msgid="508106435710925399">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
- <item msgid="7102940318360468759">"Varsayılan"</item>
- <item msgid="8895532488906185219">"44,1 kHz"</item>
- <item msgid="2909915718994807056">"48,0 kHz"</item>
- <item msgid="3347287377354164611">"88,2 kHz"</item>
- <item msgid="1234212100239985373">"96,0 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
- <item msgid="7224433008148687313">"Varsayılan"</item>
- <item msgid="4482862757811638365">"44,1 kHz"</item>
- <item msgid="354495328188724404">"48,0 kHz"</item>
- <item msgid="7329816882213695083">"88,2 kHz"</item>
- <item msgid="6967397666254430476">"96,0 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
- <item msgid="6694044160540313386">"Varsayılan"</item>
- <item msgid="5618929009984956469">"16 bit/örnek"</item>
- <item msgid="3412640499234627248">"24 bit/örnek"</item>
- <item msgid="121583001492929387">"32 bit/örnek"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
- <item msgid="5091076677792306320">"Varsayılan"</item>
- <item msgid="4726688794884191540">"16 bit/örnek"</item>
- <item msgid="305344756485516870">"24 bit/örnek"</item>
- <item msgid="244568657919675099">"32 bit/örnek"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
- <item msgid="13423709606339855">"Varsayılan"</item>
- <item msgid="4106832974775067314">"Mono"</item>
- <item msgid="5571632958424639155">"Stereo"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
- <item msgid="8128478683963250130">"Varsayılan"</item>
- <item msgid="8900559293912978337">"Mono"</item>
- <item msgid="8883739882299884241">"Stereo"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
- <item msgid="2944889121850394020">"Ses kalitesi öncelikli (990kbps/909kbps)"</item>
- <item msgid="138837449700903545">"Standart (660kbps/606kbps)"</item>
- <item msgid="4777177307869441982">"Bağlantı öncelikli (330kbps/303kbps)"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
- <item msgid="172302906231378902">"Ses kalitesi öncelikli (990kbps/909kbps)"</item>
- <item msgid="9091111147684472529">"Standart (660kbps/606kbps)"</item>
- <item msgid="3367904477834831032">"Bağlantı öncelikli (330kbps/303kbps)"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:0 (7065842274271279580) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:3 (500463122137421129) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:0 (5062108632402595000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3093550793512117000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_titles:0 (3093023430402746802) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_summaries:0 (3214516120190965356) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_titles:0 (2684127272582591429) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_summaries:0 (1081159789834584363) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_titles:0 (5226878858503393706) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_summaries:0 (4118561796005528173) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:0 (3411577996960199959) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:1 (2921767058740704969) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:2 (3682554248829489641) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:0 (7668834469173465015) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:1 (4327143584633311908) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:2 (6155648878105378550) -->
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"Kapalı"</item>
<item msgid="1593289376502312923">"64 KB"</item>
diff --git a/packages/SettingsLib/res/values-tr/strings.xml b/packages/SettingsLib/res/values-tr/strings.xml
index b5c081a..a452481 100644
--- a/packages/SettingsLib/res/values-tr/strings.xml
+++ b/packages/SettingsLib/res/values-tr/strings.xml
@@ -171,15 +171,23 @@
<string name="mobile_data_always_on" msgid="7745605759775320362">"Hücresel veri her zaman etkin"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Mutlak sesi iptal et"</string>
<string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Bluetooth Ses Codec\'i"</string>
- <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"Tercih Edilen Bluetooth A2DP Codec\'ini Seçin"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_type_dialog_title (4558347981670553665) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Bluetooth Ses Örnek Hızı"</string>
- <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"Tercih Edilen Bluetooth A2DP Codec\'i Örnek Hızını Seçin"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_sample_rate_dialog_title (5628790207448471613) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Bluetooth Ses Örnek Başına Bit Sayısı"</string>
- <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"Tercih Edilen Bluetooth A2DP Codec\'i Örnek Başına Bit Sayısını Seçin"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_bits_per_sample_dialog_title (4546131401358681321) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Bluetooth Ses Kanalı Modu"</string>
- <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"Tercih Edilen Bluetooth A2DP Codec\'i Kanal Modunu Seçin"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"Bluetooth Ses LDAC Oynatma Kalitesi"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"Tercih Edilen Bluetooth A2DP Codec\'i LDAC Oynatma Kalitesini Seçin"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_channel_mode_dialog_title (9133545781346216071) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality (3619694372407843405) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (3181967377574368400) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_streaming_label (5347862512596240506) -->
+ <skip />
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Kablosuz ekran sertifikası seçeneklerini göster"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Kablosuz günlük kaydı seviyesini artır. Kablosuz Seçici\'de her bir SSID RSSI için göster."</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"Etkinleştirildiğinde, Kablosuz ağ sinyali zayıfken veri bağlantısının Hücresel ağa geçirilmesinde daha agresif olunur"</string>
diff --git a/packages/SettingsLib/res/values-uk/arrays.xml b/packages/SettingsLib/res/values-uk/arrays.xml
index 91a6d6f..dd661c4 100644
--- a/packages/SettingsLib/res/values-uk/arrays.xml
+++ b/packages/SettingsLib/res/values-uk/arrays.xml
@@ -58,66 +58,22 @@
<item msgid="3878793616631049349">"Використовувати перевірку HDCP лише для вмісту, захищеного DRM"</item>
<item msgid="45075631231212732">"Завжди використовувати перевірку HDCP"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="1852387125374225729">"За умовчанням"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="4260844283202960798">"aptX"</item>
- <item msgid="7279983368484312990">"aptX-HD"</item>
- <item msgid="2301339338870319651">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="9072025520360316957">"За умовчанням"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="1190434429082395888">"aptX"</item>
- <item msgid="649699003004233053">"aptX-HD"</item>
- <item msgid="508106435710925399">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
- <item msgid="7102940318360468759">"За умовчанням"</item>
- <item msgid="8895532488906185219">"44,1 кГц"</item>
- <item msgid="2909915718994807056">"48 кГц"</item>
- <item msgid="3347287377354164611">"88,2 кГц"</item>
- <item msgid="1234212100239985373">"96 кГц"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
- <item msgid="7224433008148687313">"За умовчанням"</item>
- <item msgid="4482862757811638365">"44,1 кГц"</item>
- <item msgid="354495328188724404">"48 кГц"</item>
- <item msgid="7329816882213695083">"88,2 кГц"</item>
- <item msgid="6967397666254430476">"96 кГц"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
- <item msgid="6694044160540313386">"За умовчанням"</item>
- <item msgid="5618929009984956469">"16 бітів на зразок"</item>
- <item msgid="3412640499234627248">"24 біти на зразок"</item>
- <item msgid="121583001492929387">"32 біти на зразок"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
- <item msgid="5091076677792306320">"За умовчанням"</item>
- <item msgid="4726688794884191540">"16 бітів на зразок"</item>
- <item msgid="305344756485516870">"24 біти на зразок"</item>
- <item msgid="244568657919675099">"32 біти на зразок"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
- <item msgid="13423709606339855">"За умовчанням"</item>
- <item msgid="4106832974775067314">"Моно"</item>
- <item msgid="5571632958424639155">"Стерео"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
- <item msgid="8128478683963250130">"За умовчанням"</item>
- <item msgid="8900559293912978337">"Моно"</item>
- <item msgid="8883739882299884241">"Стерео"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
- <item msgid="2944889121850394020">"Реком. якість звуку (990 та 909 Кбіт/с)"</item>
- <item msgid="138837449700903545">"Стандартна якість (660 і 606 Кбіт/с)"</item>
- <item msgid="4777177307869441982">"Рекоменд. з’єднання (330 і 303 Кбіт/с)"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
- <item msgid="172302906231378902">"Реком. якість звуку (990 та 909 Кбіт/с)"</item>
- <item msgid="9091111147684472529">"Стандартна якість (660 і 606 Кбіт/с)"</item>
- <item msgid="3367904477834831032">"Рекоменд. з’єднання (330 і 303 Кбіт/с)"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:0 (7065842274271279580) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:3 (500463122137421129) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:0 (5062108632402595000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3093550793512117000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_titles:0 (3093023430402746802) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_summaries:0 (3214516120190965356) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_titles:0 (2684127272582591429) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_summaries:0 (1081159789834584363) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_titles:0 (5226878858503393706) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_summaries:0 (4118561796005528173) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:0 (3411577996960199959) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:1 (2921767058740704969) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:2 (3682554248829489641) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:0 (7668834469173465015) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:1 (4327143584633311908) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:2 (6155648878105378550) -->
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"Вимкнено"</item>
<item msgid="1593289376502312923">"64 Кб"</item>
diff --git a/packages/SettingsLib/res/values-uk/strings.xml b/packages/SettingsLib/res/values-uk/strings.xml
index bafd8b6..b67c7c9 100644
--- a/packages/SettingsLib/res/values-uk/strings.xml
+++ b/packages/SettingsLib/res/values-uk/strings.xml
@@ -171,15 +171,23 @@
<string name="mobile_data_always_on" msgid="7745605759775320362">"Не вимикати передавання даних"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Вимкнути абсолютну гучність"</string>
<string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Кодек для аудіо Bluetooth"</string>
- <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"Виберіть кодек Bluetooth A2DP"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_type_dialog_title (4558347981670553665) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Частота вибірки для аудіо Bluetooth"</string>
- <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"Виберіть частоту вибірки для кодека Bluetooth A2DP"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_sample_rate_dialog_title (5628790207448471613) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Кількість бітів на зразок для аудіо Bluetooth"</string>
- <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"Виберіть кількість бітів на зразок для кодека Bluetooth A2DP"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_bits_per_sample_dialog_title (4546131401358681321) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Режим каналу для аудіо Bluetooth"</string>
- <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"Виберіть режим каналу для кодека Bluetooth A2DP"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"Якість відтворення аудіо Bluetooth LDAC"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"Виберіть якість відтворення для кодека Bluetooth A2DP"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_channel_mode_dialog_title (9133545781346216071) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality (3619694372407843405) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (3181967377574368400) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_streaming_label (5347862512596240506) -->
+ <skip />
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Показати параметри сертифікації бездротового екрана"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Показувати в журналі RSSI для кожного SSID під час вибору Wi-Fi"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"Примусово перемикатися на мобільну мережу, коли сигнал Wi-Fi слабкий"</string>
diff --git a/packages/SettingsLib/res/values-ur/arrays.xml b/packages/SettingsLib/res/values-ur/arrays.xml
index d7dd3d2..d970f19 100644
--- a/packages/SettingsLib/res/values-ur/arrays.xml
+++ b/packages/SettingsLib/res/values-ur/arrays.xml
@@ -58,66 +58,22 @@
<item msgid="3878793616631049349">"HDCP چیکنگ صرف DRM مواد کیلئے استعمال کریں"</item>
<item msgid="45075631231212732">"ہمیشہ HDCP چیکنگ استعمال کریں"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="1852387125374225729">"ڈیفالٹ"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="4260844283202960798">"aptX"</item>
- <item msgid="7279983368484312990">"aptX-HD"</item>
- <item msgid="2301339338870319651">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="9072025520360316957">"ڈیفالٹ"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="1190434429082395888">"aptX"</item>
- <item msgid="649699003004233053">"aptX-HD"</item>
- <item msgid="508106435710925399">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
- <item msgid="7102940318360468759">"ڈیفالٹ"</item>
- <item msgid="8895532488906185219">"44.1 kHz"</item>
- <item msgid="2909915718994807056">"48.0 kHz"</item>
- <item msgid="3347287377354164611">"88.2 kHz"</item>
- <item msgid="1234212100239985373">"96.0 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
- <item msgid="7224433008148687313">"ڈیفالٹ"</item>
- <item msgid="4482862757811638365">"44.1 kHz"</item>
- <item msgid="354495328188724404">"48.0 kHz"</item>
- <item msgid="7329816882213695083">"88.2 kHz"</item>
- <item msgid="6967397666254430476">"96.0 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
- <item msgid="6694044160540313386">"ڈیفالٹ"</item>
- <item msgid="5618929009984956469">"16 بٹس/نمونہ"</item>
- <item msgid="3412640499234627248">"24 بٹس/نمونہ"</item>
- <item msgid="121583001492929387">"32 بٹس/نمونہ"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
- <item msgid="5091076677792306320">"ڈیفالٹ"</item>
- <item msgid="4726688794884191540">"16 بٹس/نمونہ"</item>
- <item msgid="305344756485516870">"24 بٹس/نمونہ"</item>
- <item msgid="244568657919675099">"32 بٹس/نمونہ"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
- <item msgid="13423709606339855">"ڈیفالٹ"</item>
- <item msgid="4106832974775067314">"مونو"</item>
- <item msgid="5571632958424639155">"اسٹیریو"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
- <item msgid="8128478683963250130">"ڈیفالٹ"</item>
- <item msgid="8900559293912978337">"مونو"</item>
- <item msgid="8883739882299884241">"اسٹیریو"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
- <item msgid="2944889121850394020">"آواز کا معیار ترجیحی (990kbps/909kbps)"</item>
- <item msgid="138837449700903545">"معیاری (660kbps/606kbps)"</item>
- <item msgid="4777177307869441982">"کنکشن ترجیحی (330kbps/303kbps)"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
- <item msgid="172302906231378902">"آواز کا معیار ترجیحی (990kbps/909kbps)"</item>
- <item msgid="9091111147684472529">"معیاری (660kbps/606kbps)"</item>
- <item msgid="3367904477834831032">"کنکشن ترجیحی (330kbps/303kbps)"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:0 (7065842274271279580) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:3 (500463122137421129) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:0 (5062108632402595000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3093550793512117000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_titles:0 (3093023430402746802) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_summaries:0 (3214516120190965356) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_titles:0 (2684127272582591429) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_summaries:0 (1081159789834584363) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_titles:0 (5226878858503393706) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_summaries:0 (4118561796005528173) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:0 (3411577996960199959) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:1 (2921767058740704969) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:2 (3682554248829489641) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:0 (7668834469173465015) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:1 (4327143584633311908) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:2 (6155648878105378550) -->
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"آف"</item>
<item msgid="1593289376502312923">"64K"</item>
diff --git a/packages/SettingsLib/res/values-ur/strings.xml b/packages/SettingsLib/res/values-ur/strings.xml
index ce27df8..d4ad6b9 100644
--- a/packages/SettingsLib/res/values-ur/strings.xml
+++ b/packages/SettingsLib/res/values-ur/strings.xml
@@ -171,15 +171,23 @@
<string name="mobile_data_always_on" msgid="7745605759775320362">"سیلولر ڈیٹا کو ہمیشہ فعال رکھیں"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"مطلق والیوم کو غیر فعال کریں"</string>
<string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"بلوٹوتھ آڈیو کوڈیک"</string>
- <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"ترجیحی بلوٹوتھ A2DP کوڈیک منتخب کریں"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_type_dialog_title (4558347981670553665) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"بلوٹوتھ آڈیو کے نمونے کی شرح"</string>
- <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"ترجیحی بلوٹوتھ A2DP کوڈیک نمونے کی شرح منتخب کریں"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_sample_rate_dialog_title (5628790207448471613) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"بلوٹوتھ آڈیو بٹس فی نمونہ"</string>
- <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"ترجیحی بلو ٹوتھ A2DP کوڈیک بٹس فی نمونہ منتخب کریں"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_bits_per_sample_dialog_title (4546131401358681321) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"بلوٹوتھ آڈیو چینل موڈ"</string>
- <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"ترجیحی بلوٹوتھ A2DP کوڈیک چینل موڈ منتخب کریں"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"بلوٹوتھ آڈیو LDAC پلے بیک کا معیار"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"ترجیحی بلوٹوتھ A2DP کوڈیک LDAC پلے بیک کا معیار منتخب کریں"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_channel_mode_dialog_title (9133545781346216071) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality (3619694372407843405) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (3181967377574368400) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_streaming_label (5347862512596240506) -->
+ <skip />
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"وائرلیس ڈسپلے سرٹیفیکیشن کیلئے اختیارات دکھائیں"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Wi‑Fi لاگنگ لیول میں اضافہ کریں، Wi‑Fi منتخب کنندہ میں فی SSID RSSI دکھائیں"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"فعال ہونے پر، جب Wi‑Fi سگنل کمزور ہوگا تو Wi‑Fi سیلولر پر ڈیٹا کنکشن بھیجنے کیلئے مزید جارحانہ کاروائی کرے گا۔"</string>
diff --git a/packages/SettingsLib/res/values-uz/arrays.xml b/packages/SettingsLib/res/values-uz/arrays.xml
index 11b3de7..f784021 100644
--- a/packages/SettingsLib/res/values-uz/arrays.xml
+++ b/packages/SettingsLib/res/values-uz/arrays.xml
@@ -58,66 +58,22 @@
<item msgid="3878793616631049349">"HDCP tekshiruvi faqat DRM kontent uchun ishlatilsin"</item>
<item msgid="45075631231212732">"Har doim HDCP tekshiruvidan foydalanilsin"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="1852387125374225729">"Standart"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="4260844283202960798">"aptX"</item>
- <item msgid="7279983368484312990">"aptX-HD"</item>
- <item msgid="2301339338870319651">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="9072025520360316957">"Standart"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="1190434429082395888">"aptX"</item>
- <item msgid="649699003004233053">"aptX-HD"</item>
- <item msgid="508106435710925399">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
- <item msgid="7102940318360468759">"Standart"</item>
- <item msgid="8895532488906185219">"44.1 kGs"</item>
- <item msgid="2909915718994807056">"48.0 kGs"</item>
- <item msgid="3347287377354164611">"88.2 kGs"</item>
- <item msgid="1234212100239985373">"96.0 kGs"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
- <item msgid="7224433008148687313">"Standart"</item>
- <item msgid="4482862757811638365">"44.1 kGs"</item>
- <item msgid="354495328188724404">"48.0 kGs"</item>
- <item msgid="7329816882213695083">"88.2 kGs"</item>
- <item msgid="6967397666254430476">"96.0 kGs"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
- <item msgid="6694044160540313386">"Standart"</item>
- <item msgid="5618929009984956469">"16 bit/namuna"</item>
- <item msgid="3412640499234627248">"24 bit/namuna"</item>
- <item msgid="121583001492929387">"32 bit/namuna"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
- <item msgid="5091076677792306320">"Standart"</item>
- <item msgid="4726688794884191540">"16 bit/namuna"</item>
- <item msgid="305344756485516870">"24 bit/namuna"</item>
- <item msgid="244568657919675099">"32 bit/namuna"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
- <item msgid="13423709606339855">"Standart"</item>
- <item msgid="4106832974775067314">"Mono"</item>
- <item msgid="5571632958424639155">"Stereo"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
- <item msgid="8128478683963250130">"Standart"</item>
- <item msgid="8900559293912978337">"Mono"</item>
- <item msgid="8883739882299884241">"Stereo"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
- <item msgid="2944889121850394020">"O‘zingizga ma’qul ovoz sifati (990/909 kbit/s)"</item>
- <item msgid="138837449700903545">"Standart (660/606 kbit/s)"</item>
- <item msgid="4777177307869441982">"O‘zingizga ma’qul ulanish (330/303 kbit/s)"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
- <item msgid="172302906231378902">"O‘zingizga ma’qul ovoz sifati (990/909 kbit/s)"</item>
- <item msgid="9091111147684472529">"Standart (660/606 kbit/s)"</item>
- <item msgid="3367904477834831032">"O‘zingizga ma’qul ulanish (330/303 kbit/s)"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:0 (7065842274271279580) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:3 (500463122137421129) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:0 (5062108632402595000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3093550793512117000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_titles:0 (3093023430402746802) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_summaries:0 (3214516120190965356) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_titles:0 (2684127272582591429) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_summaries:0 (1081159789834584363) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_titles:0 (5226878858503393706) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_summaries:0 (4118561796005528173) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:0 (3411577996960199959) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:1 (2921767058740704969) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:2 (3682554248829489641) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:0 (7668834469173465015) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:1 (4327143584633311908) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:2 (6155648878105378550) -->
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"O‘chiq"</item>
<item msgid="1593289376502312923">"64 KB"</item>
diff --git a/packages/SettingsLib/res/values-uz/strings.xml b/packages/SettingsLib/res/values-uz/strings.xml
index 6efc6c4..f50f36b 100644
--- a/packages/SettingsLib/res/values-uz/strings.xml
+++ b/packages/SettingsLib/res/values-uz/strings.xml
@@ -171,15 +171,23 @@
<string name="mobile_data_always_on" msgid="7745605759775320362">"Mobil internet o‘chirilmasin"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Ovoz balangligining mutlaq darajasini o‘chirib qo‘yish"</string>
<string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Bluetooth audio kodeki"</string>
- <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"O‘zingizga ma’qul Bluetooth A2DP kodekini tanlang"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_type_dialog_title (4558347981670553665) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Bluetooth audio namunasi chastotasi"</string>
- <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"O‘zingizga ma’qul Bluetooth A2DP kodek namunasi chastotasini tanlang"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_sample_rate_dialog_title (5628790207448471613) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Bluetooth audio namunasidagi bitlar soni"</string>
- <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"O‘zingizga ma’qul Bluetooth A2DP kodek namunasidagi bitlar sonini tanlang"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_bits_per_sample_dialog_title (4546131401358681321) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Bluetooth audio kanali rejimi"</string>
- <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"O‘zingizga ma’qul Bluetooth A2DP kodek kanali rejimini tanlang"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"Bluetooth audio LDAC ijrosi sifati"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"O‘zingizga ma’qul Bluetooth A2DP kodek LDAC ijrosi sifatini tanlang"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_channel_mode_dialog_title (9133545781346216071) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality (3619694372407843405) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (3181967377574368400) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_streaming_label (5347862512596240506) -->
+ <skip />
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Simsiz monitorlarni sertifikatlash parametrini ko‘rsatish"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Wi-Fi ulanishini tanlashda har bir SSID uchun jurnalda ko‘rsatilsin"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"Agar ushbu funksiya yoqilsa, Wi-Fi signali past bo‘lganda internetga ulanish majburiy ravishda mobil internetga o‘tkaziladi."</string>
@@ -240,7 +248,7 @@
<string name="enable_opengl_traces_title" msgid="6790444011053219871">"OpenGL trassasini yoqish"</string>
<string name="usb_audio_disable_routing" msgid="8114498436003102671">"Audio uzatishni o‘ch. qo‘yish (USB)"</string>
<string name="usb_audio_disable_routing_summary" msgid="980282760277312264">"Tashqi USB qurilmaga avto-yo‘naltirishni o‘ch. qo‘yish"</string>
- <string name="debug_layout" msgid="5981361776594526155">"Elementlar chegarasini ko‘rsatish"</string>
+ <string name="debug_layout" msgid="5981361776594526155">"Elementlar hoshiyasi"</string>
<string name="debug_layout_summary" msgid="2001775315258637682">"Klip, maydon va h.k. chegaralarini ko‘rsatish"</string>
<string name="force_rtl_layout_all_locales" msgid="2259906643093138978">"O‘ngdan chapga qarab yozish"</string>
<string name="force_rtl_layout_all_locales_summary" msgid="9192797796616132534">"Barcha tillarda o‘ngdan chapga qarab yozish"</string>
diff --git a/packages/SettingsLib/res/values-vi/arrays.xml b/packages/SettingsLib/res/values-vi/arrays.xml
index 3f6f729..21bbf0a 100644
--- a/packages/SettingsLib/res/values-vi/arrays.xml
+++ b/packages/SettingsLib/res/values-vi/arrays.xml
@@ -58,66 +58,22 @@
<item msgid="3878793616631049349">"Chỉ sử dụng kiểm tra HDCP cho nội dung DRM"</item>
<item msgid="45075631231212732">"Luôn sử dụng kiểm tra HDCP"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="1852387125374225729">"Mặc định"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="4260844283202960798">"aptX"</item>
- <item msgid="7279983368484312990">"aptX-HD"</item>
- <item msgid="2301339338870319651">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="9072025520360316957">"Mặc định"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="1190434429082395888">"aptX"</item>
- <item msgid="649699003004233053">"aptX-HD"</item>
- <item msgid="508106435710925399">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
- <item msgid="7102940318360468759">"Mặc định"</item>
- <item msgid="8895532488906185219">"44,1 kHz"</item>
- <item msgid="2909915718994807056">"48,0 kHz"</item>
- <item msgid="3347287377354164611">"88,2 kHz"</item>
- <item msgid="1234212100239985373">"96,0 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
- <item msgid="7224433008148687313">"Mặc định"</item>
- <item msgid="4482862757811638365">"44,1 kHz"</item>
- <item msgid="354495328188724404">"48,0 kHz"</item>
- <item msgid="7329816882213695083">"88,2 kHz"</item>
- <item msgid="6967397666254430476">"96,0 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
- <item msgid="6694044160540313386">"Mặc định"</item>
- <item msgid="5618929009984956469">"16 bit/mẫu"</item>
- <item msgid="3412640499234627248">"24 bit/mẫu"</item>
- <item msgid="121583001492929387">"32 bit/mẫu"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
- <item msgid="5091076677792306320">"Mặc định"</item>
- <item msgid="4726688794884191540">"16 bit/mẫu"</item>
- <item msgid="305344756485516870">"24 bit/mẫu"</item>
- <item msgid="244568657919675099">"32 bit/mẫu"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
- <item msgid="13423709606339855">"Mặc định"</item>
- <item msgid="4106832974775067314">"Đơn âm"</item>
- <item msgid="5571632958424639155">"Âm thanh nổi"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
- <item msgid="8128478683963250130">"Mặc định"</item>
- <item msgid="8900559293912978337">"Đơn âm"</item>
- <item msgid="8883739882299884241">"Âm thanh nổi"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
- <item msgid="2944889121850394020">"Ưu tiên chất lượng (990kbps/909kbps)"</item>
- <item msgid="138837449700903545">"Tiêu chuẩn (660kb/giây/606kb/giây)"</item>
- <item msgid="4777177307869441982">"Kết nối được ưu tiên (330kb/giây/303kb/giây)"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
- <item msgid="172302906231378902">"Ưu tiên chất lượng (990kbps/909kbps)"</item>
- <item msgid="9091111147684472529">"Tiêu chuẩn (660kb/giây/606kb/giây)"</item>
- <item msgid="3367904477834831032">"Kết nối được ưu tiên (330kb/giây/303kb/giây)"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:0 (7065842274271279580) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:3 (500463122137421129) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:0 (5062108632402595000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3093550793512117000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_titles:0 (3093023430402746802) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_summaries:0 (3214516120190965356) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_titles:0 (2684127272582591429) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_summaries:0 (1081159789834584363) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_titles:0 (5226878858503393706) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_summaries:0 (4118561796005528173) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:0 (3411577996960199959) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:1 (2921767058740704969) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:2 (3682554248829489641) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:0 (7668834469173465015) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:1 (4327143584633311908) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:2 (6155648878105378550) -->
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"Tắt"</item>
<item msgid="1593289376502312923">"64K"</item>
diff --git a/packages/SettingsLib/res/values-vi/strings.xml b/packages/SettingsLib/res/values-vi/strings.xml
index 5822f18..85be70e 100644
--- a/packages/SettingsLib/res/values-vi/strings.xml
+++ b/packages/SettingsLib/res/values-vi/strings.xml
@@ -171,15 +171,23 @@
<string name="mobile_data_always_on" msgid="7745605759775320362">"Dữ liệu di động luôn hoạt động"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Vô hiệu hóa âm lượng tuyệt đối"</string>
<string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Codec âm thanh Bluetooth"</string>
- <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"Chọn Codec A2DP Bluetooth ưu tiên"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_type_dialog_title (4558347981670553665) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Tốc độ lấy mẫu âm thanh Bluetooth"</string>
- <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"Chọn tốc độ lấy mẫu Codec A2DP Bluetooth ưu tiên"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_sample_rate_dialog_title (5628790207448471613) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Số bit âm thanh Bluetooth mỗi mẫu"</string>
- <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"Chọn số bit Codec A2DP Bluetooth ưu tiên mỗi mẫu"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_bits_per_sample_dialog_title (4546131401358681321) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Chế độ kênh âm thanh Bluetooth"</string>
- <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"Chọn chế độ kênh Codec A2DP Bluetooth ưu tiên"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"Chất lượng phát lại LDAC Âm thanh Bluetooth"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"Chọn chất lượng phát lại LDAC Codec A2DP Bluetooth ưu tiên"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_channel_mode_dialog_title (9133545781346216071) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality (3619694372407843405) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (3181967377574368400) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_streaming_label (5347862512596240506) -->
+ <skip />
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Hiển thị tùy chọn chứng nhận hiển thị không dây"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Tăng mức ghi nhật ký Wi‑Fi, hiển thị mỗi SSID RSSI trong bộ chọn Wi‑Fi"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"Khi được bật, Wi‑Fi sẽ tích cực hơn trong việc chuyển vùng kết nối dữ liệu sang mạng di động khi tín hiệu Wi‑Fi yếu"</string>
diff --git a/packages/SettingsLib/res/values-zh-rCN/arrays.xml b/packages/SettingsLib/res/values-zh-rCN/arrays.xml
index 0ef095d..5ec63b3 100644
--- a/packages/SettingsLib/res/values-zh-rCN/arrays.xml
+++ b/packages/SettingsLib/res/values-zh-rCN/arrays.xml
@@ -58,66 +58,22 @@
<item msgid="3878793616631049349">"仅使用 HDCP 检查 DRM 内容"</item>
<item msgid="45075631231212732">"始终使用 HDCP 检查"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="1852387125374225729">"默认"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="4260844283202960798">"aptX"</item>
- <item msgid="7279983368484312990">"aptX-HD"</item>
- <item msgid="2301339338870319651">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="9072025520360316957">"默认"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="1190434429082395888">"aptX"</item>
- <item msgid="649699003004233053">"aptX-HD"</item>
- <item msgid="508106435710925399">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
- <item msgid="7102940318360468759">"默认"</item>
- <item msgid="8895532488906185219">"44.1 kHz"</item>
- <item msgid="2909915718994807056">"48.0 kHz"</item>
- <item msgid="3347287377354164611">"88.2 kHz"</item>
- <item msgid="1234212100239985373">"96.0 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
- <item msgid="7224433008148687313">"默认"</item>
- <item msgid="4482862757811638365">"44.1 kHz"</item>
- <item msgid="354495328188724404">"48.0 kHz"</item>
- <item msgid="7329816882213695083">"88.2 kHz"</item>
- <item msgid="6967397666254430476">"96.0 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
- <item msgid="6694044160540313386">"默认"</item>
- <item msgid="5618929009984956469">"16 位/样本"</item>
- <item msgid="3412640499234627248">"24 位/样本"</item>
- <item msgid="121583001492929387">"32 位/样本"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
- <item msgid="5091076677792306320">"默认"</item>
- <item msgid="4726688794884191540">"16 位/样本"</item>
- <item msgid="305344756485516870">"24 位/样本"</item>
- <item msgid="244568657919675099">"32 位/样本"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
- <item msgid="13423709606339855">"默认"</item>
- <item msgid="4106832974775067314">"单声道"</item>
- <item msgid="5571632958424639155">"立体声"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
- <item msgid="8128478683963250130">"默认"</item>
- <item msgid="8900559293912978337">"单声道"</item>
- <item msgid="8883739882299884241">"立体声"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
- <item msgid="2944889121850394020">"音质优先 (990kbps/909kbps)"</item>
- <item msgid="138837449700903545">"标准 (660kbps/606kbps)"</item>
- <item msgid="4777177307869441982">"连接优先 (330kbps/303kbps)"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
- <item msgid="172302906231378902">"音质优先 (990kbps/909kbps)"</item>
- <item msgid="9091111147684472529">"标准 (660kbps/606kbps)"</item>
- <item msgid="3367904477834831032">"连接优先 (330kbps/303kbps)"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:0 (7065842274271279580) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:3 (500463122137421129) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:0 (5062108632402595000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3093550793512117000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_titles:0 (3093023430402746802) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_summaries:0 (3214516120190965356) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_titles:0 (2684127272582591429) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_summaries:0 (1081159789834584363) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_titles:0 (5226878858503393706) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_summaries:0 (4118561796005528173) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:0 (3411577996960199959) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:1 (2921767058740704969) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:2 (3682554248829489641) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:0 (7668834469173465015) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:1 (4327143584633311908) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:2 (6155648878105378550) -->
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"关闭"</item>
<item msgid="1593289376502312923">"64K"</item>
diff --git a/packages/SettingsLib/res/values-zh-rCN/strings.xml b/packages/SettingsLib/res/values-zh-rCN/strings.xml
index 35a1dfc..3ab17fb 100644
--- a/packages/SettingsLib/res/values-zh-rCN/strings.xml
+++ b/packages/SettingsLib/res/values-zh-rCN/strings.xml
@@ -171,15 +171,23 @@
<string name="mobile_data_always_on" msgid="7745605759775320362">"始终开启移动数据网络"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"停用绝对音量功能"</string>
<string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"蓝牙音频编解码器"</string>
- <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"选择首选的蓝牙 A2DP 编解码器"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_type_dialog_title (4558347981670553665) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"蓝牙音频采样率"</string>
- <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"选择首选的蓝牙 A2DP 编解码器采样率"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_sample_rate_dialog_title (5628790207448471613) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"蓝牙音频每样本位数"</string>
- <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"选择首选的蓝牙 A2DP 编解码器每样本位数"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_bits_per_sample_dialog_title (4546131401358681321) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"蓝牙音频声道模式"</string>
- <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"选择首选的蓝牙 A2DP 编解码器声道模式"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"蓝牙音频 LDAC 播放质量"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"选择首选的蓝牙 A2DP 编解码器 LDAC 播放质量"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_channel_mode_dialog_title (9133545781346216071) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality (3619694372407843405) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (3181967377574368400) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_streaming_label (5347862512596240506) -->
+ <skip />
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"显示无线显示认证选项"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"提升WLAN日志记录级别(在WLAN选择器中显示每个SSID的RSSI)"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"开启此设置后,系统会在WLAN信号较弱时,主动将网络模式从WLAN网络切换到移动数据网络"</string>
diff --git a/packages/SettingsLib/res/values-zh-rHK/arrays.xml b/packages/SettingsLib/res/values-zh-rHK/arrays.xml
index 872e7c9..953c8cc 100644
--- a/packages/SettingsLib/res/values-zh-rHK/arrays.xml
+++ b/packages/SettingsLib/res/values-zh-rHK/arrays.xml
@@ -58,66 +58,22 @@
<item msgid="3878793616631049349">"僅使用 HDCP 檢查 DRM 內容"</item>
<item msgid="45075631231212732">"永遠使用 HDCP 檢查"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="1852387125374225729">"預設"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="4260844283202960798">"aptX"</item>
- <item msgid="7279983368484312990">"aptX-HD"</item>
- <item msgid="2301339338870319651">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="9072025520360316957">"預設"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="1190434429082395888">"aptX"</item>
- <item msgid="649699003004233053">"aptX-HD"</item>
- <item msgid="508106435710925399">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
- <item msgid="7102940318360468759">"預設"</item>
- <item msgid="8895532488906185219">"44.1 kHz"</item>
- <item msgid="2909915718994807056">"48.0 kHz"</item>
- <item msgid="3347287377354164611">"88.2 kHz"</item>
- <item msgid="1234212100239985373">"96.0 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
- <item msgid="7224433008148687313">"預設"</item>
- <item msgid="4482862757811638365">"44.1 kHz"</item>
- <item msgid="354495328188724404">"48.0 kHz"</item>
- <item msgid="7329816882213695083">"88.2 kHz"</item>
- <item msgid="6967397666254430476">"96.0 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
- <item msgid="6694044160540313386">"預設"</item>
- <item msgid="5618929009984956469">"每個樣本 16 位元"</item>
- <item msgid="3412640499234627248">"每個樣本 24 位元"</item>
- <item msgid="121583001492929387">"每個樣本 32 位元"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
- <item msgid="5091076677792306320">"預設"</item>
- <item msgid="4726688794884191540">"每個樣本 16 位元"</item>
- <item msgid="305344756485516870">"每個樣本 24 位元"</item>
- <item msgid="244568657919675099">"每個樣本 32 位元"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
- <item msgid="13423709606339855">"預設"</item>
- <item msgid="4106832974775067314">"單聲道"</item>
- <item msgid="5571632958424639155">"立體聲"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
- <item msgid="8128478683963250130">"預設"</item>
- <item msgid="8900559293912978337">"單聲道"</item>
- <item msgid="8883739882299884241">"立體聲"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
- <item msgid="2944889121850394020">"音質優先 (990kbps/909kbps)"</item>
- <item msgid="138837449700903545">"標準 (660kbps/606kbps)"</item>
- <item msgid="4777177307869441982">"連線優先 (330kbps/303kbps)"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
- <item msgid="172302906231378902">"音質優先 (990kbps/909kbps)"</item>
- <item msgid="9091111147684472529">"標準 (660kbps/606kbps)"</item>
- <item msgid="3367904477834831032">"連線優先 (330kbps/303kbps)"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:0 (7065842274271279580) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:3 (500463122137421129) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:0 (5062108632402595000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3093550793512117000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_titles:0 (3093023430402746802) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_summaries:0 (3214516120190965356) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_titles:0 (2684127272582591429) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_summaries:0 (1081159789834584363) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_titles:0 (5226878858503393706) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_summaries:0 (4118561796005528173) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:0 (3411577996960199959) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:1 (2921767058740704969) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:2 (3682554248829489641) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:0 (7668834469173465015) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:1 (4327143584633311908) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:2 (6155648878105378550) -->
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"關閉"</item>
<item msgid="1593289376502312923">"64K"</item>
diff --git a/packages/SettingsLib/res/values-zh-rHK/strings.xml b/packages/SettingsLib/res/values-zh-rHK/strings.xml
index 3c5c328..79fc760 100644
--- a/packages/SettingsLib/res/values-zh-rHK/strings.xml
+++ b/packages/SettingsLib/res/values-zh-rHK/strings.xml
@@ -171,15 +171,23 @@
<string name="mobile_data_always_on" msgid="7745605759775320362">"經常啟用流動數據"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"停用絕對音量功能"</string>
<string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"藍牙音訊編解碼器"</string>
- <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"選取偏好的藍牙 A2DP 編解碼器"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_type_dialog_title (4558347981670553665) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"藍牙音訊取樣率"</string>
- <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"選取偏好的藍牙 A2DP 編解碼器取樣率"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_sample_rate_dialog_title (5628790207448471613) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"藍牙音訊每個樣本位元數"</string>
- <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"選取偏好的藍牙 A2DP 編解碼器每個樣本位元數"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_bits_per_sample_dialog_title (4546131401358681321) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"藍牙音訊聲道模式"</string>
- <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"選取偏好的藍牙 A2DP 編解碼器聲道模式"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"藍牙音訊 LDAC 播放音質"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"選取偏好的藍牙 A2DP 編解碼器 LDAC 播放音質"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_channel_mode_dialog_title (9133545781346216071) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality (3619694372407843405) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (3181967377574368400) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_streaming_label (5347862512596240506) -->
+ <skip />
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"顯示無線螢幕分享認證的選項"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"讓 Wi‑Fi 記錄功能升級,在 Wi‑Fi 選擇器中依每個 SSID RSSI 顯示 Wi‑Fi 詳細紀錄"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"啟用時,Wi-Fi 連線會在訊號不穩的情況下更積極轉換成流動數據連線"</string>
diff --git a/packages/SettingsLib/res/values-zh-rTW/arrays.xml b/packages/SettingsLib/res/values-zh-rTW/arrays.xml
index ad99128..d426b30 100644
--- a/packages/SettingsLib/res/values-zh-rTW/arrays.xml
+++ b/packages/SettingsLib/res/values-zh-rTW/arrays.xml
@@ -58,66 +58,22 @@
<item msgid="3878793616631049349">"僅使用 HDCP 檢查 DRM 內容"</item>
<item msgid="45075631231212732">"一律使用 HDCP 檢查"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="1852387125374225729">"預設"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="4260844283202960798">"aptX"</item>
- <item msgid="7279983368484312990">"aptX-HD"</item>
- <item msgid="2301339338870319651">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="9072025520360316957">"預設"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="1190434429082395888">"aptX"</item>
- <item msgid="649699003004233053">"aptX-HD"</item>
- <item msgid="508106435710925399">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
- <item msgid="7102940318360468759">"預設"</item>
- <item msgid="8895532488906185219">"44.1 kHz"</item>
- <item msgid="2909915718994807056">"48.0 kHz"</item>
- <item msgid="3347287377354164611">"88.2 kHz"</item>
- <item msgid="1234212100239985373">"96.0 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
- <item msgid="7224433008148687313">"預設"</item>
- <item msgid="4482862757811638365">"44.1 kHz"</item>
- <item msgid="354495328188724404">"48.0 kHz"</item>
- <item msgid="7329816882213695083">"88.2 kHz"</item>
- <item msgid="6967397666254430476">"96.0 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
- <item msgid="6694044160540313386">"預設"</item>
- <item msgid="5618929009984956469">"16 位元/樣本"</item>
- <item msgid="3412640499234627248">"24 位元/樣本"</item>
- <item msgid="121583001492929387">"32 位元/樣本"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
- <item msgid="5091076677792306320">"預設"</item>
- <item msgid="4726688794884191540">"16 位元/樣本"</item>
- <item msgid="305344756485516870">"24 位元/樣本"</item>
- <item msgid="244568657919675099">"32 位元/樣本"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
- <item msgid="13423709606339855">"預設"</item>
- <item msgid="4106832974775067314">"單聲道"</item>
- <item msgid="5571632958424639155">"立體聲"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
- <item msgid="8128478683963250130">"預設"</item>
- <item msgid="8900559293912978337">"單聲道"</item>
- <item msgid="8883739882299884241">"立體聲"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
- <item msgid="2944889121850394020">"音質優先 (990kbps/909kbps)"</item>
- <item msgid="138837449700903545">"標準 (660kbps/606kbps)"</item>
- <item msgid="4777177307869441982">"連線優先 (330kbps/303kbps)"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
- <item msgid="172302906231378902">"音質優先 (990kbps/909kbps)"</item>
- <item msgid="9091111147684472529">"標準 (660kbps/606kbps)"</item>
- <item msgid="3367904477834831032">"連線優先 (330kbps/303kbps)"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:0 (7065842274271279580) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:3 (500463122137421129) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:0 (5062108632402595000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3093550793512117000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_titles:0 (3093023430402746802) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_summaries:0 (3214516120190965356) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_titles:0 (2684127272582591429) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_summaries:0 (1081159789834584363) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_titles:0 (5226878858503393706) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_summaries:0 (4118561796005528173) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:0 (3411577996960199959) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:1 (2921767058740704969) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:2 (3682554248829489641) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:0 (7668834469173465015) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:1 (4327143584633311908) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:2 (6155648878105378550) -->
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"關閉"</item>
<item msgid="1593289376502312923">"64K"</item>
diff --git a/packages/SettingsLib/res/values-zh-rTW/strings.xml b/packages/SettingsLib/res/values-zh-rTW/strings.xml
index 861834b..2a32252 100644
--- a/packages/SettingsLib/res/values-zh-rTW/strings.xml
+++ b/packages/SettingsLib/res/values-zh-rTW/strings.xml
@@ -171,15 +171,23 @@
<string name="mobile_data_always_on" msgid="7745605759775320362">"行動數據連線一律保持啟用狀態"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"停用絕對音量功能"</string>
<string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"藍牙音訊轉碼器"</string>
- <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"選取偏好的藍牙 A2DP 轉碼器"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_type_dialog_title (4558347981670553665) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"藍牙音訊取樣率"</string>
- <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"選取偏好的藍牙 A2DP 轉碼器取樣率"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_sample_rate_dialog_title (5628790207448471613) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"藍牙音訊每單位樣本位元數"</string>
- <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"選取偏好的藍牙 A2DP 轉碼器每單位樣本位元數"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_bits_per_sample_dialog_title (4546131401358681321) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"藍牙音訊聲道模式"</string>
- <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"選取偏好的藍牙 A2DP 轉碼器聲道模式"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"藍牙音訊 LDAC 播放品質"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"選取偏好的藍牙 A2DP 轉碼器 LDAC 播放品質"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_channel_mode_dialog_title (9133545781346216071) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality (3619694372407843405) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (3181967377574368400) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_streaming_label (5347862512596240506) -->
+ <skip />
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"顯示無線螢幕分享認證的選項"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"讓 Wi‑Fi 記錄功能升級,在 Wi‑Fi 選擇器中依每個 SSID RSSI 顯示 Wi‑Fi 詳細紀錄"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"啟用時,Wi-Fi 連線在訊號不穩的情況下會更積極轉換成行動數據連線"</string>
diff --git a/packages/SettingsLib/res/values-zu/arrays.xml b/packages/SettingsLib/res/values-zu/arrays.xml
index 50c1274..04e7614 100644
--- a/packages/SettingsLib/res/values-zu/arrays.xml
+++ b/packages/SettingsLib/res/values-zu/arrays.xml
@@ -58,66 +58,22 @@
<item msgid="3878793616631049349">"Sebenzisa ukuhlola kwe-HDCP kokuqukethwe i-DRM kuphela"</item>
<item msgid="45075631231212732">"Sebenzisa njalo ukuhlola kwe-HDPC"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="1852387125374225729">"Okuzenzakalelayo"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="4260844283202960798">"aptX"</item>
- <item msgid="7279983368484312990">"aptX-HD"</item>
- <item msgid="2301339338870319651">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="9072025520360316957">"Okuzenzakalelayo"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="1190434429082395888">"aptX"</item>
- <item msgid="649699003004233053">"aptX-HD"</item>
- <item msgid="508106435710925399">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
- <item msgid="7102940318360468759">"Okuzenzakalelayo"</item>
- <item msgid="8895532488906185219">"44.1 kHz"</item>
- <item msgid="2909915718994807056">"48.0 kHz"</item>
- <item msgid="3347287377354164611">"88.2 kHz"</item>
- <item msgid="1234212100239985373">"96.0 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
- <item msgid="7224433008148687313">"Okuzenzakalelayo"</item>
- <item msgid="4482862757811638365">"44.1 kHz"</item>
- <item msgid="354495328188724404">"48.0 kHz"</item>
- <item msgid="7329816882213695083">"88.2 kHz"</item>
- <item msgid="6967397666254430476">"96.0 kHz"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
- <item msgid="6694044160540313386">"Okuzenzakalelayo"</item>
- <item msgid="5618929009984956469">"16 bits/isampula"</item>
- <item msgid="3412640499234627248">"24 bits/isampula"</item>
- <item msgid="121583001492929387">"32 bits/isampula"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
- <item msgid="5091076677792306320">"Okuzenzakalelayo"</item>
- <item msgid="4726688794884191540">"16 bits/isampula"</item>
- <item msgid="305344756485516870">"24 bits/isampula"</item>
- <item msgid="244568657919675099">"32 bits/isampula"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
- <item msgid="13423709606339855">"Okuzenzakalelayo"</item>
- <item msgid="4106832974775067314">"Okukodwa"</item>
- <item msgid="5571632958424639155">"I-Stereo"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
- <item msgid="8128478683963250130">"Okuzenzakalelayo"</item>
- <item msgid="8900559293912978337">"Okukodwa"</item>
- <item msgid="8883739882299884241">"I-Stereo"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
- <item msgid="2944889121850394020">"Ikhwalithi yomsindo ekhethwayo (990kbps/909kbps)"</item>
- <item msgid="138837449700903545">"Okujwayelekile (660kbps/606kbps)"</item>
- <item msgid="4777177307869441982">"Uxhumo olukhethwayo (330kbps/303kbps)"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
- <item msgid="172302906231378902">"Ikhwalithi yomsindo ekhethwayo (990kbps/909kbps)"</item>
- <item msgid="9091111147684472529">"Okujwayelekile (660kbps/606kbps)"</item>
- <item msgid="3367904477834831032">"Uxhumo olukhethwayo (330kbps/303kbps)"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:0 (7065842274271279580) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:3 (500463122137421129) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:0 (5062108632402595000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:3 (3093550793512117000) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_titles:0 (3093023430402746802) -->
+ <!-- no translation found for bluetooth_a2dp_codec_sample_rate_summaries:0 (3214516120190965356) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_titles:0 (2684127272582591429) -->
+ <!-- no translation found for bluetooth_a2dp_codec_bits_per_sample_summaries:0 (1081159789834584363) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_titles:0 (5226878858503393706) -->
+ <!-- no translation found for bluetooth_a2dp_codec_channel_mode_summaries:0 (4118561796005528173) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:0 (3411577996960199959) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:1 (2921767058740704969) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_titles:2 (3682554248829489641) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:0 (7668834469173465015) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:1 (4327143584633311908) -->
+ <!-- no translation found for bluetooth_a2dp_codec_ldac_playback_quality_summaries:2 (6155648878105378550) -->
<string-array name="select_logd_size_titles">
<item msgid="8665206199209698501">"Valiwe"</item>
<item msgid="1593289376502312923">"64K"</item>
diff --git a/packages/SettingsLib/res/values-zu/strings.xml b/packages/SettingsLib/res/values-zu/strings.xml
index 289f4f6..143d4d1 100644
--- a/packages/SettingsLib/res/values-zu/strings.xml
+++ b/packages/SettingsLib/res/values-zu/strings.xml
@@ -171,15 +171,23 @@
<string name="mobile_data_always_on" msgid="7745605759775320362">"Idatha yeselula ihlala isebenza"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Khubaza ivolumu ngokuphelele"</string>
<string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"I-Bluetooth Audio Codec"</string>
- <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="6470824182074383881">"Khetha i-Bluetooth A2DP Codec ethandwayo"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_type_dialog_title (4558347981670553665) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Isilinganiso sesampula yomsindo we-Bluetooth"</string>
- <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="4263851572248033749">"Khetha isilinganiso sesampuli ye-Bluetooth A2DP Codec ethandwayo"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_sample_rate_dialog_title (5628790207448471613) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Ama-Bits omsindo we-Bluetooth ngesampula ngayinye"</string>
- <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="2096170505745650345">"Khetha i-Bluetooth A2DP Codec Bits ethandwayo ngesampula ngayinye"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_bits_per_sample_dialog_title (4546131401358681321) -->
+ <skip />
<string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Imodi yesiteshi somsindo we-Bluetooth"</string>
- <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="4073812880900816325">"Khetha imodi yesiteshi se-Bluetooth A2DP Codec ethandwayo"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="4846872213548295632">"Ikhwalithi yokudlala ye-LDAC yomsindo we-Bluetooth"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="3940973633342423717">"Khetha ikhwalithi yokudlala ye-Bluetooth A2DP Codec LDAC ethandwayo"</string>
+ <!-- no translation found for bluetooth_select_a2dp_codec_channel_mode_dialog_title (9133545781346216071) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality (3619694372407843405) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title (3181967377574368400) -->
+ <skip />
+ <!-- no translation found for bluetooth_select_a2dp_codec_streaming_label (5347862512596240506) -->
+ <skip />
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Bonisa izinketho zokunikeza isitifiketi ukubukeka okungenantambo"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"khuphula izinga lokungena le-Wi-Fi, bonisa nge-SSID RSSI engayodwana kusikhethi se-Wi-Fi"</string>
<string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"Uma inikwe amandla, i-Wi-Fi izoba namandla kakhulu ekunikezeleni ukuxhumeka kwedatha kuselula, uma isiginali ye-Wi-Fi iphansi"</string>
diff --git a/packages/SettingsLib/src/com/android/settingslib/Utils.java b/packages/SettingsLib/src/com/android/settingslib/Utils.java
index 6179244..fbc6aa3 100644
--- a/packages/SettingsLib/src/com/android/settingslib/Utils.java
+++ b/packages/SettingsLib/src/com/android/settingslib/Utils.java
@@ -13,8 +13,11 @@
import android.content.res.TypedArray;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
+import android.graphics.Color;
import android.graphics.drawable.Drawable;
+import android.graphics.drawable.LayerDrawable;
import android.net.ConnectivityManager;
+import android.net.ScoredNetwork;
import android.os.BatteryManager;
import android.os.UserManager;
import android.print.PrintManager;
@@ -29,6 +32,14 @@
private static String sServicesSystemSharedLibPackageName;
private static String sSharedSystemSharedLibPackageName;
+ static final int[] WIFI_PIE_FOR_BADGING = {
+ com.android.internal.R.drawable.ic_signal_wifi_badged_0_bars,
+ com.android.internal.R.drawable.ic_signal_wifi_badged_1_bar,
+ com.android.internal.R.drawable.ic_signal_wifi_badged_2_bars,
+ com.android.internal.R.drawable.ic_signal_wifi_badged_3_bars,
+ com.android.internal.R.drawable.ic_signal_wifi_badged_4_bars
+ };
+
/**
* Return string resource that best describes combination of tethering
* options available on this device.
@@ -160,10 +171,7 @@
@ColorInt
public static int getColorAccent(Context context) {
- TypedArray ta = context.obtainStyledAttributes(new int[]{android.R.attr.colorAccent});
- @ColorInt int colorAccent = ta.getColor(0, 0);
- ta.recycle();
- return colorAccent;
+ return getColorAttr(context, android.R.attr.colorAccent);
}
@ColorInt
@@ -182,6 +190,29 @@
return list.getDefaultColor();
}
+ @ColorInt
+ public static int getDisabled(Context context, int inputColor) {
+ return applyAlphaAttr(context, android.R.attr.disabledAlpha, inputColor);
+ }
+
+ @ColorInt
+ public static int applyAlphaAttr(Context context, int attr, int inputColor) {
+ TypedArray ta = context.obtainStyledAttributes(new int[]{attr});
+ float alpha = ta.getFloat(0, 0);
+ ta.recycle();
+ alpha *= Color.alpha(inputColor);
+ return Color.argb((int) (alpha), Color.red(inputColor), Color.green(inputColor),
+ Color.blue(inputColor));
+ }
+
+ @ColorInt
+ public static int getColorAttr(Context context, int attr) {
+ TypedArray ta = context.obtainStyledAttributes(new int[]{attr});
+ @ColorInt int colorAccent = ta.getColor(0, 0);
+ ta.recycle();
+ return colorAccent;
+ }
+
/**
* Determine whether a package is a "system package", in which case certain things (like
* disabling notifications or disabling the package altogether) should be disallowed.
@@ -233,4 +264,41 @@
com.android.internal.R.string.config_deviceProvisioningPackage);
return deviceProvisioningPackage != null && deviceProvisioningPackage.equals(packageName);
}
+
+ /**
+ * Returns a badged Wifi icon drawable.
+ *
+ * <p>The first layer contains the Wifi pie and the second layer contains the badge. Callers
+ * should set the drawable to the appropriate size and tint color.
+ *
+ * @param context The caller's context (must have access to internal resources)
+ * @param level The number of bars to show (0-4)
+ * @param badge The badge enum {@see android.net.ScoredNetwork}
+ *
+ * @throws IllegalArgumentException if an invalid badge enum is given
+ *
+ * @deprecated TODO(sghuman): Finalize the form of this method and then move it to a new
+ * location.
+ */
+ public static LayerDrawable getBadgedWifiIcon(Context context, int level, int badge) {
+ return new LayerDrawable(
+ new Drawable[] {
+ context.getDrawable(WIFI_PIE_FOR_BADGING[level]),
+ context.getDrawable(getWifiBadgeResource(badge))
+ });
+ }
+
+ private static int getWifiBadgeResource(int badge) {
+ switch (badge) {
+ case ScoredNetwork.BADGING_SD:
+ return com.android.internal.R.drawable.ic_signal_wifi_badged_sd;
+ case ScoredNetwork.BADGING_HD:
+ return com.android.internal.R.drawable.ic_signal_wifi_badged_hd;
+ case ScoredNetwork.BADGING_4K:
+ return com.android.internal.R.drawable.ic_signal_wifi_badged_4k;
+ default:
+ throw new IllegalArgumentException(
+ "No badge resource found for badge value: " + badge);
+ }
+ }
}
diff --git a/packages/SettingsLib/src/com/android/settingslib/drawer/TileUtils.java b/packages/SettingsLib/src/com/android/settingslib/drawer/TileUtils.java
index b327be0..6e10aab 100644
--- a/packages/SettingsLib/src/com/android/settingslib/drawer/TileUtils.java
+++ b/packages/SettingsLib/src/com/android/settingslib/drawer/TileUtils.java
@@ -21,6 +21,7 @@
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.content.res.Resources;
@@ -105,6 +106,12 @@
private static final String EXTRA_CATEGORY_KEY = "com.android.settings.category";
/**
+ * The key used to get the package name of the icon resource for the preference.
+ */
+ private static final String EXTRA_PREFERENCE_ICON_PACKAGE =
+ "com.android.settings.icon_package";
+
+ /**
* Name of the meta-data item that should be set in the AndroidManifest.xml
* to specify the key that should be used for the preference.
*/
@@ -342,6 +349,7 @@
ActivityInfo activityInfo, ApplicationInfo applicationInfo, PackageManager pm) {
if (applicationInfo.isSystemApp()) {
int icon = 0;
+ Pair<String, Integer> iconFromUri = null;
CharSequence title = null;
String summary = null;
String keyHint = null;
@@ -358,10 +366,10 @@
if (res != null && metaData != null) {
if (metaData.containsKey(META_DATA_PREFERENCE_ICON_URI)) {
- icon = getIconFromUri(context,
+ iconFromUri = getIconFromUri(context, activityInfo.packageName,
metaData.getString(META_DATA_PREFERENCE_ICON_URI), providerMap);
}
- if ((icon == 0) && metaData.containsKey(META_DATA_PREFERENCE_ICON)) {
+ if (iconFromUri == null && metaData.containsKey(META_DATA_PREFERENCE_ICON)) {
icon = metaData.getInt(META_DATA_PREFERENCE_ICON);
}
if (metaData.containsKey(META_DATA_PREFERENCE_TITLE)) {
@@ -401,12 +409,18 @@
if (TextUtils.isEmpty(title)) {
title = activityInfo.loadLabel(pm).toString();
}
- if (icon == 0) {
- icon = activityInfo.icon;
+
+ // Set the icon
+ if (iconFromUri != null) {
+ tile.icon = Icon.createWithResource(iconFromUri.first, iconFromUri.second);
+ } else {
+ if (icon == 0) {
+ icon = activityInfo.icon;
+ }
+ tile.icon = Icon.createWithResource(activityInfo.packageName, icon);
}
- // Set icon, title and summary for the preference
- tile.icon = Icon.createWithResource(activityInfo.packageName, icon);
+ // Set title and summary for the preference
tile.title = title;
tile.summary = summary;
// Replace the intent with this specific activity
@@ -422,16 +436,33 @@
}
/**
- * Gets the icon resource id from content provider.
+ * Gets the icon package name and resource id from content provider.
* @param Context context
+ * @param packageName package name of the target activity
* @param uriString URI for the content provider
* @param providerMap Maps URI authorities to providers
- * @return Resource id if returned by the content provider, otherwise 0
+ * @return package name and resource id of the icon specified
*/
- public static int getIconFromUri(Context context, String uriString,
- Map<String, IContentProvider> providerMap) {
+ public static Pair<String, Integer> getIconFromUri(Context context, String packageName,
+ String uriString, Map<String, IContentProvider> providerMap) {
Bundle bundle = getBundleFromUri(context, uriString, providerMap);
- return (bundle != null) ? bundle.getInt(META_DATA_PREFERENCE_ICON, 0) : 0;
+ if (bundle == null) {
+ return null;
+ }
+ String iconPackageName = bundle.getString(EXTRA_PREFERENCE_ICON_PACKAGE);
+ if (TextUtils.isEmpty(iconPackageName)) {
+ return null;
+ }
+ int resId = bundle.getInt(META_DATA_PREFERENCE_ICON, 0);
+ if (resId == 0) {
+ return null;
+ }
+ // Icon can either come from the target package or from the Settings app.
+ if (iconPackageName.equals(packageName)
+ || iconPackageName.equals(context.getPackageName())) {
+ return Pair.create(iconPackageName, bundle.getInt(META_DATA_PREFERENCE_ICON, 0));
+ }
+ return null;
}
/**
diff --git a/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java b/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java
index e7450fa..06ea445 100644
--- a/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java
+++ b/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java
@@ -27,12 +27,15 @@
import android.net.NetworkInfo;
import android.net.NetworkInfo.DetailedState;
import android.net.NetworkInfo.State;
+import android.net.NetworkKey;
+import android.net.ScoredNetwork;
import android.net.wifi.IWifiManager;
import android.net.wifi.ScanResult;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiConfiguration.KeyMgmt;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
+import android.net.wifi.WifiNetworkScoreCache;
import android.os.Bundle;
import android.os.RemoteException;
import android.os.ServiceManager;
@@ -48,6 +51,7 @@
import com.android.settingslib.R;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.Iterator;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicInteger;
@@ -132,6 +136,9 @@
private Object mTag;
+ private int mRankingScore = Integer.MIN_VALUE;
+ private int mBadge = ScoredNetwork.BADGING_NONE;
+
// used to co-relate internal vs returned accesspoint.
int mId;
@@ -205,6 +212,8 @@
this.mScanResultCache.clear();
this.mScanResultCache.putAll(that.mScanResultCache);
this.mId = that.mId;
+ this.mBadge = that.mBadge;
+ this.mRankingScore = that.mRankingScore;
}
@Override
@@ -213,6 +222,11 @@
if (isActive() && !other.isActive()) return -1;
if (!isActive() && other.isActive()) return 1;
+ // Higher scores go before lower scores
+ if (mRankingScore != other.mRankingScore) {
+ return (mRankingScore > other.mRankingScore) ? -1 : 1;
+ }
+
// Reachable one goes before unreachable one.
if (mRssi != Integer.MAX_VALUE && other.mRssi == Integer.MAX_VALUE) return -1;
if (mRssi == Integer.MAX_VALUE && other.mRssi != Integer.MAX_VALUE) return 1;
@@ -268,9 +282,38 @@
if (security != SECURITY_NONE) {
builder.append(',').append(securityToString(security, pskType));
}
+ builder.append(",rankingScore=").append(mRankingScore);
+ builder.append(",badge=").append(mBadge);
+
return builder.append(')').toString();
}
+ /**
+ * Updates the AccessPoint rankingScore and badge, returning true if the data has changed.
+ *
+ * @param scoreCache The score cache to use to retrieve scores.
+ */
+ boolean updateScores(WifiNetworkScoreCache scoreCache) {
+ int oldBadge = mBadge;
+ int oldRankingScore = mRankingScore;
+ mBadge = ScoredNetwork.BADGING_NONE;
+ mRankingScore = Integer.MIN_VALUE;
+
+ for (ScanResult result : mScanResultCache.values()) {
+ ScoredNetwork score = scoreCache.getScoredNetwork(result);
+ if (score == null) {
+ continue;
+ }
+
+ if (score.hasRankingScore()) {
+ mRankingScore = Math.max(mRankingScore, score.calculateRankingScore(result.level));
+ }
+ mBadge = Math.max(mBadge, score.calculateBadge(result.level));
+ }
+
+ return (oldBadge != mBadge || oldRankingScore != mRankingScore);
+ }
+
private void evictOldScanResults() {
long nowMs = SystemClock.elapsedRealtime();
for (Iterator<ScanResult> iter = mScanResultCache.values().iterator(); iter.hasNext(); ) {
@@ -555,6 +598,8 @@
visibility.append(" rssi=").append(mInfo.getRssi());
visibility.append(" ");
visibility.append(" score=").append(mInfo.score);
+ visibility.append(" rankingScore=").append(getRankingScore());
+ visibility.append(" badge=").append(getBadge());
visibility.append(String.format(" tx=%.1f,", mInfo.txSuccessRate));
visibility.append(String.format("%.1f,", mInfo.txRetriesRate));
visibility.append(String.format("%.1f ", mInfo.txBadRate));
@@ -820,6 +865,14 @@
mRssi = rssi;
}
+ int getRankingScore() {
+ return mRankingScore;
+ }
+
+ int getBadge() {
+ return mBadge;
+ }
+
public static String getSummary(Context context, String ssid, DetailedState state,
boolean isEphemeral, String passpointProvider) {
if (state == DetailedState.CONNECTED && ssid == null) {
diff --git a/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPointPreference.java b/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPointPreference.java
index a77b2ba..8ebea61 100644
--- a/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPointPreference.java
+++ b/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPointPreference.java
@@ -21,7 +21,9 @@
import android.content.res.Resources;
import android.content.res.TypedArray;
import android.graphics.drawable.Drawable;
+import android.graphics.drawable.LayerDrawable;
import android.graphics.drawable.StateListDrawable;
+import android.net.ScoredNetwork;
import android.net.wifi.WifiConfiguration;
import android.os.Looper;
import android.os.UserHandle;
@@ -33,6 +35,7 @@
import android.widget.ImageView;
import android.widget.TextView;
import com.android.settingslib.R;
+import com.android.settingslib.Utils;
public class AccessPointPreference extends Preference {
@@ -60,6 +63,9 @@
private int mLevel;
private CharSequence mContentDescription;
private int mDefaultIconResId;
+ private int mIconWidth;
+ private int mIconHeight;
+ private int mWifiBadge = ScoredNetwork.BADGING_NONE;
static final int[] WIFI_CONNECTION_STRENGTH = {
R.string.accessibility_wifi_one_bar,
@@ -89,6 +95,8 @@
mWifiSld = (StateListDrawable) context.getTheme()
.obtainStyledAttributes(wifi_signal_attributes).getDrawable(0);
+ // Save icon width and height to use for creating a badged icon
+ setIconWidthAndHeight();
TypedArray frictionSld;
try {
@@ -118,6 +126,8 @@
mWifiSld = (StateListDrawable) context.getTheme()
.obtainStyledAttributes(wifi_signal_attributes).getDrawable(0);
+ // Save icon width and height to use for creating a badged icon
+ setIconWidthAndHeight();
TypedArray frictionSld;
try {
@@ -133,6 +143,13 @@
.getDimensionPixelSize(R.dimen.wifi_preference_badge_padding);
}
+ private void setIconWidthAndHeight() {
+ // TODO(sghuman): Refactor this defined widths and heights into a dimension resource and
+ // reference directly.
+ mIconWidth = mWifiSld.getIntrinsicWidth();
+ mIconHeight = mWifiSld.getIntrinsicHeight();
+ }
+
public AccessPoint getAccessPoint() {
return mAccessPoint;
}
@@ -167,6 +184,16 @@
if (level == -1) {
safeSetDefaultIcon();
} else {
+ if (mWifiBadge != ScoredNetwork.BADGING_NONE) {
+ // TODO(sghuman): Refactor this to reuse drawable to save memory and add to a
+ // special subclass of AccessPointPreference
+ LayerDrawable drawable = Utils.getBadgedWifiIcon(context, level, mWifiBadge);
+ drawable.setLayerSize(0, mIconWidth, mIconHeight);
+ drawable.setLayerSize(1, mIconWidth, mIconHeight);
+ drawable.setTint(Utils.getColorAccent(getContext()));
+ setIcon(drawable);
+ return;
+ }
if (getIcon() == null) {
// To avoid a drawing race condition, we first set the state (SECURE/NONE) and then
// set the icon (drawable) to that state's drawable.
@@ -238,11 +265,14 @@
final Context context = getContext();
int level = mAccessPoint.getLevel();
- if (level != mLevel) {
+ int wifiBadge = mAccessPoint.getBadge();
+ if (level != mLevel || wifiBadge != mWifiBadge) {
mLevel = level;
+ mWifiBadge = wifiBadge;
updateIcon(mLevel, context);
notifyChanged();
}
+
updateBadge(context);
setSummary(mForSavedNetworks ? mAccessPoint.getSavedNetworkSummary()
diff --git a/packages/SettingsLib/src/com/android/settingslib/wifi/WifiTracker.java b/packages/SettingsLib/src/com/android/settingslib/wifi/WifiTracker.java
index 77a45b3..799f388 100644
--- a/packages/SettingsLib/src/com/android/settingslib/wifi/WifiTracker.java
+++ b/packages/SettingsLib/src/com/android/settingslib/wifi/WifiTracker.java
@@ -24,15 +24,22 @@
import android.net.NetworkCapabilities;
import android.net.NetworkInfo;
import android.net.NetworkInfo.DetailedState;
+import android.net.NetworkKey;
import android.net.NetworkRequest;
+import android.net.NetworkScoreManager;
+import android.net.ScoredNetwork;
import android.net.wifi.ScanResult;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
+import android.net.wifi.WifiNetworkScoreCache;
+import android.net.wifi.WifiNetworkScoreCache.CacheListener;
import android.os.ConditionVariable;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
+import android.support.annotation.WorkerThread;
+import android.util.ArraySet;
import android.util.Log;
import android.util.SparseArray;
import android.util.SparseIntArray;
@@ -49,14 +56,18 @@
import java.util.Iterator;
import java.util.List;
import java.util.Map;
+import java.util.Set;
import java.util.concurrent.atomic.AtomicBoolean;
/**
* Tracks saved or available wifi networks and their state.
*/
public class WifiTracker {
+ // TODO(sghuman): Document remaining methods with @UiThread and @WorkerThread where possible.
+ // TODO(sghuman): Refactor to avoid calling certain methods on the UiThread.
+
private static final String TAG = "WifiTracker";
- private static final boolean DBG = false;
+ private static final boolean DBG = Log.isLoggable(TAG, Log.DEBUG);
/** verbose logging flag. this flag is set thru developer debugging options
* and used so as to assist with in-the-field WiFi connectivity debugging */
@@ -122,6 +133,10 @@
private NetworkInfo mLastNetworkInfo;
private WifiInfo mLastInfo;
+ private final NetworkScoreManager mNetworkScoreManager;
+ private final WifiNetworkScoreCache mScoreCache;
+ private final Set<NetworkKey> mRequestedScores = new ArraySet<>();
+
@VisibleForTesting
Scanner mScanner;
@@ -144,14 +159,16 @@
boolean includeSaved, boolean includeScans, boolean includePasspoints) {
this(context, wifiListener, workerLooper, includeSaved, includeScans, includePasspoints,
context.getSystemService(WifiManager.class),
- context.getSystemService(ConnectivityManager.class), Looper.myLooper());
+ context.getSystemService(ConnectivityManager.class),
+ context.getSystemService(NetworkScoreManager.class), Looper.myLooper()
+ );
}
@VisibleForTesting
WifiTracker(Context context, WifiListener wifiListener, Looper workerLooper,
boolean includeSaved, boolean includeScans, boolean includePasspoints,
WifiManager wifiManager, ConnectivityManager connectivityManager,
- Looper currentLooper) {
+ NetworkScoreManager networkScoreManager, Looper currentLooper) {
if (!includeSaved && !includeScans) {
throw new IllegalArgumentException("Must include either saved or scans");
}
@@ -186,6 +203,18 @@
.clearCapabilities()
.addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
.build();
+
+ mNetworkScoreManager = networkScoreManager;
+
+ mScoreCache = new WifiNetworkScoreCache(context, new CacheListener(mWorkHandler) {
+ @Override
+ public void networkCacheUpdated(List<ScoredNetwork> networks) {
+ if (Log.isLoggable(TAG, Log.VERBOSE)) {
+ Log.v(TAG, "Score cache was updated with networks: " + networks);
+ }
+ Message.obtain(mWorkHandler, WorkHandler.MSG_UPDATE_NETWORK_SCORES).sendToTarget();
+ }
+ });
}
/**
@@ -216,6 +245,8 @@
/**
* Resume scanning for wifi networks after it has been paused.
+ *
+ * <p>The score cache should be registered before this method is invoked.
*/
public void resumeScanning() {
if (mScanner == null) {
@@ -230,11 +261,20 @@
}
/**
- * Start tracking wifi networks.
- * Registers listeners and starts scanning for wifi networks. If this is not called
+ * Start tracking wifi networks and scores.
+ *
+ * <p>Registers listeners and starts scanning for wifi networks. If this is not called
* then forceUpdate() must be called to populate getAccessPoints().
*/
public void startTracking() {
+ mWorkHandler.post(new Runnable() {
+ @Override
+ public void run() {
+ registerScoreCache();
+ }
+ });
+
+
resumeScanning();
if (!mRegistered) {
mContext.registerReceiver(mReceiver, mFilter);
@@ -245,9 +285,28 @@
}
}
+ @WorkerThread
+ private void registerScoreCache() {
+ mNetworkScoreManager.registerNetworkScoreCache(
+ NetworkKey.TYPE_WIFI,
+ mScoreCache,
+ NetworkScoreManager.CACHE_FILTER_SCAN_RESULTS);
+ }
+
+ private void requestScoresForNetworkKeys(Collection<NetworkKey> keys) {
+ if (keys.isEmpty()) return;
+
+ if (DBG) {
+ Log.d(TAG, "Requesting scores for Network Keys: " + keys);
+ }
+ mNetworkScoreManager.requestScores(keys.toArray(new NetworkKey[keys.size()]));
+ mRequestedScores.addAll(keys);
+ }
+
/**
- * Stop tracking wifi networks.
- * Unregisters all listeners and stops scanning for wifi networks. This should always
+ * Stop tracking wifi networks and scores.
+ *
+ * <p>Unregisters all listeners and stops scanning for wifi networks. This should always
* be called when done with a WifiTracker (if startTracking was called) to ensure
* proper cleanup.
*/
@@ -255,11 +314,26 @@
if (mRegistered) {
mWorkHandler.removeMessages(WorkHandler.MSG_UPDATE_ACCESS_POINTS);
mWorkHandler.removeMessages(WorkHandler.MSG_UPDATE_NETWORK_INFO);
+ mWorkHandler.removeMessages(WorkHandler.MSG_UPDATE_NETWORK_SCORES);
mContext.unregisterReceiver(mReceiver);
mConnectivityManager.unregisterNetworkCallback(mNetworkCallback);
mRegistered = false;
}
pauseScanning();
+
+ mWorkHandler.post(new Runnable() {
+ @Override
+ public void run() {
+ unregisterAndClearScoreCache();
+ }
+ });
+ }
+
+ @WorkerThread
+ private void unregisterAndClearScoreCache() {
+ mRequestedScores.clear();
+ mNetworkScoreManager.unregisterNetworkScoreCache(NetworkKey.TYPE_WIFI, mScoreCache);
+ mScoreCache.clearScores();
}
/**
@@ -415,6 +489,7 @@
}
}
+ final List<NetworkKey> scoresToRequest = new ArrayList<>();
if (results != null) {
for (ScanResult result : results) {
// Ignore hidden and ad-hoc networks.
@@ -423,6 +498,11 @@
continue;
}
+ NetworkKey key = NetworkKey.createFromScanResult(result);
+ if (!mRequestedScores.contains(key)) {
+ scoresToRequest.add(key);
+ }
+
boolean found = false;
for (AccessPoint accessPoint : apMap.getAll(result.SSID)) {
if (accessPoint.update(result)) {
@@ -457,27 +537,35 @@
}
}
+
+ requestScoresForNetworkKeys(scoresToRequest);
+ for (AccessPoint ap : accessPoints) {
+ ap.updateScores(mScoreCache);
+ }
+
// Pre-sort accessPoints to speed preference insertion
Collections.sort(accessPoints);
// Log accesspoints that were deleted
- if (DBG) Log.d(TAG, "------ Dumping SSIDs that were not seen on this scan ------");
- for (AccessPoint prevAccessPoint : mInternalAccessPoints) {
- if (prevAccessPoint.getSsid() == null)
- continue;
- String prevSsid = prevAccessPoint.getSsidStr();
- boolean found = false;
- for (AccessPoint newAccessPoint : accessPoints) {
- if (newAccessPoint.getSsid() != null && newAccessPoint.getSsid()
- .equals(prevSsid)) {
- found = true;
- break;
+ if (DBG) {
+ Log.d(TAG, "------ Dumping SSIDs that were not seen on this scan ------");
+ for (AccessPoint prevAccessPoint : mInternalAccessPoints) {
+ if (prevAccessPoint.getSsid() == null)
+ continue;
+ String prevSsid = prevAccessPoint.getSsidStr();
+ boolean found = false;
+ for (AccessPoint newAccessPoint : accessPoints) {
+ if (newAccessPoint.getSsid() != null && newAccessPoint.getSsid()
+ .equals(prevSsid)) {
+ found = true;
+ break;
+ }
}
+ if (!found)
+ Log.d(TAG, "Did not find " + prevSsid + " in this scan");
}
- if (!found)
- if (DBG) Log.d(TAG, "Did not find " + prevSsid + " in this scan");
+ Log.d(TAG, "---- Done dumping SSIDs that were not seen on this scan ----");
}
- if (DBG) Log.d(TAG, "---- Done dumping SSIDs that were not seen on this scan ----");
mInternalAccessPoints.clear();
mInternalAccessPoints.addAll(accessPoints);
@@ -549,7 +637,38 @@
boolean reorder = false;
for (int i = mInternalAccessPoints.size() - 1; i >= 0; --i) {
- if (mInternalAccessPoints.get(i).update(connectionConfig, mLastInfo, mLastNetworkInfo)) {
+ AccessPoint ap = mInternalAccessPoints.get(i);
+ if (ap.update(connectionConfig, mLastInfo, mLastNetworkInfo)) {
+ reorder = true;
+ }
+ if (ap.updateScores(mScoreCache)) {
+ reorder = true;
+ }
+ }
+ if (reorder) {
+ Collections.sort(mInternalAccessPoints);
+ mMainHandler.scheduleAPCopyingAndCloseWriteLock();
+ }
+ }
+
+ /**
+ * Update all the internal access points rankingScores and badge.
+ *
+ * <p>Will trigger a resort and notify listeners of changes if applicable.
+ */
+ private void updateNetworkScores() {
+ // Lock required to prevent accidental copying of AccessPoint states while the modification
+ // is in progress. see #copyAndNotifyListeners
+ long before = System.currentTimeMillis();
+ mInternalAccessPointsWriteLock.block();
+ if (DBG) {
+ Log.d(TAG, "Acquired AP lock on WorkerHandler for inserting NetworkScores. Wait time = " +
+ (System.currentTimeMillis() - before) + "ms.");
+ }
+
+ boolean reorder = false;
+ for (int i = 0; i < mInternalAccessPoints.size(); i++) {
+ if (mInternalAccessPoints.get(i).updateScores(mScoreCache)) {
reorder = true;
}
}
@@ -661,6 +780,7 @@
private static final int MSG_UPDATE_NETWORK_INFO = 1;
private static final int MSG_RESUME = 2;
private static final int MSG_UPDATE_WIFI_STATE = 3;
+ private static final int MSG_UPDATE_NETWORK_SCORES = 4;
public WorkHandler(Looper looper) {
super(looper);
@@ -695,6 +815,9 @@
mMainHandler.obtainMessage(MainHandler.MSG_WIFI_STATE_CHANGED, msg.arg1, 0)
.sendToTarget();
break;
+ case MSG_UPDATE_NETWORK_SCORES:
+ updateNetworkScores();
+ break;
}
}
}
diff --git a/packages/SettingsLib/tests/integ/Android.mk b/packages/SettingsLib/tests/integ/Android.mk
index 4208522..98bce0c 100644
--- a/packages/SettingsLib/tests/integ/Android.mk
+++ b/packages/SettingsLib/tests/integ/Android.mk
@@ -27,7 +27,8 @@
LOCAL_STATIC_JAVA_LIBRARIES := \
android-support-test \
espresso-core \
- mockito-target-minus-junit4
+ mockito-target-minus-junit4 \
+ legacy-android-test
include frameworks/base/packages/SettingsLib/common.mk
diff --git a/packages/SettingsLib/tests/integ/AndroidManifest.xml b/packages/SettingsLib/tests/integ/AndroidManifest.xml
index 00b2164..0d5ff2c 100644
--- a/packages/SettingsLib/tests/integ/AndroidManifest.xml
+++ b/packages/SettingsLib/tests/integ/AndroidManifest.xml
@@ -22,6 +22,7 @@
<uses-permission android:name="android.permission.MANAGE_NETWORK_POLICY"/>
<uses-permission android:name="android.permission.SET_TIME_ZONE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
+ <uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" />
<application>
diff --git a/packages/SettingsLib/tests/integ/src/com/android/settingslib/wifi/WifiTrackerTest.java b/packages/SettingsLib/tests/integ/src/com/android/settingslib/wifi/WifiTrackerTest.java
index c650190..eaf0367 100644
--- a/packages/SettingsLib/tests/integ/src/com/android/settingslib/wifi/WifiTrackerTest.java
+++ b/packages/SettingsLib/tests/integ/src/com/android/settingslib/wifi/WifiTrackerTest.java
@@ -15,29 +15,278 @@
*/
package com.android.settingslib.wifi;
-
+import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
+import static org.mockito.Mockito.anyInt;
+import static org.mockito.Mockito.doAnswer;
+import static org.mockito.Mockito.doNothing;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.content.Context;
+import android.content.Intent;
+import android.net.ConnectivityManager;
+import android.net.NetworkKey;
+import android.net.NetworkScoreManager;
+import android.net.ScoredNetwork;
+import android.net.RssiCurve;
+import android.net.WifiKey;
import android.net.wifi.ScanResult;
import android.net.wifi.WifiConfiguration;
+import android.net.wifi.WifiManager;
+import android.net.wifi.WifiNetworkScoreCache;
+import android.net.wifi.WifiSsid;
+import android.os.Bundle;
import android.os.SystemClock;
+import android.os.Handler;
+import android.os.HandlerThread;
+import android.os.Looper;
+import android.provider.Settings;
import android.support.test.InstrumentationRegistry;
import android.support.test.filters.SmallTest;
import android.support.test.runner.AndroidJUnit4;
+import org.junit.After;
+import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
+import org.mockito.ArgumentCaptor;
+import org.mockito.Matchers;
+import org.mockito.Captor;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.mockito.invocation.InvocationOnMock;
+import org.mockito.stubbing.Answer;
+
import java.util.ArrayList;
import java.util.Arrays;
import java.util.BitSet;
import java.util.List;
-
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
@SmallTest
@RunWith(AndroidJUnit4.class)
public class WifiTrackerTest {
+ private static final String TAG = "WifiTrackerTest";
+ private static final int LATCH_TIMEOUT = 2000;
+
+ private static final String SSID_1 = "ssid1";
+ private static final String BSSID_1 = "00:00:00:00:00:00";
+ private static final NetworkKey NETWORK_KEY_1 =
+ new NetworkKey(new WifiKey('"' + SSID_1 + '"', BSSID_1));
+ private static final int RSSI_1 = -30;
+ private static final byte SCORE_1 = 10;
+ private static final int BADGE_1 = ScoredNetwork.BADGING_SD;
+
+ private static final String SSID_2 = "ssid2";
+ private static final String BSSID_2 = "AA:AA:AA:AA:AA:AA";
+ private static final NetworkKey NETWORK_KEY_2 =
+ new NetworkKey(new WifiKey('"' + SSID_2 + '"', BSSID_2));
+ private static final int RSSI_2 = -30;
+ private static final byte SCORE_2 = 15;
+ private static final int BADGE_2 = ScoredNetwork.BADGING_HD;
+
+ @Captor ArgumentCaptor<WifiNetworkScoreCache> mScoreCacheCaptor;
+ @Mock private ConnectivityManager mockConnectivityManager;
+ @Mock private NetworkScoreManager mockNetworkScoreManager;
+ @Mock private RssiCurve mockCurve1;
+ @Mock private RssiCurve mockCurve2;
+ @Mock private RssiCurve mockBadgeCurve1;
+ @Mock private RssiCurve mockBadgeCurve2;
+ @Mock private WifiManager mockWifiManager;
+ @Mock private WifiTracker.WifiListener mockWifiListener;
+
+ private final List<NetworkKey> mRequestedKeys = new ArrayList<>();
+
+ private Context mContext;
+ private CountDownLatch mAccessPointsChangedLatch;
+ private CountDownLatch mRequestScoresLatch;
+ private Handler mScannerHandler;
+ private HandlerThread mMainThread;
+ private HandlerThread mWorkerThread;
+ private Looper mLooper;
+ private Looper mMainLooper;
+ private int mOriginalSettingValue;
+
+ @Before
+ public void setUp() {
+ mContext = InstrumentationRegistry.getTargetContext();
+ MockitoAnnotations.initMocks(this);
+
+ mWorkerThread = new HandlerThread("TestHandlerWorkerThread");
+ mWorkerThread.start();
+ mLooper = mWorkerThread.getLooper();
+ mMainThread = new HandlerThread("TestHandlerThread");
+ mMainThread.start();
+ mMainLooper = mMainThread.getLooper();
+
+ // Make sure the scanner doesn't try to run on the testing thread.
+ HandlerThread scannerThread = new HandlerThread("ScannerWorkerThread");
+ scannerThread.start();
+ mScannerHandler = new Handler(scannerThread.getLooper());
+
+ when(mockWifiManager.isWifiEnabled()).thenReturn(true);
+ when(mockWifiManager.getScanResults())
+ .thenReturn(Arrays.asList(buildScanResult1(), buildScanResult2()));
+
+
+ when(mockCurve1.lookupScore(RSSI_1)).thenReturn(SCORE_1);
+ when(mockCurve2.lookupScore(RSSI_2)).thenReturn(SCORE_2);
+
+ when(mockBadgeCurve1.lookupScore(RSSI_1)).thenReturn((byte) BADGE_1);
+ when(mockBadgeCurve2.lookupScore(RSSI_2)).thenReturn((byte) BADGE_2);
+
+ doNothing()
+ .when(mockNetworkScoreManager)
+ .registerNetworkScoreCache(
+ anyInt(),
+ mScoreCacheCaptor.capture(),
+ Matchers.anyInt());
+
+ // Capture requested keys and count down latch if present
+ doAnswer(
+ new Answer<Boolean>() {
+ @Override
+ public Boolean answer(InvocationOnMock input) {
+ if (mRequestScoresLatch != null) {
+ mRequestScoresLatch.countDown();
+ }
+ NetworkKey[] keys = (NetworkKey[]) input.getArguments()[0];
+ for (NetworkKey key : keys) {
+ mRequestedKeys.add(key);
+ }
+ return true;
+ }
+ }).when(mockNetworkScoreManager).requestScores(Matchers.<NetworkKey[]>any());
+
+ doAnswer(
+ new Answer<Void>() {
+ @Override
+ public Void answer (InvocationOnMock invocation) throws Throwable {
+ if (mAccessPointsChangedLatch != null) {
+ mAccessPointsChangedLatch.countDown();
+ }
+
+ return null;
+ }
+ }).when(mockWifiListener).onAccessPointsChanged();
+
+ mOriginalSettingValue = Settings.Global.getInt(
+ InstrumentationRegistry.getTargetContext().getContentResolver(),
+ Settings.Global.NETWORK_RECOMMENDATIONS_ENABLED,
+ 0 /* disabled */);
+
+ }
+
+ @After
+ public void cleanUp() {
+ Settings.Global.putInt(
+ InstrumentationRegistry.getTargetContext().getContentResolver(),
+ Settings.Global.NETWORK_RECOMMENDATIONS_ENABLED,
+ mOriginalSettingValue);
+ }
+
+ private static ScanResult buildScanResult1() {
+ return new ScanResult(
+ WifiSsid.createFromAsciiEncoded(SSID_1),
+ BSSID_1,
+ 0, // hessid
+ 0, //anqpDomainId
+ null, // osuProviders
+ "", // capabilities
+ RSSI_1,
+ 0, // frequency
+ SystemClock.elapsedRealtime() * 1000 /* microsecond timestamp */);
+ }
+
+ private static ScanResult buildScanResult2() {
+ return new ScanResult(
+ WifiSsid.createFromAsciiEncoded(SSID_2),
+ BSSID_2,
+ 0, // hessid
+ 0, //anqpDomainId
+ null, // osuProviders
+ "", // capabilities
+ RSSI_2,
+ 0, // frequency
+ SystemClock.elapsedRealtime() * 1000 /* microsecond timestamp */);
+ }
+
+ private WifiTracker createTrackerAndInjectInitialScanResults() throws InterruptedException {
+ WifiTracker tracker = createMockedWifiTracker();
+ startTracking(tracker);
+
+ mAccessPointsChangedLatch = new CountDownLatch(1);
+ sendScanResultsAndProcess(tracker);
+ mAccessPointsChangedLatch.await(LATCH_TIMEOUT, TimeUnit.MILLISECONDS);
+
+ return tracker;
+ }
+
+ private WifiTracker createMockedWifiTracker() {
+ WifiTracker tracker =
+ new WifiTracker(
+ mContext,
+ mockWifiListener,
+ mLooper,
+ true,
+ true,
+ true,
+ mockWifiManager,
+ mockConnectivityManager,
+ mockNetworkScoreManager, mMainLooper
+ );
+
+ return tracker;
+ }
+
+ private void startTracking(WifiTracker tracker) throws InterruptedException {
+ CountDownLatch latch = new CountDownLatch(1);
+ mScannerHandler.post(new Runnable() {
+ @Override
+ public void run() {
+ tracker.startTracking();
+ latch.countDown();
+ }
+ });
+ latch.await(LATCH_TIMEOUT, TimeUnit.MILLISECONDS);
+ }
+
+ private void sendScanResultsAndProcess(WifiTracker tracker) throws InterruptedException {
+ mAccessPointsChangedLatch = new CountDownLatch(1);
+ Intent i = new Intent(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION);
+ tracker.mReceiver.onReceive(mContext, i);
+
+ mAccessPointsChangedLatch.await(LATCH_TIMEOUT, TimeUnit.MILLISECONDS);
+ }
+
+ private void updateScores() {
+ Bundle attr1 = new Bundle();
+ attr1.putParcelable(ScoredNetwork.ATTRIBUTES_KEY_BADGING_CURVE, mockBadgeCurve1);
+ ScoredNetwork sc1 =
+ new ScoredNetwork(
+ NETWORK_KEY_1,
+ mockCurve1,
+ false /* meteredHint */,
+ attr1);
+
+ Bundle attr2 = new Bundle();
+ attr2.putParcelable(ScoredNetwork.ATTRIBUTES_KEY_BADGING_CURVE, mockBadgeCurve2);
+ ScoredNetwork sc2 =
+ new ScoredNetwork(
+ NETWORK_KEY_2,
+ mockCurve2,
+ false /* meteredHint */,
+ attr2);
+
+ WifiNetworkScoreCache scoreCache = mScoreCacheCaptor.getValue();
+ scoreCache.updateScores(Arrays.asList(sc1, sc2));
+ }
+
@Test
public void testAccessPointListenerSetWhenLookingUpUsingScanResults() {
ScanResult scanResult = new ScanResult();
@@ -47,7 +296,7 @@
scanResult.capabilities = "";
WifiTracker tracker = new WifiTracker(
- InstrumentationRegistry.getTargetContext(), null, true, true);
+ InstrumentationRegistry.getTargetContext(), null, mLooper, true, true);
AccessPoint result = tracker.getCachedOrCreate(scanResult, new ArrayList<AccessPoint>());
assertTrue(result.mAccessPointListener != null);
@@ -63,9 +312,125 @@
configuration.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);
WifiTracker tracker = new WifiTracker(
- InstrumentationRegistry.getTargetContext(), null, true, true);
+ InstrumentationRegistry.getTargetContext(), null, mLooper, true, true);
AccessPoint result = tracker.getCachedOrCreate(configuration, new ArrayList<AccessPoint>());
assertTrue(result.mAccessPointListener != null);
}
+
+ @Test
+ public void startAndStopTrackingShouldRegisterAndUnregisterScoreCache()
+ throws InterruptedException {
+ WifiTracker tracker = createMockedWifiTracker();
+
+ // Test register
+ startTracking(tracker);
+ verify(mockNetworkScoreManager)
+ .registerNetworkScoreCache(
+ Matchers.anyInt(),
+ mScoreCacheCaptor.capture(),
+ Matchers.anyInt());
+
+ WifiNetworkScoreCache scoreCache = mScoreCacheCaptor.getValue();
+
+ // Test unregister
+ tracker.stopTracking();
+
+ verify(mockNetworkScoreManager)
+ .unregisterNetworkScoreCache(NetworkKey.TYPE_WIFI, scoreCache);
+ }
+
+ @Test
+ public void startTrackingShouldRequestScoresForCurrentAccessPoints() throws InterruptedException {
+ // Start the tracker and inject the initial scan results and then stop tracking
+ WifiTracker tracker = createTrackerAndInjectInitialScanResults();
+
+ tracker.stopTracking();
+ mRequestedKeys.clear();
+
+ mRequestScoresLatch = new CountDownLatch(2);
+ startTracking(tracker);
+ mRequestScoresLatch.await(LATCH_TIMEOUT, TimeUnit.MILLISECONDS);
+
+ assertTrue(mRequestedKeys.contains(NETWORK_KEY_1));
+ assertTrue(mRequestedKeys.contains(NETWORK_KEY_2));
+ }
+
+ @Test
+ public void scoreCacheUpdateScoresShouldTriggerOnAccessPointsChanged() throws InterruptedException {
+ WifiTracker tracker = createMockedWifiTracker();
+ startTracking(tracker);
+ sendScanResultsAndProcess(tracker);
+
+ updateScoresAndWaitForAccessPointsChangedCallback();
+ }
+
+ private void updateScoresAndWaitForAccessPointsChangedCallback() throws InterruptedException {
+ mAccessPointsChangedLatch = new CountDownLatch(2);
+ updateScores();
+ mAccessPointsChangedLatch.await(LATCH_TIMEOUT, TimeUnit.MILLISECONDS);
+ }
+
+ @Test
+ public void scoreCacheUpdateScoresShouldChangeSortOrder() throws InterruptedException {
+ WifiTracker tracker = createTrackerAndInjectInitialScanResults();
+ List<AccessPoint> aps = tracker.getAccessPoints();
+ assertTrue(aps.size() == 2);
+ assertEquals(aps.get(0).getSsidStr(), SSID_1);
+ assertEquals(aps.get(1).getSsidStr(), SSID_2);
+
+ updateScoresAndWaitForAccessPointsChangedCallback();
+
+ aps = tracker.getAccessPoints();
+ assertTrue(aps.size() == 2);
+ assertEquals(aps.get(0).getSsidStr(), SSID_2);
+ assertEquals(aps.get(1).getSsidStr(), SSID_1);
+
+ }
+
+ @Test
+ public void scoreCacheUpdateScoresShouldInsertBadgeIntoAccessPoint() throws InterruptedException {
+ WifiTracker tracker = createTrackerAndInjectInitialScanResults();
+ updateScoresAndWaitForAccessPointsChangedCallback();
+
+ List<AccessPoint> aps = tracker.getAccessPoints();
+
+ for (AccessPoint ap : aps) {
+ if (ap.getSsidStr().equals(SSID_1)) {
+ assertEquals(BADGE_1, ap.getBadge());
+ } else if (ap.getSsidStr().equals(SSID_2)) {
+ assertEquals(BADGE_2, ap.getBadge());
+ }
+ }
+ }
+
+ @Test
+ public void scoresShouldBeRequestedForNewScanResultOnly() throws InterruptedException {
+ mRequestScoresLatch = new CountDownLatch(2);
+ WifiTracker tracker = createTrackerAndInjectInitialScanResults();
+ mRequestScoresLatch.await(LATCH_TIMEOUT, TimeUnit.MILLISECONDS);
+ mRequestedKeys.clear();
+
+ String ssid = "ssid3";
+ String bssid = "00:00:00:00:00:00";
+ ScanResult newResult = new ScanResult(
+ WifiSsid.createFromAsciiEncoded(ssid),
+ bssid,
+ 0, // hessid
+ 0, //anqpDomainId
+ null, // osuProviders
+ "", // capabilities
+ RSSI_1,
+ 0, // frequency
+ SystemClock.elapsedRealtime() * 1000);
+ when(mockWifiManager.getScanResults())
+ .thenReturn(Arrays.asList(buildScanResult1(), buildScanResult2(), newResult));
+
+ mRequestScoresLatch = new CountDownLatch(1);
+ sendScanResultsAndProcess(tracker);
+ mRequestScoresLatch.await(LATCH_TIMEOUT, TimeUnit.MILLISECONDS);
+
+ assertEquals(1, mRequestedKeys.size());
+ assertTrue(mRequestedKeys.contains(new NetworkKey(new WifiKey('"' + ssid + '"', bssid))));
+ }
}
diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/drawer/TileUtilsTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/drawer/TileUtilsTest.java
index d8082c4..c95cac5 100644
--- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/drawer/TileUtilsTest.java
+++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/drawer/TileUtilsTest.java
@@ -255,6 +255,7 @@
Bundle bundle = new Bundle();
bundle.putInt("com.android.settings.icon", 161803);
+ bundle.putString("com.android.settings.icon_package", "abc");
bundle.putString("com.android.settings.summary", "dynamic-summary");
when(mIContentProvider.call(anyString(),
eq(TileUtils.getMethodFromUri(Uri.parse(URI_GET_ICON))), eq(URI_GET_ICON), any()))
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java
index a33ab16..527631e 100644
--- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java
+++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java
@@ -271,6 +271,7 @@
@Override
public boolean onCreate() {
+ Settings.setInSystemServer();
synchronized (mLock) {
mUserManager = UserManager.get(getContext());
mPackageManager = AppGlobals.getPackageManager();
@@ -829,7 +830,8 @@
SettingsState settingsState = mSettingsRegistry.getSettingsLocked(
SETTINGS_TYPE_GLOBAL, UserHandle.USER_SYSTEM);
- List<String> names = settingsState.getSettingNamesLocked();
+ List<String> names = getSettingsNamesLocked(SETTINGS_TYPE_GLOBAL,
+ UserHandle.USER_SYSTEM);
final int nameCount = names.size();
@@ -852,6 +854,9 @@
Slog.v(LOG_TAG, "getGlobalSetting(" + name + ")");
}
+ // Ensure the caller can access the setting.
+ enforceSettingReadable(name, SETTINGS_TYPE_GLOBAL, UserHandle.getCallingUserId());
+
// Get the value.
synchronized (mLock) {
return mSettingsRegistry.getSettingLocked(SETTINGS_TYPE_GLOBAL,
@@ -954,8 +959,7 @@
final int callingUserId = resolveCallingUserIdEnforcingPermissionsLocked(userId);
synchronized (mLock) {
- List<String> names = mSettingsRegistry.getSettingsNamesLocked(
- SETTINGS_TYPE_SECURE, callingUserId);
+ List<String> names = getSettingsNamesLocked(SETTINGS_TYPE_SECURE, callingUserId);
final int nameCount = names.size();
@@ -997,6 +1001,9 @@
// Resolve the userId on whose behalf the call is made.
final int callingUserId = resolveCallingUserIdEnforcingPermissionsLocked(requestingUserId);
+ // Ensure the caller can access the setting.
+ enforceSettingReadable(name, SETTINGS_TYPE_SECURE, callingUserId);
+
// Determine the owning user as some profile settings are cloned from the parent.
final int owningUserId = resolveOwningUserIdForSecureSettingLocked(callingUserId, name);
@@ -1159,8 +1166,7 @@
final int callingUserId = resolveCallingUserIdEnforcingPermissionsLocked(userId);
synchronized (mLock) {
- List<String> names = mSettingsRegistry.getSettingsNamesLocked(
- SETTINGS_TYPE_SYSTEM, callingUserId);
+ List<String> names = getSettingsNamesLocked(SETTINGS_TYPE_SYSTEM, callingUserId);
final int nameCount = names.size();
@@ -1191,6 +1197,9 @@
// Resolve the userId on whose behalf the call is made.
final int callingUserId = resolveCallingUserIdEnforcingPermissionsLocked(requestingUserId);
+ // Ensure the caller can access the setting.
+ enforceSettingReadable(name, SETTINGS_TYPE_SYSTEM, callingUserId);
+
// Determine the owning user as some profile settings are cloned from the parent.
final int owningUserId = resolveOwningUserIdForSystemSettingLocked(callingUserId, name);
@@ -1409,9 +1418,15 @@
&& (parentId = getGroupParentLocked(userId)) != userId) {
// The setting has a dependency and the profile has a parent
String dependency = sSystemCloneFromParentOnDependency.get(setting);
- Setting settingObj = getSecureSetting(dependency, userId);
- if (settingObj != null && settingObj.getValue().equals("1")) {
- return parentId;
+ // Lookup the dependency setting as ourselves, some callers may not have access to it.
+ final long token = Binder.clearCallingIdentity();
+ try {
+ Setting settingObj = getSecureSetting(dependency, userId);
+ if (settingObj != null && settingObj.getValue().equals("1")) {
+ return parentId;
+ }
+ } finally {
+ Binder.restoreCallingIdentity(token);
}
}
return resolveOwningUserIdLocked(userId, sSystemCloneToManagedSettings, setting);
@@ -1479,6 +1494,55 @@
}
}
+ private Set<String> getEphemeralAccessibleSettings(int settingsType) {
+ switch (settingsType) {
+ case SETTINGS_TYPE_GLOBAL:
+ return Settings.Global.EPHEMERAL_SETTINGS;
+ case SETTINGS_TYPE_SECURE:
+ return Settings.Secure.EPHEMERAL_SETTINGS;
+ case SETTINGS_TYPE_SYSTEM:
+ return Settings.System.EPHEMERAL_SETTINGS;
+ default:
+ throw new IllegalArgumentException("Invalid settings type: " + settingsType);
+ }
+ }
+
+ private List<String> getSettingsNamesLocked(int settingsType, int userId) {
+ ApplicationInfo ai = getCallingApplicationInfoOrThrow(userId);
+ if (ai.isEphemeralApp()) {
+ return new ArrayList<String>(getEphemeralAccessibleSettings(settingsType));
+ } else {
+ return mSettingsRegistry.getSettingsNamesLocked(settingsType, userId);
+ }
+ }
+
+ private void enforceSettingReadable(String settingName, int settingsType, int userId) {
+ if (UserHandle.getAppId(Binder.getCallingUid()) < Process.FIRST_APPLICATION_UID) {
+ return;
+ }
+ ApplicationInfo ai = getCallingApplicationInfoOrThrow(userId);
+ if (!ai.isEphemeralApp()) {
+ return;
+ }
+ if (!getEphemeralAccessibleSettings(settingsType).contains(settingName)) {
+ throw new SecurityException("Setting " + settingName + " is not accessible from"
+ + " ephemeral package " + getCallingPackage());
+ }
+ }
+
+ private ApplicationInfo getCallingApplicationInfoOrThrow(int userId) {
+ ApplicationInfo ai = null;
+ try {
+ ai = mPackageManager.getApplicationInfo(getCallingPackage(), 0 , userId);
+ } catch (RemoteException ignored) {
+ }
+ if (ai == null) {
+ throw new IllegalStateException("Failed to lookup info for package "
+ + getCallingPackage());
+ }
+ return ai;
+ }
+
private PackageInfo getCallingPackageInfoOrThrow(int userId) {
try {
PackageInfo packageInfo = mPackageManager.getPackageInfo(
@@ -1548,7 +1612,7 @@
value = value.substring(1);
Setting settingValue = getSecureSetting(
- Settings.Secure.LOCATION_PROVIDERS_ALLOWED, owningUserId);
+ Settings.Secure.LOCATION_PROVIDERS_ALLOWED, owningUserId);
if (settingValue == null) {
return false;
}
diff --git a/packages/SystemUI/AndroidManifest.xml b/packages/SystemUI/AndroidManifest.xml
index ff76c56..fede34d 100644
--- a/packages/SystemUI/AndroidManifest.xml
+++ b/packages/SystemUI/AndroidManifest.xml
@@ -60,6 +60,7 @@
<uses-permission android:name="android.permission.CONNECTIVITY_INTERNAL" />
<uses-permission android:name="android.permission.TETHER_PRIVILEGED" />
<uses-permission android:name="android.permission.READ_NETWORK_USAGE_HISTORY" />
+ <uses-permission android:name="android.permission.REQUEST_NETWORK_SCORES" />
<uses-permission android:name="android.permission.CONTROL_VPN" />
<uses-permission android:name="android.permission.PEERS_MAC_ADDRESS"/>
<!-- Physical hardware -->
@@ -289,7 +290,7 @@
android:resumeWhilePausing="true"
android:screenOrientation="behind"
android:resizeableActivity="true"
- android:configChanges="orientation|screenSize|smallestScreenSize|screenLayout"
+ android:configChanges="orientation|screenSize|smallestScreenSize|screenLayout|keyboard|keyboardHidden"
android:theme="@style/RecentsTheme.Wallpaper">
<intent-filter>
<action android:name="com.android.systemui.recents.TOGGLE_RECENTS" />
diff --git a/packages/SystemUI/res/anim/ic_dnd_disable_alpha_animation.xml b/packages/SystemUI/res/anim/ic_dnd_disable_alpha_animation.xml
deleted file mode 100644
index 21caab4..0000000
--- a/packages/SystemUI/res/anim/ic_dnd_disable_alpha_animation.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2015 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.
--->
-<set
- xmlns:android="http://schemas.android.com/apk/res/android" >
- <objectAnimator
- android:duration="350"
- android:propertyName="alpha"
- android:valueFrom="1.0"
- android:valueTo="0.3"
- android:valueType="floatType"
- android:interpolator="@android:interpolator/linear" />
-</set>
diff --git a/packages/SystemUI/res/anim/ic_dnd_total_silence_disable_alpha_animation.xml b/packages/SystemUI/res/anim/ic_dnd_total_silence_disable_alpha_animation.xml
deleted file mode 100644
index 21caab4..0000000
--- a/packages/SystemUI/res/anim/ic_dnd_total_silence_disable_alpha_animation.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2015 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.
--->
-<set
- xmlns:android="http://schemas.android.com/apk/res/android" >
- <objectAnimator
- android:duration="350"
- android:propertyName="alpha"
- android:valueFrom="1.0"
- android:valueTo="0.3"
- android:valueType="floatType"
- android:interpolator="@android:interpolator/linear" />
-</set>
diff --git a/packages/SystemUI/res/anim/ic_hotspot_disable_animation_root.xml b/packages/SystemUI/res/anim/ic_hotspot_disable_animation_root.xml
deleted file mode 100644
index 770c401..0000000
--- a/packages/SystemUI/res/anim/ic_hotspot_disable_animation_root.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2014 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.
--->
-<set xmlns:android="http://schemas.android.com/apk/res/android" >
- <objectAnimator
- android:duration="350"
- android:propertyName="alpha"
- android:valueFrom="1.0"
- android:valueTo="0.3"
- android:interpolator="@android:interpolator/fast_out_slow_in" />
-</set>
diff --git a/packages/SystemUI/res/anim/ic_hotspot_enable_animation_root.xml b/packages/SystemUI/res/anim/ic_hotspot_enable_animation_root.xml
deleted file mode 100644
index 387ca29..0000000
--- a/packages/SystemUI/res/anim/ic_hotspot_enable_animation_root.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2014 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.
--->
-<set xmlns:android="http://schemas.android.com/apk/res/android" >
- <objectAnimator
- android:duration="350"
- android:propertyName="alpha"
- android:valueFrom="0.3"
- android:valueTo="1.0"
- android:interpolator="@android:interpolator/fast_out_slow_in" />
-</set>
diff --git a/packages/SystemUI/res/anim/ic_invert_colors_disable_animation_root.xml b/packages/SystemUI/res/anim/ic_invert_colors_disable_animation_root.xml
deleted file mode 100644
index 770c401..0000000
--- a/packages/SystemUI/res/anim/ic_invert_colors_disable_animation_root.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2014 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.
--->
-<set xmlns:android="http://schemas.android.com/apk/res/android" >
- <objectAnimator
- android:duration="350"
- android:propertyName="alpha"
- android:valueFrom="1.0"
- android:valueTo="0.3"
- android:interpolator="@android:interpolator/fast_out_slow_in" />
-</set>
diff --git a/packages/SystemUI/res/anim/ic_invert_colors_enable_animation_root.xml b/packages/SystemUI/res/anim/ic_invert_colors_enable_animation_root.xml
deleted file mode 100644
index 387ca29..0000000
--- a/packages/SystemUI/res/anim/ic_invert_colors_enable_animation_root.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2014 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.
--->
-<set xmlns:android="http://schemas.android.com/apk/res/android" >
- <objectAnimator
- android:duration="350"
- android:propertyName="alpha"
- android:valueFrom="0.3"
- android:valueTo="1.0"
- android:interpolator="@android:interpolator/fast_out_slow_in" />
-</set>
diff --git a/packages/SystemUI/res/anim/ic_signal_airplane_disable_animation_root.xml b/packages/SystemUI/res/anim/ic_signal_airplane_disable_animation_root.xml
deleted file mode 100644
index 770c401..0000000
--- a/packages/SystemUI/res/anim/ic_signal_airplane_disable_animation_root.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2014 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.
--->
-<set xmlns:android="http://schemas.android.com/apk/res/android" >
- <objectAnimator
- android:duration="350"
- android:propertyName="alpha"
- android:valueFrom="1.0"
- android:valueTo="0.3"
- android:interpolator="@android:interpolator/fast_out_slow_in" />
-</set>
diff --git a/packages/SystemUI/res/anim/ic_signal_airplane_enable_animation_root.xml b/packages/SystemUI/res/anim/ic_signal_airplane_enable_animation_root.xml
deleted file mode 100644
index 387ca29..0000000
--- a/packages/SystemUI/res/anim/ic_signal_airplane_enable_animation_root.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2014 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.
--->
-<set xmlns:android="http://schemas.android.com/apk/res/android" >
- <objectAnimator
- android:duration="350"
- android:propertyName="alpha"
- android:valueFrom="0.3"
- android:valueTo="1.0"
- android:interpolator="@android:interpolator/fast_out_slow_in" />
-</set>
diff --git a/packages/SystemUI/res/anim/ic_signal_flashlight_disable_animation_root.xml b/packages/SystemUI/res/anim/ic_signal_flashlight_disable_animation_root.xml
deleted file mode 100644
index 770c401..0000000
--- a/packages/SystemUI/res/anim/ic_signal_flashlight_disable_animation_root.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2014 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.
--->
-<set xmlns:android="http://schemas.android.com/apk/res/android" >
- <objectAnimator
- android:duration="350"
- android:propertyName="alpha"
- android:valueFrom="1.0"
- android:valueTo="0.3"
- android:interpolator="@android:interpolator/fast_out_slow_in" />
-</set>
diff --git a/packages/SystemUI/res/anim/ic_signal_flashlight_enable_animation_root.xml b/packages/SystemUI/res/anim/ic_signal_flashlight_enable_animation_root.xml
deleted file mode 100644
index 387ca29..0000000
--- a/packages/SystemUI/res/anim/ic_signal_flashlight_enable_animation_root.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2014 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.
--->
-<set xmlns:android="http://schemas.android.com/apk/res/android" >
- <objectAnimator
- android:duration="350"
- android:propertyName="alpha"
- android:valueFrom="0.3"
- android:valueTo="1.0"
- android:interpolator="@android:interpolator/fast_out_slow_in" />
-</set>
diff --git a/packages/SystemUI/res/anim/ic_signal_location_disable_animation_root.xml b/packages/SystemUI/res/anim/ic_signal_location_disable_animation_root.xml
deleted file mode 100644
index 770c401..0000000
--- a/packages/SystemUI/res/anim/ic_signal_location_disable_animation_root.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2014 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.
--->
-<set xmlns:android="http://schemas.android.com/apk/res/android" >
- <objectAnimator
- android:duration="350"
- android:propertyName="alpha"
- android:valueFrom="1.0"
- android:valueTo="0.3"
- android:interpolator="@android:interpolator/fast_out_slow_in" />
-</set>
diff --git a/packages/SystemUI/res/anim/ic_signal_location_enable_animation_root.xml b/packages/SystemUI/res/anim/ic_signal_location_enable_animation_root.xml
deleted file mode 100644
index 387ca29..0000000
--- a/packages/SystemUI/res/anim/ic_signal_location_enable_animation_root.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2014 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.
--->
-<set xmlns:android="http://schemas.android.com/apk/res/android" >
- <objectAnimator
- android:duration="350"
- android:propertyName="alpha"
- android:valueFrom="0.3"
- android:valueTo="1.0"
- android:interpolator="@android:interpolator/fast_out_slow_in" />
-</set>
diff --git a/packages/SystemUI/res/anim/ic_signal_workmode_disable_animation_root.xml b/packages/SystemUI/res/anim/ic_signal_workmode_disable_animation_root.xml
deleted file mode 100644
index 72834c9..0000000
--- a/packages/SystemUI/res/anim/ic_signal_workmode_disable_animation_root.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2015 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.
--->
-<set xmlns:android="http://schemas.android.com/apk/res/android" >
- <objectAnimator
- android:duration="350"
- android:propertyName="alpha"
- android:valueFrom="1.0"
- android:valueTo="0.3"
- android:interpolator="@android:interpolator/fast_out_slow_in" />
-</set>
diff --git a/packages/SystemUI/res/anim/ic_signal_workmode_enable_animation_root.xml b/packages/SystemUI/res/anim/ic_signal_workmode_enable_animation_root.xml
deleted file mode 100644
index 85573e0..0000000
--- a/packages/SystemUI/res/anim/ic_signal_workmode_enable_animation_root.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2015 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.
--->
-<set xmlns:android="http://schemas.android.com/apk/res/android" >
- <objectAnimator
- android:duration="350"
- android:propertyName="alpha"
- android:valueFrom="0.3"
- android:valueTo="1.0"
- android:interpolator="@android:interpolator/fast_out_slow_in" />
-</set>
diff --git a/packages/SystemUI/res/drawable/ic_access_alarms_small.xml b/packages/SystemUI/res/drawable/ic_access_alarms_small.xml
index 994274a..b94cc8e 100644
--- a/packages/SystemUI/res/drawable/ic_access_alarms_small.xml
+++ b/packages/SystemUI/res/drawable/ic_access_alarms_small.xml
@@ -18,9 +18,9 @@
android:height="16dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0"
- android:tint="?android:attr/colorControlNormal">
+ android:tint="?android:attr/textColorTertiary">
<path
- android:fillColor="#64ffffff"
+ android:fillColor="#FFFFFFFF"
android:pathData="M22.0,5.7l-4.6,-3.9l-1.3,1.5l4.6,3.9L22.0,5.7zM7.9,3.4L6.6,1.9L2.0,5.7l1.3,1.5L7.9,3.4zM12.5,8.0L11.0,8.0l0.0,6.0l4.7,2.9l0.8,-1.2l-4.0,-2.4L12.5,8.0zM12.0,4.0c-5.0,0.0 -9.0,4.0 -9.0,9.0c0.0,5.0 4.0,9.0 9.0,9.0s9.0,-4.0 9.0,-9.0C21.0,8.0 17.0,4.0 12.0,4.0zM12.0,20.0c-3.9,0.0 -7.0,-3.1 -7.0,-7.0c0.0,-3.9 3.1,-7.0 7.0,-7.0c3.9,0.0 7.0,3.1 7.0,7.0C19.0,16.9 15.9,20.0 12.0,20.0z"/>
</vector>
diff --git a/packages/SystemUI/res/drawable/ic_dnd_disable_animation.xml b/packages/SystemUI/res/drawable/ic_dnd_disable_animation.xml
index 13ed767..d755481 100644
--- a/packages/SystemUI/res/drawable/ic_dnd_disable_animation.xml
+++ b/packages/SystemUI/res/drawable/ic_dnd_disable_animation.xml
@@ -23,7 +23,4 @@
<target
android:name="bar01_0"
android:animation="@anim/ic_dnd_disable_bar01_0_animation" />
- <target
- android:name="ic_dnd_disable"
- android:animation="@anim/ic_dnd_disable_alpha_animation" />
</animated-vector>
diff --git a/packages/SystemUI/res/drawable/ic_dnd_total_silence_disable_animation.xml b/packages/SystemUI/res/drawable/ic_dnd_total_silence_disable_animation.xml
index c0b2d69..f796d62 100644
--- a/packages/SystemUI/res/drawable/ic_dnd_total_silence_disable_animation.xml
+++ b/packages/SystemUI/res/drawable/ic_dnd_total_silence_disable_animation.xml
@@ -23,7 +23,4 @@
<target
android:name="outer_ring_merged"
android:animation="@anim/ic_dnd_total_silence_disable_outer_ring_merged_animation" />
- <target
- android:name="ic_dnd_total_silence_disable"
- android:animation="@anim/ic_dnd_total_silence_disable_alpha_animation" />
</animated-vector>
diff --git a/packages/SystemUI/res/drawable/ic_hotspot_disable_animation.xml b/packages/SystemUI/res/drawable/ic_hotspot_disable_animation.xml
index 694c23f..e446a32 100644
--- a/packages/SystemUI/res/drawable/ic_hotspot_disable_animation.xml
+++ b/packages/SystemUI/res/drawable/ic_hotspot_disable_animation.xml
@@ -17,9 +17,6 @@
<animated-vector xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@drawable/ic_hotspot_disable" >
<target
- android:name="root"
- android:animation="@anim/ic_hotspot_disable_animation_root" />
- <target
android:name="mask"
android:animation="@anim/ic_hotspot_disable_animation_mask" />
<target
diff --git a/packages/SystemUI/res/drawable/ic_hotspot_enable.xml b/packages/SystemUI/res/drawable/ic_hotspot_enable.xml
index 31e7fe1..7a99630 100644
--- a/packages/SystemUI/res/drawable/ic_hotspot_enable.xml
+++ b/packages/SystemUI/res/drawable/ic_hotspot_enable.xml
@@ -16,12 +16,10 @@
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:name="root"
- android:alpha="0.3"
android:height="48dp"
android:width="48dp"
android:viewportHeight="48"
- android:viewportWidth="48"
- android:tint="?android:attr/colorControlNormal" >
+ android:viewportWidth="48" >
<group
android:name="ic_hotspot"
android:translateX="23.97354"
diff --git a/packages/SystemUI/res/drawable/ic_hotspot_enable_animation.xml b/packages/SystemUI/res/drawable/ic_hotspot_enable_animation.xml
index c5187dd..945e42f 100644
--- a/packages/SystemUI/res/drawable/ic_hotspot_enable_animation.xml
+++ b/packages/SystemUI/res/drawable/ic_hotspot_enable_animation.xml
@@ -17,9 +17,6 @@
<animated-vector xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@drawable/ic_hotspot_enable" >
<target
- android:name="root"
- android:animation="@anim/ic_hotspot_enable_animation_root" />
- <target
android:name="mask"
android:animation="@anim/ic_hotspot_enable_animation_mask" />
<target
diff --git a/packages/SystemUI/res/drawable/ic_hotspot_unavailable.xml b/packages/SystemUI/res/drawable/ic_hotspot_unavailable.xml
index 83f46e5..7641998 100644
--- a/packages/SystemUI/res/drawable/ic_hotspot_unavailable.xml
+++ b/packages/SystemUI/res/drawable/ic_hotspot_unavailable.xml
@@ -19,9 +19,7 @@
android:height="48dp"
android:width="48dp"
android:viewportHeight="48"
- android:viewportWidth="48"
- android:alpha="0.25"
- android:tint="?android:attr/colorControlNormal" >
+ android:viewportWidth="48" >
<group
android:name="ic_hotspot"
android:translateX="23.97354"
diff --git a/packages/SystemUI/res/drawable/ic_invert_colors_disable_animation.xml b/packages/SystemUI/res/drawable/ic_invert_colors_disable_animation.xml
index 476c00d..aeda0a5 100644
--- a/packages/SystemUI/res/drawable/ic_invert_colors_disable_animation.xml
+++ b/packages/SystemUI/res/drawable/ic_invert_colors_disable_animation.xml
@@ -17,9 +17,6 @@
<animated-vector xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@drawable/ic_invert_colors_disable" >
<target
- android:name="root"
- android:animation="@anim/ic_invert_colors_disable_animation_root" />
- <target
android:name="mask"
android:animation="@anim/ic_invert_colors_disable_animation_mask" />
<target
diff --git a/packages/SystemUI/res/drawable/ic_invert_colors_enable_animation.xml b/packages/SystemUI/res/drawable/ic_invert_colors_enable_animation.xml
index 879066c..85928ac 100644
--- a/packages/SystemUI/res/drawable/ic_invert_colors_enable_animation.xml
+++ b/packages/SystemUI/res/drawable/ic_invert_colors_enable_animation.xml
@@ -17,9 +17,6 @@
<animated-vector xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@drawable/ic_invert_colors_enable" >
<target
- android:name="root"
- android:animation="@anim/ic_invert_colors_enable_animation_root" />
- <target
android:name="mask"
android:animation="@anim/ic_invert_colors_enable_animation_mask" />
<target
diff --git a/packages/SystemUI/res/drawable/ic_qs_battery_saver.xml b/packages/SystemUI/res/drawable/ic_qs_battery_saver.xml
new file mode 100644
index 0000000..7b29740
--- /dev/null
+++ b/packages/SystemUI/res/drawable/ic_qs_battery_saver.xml
@@ -0,0 +1,28 @@
+<!--
+ Copyright (C) 2016 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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:autoMirrored="true"
+ android:width="32.0dp"
+ android:height="32.0dp"
+ android:viewportWidth="24.0"
+ android:viewportHeight="24.0"
+ android:tint="?android:attr/colorControlNormal">
+ <path
+ android:pathData="M5,3
+ l3.5,0 l0,-1.5 l7,0 l0,1.5 l3.5,0 l0,19.5 l-14,0z
+ M10.5,8.5 l0,3 l-3,0 l0,3 l3,0 l0,3 l3,0 l0,-3 l3,0 l0,-3 l-3,0 l0,-3 z"
+ android:fillColor="#FFFFFF"/>
+</vector>
diff --git a/packages/SystemUI/res/drawable/ic_qs_bluetooth_off.xml b/packages/SystemUI/res/drawable/ic_qs_bluetooth_off.xml
index 36eb418..3148a2c 100644
--- a/packages/SystemUI/res/drawable/ic_qs_bluetooth_off.xml
+++ b/packages/SystemUI/res/drawable/ic_qs_bluetooth_off.xml
@@ -21,6 +21,6 @@
android:tint="?android:attr/colorControlNormal">
<path
- android:fillColor="#4DFFFFFF"
+ android:fillColor="#FFFFFFFF"
android:pathData="M26.0,11.8l3.8,3.8l-3.2,3.2l2.8,2.8l6.0,-6.0L24.0,4.2l-2.0,0.0l0.0,10.1l4.0,4.0L26.0,11.8zM10.8,8.2L8.0,11.0l13.2,13.2L10.0,35.3l2.8,2.8L22.0,29.0l0.0,15.2l2.0,0.0l8.6,-8.6l4.6,4.6l2.8,-2.8L10.8,8.2zM26.0,36.5L26.0,29.0l3.8,3.8L26.0,36.5z"/>
</vector>
diff --git a/packages/SystemUI/res/drawable/ic_qs_cast_off.xml b/packages/SystemUI/res/drawable/ic_qs_cast_off.xml
index 0fdbe1f..06a0886 100644
--- a/packages/SystemUI/res/drawable/ic_qs_cast_off.xml
+++ b/packages/SystemUI/res/drawable/ic_qs_cast_off.xml
@@ -17,10 +17,9 @@
android:width="64dp"
android:height="64dp"
android:viewportWidth="48.0"
- android:viewportHeight="48.0"
- android:tint="?android:attr/colorControlNormal">
+ android:viewportHeight="48.0">
<path
- android:fillColor="#4DFFFFFF"
+ android:fillColor="#FFFFFFFF"
android:pathData="M42.0,6.0L6.0,6.0c-2.2,0.0 -4.0,1.8 -4.0,4.0l0.0,6.0l4.0,0.0l0.0,-6.0l36.0,0.0l0.0,28.0L28.0,38.0l0.0,4.0l14.0,0.0c2.2,0.0 4.0,-1.8 4.0,-4.0L46.0,10.0C46.0,7.8 44.2,6.0 42.0,6.0zM2.0,36.0l0.0,6.0l6.0,0.0C8.0,38.7 5.3,36.0 2.0,36.0zM2.0,28.0l0.0,4.0c5.5,0.0 10.0,4.5 10.0,10.0l4.0,0.0C16.0,34.3 9.7,28.0 2.0,28.0zM2.0,20.0l0.0,4.0c9.9,0.0 18.0,8.1 18.0,18.0l4.0,0.0C24.0,29.8 14.1,20.0 2.0,20.0z"/>
</vector>
diff --git a/packages/SystemUI/res/drawable/ic_qs_cast_on.xml b/packages/SystemUI/res/drawable/ic_qs_cast_on.xml
index d2e9eb2..794eb9e 100644
--- a/packages/SystemUI/res/drawable/ic_qs_cast_on.xml
+++ b/packages/SystemUI/res/drawable/ic_qs_cast_on.xml
@@ -17,8 +17,7 @@
android:width="64dp"
android:height="64dp"
android:viewportWidth="48.0"
- android:viewportHeight="48.0"
- android:tint="?android:attr/colorControlNormal">
+ android:viewportHeight="48.0">
<path
android:fillColor="#FFFFFFFF"
diff --git a/packages/SystemUI/res/drawable/ic_qs_circle.xml b/packages/SystemUI/res/drawable/ic_qs_circle.xml
index 57223cf..990cec6 100644
--- a/packages/SystemUI/res/drawable/ic_qs_circle.xml
+++ b/packages/SystemUI/res/drawable/ic_qs_circle.xml
@@ -14,14 +14,13 @@
limitations under the License.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:width="64dp"
- android:height="64dp"
+ android:width="40dp"
+ android:height="40dp"
android:viewportWidth="2.2"
android:viewportHeight="2.2">
<path
- android:strokeColor="#4DFFFFFF"
- android:strokeWidth=".05"
+ android:fillColor="#FFFFFFFF"
android:pathData="M.1,1.1
c0,.55 .45,1 1,1
c.55,0 1,-.45 1,-1
diff --git a/packages/SystemUI/res/drawable/ic_qs_data_disabled.xml b/packages/SystemUI/res/drawable/ic_qs_data_disabled.xml
index d11b6f4..439ee3b 100644
--- a/packages/SystemUI/res/drawable/ic_qs_data_disabled.xml
+++ b/packages/SystemUI/res/drawable/ic_qs_data_disabled.xml
@@ -14,11 +14,10 @@
limitations under the License.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:autoMirrored="true"
- android:width="32.0dp"
- android:height="32.0dp"
- android:viewportWidth="40.0"
- android:viewportHeight="40.0">
+ android:width="17dp"
+ android:height="17.0dp"
+ android:viewportWidth="20.0"
+ android:viewportHeight="20.0">
<path
android:fillColor="#FFFFFFFF"
android:pathData="M19.0,6.41L17.59,5.0 12.0,10.59 6.41,5.0 5.0,6.41 10.59,12.0 5.0,17.59 6.41,19.0 12.0,13.41 17.59,19.0 19.0,17.59 13.41,12.0z"/>
diff --git a/packages/SystemUI/res/drawable/ic_qs_dnd_off.xml b/packages/SystemUI/res/drawable/ic_qs_dnd_off.xml
index 164a557..9168dbc 100644
--- a/packages/SystemUI/res/drawable/ic_qs_dnd_off.xml
+++ b/packages/SystemUI/res/drawable/ic_qs_dnd_off.xml
@@ -17,9 +17,7 @@
android:height="64dp"
android:viewportHeight="24.0"
android:viewportWidth="24.0"
- android:alpha=".3"
- android:width="64dp"
- android:tint="?android:attr/colorControlNormal" >
+ android:width="64dp" >
<path
android:fillColor="#FFFFFFFF"
diff --git a/packages/SystemUI/res/drawable/ic_qs_dnd_on.xml b/packages/SystemUI/res/drawable/ic_qs_dnd_on.xml
index 7e2eca8..f4c20a9 100644
--- a/packages/SystemUI/res/drawable/ic_qs_dnd_on.xml
+++ b/packages/SystemUI/res/drawable/ic_qs_dnd_on.xml
@@ -17,8 +17,7 @@
android:width="64dp"
android:height="64dp"
android:viewportWidth="48.0"
- android:viewportHeight="48.0"
- android:tint="?android:attr/colorControlNormal">
+ android:viewportHeight="48.0">
<path
android:fillColor="#FFFFFFFF"
android:pathData="M24.0,4.0C12.95,4.0 4.0,12.95 4.0,24.0s8.95,20.0 20.0,20.0 20.0,-8.95 20.0,-20.0S35.05,4.0 24.0,4.0zm10.0,22.0L14.0,26.0l0.0,-4.0l20.0,0.0l0.0,4.0z"/>
diff --git a/packages/SystemUI/res/drawable/ic_qs_dnd_on_total_silence.xml b/packages/SystemUI/res/drawable/ic_qs_dnd_on_total_silence.xml
index 5f4fa11..fb26c09 100644
--- a/packages/SystemUI/res/drawable/ic_qs_dnd_on_total_silence.xml
+++ b/packages/SystemUI/res/drawable/ic_qs_dnd_on_total_silence.xml
@@ -17,8 +17,7 @@
android:width="64dp"
android:height="64dp"
android:viewportWidth="24.0"
- android:viewportHeight="24.0"
- android:tint="?android:attr/colorControlNormal">
+ android:viewportHeight="24.0">
<path
android:fillColor="#FFFFFFFF"
diff --git a/packages/SystemUI/res/drawable/ic_qs_minus.xml b/packages/SystemUI/res/drawable/ic_qs_minus.xml
index 147a94b..6a3410a 100644
--- a/packages/SystemUI/res/drawable/ic_qs_minus.xml
+++ b/packages/SystemUI/res/drawable/ic_qs_minus.xml
@@ -17,8 +17,7 @@
android:height="24.0dp"
android:viewportHeight="48.0"
android:viewportWidth="48.0"
- android:width="24.0dp"
- android:tint="?android:attr/colorControlNormal" >
+ android:width="24.0dp" >
<path
android:fillColor="#FFFFFFFF"
diff --git a/packages/SystemUI/res/drawable/ic_qs_night_display_off.xml b/packages/SystemUI/res/drawable/ic_qs_night_display_off.xml
index b99dc03..aaca663 100644
--- a/packages/SystemUI/res/drawable/ic_qs_night_display_off.xml
+++ b/packages/SystemUI/res/drawable/ic_qs_night_display_off.xml
@@ -17,12 +17,10 @@
android:width="64dp"
android:height="64dp"
android:viewportWidth="24"
- android:viewportHeight="24"
- android:alpha="0.3"
- android:tint="?android:attr/colorControlNormal">
+ android:viewportHeight="24">
<path
- android:fillColor="#FFFFFF"
+ android:fillColor="#FFF"
android:pathData="M6,12c0,5.5,4.5,10,10,10c1,0,2-0.2,3-0.5c-4.1-1.3-7-5.1-7-9.5s2.9-8.3,7-9.5C18.1,2.2,17.1,2,16,2C10.5,2,6,6.5,6,12z" />
</vector>
diff --git a/packages/SystemUI/res/drawable/ic_qs_night_display_on.xml b/packages/SystemUI/res/drawable/ic_qs_night_display_on.xml
index d875592..aaca663 100644
--- a/packages/SystemUI/res/drawable/ic_qs_night_display_on.xml
+++ b/packages/SystemUI/res/drawable/ic_qs_night_display_on.xml
@@ -17,11 +17,10 @@
android:width="64dp"
android:height="64dp"
android:viewportWidth="24"
- android:viewportHeight="24"
- android:tint="?android:attr/colorControlNormal">
+ android:viewportHeight="24">
<path
- android:fillColor="#FFFFFF"
+ android:fillColor="#FFF"
android:pathData="M6,12c0,5.5,4.5,10,10,10c1,0,2-0.2,3-0.5c-4.1-1.3-7-5.1-7-9.5s2.9-8.3,7-9.5C18.1,2.2,17.1,2,16,2C10.5,2,6,6.5,6,12z" />
</vector>
diff --git a/packages/SystemUI/res/drawable/ic_qs_no_sim.xml b/packages/SystemUI/res/drawable/ic_qs_no_sim.xml
index 2d831b2..69869fe 100644
--- a/packages/SystemUI/res/drawable/ic_qs_no_sim.xml
+++ b/packages/SystemUI/res/drawable/ic_qs_no_sim.xml
@@ -17,10 +17,9 @@
android:width="32dp"
android:height="32dp"
android:viewportWidth="24.0"
- android:viewportHeight="24.0"
- android:tint="?android:attr/colorControlNormal">
+ android:viewportHeight="24.0">
<path
- android:fillColor="#4DFFFFFF"
+ android:fillColor="#FFFFFFFF"
android:pathData="M19.0,5.0c0.0,-1.1 -0.9,-2.0 -2.0,-2.0l-7.0,0.0L7.7,5.3L19.0,16.7L19.0,5.0zM3.7,3.9L2.4,5.2L5.0,7.8L5.0,19.0c0.0,1.1 0.9,2.0 2.0,2.0l10.0,0.0c0.4,0.0 0.7,-0.1 1.0,-0.3l1.9,1.9l1.3,-1.3L3.7,3.9z"/>
</vector>
diff --git a/packages/SystemUI/res/drawable/ic_qs_plus.xml b/packages/SystemUI/res/drawable/ic_qs_plus.xml
index 1f254d1..393f51c 100644
--- a/packages/SystemUI/res/drawable/ic_qs_plus.xml
+++ b/packages/SystemUI/res/drawable/ic_qs_plus.xml
@@ -17,8 +17,7 @@
android:height="24.0dp"
android:viewportHeight="48.0"
android:viewportWidth="48.0"
- android:width="24.0dp"
- android:tint="?android:attr/colorControlNormal" >
+ android:width="24.0dp" >
<path
android:fillColor="#FFFFFFFF"
diff --git a/packages/SystemUI/res/drawable/ic_qs_signal_0.xml b/packages/SystemUI/res/drawable/ic_qs_signal_0.xml
index 0673848..b78d3bf 100644
--- a/packages/SystemUI/res/drawable/ic_qs_signal_0.xml
+++ b/packages/SystemUI/res/drawable/ic_qs_signal_0.xml
@@ -18,8 +18,7 @@
android:width="32.0dp"
android:height="32.0dp"
android:viewportWidth="24.0"
- android:viewportHeight="24.0"
- android:tint="?android:attr/colorControlNormal">
+ android:viewportHeight="24.0">
<path
android:pathData="M14.1,14.1l7.9,0.0 0.0,-11.5 -20.0,20.0 12.1,0.0z"
android:fillAlpha="0.3"
diff --git a/packages/SystemUI/res/drawable/ic_qs_signal_1.xml b/packages/SystemUI/res/drawable/ic_qs_signal_1.xml
index fbf9e71..e055de7 100644
--- a/packages/SystemUI/res/drawable/ic_qs_signal_1.xml
+++ b/packages/SystemUI/res/drawable/ic_qs_signal_1.xml
@@ -18,8 +18,7 @@
android:width="32.0dp"
android:height="32.0dp"
android:viewportWidth="24.0"
- android:viewportHeight="24.0"
- android:tint="?android:attr/colorControlNormal">
+ android:viewportHeight="24.0">
<path
android:pathData="M10.0,14.6l-8.0,8.0l8.0,0.0l0,-8z"
android:fillColor="#FFFFFF"/>
diff --git a/packages/SystemUI/res/drawable/ic_qs_signal_1x.xml b/packages/SystemUI/res/drawable/ic_qs_signal_1x.xml
index 3a55623..195849a 100644
--- a/packages/SystemUI/res/drawable/ic_qs_signal_1x.xml
+++ b/packages/SystemUI/res/drawable/ic_qs_signal_1x.xml
@@ -14,11 +14,10 @@
limitations under the License.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:width="16.0dp"
+ android:width="32.0dp"
android:height="32dp"
android:viewportWidth="12.0"
- android:viewportHeight="24.0"
- android:tint="?android:attr/colorControlNormal">
+ android:viewportHeight="12.0">
<path
android:fillColor="#FFFFFFFF"
android:pathData="M3.500000,11.000000L1.800000,11.000000L1.800000,4.400000L0.200000,5.100000L0.200000,3.700000l3.100000,-1.300000l0.200000,0.000000L3.500000,11.000000z"/>
diff --git a/packages/SystemUI/res/drawable/ic_qs_signal_2.xml b/packages/SystemUI/res/drawable/ic_qs_signal_2.xml
index e9f5a0b..8a48817 100644
--- a/packages/SystemUI/res/drawable/ic_qs_signal_2.xml
+++ b/packages/SystemUI/res/drawable/ic_qs_signal_2.xml
@@ -18,8 +18,7 @@
android:width="32.0dp"
android:height="32.0dp"
android:viewportWidth="24.0"
- android:viewportHeight="24.0"
- android:tint="?android:attr/colorControlNormal">
+ android:viewportHeight="24.0">
<path
android:pathData="M14.0,10.6l-12.0,12.0l12.0,0.0L14.0,10.6z"
android:fillColor="#FFFFFF"/>
diff --git a/packages/SystemUI/res/drawable/ic_qs_signal_3.xml b/packages/SystemUI/res/drawable/ic_qs_signal_3.xml
index 769d648..39cc94c 100644
--- a/packages/SystemUI/res/drawable/ic_qs_signal_3.xml
+++ b/packages/SystemUI/res/drawable/ic_qs_signal_3.xml
@@ -18,8 +18,7 @@
android:width="32.0dp"
android:height="32.0dp"
android:viewportWidth="24.0"
- android:viewportHeight="24.0"
- android:tint="?android:attr/colorControlNormal">
+ android:viewportHeight="24.0">
<path
android:pathData="M14.1,14.1l7.9,0.0 0.0,-11.5 -20.0,20.0 12.1,0.0z"
android:fillAlpha="0.3"
diff --git a/packages/SystemUI/res/drawable/ic_qs_signal_3g.xml b/packages/SystemUI/res/drawable/ic_qs_signal_3g.xml
index ddd8065..68c4307 100644
--- a/packages/SystemUI/res/drawable/ic_qs_signal_3g.xml
+++ b/packages/SystemUI/res/drawable/ic_qs_signal_3g.xml
@@ -14,11 +14,10 @@
limitations under the License.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:width="17.333334dp"
+ android:width="32dp"
android:height="32dp"
android:viewportWidth="13.0"
- android:viewportHeight="24.0"
- android:tint="?android:attr/colorControlNormal">
+ android:viewportHeight="13.0">
<path
android:fillColor="#FFFFFFFF"
android:pathData="M2.000000,6.000000l0.800000,0.000000c0.300000,0.000000 0.500000,-0.100000 0.700000,-0.300000s0.200000,-0.500000 0.200000,-0.900000c0.000000,-0.300000 -0.100000,-0.600000 -0.200000,-0.800000S3.200000,3.700000 2.900000,3.700000C2.700000,3.700000 2.500000,3.800000 2.300000,4.000000S2.100000,4.400000 2.100000,4.700000L0.500000,4.700000C0.500000,4.000000 0.700000,3.400000 1.100000,3.000000s1.000000,-0.600000 1.700000,-0.600000c0.800000,0.000000 1.400000,0.200000 1.900000,0.600000s0.700000,1.000000 0.700000,1.800000c0.000000,0.400000 -0.100000,0.700000 -0.300000,1.100000S4.600000,6.500000 4.300000,6.600000C4.700000,6.800000 5.000000,7.100000 5.200000,7.400000s0.300000,0.700000 0.300000,1.200000c0.000000,0.800000 -0.200000,1.400000 -0.700000,1.800000s-1.100000,0.700000 -1.900000,0.700000c-0.700000,0.000000 -1.300000,-0.200000 -1.800000,-0.600000s-0.700000,-1.000000 -0.700000,-1.800000L2.000000,8.700000C2.000000,9.000000 2.100000,9.300000 2.300000,9.500000s0.400000,0.300000 0.600000,0.300000c0.300000,0.000000 0.500000,-0.100000 0.700000,-0.300000S3.900000,9.000000 3.900000,8.600000c0.000000,-0.500000 -0.100000,-0.800000 -0.300000,-1.000000S3.200000,7.300000 2.800000,7.300000L2.000000,7.300000L2.000000,6.000000z"/>
diff --git a/packages/SystemUI/res/drawable/ic_qs_signal_4.xml b/packages/SystemUI/res/drawable/ic_qs_signal_4.xml
index 1bec1b8..012e95e 100644
--- a/packages/SystemUI/res/drawable/ic_qs_signal_4.xml
+++ b/packages/SystemUI/res/drawable/ic_qs_signal_4.xml
@@ -18,8 +18,7 @@
android:width="32.0dp"
android:height="32.0dp"
android:viewportWidth="24.0"
- android:viewportHeight="24.0"
- android:tint="?android:attr/colorControlNormal">
+ android:viewportHeight="24.0">
<path
android:pathData="M14.1,14.1l7.9,0.0 0.0,-11.5 -20.0,20.0 12.1,0.0z"
android:fillColor="#FFFFFF"/>
diff --git a/packages/SystemUI/res/drawable/ic_qs_signal_4g.xml b/packages/SystemUI/res/drawable/ic_qs_signal_4g.xml
index 8e1f8eb..61ecc9c 100644
--- a/packages/SystemUI/res/drawable/ic_qs_signal_4g.xml
+++ b/packages/SystemUI/res/drawable/ic_qs_signal_4g.xml
@@ -14,11 +14,10 @@
limitations under the License.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:width="16.0dp"
+ android:width="32.0dp"
android:height="32dp"
android:viewportWidth="12.0"
- android:viewportHeight="24.0"
- android:tint="?android:attr/colorControlNormal">
+ android:viewportHeight="12.0">
<path
android:fillColor="#FFFFFFFF"
android:pathData="M4.600000,7.800000l0.700000,0.000000l0.000000,1.300000L4.600000,9.100000L4.600000,11.000000L3.000000,11.000000L3.000000,9.200000L0.100000,9.200000L0.000000,8.100000L3.000000,2.500000l1.700000,0.000000L4.700000,7.800000zM1.600000,7.800000L3.000000,7.800000l0.000000,-3.000000L2.900000,5.000000L1.600000,7.800000z"/>
diff --git a/packages/SystemUI/res/drawable/ic_qs_signal_4g_plus.xml b/packages/SystemUI/res/drawable/ic_qs_signal_4g_plus.xml
index e0c6b68..54c52bf 100644
--- a/packages/SystemUI/res/drawable/ic_qs_signal_4g_plus.xml
+++ b/packages/SystemUI/res/drawable/ic_qs_signal_4g_plus.xml
@@ -14,11 +14,10 @@
limitations under the License.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:width="24.0dp"
- android:height="24.0dp"
+ android:width="32.0dp"
+ android:height="32.0dp"
android:viewportWidth="24.0"
- android:viewportHeight="24.0"
- android:tint="?android:attr/colorControlNormal">
+ android:viewportHeight="24.0">
<path
android:fillColor="#FFFFFFFF"
android:pathData="M4.6,7.8l0.7,0.0l0.0,1.3L4.6,9.1L4.6,11.0L3.0,11.0L3.0,9.2L0.1,9.2L0.0,8.2l3.0,-5.7l1.7,0.0L4.6,7.8L4.6,7.8zM1.7,7.8L3.0,7.8l0.0,-3.0L2.9,5.0L1.7,7.8z"/>
diff --git a/packages/SystemUI/res/drawable/ic_qs_signal_carrier_network_change.xml b/packages/SystemUI/res/drawable/ic_qs_signal_carrier_network_change.xml
index 1c068e5..96e2fd4 100644
--- a/packages/SystemUI/res/drawable/ic_qs_signal_carrier_network_change.xml
+++ b/packages/SystemUI/res/drawable/ic_qs_signal_carrier_network_change.xml
@@ -17,8 +17,7 @@
android:width="32dp"
android:height="32dp"
android:viewportWidth="24.0"
- android:viewportHeight="24.0"
- android:tint="?android:attr/colorControlNormal">
+ android:viewportHeight="24.0">
<path
android:name="dot1"
android:fillColor="#FFFFFFFF"
diff --git a/packages/SystemUI/res/drawable/ic_qs_signal_disabled.xml b/packages/SystemUI/res/drawable/ic_qs_signal_disabled.xml
index 0a85392..dd5843d 100644
--- a/packages/SystemUI/res/drawable/ic_qs_signal_disabled.xml
+++ b/packages/SystemUI/res/drawable/ic_qs_signal_disabled.xml
@@ -18,12 +18,11 @@
android:width="32dp"
android:height="32dp"
android:viewportWidth="24.0"
- android:viewportHeight="24.0"
- android:tint="?android:attr/colorControlNormal">
+ android:viewportHeight="24.0">
<path
- android:fillColor="#4DFFFFFF"
+ android:fillColor="#FFFFFFFF"
android:pathData="M21.799999,22.299999l-1.199999,-1.299999 0.000000,0.000000 -9.600000,-10.000000 0.000000,0.000000 -6.400000,-6.700000 -1.300000,1.300000 6.400000,6.700000 -8.700000,8.700000 16.900000,0.000000 2.600000,2.700001z"/>
<path
- android:fillColor="#4DFFFFFF"
+ android:fillColor="#FFFFFFFF"
android:pathData="M21.000000,1.000000l-8.600000,8.600000 8.600000,9.100000z"/>
</vector>
diff --git a/packages/SystemUI/res/drawable/ic_qs_signal_e.xml b/packages/SystemUI/res/drawable/ic_qs_signal_e.xml
index 4c90421..dd0f271 100644
--- a/packages/SystemUI/res/drawable/ic_qs_signal_e.xml
+++ b/packages/SystemUI/res/drawable/ic_qs_signal_e.xml
@@ -14,11 +14,10 @@
limitations under the License.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:width="6.6666665dp"
+ android:width="32dp"
android:height="32dp"
android:viewportWidth="5.0"
- android:viewportHeight="24.0"
- android:tint="?android:attr/colorControlNormal">
+ android:viewportHeight="5.0">
<path
android:fillColor="#FFFFFFFF"
android:pathData="M4.400000,7.300000L1.700000,7.300000l0.000000,2.400000l3.300000,0.000000L5.000000,11.000000L0.000000,11.000000L0.000000,2.500000l4.900000,0.000000l0.000000,1.300000L1.700000,3.800000l0.000000,2.100000l2.800000,0.000000L4.500000,7.300000z"/>
diff --git a/packages/SystemUI/res/drawable/ic_qs_signal_full_0.xml b/packages/SystemUI/res/drawable/ic_qs_signal_full_0.xml
index db4df76..326373d 100644
--- a/packages/SystemUI/res/drawable/ic_qs_signal_full_0.xml
+++ b/packages/SystemUI/res/drawable/ic_qs_signal_full_0.xml
@@ -18,8 +18,7 @@
android:width="32dp"
android:height="32dp"
android:viewportWidth="24.0"
- android:viewportHeight="24.0"
- android:tint="?android:attr/colorControlNormal">
+ android:viewportHeight="24.0">
<path
android:fillColor="#4DFFFFFF"
android:pathData="M2.000000,22.000000l20.000000,0.000000 0.000000,-20.000000z"/>
diff --git a/packages/SystemUI/res/drawable/ic_qs_signal_full_1.xml b/packages/SystemUI/res/drawable/ic_qs_signal_full_1.xml
index 6e5439d..8baa4eb 100644
--- a/packages/SystemUI/res/drawable/ic_qs_signal_full_1.xml
+++ b/packages/SystemUI/res/drawable/ic_qs_signal_full_1.xml
@@ -18,8 +18,7 @@
android:width="32dp"
android:height="32dp"
android:viewportWidth="24.0"
- android:viewportHeight="24.0"
- android:tint="?android:attr/colorControlNormal">
+ android:viewportHeight="24.0">
<path
android:fillColor="#4DFFFFFF"
android:pathData="M2.0,22.0l20.0,0.0 0.0,-20.0z"/>
diff --git a/packages/SystemUI/res/drawable/ic_qs_signal_full_2.xml b/packages/SystemUI/res/drawable/ic_qs_signal_full_2.xml
index 194edc3..bf19a71 100644
--- a/packages/SystemUI/res/drawable/ic_qs_signal_full_2.xml
+++ b/packages/SystemUI/res/drawable/ic_qs_signal_full_2.xml
@@ -18,8 +18,7 @@
android:width="32dp"
android:height="32dp"
android:viewportWidth="24.0"
- android:viewportHeight="24.0"
- android:tint="?android:attr/colorControlNormal">
+ android:viewportHeight="24.0">
<path
android:fillColor="#4DFFFFFF"
android:pathData="M2.000000,22.000000l20.000000,0.000000 0.000000,-20.000000z"/>
diff --git a/packages/SystemUI/res/drawable/ic_qs_signal_full_3.xml b/packages/SystemUI/res/drawable/ic_qs_signal_full_3.xml
index b57af5c..01839e85 100644
--- a/packages/SystemUI/res/drawable/ic_qs_signal_full_3.xml
+++ b/packages/SystemUI/res/drawable/ic_qs_signal_full_3.xml
@@ -18,8 +18,7 @@
android:width="32dp"
android:height="32dp"
android:viewportWidth="24.0"
- android:viewportHeight="24.0"
- android:tint="?android:attr/colorControlNormal">
+ android:viewportHeight="24.0">
<path
android:fillColor="#4DFFFFFF"
android:pathData="M2.000000,22.000000l20.000000,0.000000 0.000000,-20.000000z"/>
diff --git a/packages/SystemUI/res/drawable/ic_qs_signal_full_4.xml b/packages/SystemUI/res/drawable/ic_qs_signal_full_4.xml
index 7d754a8..48151ad 100644
--- a/packages/SystemUI/res/drawable/ic_qs_signal_full_4.xml
+++ b/packages/SystemUI/res/drawable/ic_qs_signal_full_4.xml
@@ -18,8 +18,7 @@
android:width="32dp"
android:height="32dp"
android:viewportWidth="24.0"
- android:viewportHeight="24.0"
- android:tint="?android:attr/colorControlNormal">
+ android:viewportHeight="24.0">
<path
android:fillColor="#FFFFFFFF"
android:pathData="M2.000000,22.000000l20.000000,0.000000 0.000000,-20.000000z"/>
diff --git a/packages/SystemUI/res/drawable/ic_qs_signal_g.xml b/packages/SystemUI/res/drawable/ic_qs_signal_g.xml
index 64aadf9..3b47c0d 100644
--- a/packages/SystemUI/res/drawable/ic_qs_signal_g.xml
+++ b/packages/SystemUI/res/drawable/ic_qs_signal_g.xml
@@ -14,11 +14,10 @@
limitations under the License.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:width="9.333333dp"
+ android:width="32dp"
android:height="32dp"
android:viewportWidth="7.0"
- android:viewportHeight="24.0"
- android:tint="?android:attr/colorControlNormal">
+ android:viewportHeight="7.0">
<path
android:fillColor="#FFFFFFFF"
android:pathData="M6.500000,9.900000c-0.200000,0.400000 -0.600000,0.700000 -1.000000,0.900000s-1.000000,0.400000 -1.800000,0.400000c-0.900000,0.000000 -1.700000,-0.300000 -2.200000,-0.800000S0.700000,9.000000 0.700000,7.900000L0.700000,5.600000c0.000000,-1.100000 0.300000,-1.900000 0.800000,-2.400000s1.200000,-0.800000 2.100000,-0.800000c1.000000,0.000000 1.700000,0.200000 2.100000,0.700000s0.700000,1.200000 0.700000,2.100000L4.700000,5.200000c0.000000,-0.500000 -0.100000,-0.900000 -0.200000,-1.100000S4.000000,3.700000 3.600000,3.700000c-0.400000,0.000000 -0.700000,0.200000 -0.900000,0.500000S2.300000,5.000000 2.300000,5.600000l0.000000,2.300000c0.000000,0.700000 0.100000,1.100000 0.300000,1.400000s0.600000,0.500000 1.000000,0.500000c0.300000,0.000000 0.600000,0.000000 0.700000,-0.100000s0.300000,-0.200000 0.400000,-0.300000L4.700000,7.800000L3.500000,7.800000L3.500000,6.600000l2.900000,0.000000L6.400000,9.900000z"/>
diff --git a/packages/SystemUI/res/drawable/ic_qs_signal_h.xml b/packages/SystemUI/res/drawable/ic_qs_signal_h.xml
index 31918a9..d694e61 100644
--- a/packages/SystemUI/res/drawable/ic_qs_signal_h.xml
+++ b/packages/SystemUI/res/drawable/ic_qs_signal_h.xml
@@ -14,11 +14,10 @@
limitations under the License.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:width="8.0dp"
+ android:width="32.0dp"
android:height="32dp"
android:viewportWidth="6.0"
- android:viewportHeight="24.0"
- android:tint="?android:attr/colorControlNormal">
+ android:viewportHeight="6.0">
<path
android:fillColor="#FFFFFFFF"
android:pathData="M6.000000,11.000000L4.400000,11.000000L4.400000,7.500000L1.700000,7.500000L1.700000,11.000000L0.000000,11.000000L0.000000,2.500000l1.700000,0.000000l0.000000,3.700000l2.700000,0.000000L4.400000,2.500000L6.000000,2.500000L6.000000,11.000000z"/>
diff --git a/packages/SystemUI/res/drawable/ic_qs_signal_in.xml b/packages/SystemUI/res/drawable/ic_qs_signal_in.xml
index 4122b76..236fdac 100644
--- a/packages/SystemUI/res/drawable/ic_qs_signal_in.xml
+++ b/packages/SystemUI/res/drawable/ic_qs_signal_in.xml
@@ -17,8 +17,7 @@
android:width="6.0dp"
android:height="32dp"
android:viewportWidth="6.0"
- android:viewportHeight="24.0"
- android:tint="?android:attr/colorControlNormal">
+ android:viewportHeight="24.0">
<path
android:fillColor="#FFFFFFFF"
android:pathData="M6.000000,15.700000l-3.000000,5.599999 -3.000000,-5.599999z"/>
diff --git a/packages/SystemUI/res/drawable/ic_qs_signal_lte.xml b/packages/SystemUI/res/drawable/ic_qs_signal_lte.xml
index 8766075..a381d03e 100644
--- a/packages/SystemUI/res/drawable/ic_qs_signal_lte.xml
+++ b/packages/SystemUI/res/drawable/ic_qs_signal_lte.xml
@@ -14,11 +14,10 @@
limitations under the License.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:width="17.333334dp"
+ android:width="32dp"
android:height="32dp"
android:viewportWidth="13.0"
- android:viewportHeight="24.0"
- android:tint="?android:attr/colorControlNormal">
+ android:viewportHeight="13.0">
<path
android:fillColor="#FFFFFFFF"
android:pathData="M2.000000,9.700000l2.000000,0.000000L4.000000,11.000000L0.300000,11.000000L0.300000,2.500000L2.000000,2.500000L2.000000,9.700000z"/>
diff --git a/packages/SystemUI/res/drawable/ic_qs_signal_lte_plus.xml b/packages/SystemUI/res/drawable/ic_qs_signal_lte_plus.xml
index 5ff7d85..3bed28a 100644
--- a/packages/SystemUI/res/drawable/ic_qs_signal_lte_plus.xml
+++ b/packages/SystemUI/res/drawable/ic_qs_signal_lte_plus.xml
@@ -14,11 +14,10 @@
limitations under the License.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:width="24.0dp"
- android:height="24.0dp"
+ android:width="32.0dp"
+ android:height="32.0dp"
android:viewportWidth="24.0"
- android:viewportHeight="24.0"
- android:tint="?android:attr/colorControlNormal">
+ android:viewportHeight="24.0">
<path
android:fillColor="#FFFFFFFF"
android:pathData="M2.0,9.7l2.0,0.0L4.0,11.0L0.4,11.0L0.4,2.5L2.0,2.5L2.0,9.7z"/>
diff --git a/packages/SystemUI/res/drawable/ic_qs_signal_no_signal.xml b/packages/SystemUI/res/drawable/ic_qs_signal_no_signal.xml
index 4e65004..c8c857c 100644
--- a/packages/SystemUI/res/drawable/ic_qs_signal_no_signal.xml
+++ b/packages/SystemUI/res/drawable/ic_qs_signal_no_signal.xml
@@ -18,9 +18,8 @@
android:width="32dp"
android:height="32dp"
android:viewportWidth="24.0"
- android:viewportHeight="24.0"
- android:tint="?android:attr/colorControlNormal">
+ android:viewportHeight="24.0">
<path
- android:fillColor="#4DFFFFFF"
+ android:fillColor="#FFFFFFFF"
android:pathData="M2.000000,22.000000l20.000000,0.000000L22.000000,2.000000L2.000000,22.000000zM20.000000,20.000000L6.800000,20.000000L20.000000,6.800000L20.000000,20.000000z"/>
</vector>
diff --git a/packages/SystemUI/res/drawable/ic_qs_signal_out.xml b/packages/SystemUI/res/drawable/ic_qs_signal_out.xml
index a3823ae..c510972 100644
--- a/packages/SystemUI/res/drawable/ic_qs_signal_out.xml
+++ b/packages/SystemUI/res/drawable/ic_qs_signal_out.xml
@@ -17,8 +17,7 @@
android:width="6.0dp"
android:height="32dp"
android:viewportWidth="6.0"
- android:viewportHeight="24.0"
- android:tint="?android:attr/colorControlNormal">
+ android:viewportHeight="24.0">
<path
android:fillColor="#FFFFFFFF"
android:pathData="M0.000000,13.700000l3.000000,-5.700000 3.000000,5.700000z"/>
diff --git a/packages/SystemUI/res/drawable/ic_qs_signal_r.xml b/packages/SystemUI/res/drawable/ic_qs_signal_r.xml
index 2c10dc3f..40bfbe6 100644
--- a/packages/SystemUI/res/drawable/ic_qs_signal_r.xml
+++ b/packages/SystemUI/res/drawable/ic_qs_signal_r.xml
@@ -14,11 +14,10 @@
limitations under the License.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:width="8.0dp"
+ android:width="32.0dp"
android:height="32dp"
android:viewportWidth="6.0"
- android:viewportHeight="24.0"
- android:tint="?android:attr/colorControlNormal">
+ android:viewportHeight="6.0">
<path
android:fillColor="#FFFFFFFF"
android:pathData="M2.800000,7.900000l-1.000000,0.000000L1.800000,11.000000L0.200000,11.000000L0.200000,2.500000l2.700000,0.000000c0.900000,0.000000 1.500000,0.200000 2.000000,0.700000s0.700000,1.100000 0.700000,1.900000c0.000000,0.600000 -0.100000,1.100000 -0.300000,1.500000S4.800000,7.200000 4.400000,7.400000l1.500000,3.500000L5.900000,11.000000L4.100000,11.000000L2.800000,7.900000zM1.800000,6.500000l1.100000,0.000000c0.400000,0.000000 0.600000,-0.100000 0.800000,-0.400000S4.000000,5.600000 4.000000,5.200000c0.000000,-0.400000 -0.100000,-0.800000 -0.300000,-1.000000S3.300000,3.800000 2.900000,3.800000L1.800000,3.800000L1.800000,6.500000z"/>
diff --git a/packages/SystemUI/res/drawable/ic_qs_vpn.xml b/packages/SystemUI/res/drawable/ic_qs_vpn.xml
index e7ef02a..cf24e12 100644
--- a/packages/SystemUI/res/drawable/ic_qs_vpn.xml
+++ b/packages/SystemUI/res/drawable/ic_qs_vpn.xml
@@ -19,6 +19,6 @@
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
- android:fillColor="#4DFFFFFF"
+ android:fillColor="#FFFFFFFF"
android:pathData="M12.700000,10.000000c-0.800000,-2.300000 -3.000000,-4.000000 -5.700000,-4.000000c-3.300000,0.000000 -6.000000,2.700000 -6.000000,6.000000s2.700000,6.000000 6.000000,6.000000c2.600000,0.000000 4.800000,-1.700000 5.700000,-4.000000L17.000000,14.000000l0.000000,4.000000l4.000000,0.000000l0.000000,-4.000000l2.000000,0.000000l0.000000,-4.000000L12.700000,10.000000zM7.000000,14.000000c-1.100000,0.000000 -2.000000,-0.900000 -2.000000,-2.000000c0.000000,-1.100000 0.900000,-2.000000 2.000000,-2.000000s2.000000,0.900000 2.000000,2.000000C9.000000,13.100000 8.100000,14.000000 7.000000,14.000000z"/>
</vector>
diff --git a/packages/SystemUI/res/drawable/ic_qs_wifi_0.xml b/packages/SystemUI/res/drawable/ic_qs_wifi_0.xml
index fe963b1..e6f9292 100644
--- a/packages/SystemUI/res/drawable/ic_qs_wifi_0.xml
+++ b/packages/SystemUI/res/drawable/ic_qs_wifi_0.xml
@@ -17,8 +17,7 @@
android:width="24.0dp"
android:height="24.0dp"
android:viewportWidth="24.0"
- android:viewportHeight="24.0"
- android:tint="?android:attr/colorControlNormal">
+ android:viewportHeight="24.0">
<path
android:pathData="M13.8,12.2l5.7,0.0L23.6,7.0C23.2,6.7 18.7,3.0 12.0,3.0C5.3,3.0 0.8,6.7 0.4,7.0L12.0,21.5l0.0,0.0l0.0,0.0l1.8,-2.2L13.8,12.2z"
android:fillAlpha="0.3"
diff --git a/packages/SystemUI/res/drawable/ic_qs_wifi_1.xml b/packages/SystemUI/res/drawable/ic_qs_wifi_1.xml
index 82d2be2..d423ccb 100644
--- a/packages/SystemUI/res/drawable/ic_qs_wifi_1.xml
+++ b/packages/SystemUI/res/drawable/ic_qs_wifi_1.xml
@@ -17,8 +17,7 @@
android:width="24.0dp"
android:height="24.0dp"
android:viewportWidth="24.0"
- android:viewportHeight="24.0"
- android:tint="?android:attr/colorControlNormal">
+ android:viewportHeight="24.0">
<path
android:pathData="M13.8,13.2c-0.1,0.0 -0.3,-0.1 -0.4,-0.1c-0.1,0.0 -0.3,0.0 -0.4,-0.1c-0.3,0.0 -0.6,-0.1 -0.9,-0.1c0.0,0.0 0.0,0.0 -0.1,0.0c0.0,0.0 0.0,0.0 0.0,0.0s0.0,0.0 0.0,0.0c0.0,0.0 0.0,0.0 -0.1,0.0c-0.3,0.0 -0.6,0.0 -0.9,0.1c-0.1,0.0 -0.3,0.0 -0.4,0.1c-0.2,0.0 -0.3,0.1 -0.5,0.1c-0.2,0.0 -0.3,0.1 -0.5,0.1c-0.1,0.0 -0.1,0.0 -0.2,0.1c-1.6,0.5 -2.7,1.3 -2.8,1.5l5.3,6.6l0.0,0.0l0.0,0.0l0.0,0.0l0.0,0.0l1.8,-2.2L13.700002,13.2z"
android:fillColor="#FFFFFF"/>
diff --git a/packages/SystemUI/res/drawable/ic_qs_wifi_2.xml b/packages/SystemUI/res/drawable/ic_qs_wifi_2.xml
index f30ba76..1982130 100644
--- a/packages/SystemUI/res/drawable/ic_qs_wifi_2.xml
+++ b/packages/SystemUI/res/drawable/ic_qs_wifi_2.xml
@@ -17,8 +17,7 @@
android:width="24.0dp"
android:height="24.0dp"
android:viewportWidth="24.0"
- android:viewportHeight="24.0"
- android:tint="?android:attr/colorControlNormal">
+ android:viewportHeight="24.0">
<path
android:pathData="M13.8,12.2l4.9,0.0c-1.0,-0.7 -3.4,-2.2 -6.7,-2.2c-4.1,0.0 -6.9,2.2 -7.2,2.5l7.2,9.0l0.0,0.0l0.0,0.0l1.8,-2.2L13.800001,12.2z"
android:fillColor="#FFFFFF"/>
diff --git a/packages/SystemUI/res/drawable/ic_qs_wifi_3.xml b/packages/SystemUI/res/drawable/ic_qs_wifi_3.xml
index 8a17083..b350111 100644
--- a/packages/SystemUI/res/drawable/ic_qs_wifi_3.xml
+++ b/packages/SystemUI/res/drawable/ic_qs_wifi_3.xml
@@ -17,8 +17,7 @@
android:width="24.0dp"
android:height="24.0dp"
android:viewportWidth="24.0"
- android:viewportHeight="24.0"
- android:tint="?android:attr/colorControlNormal">
+ android:viewportHeight="24.0">
<path
android:pathData="M13.8,12.2l5.7,0.0l1.0,-1.2C20.0,10.6 16.8,8.0 12.0,8.0s-8.0,2.6 -8.5,3.0L12.0,21.5l0.0,0.0l0.0,0.0l1.8,-2.2L13.8,12.2z"
android:fillColor="#FFFFFF"/>
diff --git a/packages/SystemUI/res/drawable/ic_qs_wifi_4.xml b/packages/SystemUI/res/drawable/ic_qs_wifi_4.xml
index fcd57d0..136a004 100644
--- a/packages/SystemUI/res/drawable/ic_qs_wifi_4.xml
+++ b/packages/SystemUI/res/drawable/ic_qs_wifi_4.xml
@@ -17,8 +17,7 @@
android:width="24.0dp"
android:height="24.0dp"
android:viewportWidth="24.0"
- android:viewportHeight="24.0"
- android:tint="?android:attr/colorControlNormal">
+ android:viewportHeight="24.0">
<path
android:pathData="M13.8,12.2l5.7,0.0L23.6,7.0C23.2,6.7 18.7,3.0 12.0,3.0C5.3,3.0 0.8,6.7 0.4,7.0L12.0,21.5l0.0,0.0l0.0,0.0l1.8,-2.2L13.8,12.2z"
android:fillColor="#FFFFFF"/>
diff --git a/packages/SystemUI/res/drawable/ic_qs_wifi_disabled.xml b/packages/SystemUI/res/drawable/ic_qs_wifi_disabled.xml
index bbff2e1..bed37b1 100644
--- a/packages/SystemUI/res/drawable/ic_qs_wifi_disabled.xml
+++ b/packages/SystemUI/res/drawable/ic_qs_wifi_disabled.xml
@@ -17,12 +17,11 @@
android:width="32.0dp"
android:height="29.5dp"
android:viewportWidth="26.0"
- android:viewportHeight="24.0"
- android:tint="?android:attr/colorControlNormal">
+ android:viewportHeight="24.0">
<path
- android:fillColor="#4DFFFFFF"
+ android:fillColor="#FFFFFFFF"
android:pathData="M17.500000,16.500000L5.800000,3.400000c0.000000,0.000000 0.000000,0.000000 0.000000,0.000000l-2.700000,-3.000000L1.600000,1.800000l2.200000,2.500000c-2.000000,1.000000 -3.200000,2.000000 -3.400000,2.200000L13.000000,22.000000l0.000000,0.000000l0.000000,0.000000l0.000000,0.000000l0.000000,0.000000l3.200000,-3.900000l2.400000,2.700000l1.500000,-1.400000L17.500000,16.500000L17.500000,16.500000z"/>
<path
- android:fillColor="#4DFFFFFF"
+ android:fillColor="#FFFFFFFF"
android:pathData="M25.600000,6.500000C25.100000,6.100000 20.299999,2.100000 13.000000,2.100000c-1.900000,0.000000 -3.600000,0.300000 -5.200000,0.700000L18.700001,15.000000L25.600000,6.500000z"/>
</vector>
diff --git a/packages/SystemUI/res/drawable/ic_qs_wifi_disconnected.xml b/packages/SystemUI/res/drawable/ic_qs_wifi_disconnected.xml
index 071892a..2dcdb71 100644
--- a/packages/SystemUI/res/drawable/ic_qs_wifi_disconnected.xml
+++ b/packages/SystemUI/res/drawable/ic_qs_wifi_disconnected.xml
@@ -17,8 +17,7 @@
android:width="26.0dp"
android:height="24.0dp"
android:viewportWidth="26.0"
- android:viewportHeight="24.0"
- android:tint="?android:attr/colorControlNormal">
+ android:viewportHeight="24.0">
<path
android:fillColor="#FFFFFFFF"
android:pathData="M21.0,8.5
diff --git a/packages/SystemUI/res/drawable/ic_qs_wifi_full_0.xml b/packages/SystemUI/res/drawable/ic_qs_wifi_full_0.xml
index c0e1037..1bc7438 100644
--- a/packages/SystemUI/res/drawable/ic_qs_wifi_full_0.xml
+++ b/packages/SystemUI/res/drawable/ic_qs_wifi_full_0.xml
@@ -17,8 +17,7 @@
android:width="32.0dp"
android:height="29.5dp"
android:viewportWidth="26.0"
- android:viewportHeight="24.0"
- android:tint="?android:attr/colorControlNormal">
+ android:viewportHeight="24.0">
<path
android:fillColor="#4DFFFFFF"
android:pathData="M13.000000,22.000000L25.600000,6.500000C25.100000,6.100000 20.299999,2.100000 13.000000,2.100000S0.900000,6.100000 0.400000,6.500000L13.000000,22.000000L13.000000,22.000000L13.000000,22.000000L13.000000,22.000000L13.000000,22.000000z"/>
diff --git a/packages/SystemUI/res/drawable/ic_qs_wifi_full_1.xml b/packages/SystemUI/res/drawable/ic_qs_wifi_full_1.xml
index f609295..5856115 100644
--- a/packages/SystemUI/res/drawable/ic_qs_wifi_full_1.xml
+++ b/packages/SystemUI/res/drawable/ic_qs_wifi_full_1.xml
@@ -17,8 +17,7 @@
android:width="32.0dp"
android:height="29.5dp"
android:viewportWidth="26.0"
- android:viewportHeight="24.0"
- android:tint="?android:attr/colorControlNormal">
+ android:viewportHeight="24.0">
<path
android:fillColor="#4DFFFFFF"
android:pathData="M13.100000,22.000000L25.600000,6.500000C25.100000,6.100000 20.299999,2.100000 13.000000,2.100000S0.900000,6.100000 0.500000,6.500000L13.100000,22.000000L13.100000,22.000000L13.100000,22.000000L13.100000,22.000000L13.100000,22.000000z"/>
diff --git a/packages/SystemUI/res/drawable/ic_qs_wifi_full_2.xml b/packages/SystemUI/res/drawable/ic_qs_wifi_full_2.xml
index f44b303..4a5e1f8 100644
--- a/packages/SystemUI/res/drawable/ic_qs_wifi_full_2.xml
+++ b/packages/SystemUI/res/drawable/ic_qs_wifi_full_2.xml
@@ -17,8 +17,7 @@
android:width="32.0dp"
android:height="29.5dp"
android:viewportWidth="26.0"
- android:viewportHeight="24.0"
- android:tint="?android:attr/colorControlNormal">
+ android:viewportHeight="24.0">
<path
android:fillColor="#4DFFFFFF"
android:pathData="M13.000000,22.000000L25.600000,6.500000C25.100000,6.100000 20.299999,2.100000 13.000000,2.100000S0.900000,6.100000 0.400000,6.500000L13.000000,22.000000L13.000000,22.000000L13.000000,22.000000L13.000000,22.000000L13.000000,22.000000z"/>
diff --git a/packages/SystemUI/res/drawable/ic_qs_wifi_full_3.xml b/packages/SystemUI/res/drawable/ic_qs_wifi_full_3.xml
index 850f5b9..965442d 100644
--- a/packages/SystemUI/res/drawable/ic_qs_wifi_full_3.xml
+++ b/packages/SystemUI/res/drawable/ic_qs_wifi_full_3.xml
@@ -17,8 +17,7 @@
android:width="32.0dp"
android:height="29.5dp"
android:viewportWidth="26.0"
- android:viewportHeight="24.0"
- android:tint="?android:attr/colorControlNormal">
+ android:viewportHeight="24.0">
<path
android:fillColor="#4DFFFFFF"
android:pathData="M13.000000,22.000000L25.600000,6.500000C25.100000,6.100000 20.299999,2.100000 13.000000,2.100000S0.900000,6.100000 0.400000,6.500000L13.000000,22.000000L13.000000,22.000000L13.000000,22.000000L13.000000,22.000000L13.000000,22.000000z"/>
diff --git a/packages/SystemUI/res/drawable/ic_qs_wifi_full_4.xml b/packages/SystemUI/res/drawable/ic_qs_wifi_full_4.xml
index 8ccc1fd9..b29d3f9 100644
--- a/packages/SystemUI/res/drawable/ic_qs_wifi_full_4.xml
+++ b/packages/SystemUI/res/drawable/ic_qs_wifi_full_4.xml
@@ -17,8 +17,7 @@
android:width="32.0dp"
android:height="29.5dp"
android:viewportWidth="26.0"
- android:viewportHeight="24.0"
- android:tint="?android:attr/colorControlNormal">
+ android:viewportHeight="24.0">
<path
android:fillColor="#FFFFFFFF"
android:pathData="M13.000000,22.000000L25.600000,6.500000C25.100000,6.100000 20.299999,2.100000 13.000000,2.100000S0.900000,6.100000 0.400000,6.500000L13.000000,22.000000L13.000000,22.000000L13.000000,22.000000L13.000000,22.000000L13.000000,22.000000z"/>
diff --git a/packages/SystemUI/res/drawable/ic_qs_wifi_no_network.xml b/packages/SystemUI/res/drawable/ic_qs_wifi_no_network.xml
index 45cfc1c..e59e7f4 100644
--- a/packages/SystemUI/res/drawable/ic_qs_wifi_no_network.xml
+++ b/packages/SystemUI/res/drawable/ic_qs_wifi_no_network.xml
@@ -17,9 +17,8 @@
android:width="32.0dp"
android:height="29.5dp"
android:viewportWidth="26.0"
- android:viewportHeight="24.0"
- android:tint="?android:attr/colorControlNormal">
+ android:viewportHeight="24.0">
<path
- android:fillColor="#4DFFFFFF"
+ android:fillColor="#FFFFFFFF"
android:pathData="M13.000000,2.000000C7.700000,2.000000 3.700000,3.900000 0.400000,6.400000L13.000000,22.000000L25.600000,6.500000C22.299999,4.000000 18.299999,2.000000 13.000000,2.000000zM13.000000,18.600000L3.300000,7.000000l0.000000,0.000000l0.000000,0.000000C6.000000,5.300000 8.700000,4.000000 13.000000,4.000000s7.000000,1.400000 9.700000,3.000000l0.000000,0.000000l0.000000,0.000000L13.000000,18.600000z"/>
</vector>
diff --git a/packages/SystemUI/res/drawable/ic_settings_20dp.xml b/packages/SystemUI/res/drawable/ic_settings_20dp.xml
index 45ee94f..3170f86 100644
--- a/packages/SystemUI/res/drawable/ic_settings_20dp.xml
+++ b/packages/SystemUI/res/drawable/ic_settings_20dp.xml
@@ -17,8 +17,7 @@
android:width="20dp"
android:height="20dp"
android:viewportWidth="24.0"
- android:viewportHeight="24.0"
- android:tint="?android:attr/colorControlNormal">
+ android:viewportHeight="24.0">
<path
android:pathData="M19.4,13.0c0.0,-0.3 0.1,-0.6 0.1,-1.0s0.0,-0.7 -0.1,-1.0l2.1,-1.7c0.2,-0.2 0.2,-0.4 0.1,-0.6l-2.0,-3.5C19.5,5.1 19.3,5.0 19.0,5.1l-2.5,1.0c-0.5,-0.4 -1.1,-0.7 -1.7,-1.0l-0.4,-2.6C14.5,2.2 14.2,2.0 14.0,2.0l-4.0,0.0C9.8,2.0 9.5,2.2 9.5,2.4L9.1,5.1C8.5,5.3 8.0,5.7 7.4,6.1L5.0,5.1C4.7,5.0 4.5,5.1 4.3,5.3l-2.0,3.5C2.2,8.9 2.3,9.2 2.5,9.4L4.6,11.0c0.0,0.3 -0.1,0.6 -0.1,1.0s0.0,0.7 0.1,1.0l-2.1,1.7c-0.2,0.2 -0.2,0.4 -0.1,0.6l2.0,3.5C4.5,18.9 4.7,19.0 5.0,18.9l2.5,-1.0c0.5,0.4 1.1,0.7 1.7,1.0l0.4,2.6c0.0,0.2 0.2,0.4 0.5,0.4l4.0,0.0c0.2,0.0 0.5,-0.2 0.5,-0.4l0.4,-2.6c0.6,-0.3 1.2,-0.6 1.7,-1.0l2.5,1.0c0.2,0.1 0.5,0.0 0.6,-0.2l2.0,-3.5c0.1,-0.2 0.1,-0.5 -0.1,-0.6L19.4,13.0zM12.0,15.5c-1.9,0.0 -3.5,-1.6 -3.5,-3.5s1.6,-3.5 3.5,-3.5s3.5,1.6 3.5,3.5S13.9,15.5 12.0,15.5z"
android:fillColor="#ffffffff" />
diff --git a/packages/SystemUI/res/drawable/ic_signal_airplane_disable.xml b/packages/SystemUI/res/drawable/ic_signal_airplane_disable.xml
index 2ff0de4..09a67e1 100644
--- a/packages/SystemUI/res/drawable/ic_signal_airplane_disable.xml
+++ b/packages/SystemUI/res/drawable/ic_signal_airplane_disable.xml
@@ -20,8 +20,7 @@
android:height="48dp"
android:width="48dp"
android:viewportHeight="48"
- android:viewportWidth="48"
- android:tint="?android:attr/colorControlNormal" >
+ android:viewportWidth="48" >
<group
android:name="ic_signal_airplane"
android:translateX="21.9995"
diff --git a/packages/SystemUI/res/drawable/ic_signal_airplane_disable_animation.xml b/packages/SystemUI/res/drawable/ic_signal_airplane_disable_animation.xml
index 4fe585c..56ae4aa 100644
--- a/packages/SystemUI/res/drawable/ic_signal_airplane_disable_animation.xml
+++ b/packages/SystemUI/res/drawable/ic_signal_airplane_disable_animation.xml
@@ -17,9 +17,6 @@
<animated-vector xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@drawable/ic_signal_airplane_disable" >
<target
- android:name="root"
- android:animation="@anim/ic_signal_airplane_disable_animation_root" />
- <target
android:name="mask"
android:animation="@anim/ic_signal_airplane_disable_animation_mask" />
<target
diff --git a/packages/SystemUI/res/drawable/ic_signal_airplane_enable.xml b/packages/SystemUI/res/drawable/ic_signal_airplane_enable.xml
index 9987279..b7ac0134 100644
--- a/packages/SystemUI/res/drawable/ic_signal_airplane_enable.xml
+++ b/packages/SystemUI/res/drawable/ic_signal_airplane_enable.xml
@@ -16,12 +16,10 @@
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:name="root"
- android:alpha="0.3"
android:height="48dp"
android:width="48dp"
android:viewportHeight="48"
- android:viewportWidth="48"
- android:tint="?android:attr/colorControlNormal" >
+ android:viewportWidth="48" >
<group
android:name="ic_signal_airplane"
android:translateX="21.9995"
diff --git a/packages/SystemUI/res/drawable/ic_signal_airplane_enable_animation.xml b/packages/SystemUI/res/drawable/ic_signal_airplane_enable_animation.xml
index d64b199..87dfba9 100644
--- a/packages/SystemUI/res/drawable/ic_signal_airplane_enable_animation.xml
+++ b/packages/SystemUI/res/drawable/ic_signal_airplane_enable_animation.xml
@@ -17,9 +17,6 @@
<animated-vector xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@drawable/ic_signal_airplane_enable" >
<target
- android:name="root"
- android:animation="@anim/ic_signal_airplane_enable_animation_root" />
- <target
android:name="ic_signal_airplane"
android:animation="@anim/ic_signal_airplane_enable_animation_ic_signal_airplane" />
<target
diff --git a/packages/SystemUI/res/drawable/ic_signal_flashlight_disable.xml b/packages/SystemUI/res/drawable/ic_signal_flashlight_disable.xml
index 542797a..35844b7 100644
--- a/packages/SystemUI/res/drawable/ic_signal_flashlight_disable.xml
+++ b/packages/SystemUI/res/drawable/ic_signal_flashlight_disable.xml
@@ -20,8 +20,7 @@
android:height="48dp"
android:width="48dp"
android:viewportHeight="48"
- android:viewportWidth="48"
- android:tint="?android:attr/colorControlNormal" >
+ android:viewportWidth="48" >
<group
android:name="ic_signal_flashlight"
android:translateX="21.9995"
diff --git a/packages/SystemUI/res/drawable/ic_signal_flashlight_disable_animation.xml b/packages/SystemUI/res/drawable/ic_signal_flashlight_disable_animation.xml
index 61e5287..e228b7c 100644
--- a/packages/SystemUI/res/drawable/ic_signal_flashlight_disable_animation.xml
+++ b/packages/SystemUI/res/drawable/ic_signal_flashlight_disable_animation.xml
@@ -17,9 +17,6 @@
<animated-vector xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@drawable/ic_signal_flashlight_disable" >
<target
- android:name="root"
- android:animation="@anim/ic_signal_flashlight_disable_animation_root" />
- <target
android:name="mask"
android:animation="@anim/ic_signal_flashlight_disable_animation_mask" />
<target
diff --git a/packages/SystemUI/res/drawable/ic_signal_flashlight_enable.xml b/packages/SystemUI/res/drawable/ic_signal_flashlight_enable.xml
index a5ba05b..c2215f1 100644
--- a/packages/SystemUI/res/drawable/ic_signal_flashlight_enable.xml
+++ b/packages/SystemUI/res/drawable/ic_signal_flashlight_enable.xml
@@ -16,12 +16,10 @@
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:name="root"
- android:alpha="0.3"
android:height="48dp"
android:width="48dp"
android:viewportHeight="48"
- android:viewportWidth="48"
- android:tint="?android:attr/colorControlNormal" >
+ android:viewportWidth="48" >
<group
android:name="ic_signal_flashlight"
android:translateX="21.9995"
diff --git a/packages/SystemUI/res/drawable/ic_signal_flashlight_enable_animation.xml b/packages/SystemUI/res/drawable/ic_signal_flashlight_enable_animation.xml
index 4bd9188..220c65e 100644
--- a/packages/SystemUI/res/drawable/ic_signal_flashlight_enable_animation.xml
+++ b/packages/SystemUI/res/drawable/ic_signal_flashlight_enable_animation.xml
@@ -17,9 +17,6 @@
<animated-vector xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@drawable/ic_signal_flashlight_enable" >
<target
- android:name="root"
- android:animation="@anim/ic_signal_flashlight_enable_animation_root" />
- <target
android:name="mask"
android:animation="@anim/ic_signal_flashlight_enable_animation_mask" />
<target
diff --git a/packages/SystemUI/res/drawable/ic_signal_location_disable.xml b/packages/SystemUI/res/drawable/ic_signal_location_disable.xml
index e36f270..439851d 100644
--- a/packages/SystemUI/res/drawable/ic_signal_location_disable.xml
+++ b/packages/SystemUI/res/drawable/ic_signal_location_disable.xml
@@ -20,8 +20,7 @@
android:height="48dp"
android:width="48dp"
android:viewportHeight="48"
- android:viewportWidth="48"
- android:tint="?android:attr/colorControlNormal" >
+ android:viewportWidth="48" >
<group
android:name="ic_signal_location"
android:translateX="21.9995"
diff --git a/packages/SystemUI/res/drawable/ic_signal_location_disable_animation.xml b/packages/SystemUI/res/drawable/ic_signal_location_disable_animation.xml
index a598b2d..0e9d1cb 100644
--- a/packages/SystemUI/res/drawable/ic_signal_location_disable_animation.xml
+++ b/packages/SystemUI/res/drawable/ic_signal_location_disable_animation.xml
@@ -17,9 +17,6 @@
<animated-vector xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@drawable/ic_signal_location_disable" >
<target
- android:name="root"
- android:animation="@anim/ic_signal_location_disable_animation_root" />
- <target
android:name="mask"
android:animation="@anim/ic_signal_location_disable_animation_mask" />
<target
diff --git a/packages/SystemUI/res/drawable/ic_signal_location_enable.xml b/packages/SystemUI/res/drawable/ic_signal_location_enable.xml
index 46a72bc..d4b8673 100644
--- a/packages/SystemUI/res/drawable/ic_signal_location_enable.xml
+++ b/packages/SystemUI/res/drawable/ic_signal_location_enable.xml
@@ -16,12 +16,10 @@
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:name="root"
- android:alpha="0.3"
android:height="48dp"
android:width="48dp"
android:viewportHeight="48"
- android:viewportWidth="48"
- android:tint="?android:attr/colorControlNormal" >
+ android:viewportWidth="48" >
<group
android:name="ic_signal_location"
android:translateX="21.9995"
diff --git a/packages/SystemUI/res/drawable/ic_signal_location_enable_animation.xml b/packages/SystemUI/res/drawable/ic_signal_location_enable_animation.xml
index 127af29..9f1d917 100644
--- a/packages/SystemUI/res/drawable/ic_signal_location_enable_animation.xml
+++ b/packages/SystemUI/res/drawable/ic_signal_location_enable_animation.xml
@@ -17,9 +17,6 @@
<animated-vector xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@drawable/ic_signal_location_enable" >
<target
- android:name="root"
- android:animation="@anim/ic_signal_location_enable_animation_root" />
- <target
android:name="mask"
android:animation="@anim/ic_signal_location_enable_animation_mask" />
<target
diff --git a/packages/SystemUI/res/drawable/ic_signal_workmode_disable_animation.xml b/packages/SystemUI/res/drawable/ic_signal_workmode_disable_animation.xml
index a15a127..9c23126 100644
--- a/packages/SystemUI/res/drawable/ic_signal_workmode_disable_animation.xml
+++ b/packages/SystemUI/res/drawable/ic_signal_workmode_disable_animation.xml
@@ -17,9 +17,6 @@
<animated-vector xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@drawable/ic_signal_workmode_disable" >
<target
- android:name="root"
- android:animation="@anim/ic_signal_workmode_disable_animation_root" />
- <target
android:name="mask"
android:animation="@anim/ic_signal_workmode_disable_animation_mask" />
<target
diff --git a/packages/SystemUI/res/drawable/ic_signal_workmode_enable.xml b/packages/SystemUI/res/drawable/ic_signal_workmode_enable.xml
index ad14505..f962594 100644
--- a/packages/SystemUI/res/drawable/ic_signal_workmode_enable.xml
+++ b/packages/SystemUI/res/drawable/ic_signal_workmode_enable.xml
@@ -16,7 +16,6 @@
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:name="root"
- android:alpha="0.3"
android:height="42dp"
android:width="42dp"
android:viewportHeight="42"
diff --git a/packages/SystemUI/res/drawable/ic_signal_workmode_enable_animation.xml b/packages/SystemUI/res/drawable/ic_signal_workmode_enable_animation.xml
index 41d2b42..04ddfad 100644
--- a/packages/SystemUI/res/drawable/ic_signal_workmode_enable_animation.xml
+++ b/packages/SystemUI/res/drawable/ic_signal_workmode_enable_animation.xml
@@ -17,9 +17,6 @@
<animated-vector xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@drawable/ic_signal_workmode_enable" >
<target
- android:name="root"
- android:animation="@anim/ic_signal_workmode_enable_animation_root" />
- <target
android:name="ic_signal_briefcase"
android:animation="@anim/ic_signal_workmode_enable_animation_ic_signal_briefcase" />
<target
diff --git a/packages/SystemUI/res/drawable/minor_a_b.xml b/packages/SystemUI/res/drawable/minor_a_b.xml
index 0622aac..4bb330c 100644
--- a/packages/SystemUI/res/drawable/minor_a_b.xml
+++ b/packages/SystemUI/res/drawable/minor_a_b.xml
@@ -17,12 +17,10 @@
<vector
xmlns:android="http://schemas.android.com/apk/res/android"
android:name="minor_a_b"
- android:alpha="0.3"
android:width="16dp"
android:viewportWidth="16"
android:height="8dp"
- android:viewportHeight="8"
- android:tint="?android:attr/colorControlNormal" >
+ android:viewportHeight="8" >
<group
android:name="dot_02"
android:translateX="3.25"
diff --git a/packages/SystemUI/res/drawable/minor_b_a.xml b/packages/SystemUI/res/drawable/minor_b_a.xml
index ecb4341..f61deec 100644
--- a/packages/SystemUI/res/drawable/minor_b_a.xml
+++ b/packages/SystemUI/res/drawable/minor_b_a.xml
@@ -17,12 +17,10 @@
<vector
xmlns:android="http://schemas.android.com/apk/res/android"
android:name="minor_b_a"
- android:alpha="0.3"
android:width="16dp"
android:viewportWidth="16"
android:height="8dp"
- android:viewportHeight="8"
- android:tint="?android:attr/colorControlNormal" >
+ android:viewportHeight="8" >
<group
android:name="dot_02"
android:translateX="8"
diff --git a/packages/SystemUI/res/drawable/minor_b_c.xml b/packages/SystemUI/res/drawable/minor_b_c.xml
index 7f59e34..867af6d 100644
--- a/packages/SystemUI/res/drawable/minor_b_c.xml
+++ b/packages/SystemUI/res/drawable/minor_b_c.xml
@@ -17,12 +17,10 @@
<vector
xmlns:android="http://schemas.android.com/apk/res/android"
android:name="minor_b_c"
- android:alpha="0.3"
android:width="16dp"
android:viewportWidth="16"
android:height="8dp"
- android:viewportHeight="8"
- android:tint="?android:attr/colorControlNormal" >
+ android:viewportHeight="8" >
<group
android:name="dot_02"
android:translateX="8"
diff --git a/packages/SystemUI/res/drawable/minor_c_b.xml b/packages/SystemUI/res/drawable/minor_c_b.xml
index 97309bc..b2e33cf 100644
--- a/packages/SystemUI/res/drawable/minor_c_b.xml
+++ b/packages/SystemUI/res/drawable/minor_c_b.xml
@@ -17,12 +17,10 @@
<vector
xmlns:android="http://schemas.android.com/apk/res/android"
android:name="minor_c_b"
- android:alpha="0.3"
android:width="16dp"
android:viewportWidth="16"
android:height="8dp"
- android:viewportHeight="8"
- android:tint="?android:attr/colorControlNormal" >
+ android:viewportHeight="8" >
<group
android:name="dot_02"
android:translateX="12.75"
diff --git a/packages/SystemUI/res/drawable/qs_dual_tile_caret.xml b/packages/SystemUI/res/drawable/qs_dual_tile_caret.xml
new file mode 100644
index 0000000..0b2bd22
--- /dev/null
+++ b/packages/SystemUI/res/drawable/qs_dual_tile_caret.xml
@@ -0,0 +1,25 @@
+<!--
+Copyright (C) 2014 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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24.0dp"
+ android:height="24.0dp"
+ android:viewportWidth="48.0"
+ android:viewportHeight="48.0">
+
+ <path
+ android:fillColor="#FFFFFFFF"
+ android:pathData="M14.0,20.0l10.0,10.0 10.0,-10.0z"/>
+</vector>
diff --git a/packages/SystemUI/res/drawable/qs_ic_wifi_lock.xml b/packages/SystemUI/res/drawable/qs_ic_wifi_lock.xml
index 2ac223b..b7da30b 100644
--- a/packages/SystemUI/res/drawable/qs_ic_wifi_lock.xml
+++ b/packages/SystemUI/res/drawable/qs_ic_wifi_lock.xml
@@ -17,7 +17,8 @@
android:width="24.0dp"
android:height="24.0dp"
android:viewportWidth="72.0"
- android:viewportHeight="72.0">
+ android:viewportHeight="72.0"
+ android:tint="?android:attr/textColorPrimary">
<group
android:translateX="52.0"
android:translateY="42.0" >
diff --git a/packages/SystemUI/res/drawable/recents_grid_task_view_focus_frame_background.xml b/packages/SystemUI/res/drawable/recents_grid_task_view_focus_frame_background.xml
index a85beb8..ea03a50 100644
--- a/packages/SystemUI/res/drawable/recents_grid_task_view_focus_frame_background.xml
+++ b/packages/SystemUI/res/drawable/recents_grid_task_view_focus_frame_background.xml
@@ -15,5 +15,5 @@
-->
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#61FFFFFF" />
- <corners android:radius="8dp"/>
+ <corners android:radius="@dimen/recents_grid_task_view_rounded_corners_radius"/>
</shape>
\ No newline at end of file
diff --git a/packages/SystemUI/res/drawable/stat_sys_managed_profile_disable_animation.xml b/packages/SystemUI/res/drawable/stat_sys_managed_profile_disable_animation.xml
index c6a2fdd..1e41a31 100644
--- a/packages/SystemUI/res/drawable/stat_sys_managed_profile_disable_animation.xml
+++ b/packages/SystemUI/res/drawable/stat_sys_managed_profile_disable_animation.xml
@@ -16,7 +16,6 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="27.0dp"
android:height="22.0dp"
- android:alpha="0.3"
android:viewportWidth="27.0"
android:viewportHeight="22.0">
<clip-path
diff --git a/packages/SystemUI/res/layout/qs_customize_tile_frame.xml b/packages/SystemUI/res/layout/qs_customize_tile_frame.xml
index aaa84fd..ff55f99 100644
--- a/packages/SystemUI/res/layout/qs_customize_tile_frame.xml
+++ b/packages/SystemUI/res/layout/qs_customize_tile_frame.xml
@@ -18,7 +18,8 @@
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="wrap_content"
- android:layout_width="wrap_content"
+ android:layout_width="match_parent"
android:paddingStart="8dp"
android:paddingEnd="8dp"
- android:paddingBottom="16dp" />
+ android:paddingTop="8dp"
+ android:gravity="center" />
diff --git a/packages/SystemUI/res/layout/qs_detail.xml b/packages/SystemUI/res/layout/qs_detail.xml
index 50ee64a..25d5226 100644
--- a/packages/SystemUI/res/layout/qs_detail.xml
+++ b/packages/SystemUI/res/layout/qs_detail.xml
@@ -20,10 +20,10 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/qs_detail_background"
- android:paddingBottom="8dp"
android:clickable="true"
- android:visibility="invisible"
- android:orientation="vertical">
+ android:orientation="vertical"
+ android:paddingBottom="8dp"
+ android:visibility="invisible">
<com.android.systemui.ResizingSpace
android:layout_width="match_parent"
@@ -33,17 +33,16 @@
android:id="@+id/qs_detail_header"
layout="@layout/qs_detail_header"
android:layout_width="match_parent"
- android:layout_height="wrap_content" />
+ android:layout_height="wrap_content"
+ />
<com.android.systemui.statusbar.AlphaOptimizedImageView
android:id="@+id/qs_detail_header_progress"
- android:src="@drawable/indeterminate_anim"
- android:alpha="0"
- android:background="@color/qs_detail_progress_track"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:scaleType="fitXY"
- android:translationY="8dp"
+ android:alpha="0"
+ android:background="@color/qs_detail_progress_track"
+ android:src="@drawable/indeterminate_anim"
/>
<com.android.systemui.qs.NonInterceptingScrollView
@@ -51,12 +50,13 @@
android:layout_height="0dp"
android:layout_weight="1"
android:fillViewport="true">
+
<FrameLayout
android:id="@android:id/content"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</com.android.systemui.qs.NonInterceptingScrollView>
- <include layout="@layout/qs_detail_buttons" />
+ <include layout="@layout/qs_detail_buttons"/>
</com.android.systemui.qs.QSDetail>
diff --git a/packages/SystemUI/res/layout/qs_detail_item.xml b/packages/SystemUI/res/layout/qs_detail_item.xml
index 7876ada..6edf135 100644
--- a/packages/SystemUI/res/layout/qs_detail_item.xml
+++ b/packages/SystemUI/res/layout/qs_detail_item.xml
@@ -29,7 +29,8 @@
android:layout_width="@dimen/qs_detail_item_icon_size"
android:layout_height="@dimen/qs_detail_item_icon_size"
android:layout_marginStart="@dimen/qs_detail_item_icon_marginStart"
- android:layout_marginEnd="@dimen/qs_detail_item_icon_marginEnd" />
+ android:layout_marginEnd="@dimen/qs_detail_item_icon_marginEnd"
+ android:tint="?android:attr/textColorPrimary"/>
<LinearLayout
android:layout_width="0dp"
@@ -62,6 +63,7 @@
android:focusable="true"
android:scaleType="center"
android:contentDescription="@*android:string/media_route_controller_disconnect"
+ android:tint="?android:attr/textColorPrimary"
android:src="@drawable/ic_qs_cancel" />
</LinearLayout>
diff --git a/packages/SystemUI/res/layout/qs_detail_items.xml b/packages/SystemUI/res/layout/qs_detail_items.xml
index 9a7e1b6..b9cdf28 100644
--- a/packages/SystemUI/res/layout/qs_detail_items.xml
+++ b/packages/SystemUI/res/layout/qs_detail_items.xml
@@ -43,7 +43,8 @@
<ImageView
android:id="@android:id/icon"
android:layout_width="56dp"
- android:layout_height="56dp"/>
+ android:layout_height="56dp"
+ android:tint="?android:attr/textColorSecondary" />
<TextView
android:id="@android:id/title"
diff --git a/packages/SystemUI/res/layout/qs_page_indicator.xml b/packages/SystemUI/res/layout/qs_page_indicator.xml
new file mode 100644
index 0000000..02bd31a
--- /dev/null
+++ b/packages/SystemUI/res/layout/qs_page_indicator.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2016 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.
+-->
+<com.android.systemui.qs.PageIndicator
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/page_indicator"
+ android:layout_width="match_parent"
+ android:layout_height="48dp"
+ android:layout_gravity="center"
+ android:layout_marginTop="40dp"
+ android:layout_marginBottom="24dp"
+ android:focusable="true"
+ android:gravity="center"
+ android:importantForAccessibility="yes"
+ android:visibility="gone"/>
\ No newline at end of file
diff --git a/packages/SystemUI/res/layout/qs_paged_tile_layout.xml b/packages/SystemUI/res/layout/qs_paged_tile_layout.xml
index 8b6060f..8ff1d1e 100644
--- a/packages/SystemUI/res/layout/qs_paged_tile_layout.xml
+++ b/packages/SystemUI/res/layout/qs_paged_tile_layout.xml
@@ -28,15 +28,6 @@
android:layout_height="48dp"
android:layout_gravity="bottom">
- <com.android.systemui.qs.PageIndicator
- android:id="@+id/page_indicator"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_gravity="center"
- android:gravity="center"
- android:importantForAccessibility="yes"
- android:focusable="true" />
-
</FrameLayout>
</com.android.systemui.qs.PagedTileLayout>
diff --git a/packages/SystemUI/res/layout/qs_panel.xml b/packages/SystemUI/res/layout/qs_panel.xml
index 9e0a6fe..895185b 100644
--- a/packages/SystemUI/res/layout/qs_panel.xml
+++ b/packages/SystemUI/res/layout/qs_panel.xml
@@ -26,10 +26,9 @@
<com.android.systemui.qs.QSPanel
android:id="@+id/quick_settings_panel"
android:background="#0000"
- android:layout_marginTop="80dp"
+ android:layout_marginTop="52dp"
android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:paddingBottom="8dp" />
+ android:layout_height="wrap_content" />
<include layout="@layout/quick_status_bar_expanded_header" />
diff --git a/packages/SystemUI/res/layout/qs_tile_label.xml b/packages/SystemUI/res/layout/qs_tile_label.xml
index 5b0f0df..a093b87 100644
--- a/packages/SystemUI/res/layout/qs_tile_label.xml
+++ b/packages/SystemUI/res/layout/qs_tile_label.xml
@@ -18,11 +18,12 @@
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:orientation="horizontal">
+ android:orientation="horizontal"
+ android:paddingTop="16dp">
<TextView android:id="@+id/tile_label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:textColor="?android:attr/textColorSecondary"
+ android:textColor="?android:attr/textColorPrimary"
android:gravity="center_horizontal"
android:minLines="2"
android:padding="0dp"
@@ -36,4 +37,4 @@
android:layout_marginLeft="@dimen/restricted_padlock_pading"
android:scaleType="centerInside"
android:visibility="gone" />
-</LinearLayout>
\ No newline at end of file
+</LinearLayout>
diff --git a/packages/SystemUI/res/layout/quick_settings_brightness_dialog.xml b/packages/SystemUI/res/layout/quick_settings_brightness_dialog.xml
index 080f553..6988c76 100644
--- a/packages/SystemUI/res/layout/quick_settings_brightness_dialog.xml
+++ b/packages/SystemUI/res/layout/quick_settings_brightness_dialog.xml
@@ -17,6 +17,7 @@
xmlns:systemui="http://schemas.android.com/apk/res-auto"
android:layout_height="48dp"
android:layout_width="match_parent"
+ android:layout_marginBottom="24dp"
android:paddingLeft="16dp"
android:paddingRight="16dp"
style="@style/BrightnessDialogContainer">
diff --git a/packages/SystemUI/res/layout/quick_status_bar_expanded_header.xml b/packages/SystemUI/res/layout/quick_status_bar_expanded_header.xml
index 53acb9f..4122707 100644
--- a/packages/SystemUI/res/layout/quick_status_bar_expanded_header.xml
+++ b/packages/SystemUI/res/layout/quick_status_bar_expanded_header.xml
@@ -23,30 +23,35 @@
android:layout_width="match_parent"
android:layout_height="@dimen/status_bar_header_height"
android:layout_gravity="@integer/notification_panel_layout_gravity"
- android:clipChildren="false"
- android:clipToPadding="false"
android:baselineAligned="false"
android:clickable="false"
+ android:clipChildren="false"
+ android:clipToPadding="false"
+ android:paddingTop="0dp"
+ android:paddingEnd="0dp"
+ android:paddingStart="0dp"
>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="48dp"
- android:gravity="center"
+ android:layout_alignParentEnd="true"
android:clipChildren="false"
android:clipToPadding="false"
- android:orientation="horizontal"
- android:layout_alignParentEnd="true"
- android:layout_marginTop="4dp"
- android:layout_marginEnd="12dp">
+ android:gravity="center"
+ android:paddingEnd="4dp"
+ android:orientation="horizontal">
- <com.android.systemui.statusbar.phone.MultiUserSwitch android:id="@+id/multi_user_switch"
+ <com.android.systemui.statusbar.phone.MultiUserSwitch
+ android:id="@+id/multi_user_switch"
android:layout_width="48dp"
android:layout_height="48dp"
android:layout_alignParentEnd="true"
- android:focusable="true"
- android:background="@drawable/ripple_drawable" >
- <ImageView android:id="@+id/multi_user_avatar"
+ android:background="@drawable/ripple_drawable"
+ android:focusable="true">
+
+ <ImageView
+ android:id="@+id/multi_user_avatar"
android:layout_width="@dimen/multi_user_avatar_expanded_size"
android:layout_height="@dimen/multi_user_avatar_expanded_size"
android:layout_gravity="center"
@@ -57,13 +62,42 @@
android:id="@android:id/edit"
android:layout_width="48dp"
android:layout_height="48dp"
- android:clipToPadding="false"
- android:clickable="true"
- android:focusable="true"
- android:src="@drawable/ic_mode_edit"
android:background="?android:attr/selectableItemBackgroundBorderless"
+ android:clickable="true"
+ android:clipToPadding="false"
android:contentDescription="@string/accessibility_quick_settings_edit"
- android:padding="14dp" />
+ android:focusable="true"
+ android:padding="14dp"
+ android:src="@drawable/ic_mode_edit"
+ android:tint="?android:attr/colorForeground"/>
+
+ <LinearLayout
+ android:id="@+id/system_icons_super_container"
+ android:layout_width="wrap_content"
+ android:layout_height="@dimen/status_bar_header_height"
+ android:layout_alignWithParentIfMissing="true"
+ android:layout_toStartOf="@id/multi_user_switch"
+ android:background="@drawable/ripple_drawable">
+
+ <FrameLayout
+ android:id="@+id/system_icons_container"
+ android:layout_width="wrap_content"
+ android:layout_height="24dp"
+ android:layout_gravity="center_vertical">
+
+ <include layout="@layout/system_icons" />
+ </FrameLayout>
+
+ <TextView
+ android:id="@+id/battery_level"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center_vertical"
+ android:layout_marginStart="@dimen/header_battery_margin_expanded"
+ android:importantForAccessibility="noHideDescendants"
+ android:textColor="?android:attr/textColorPrimary"
+ android:textSize="@dimen/battery_level_text_size"/>
+ </LinearLayout>
<com.android.systemui.statusbar.AlphaOptimizedFrameLayout
android:id="@+id/settings_button_container"
@@ -78,16 +112,18 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/ripple_drawable"
+ android:contentDescription="@string/accessibility_quick_settings_settings"
android:src="@drawable/ic_settings_20dp"
- android:contentDescription="@string/accessibility_quick_settings_settings" />
+ android:tint="?android:attr/colorForeground"/>
+
<com.android.systemui.statusbar.AlphaOptimizedImageView
android:id="@+id/tuner_icon"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingStart="36dp"
- android:alpha="0.3"
- android:visibility="invisible"
- android:src="@drawable/tuner" />
+ android:src="@drawable/tuner"
+ android:tint="?android:attr/textColorTertiary"
+ android:visibility="invisible"/>
</com.android.systemui.statusbar.AlphaOptimizedFrameLayout>
@@ -106,23 +142,26 @@
<TextView
android:id="@+id/header_emergency_calls_only"
- android:layout_height="wrap_content"
android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
- android:paddingStart="16dp"
+ android:focusable="true"
+ android:gravity="center_vertical"
android:paddingEnd="16dp"
android:paddingTop="6dp"
- android:visibility="gone"
- android:textAppearance="@style/TextAppearance.StatusBar.Expanded.EmergencyCallsOnly"
- android:text="@*android:string/emergency_calls_only"
android:singleLine="true"
- android:gravity="center_vertical"
- android:focusable="true" />
+ android:text="@*android:string/emergency_calls_only"
+ android:textAppearance="@style/TextAppearance.StatusBar.Expanded.EmergencyCallsOnly"
+ android:visibility="gone"/>
<include
android:id="@+id/date_time_alarm_group"
layout="@layout/status_bar_alarm_group"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginStart="16dp"
+ android:layout_marginTop="12dp"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true" />
@@ -130,38 +169,41 @@
android:id="@+id/quick_qs_panel"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:layout_marginTop="52dp"
- android:layout_marginStart="12dp"
- android:layout_marginEnd="12dp"
android:layout_alignParentEnd="true"
+ android:layout_marginTop="54dp"
+ android:layout_marginBottom="24dp"
+ android:layout_alignParentTop="true"
+ android:accessibilityTraversalAfter="@+id/date_time_group"
+ android:accessibilityTraversalBefore="@id/expand_indicator"
android:clipChildren="false"
android:clipToPadding="false"
- android:importantForAccessibility="yes"
+ android:layout_marginStart="16dp"
+ android:layout_marginEnd="16dp"
android:focusable="true"
- android:accessibilityTraversalAfter="@+id/date_time_group"
- android:accessibilityTraversalBefore="@id/expand_indicator" />
+ android:importantForAccessibility="yes"
+ android:paddingTop="0dp"/>
<com.android.systemui.statusbar.AlphaOptimizedImageView
android:id="@+id/qs_detail_header_progress"
- android:src="@drawable/indeterminate_anim"
- android:alpha="0"
- android:background="@color/qs_detail_progress_track"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
+ android:alpha="0"
+ android:background="@color/qs_detail_progress_track"
+ android:src="@drawable/indeterminate_anim"
/>
<TextView
android:id="@+id/header_debug_info"
- android:visibility="invisible"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:fontFamily="sans-serif-condensed"
+ android:padding="2dp"
+ android:textColor="#00A040"
android:textSize="11dp"
android:textStyle="bold"
- android:textColor="#00A040"
- android:padding="2dp"
+ android:visibility="invisible"
/>
</com.android.systemui.statusbar.phone.QuickStatusBarHeader>
diff --git a/packages/SystemUI/res/layout/recents_grid_task_view.xml b/packages/SystemUI/res/layout/recents_grid_task_view.xml
index 53bec70..1c9b9ac 100644
--- a/packages/SystemUI/res/layout/recents_grid_task_view.xml
+++ b/packages/SystemUI/res/layout/recents_grid_task_view.xml
@@ -18,7 +18,7 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:focusable="true">
- <com.android.systemui.recents.views.TaskViewThumbnail
+ <com.android.systemui.recents.views.grid.GridTaskViewThumbnail
android:id="@+id/task_view_thumbnail"
android:layout_width="match_parent"
android:layout_height="match_parent" />
diff --git a/packages/SystemUI/res/layout/split_clock_view.xml b/packages/SystemUI/res/layout/split_clock_view.xml
index ae5136f..8198f03 100644
--- a/packages/SystemUI/res/layout/split_clock_view.xml
+++ b/packages/SystemUI/res/layout/split_clock_view.xml
@@ -28,6 +28,7 @@
android:singleLine="true"
android:textAppearance="@style/TextAppearance.StatusBar.Expanded.Clock"
android:textSize="@dimen/qs_time_collapsed_size"
+ android:textColor="?android:attr/textColorPrimary"
/>
<TextClock
android:id="@+id/am_pm_view"
@@ -36,6 +37,7 @@
android:singleLine="true"
android:textAppearance="@style/TextAppearance.StatusBar.Expanded.Clock"
android:textSize="@dimen/qs_time_collapsed_size"
+ android:textColor="?android:attr/textColorPrimary"
android:importantForAccessibility="no"
/>
@@ -44,8 +46,9 @@
android:id="@+id/empty_time_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:visibility="invisible"
+ android:visibility="gone"
android:singleLine="true"
android:textAppearance="@style/TextAppearance.StatusBar.Expanded.Clock"
+ android:textColor="?android:attr/textColorPrimary"
/>
</com.android.systemui.statusbar.policy.SplitClockView>
diff --git a/packages/SystemUI/res/layout/status_bar.xml b/packages/SystemUI/res/layout/status_bar.xml
index 6784254..63af3e0 100644
--- a/packages/SystemUI/res/layout/status_bar.xml
+++ b/packages/SystemUI/res/layout/status_bar.xml
@@ -42,7 +42,7 @@
<LinearLayout android:id="@+id/status_bar_contents"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:paddingStart="@dimen/status_bar_padding_start"
+ android:paddingStart="6dp"
android:paddingEnd="8dp"
android:orientation="horizontal"
>
diff --git a/packages/SystemUI/res/layout/status_bar_alarm_group.xml b/packages/SystemUI/res/layout/status_bar_alarm_group.xml
index a02e9af..745320e 100644
--- a/packages/SystemUI/res/layout/status_bar_alarm_group.xml
+++ b/packages/SystemUI/res/layout/status_bar_alarm_group.xml
@@ -41,6 +41,7 @@
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:src="@drawable/ic_access_alarms_small"
+ android:tint="?android:attr/textColorPrimary"
android:paddingStart="6dp"
android:gravity="center"
android:visibility="gone" />
diff --git a/packages/SystemUI/res/layout/zen_mode_condition.xml b/packages/SystemUI/res/layout/zen_mode_condition.xml
index ca4f727..2b4a0f5 100644
--- a/packages/SystemUI/res/layout/zen_mode_condition.xml
+++ b/packages/SystemUI/res/layout/zen_mode_condition.xml
@@ -63,6 +63,7 @@
android:scaleType="center"
android:layout_toStartOf="@android:id/button2"
android:contentDescription="@string/accessibility_quick_settings_less_time"
+ android:tint="?android:attr/textColorPrimary"
android:src="@drawable/ic_qs_minus" />
<ImageView
@@ -75,6 +76,7 @@
android:scaleType="center"
android:layout_centerVertical="true"
android:contentDescription="@string/accessibility_quick_settings_more_time"
+ android:tint="?android:attr/textColorPrimary"
android:src="@drawable/ic_qs_plus" />
</RelativeLayout>
\ No newline at end of file
diff --git a/packages/SystemUI/res/values-af/strings.xml b/packages/SystemUI/res/values-af/strings.xml
index 2d10668..9744eb3 100644
--- a/packages/SystemUI/res/values-af/strings.xml
+++ b/packages/SystemUI/res/values-af/strings.xml
@@ -321,6 +321,12 @@
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> waarskuwing"</string>
<string name="quick_settings_work_mode_label" msgid="6244915274350490429">"Werkmodus"</string>
<string name="quick_settings_night_display_label" msgid="3577098011487644395">"Aandbeligting"</string>
+ <!-- no translation found for quick_settings_nfc_label (9012153754816969325) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_off (6883274004315134333) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_on (6680317193676884311) -->
+ <skip />
<string name="recents_empty_message" msgid="808480104164008572">"Geen onlangse items nie"</string>
<string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Jy het alles toegemaak"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"Programinligting"</string>
@@ -334,6 +340,16 @@
<string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Verdeel horisontaal"</string>
<string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Verdeel vertikaal"</string>
<string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Verdeel gepasmaak"</string>
+ <!-- no translation found for recents_accessibility_dismissed (2354459747918667050) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_open (1651449827614876864) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_top (9056056469282256287) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_left (8987144699630620019) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_right (275069779299592867) -->
+ <skip />
<string-array name="recents_blacklist_array">
</string-array>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"Gelaai"</string>
@@ -414,20 +430,24 @@
<string name="disconnect_vpn" msgid="1324915059568548655">"Ontkoppel VPN"</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Jou toestel word bestuur deur <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
<string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> gebruik <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> om jou toestel te bestuur."</string>
- <string name="monitoring_description_do_body" msgid="6764108354701060766">"Jou administrateur kan instellings, korporatiewe toegang, programme, data wat met jou toestel geassosieer word en jou toestel se ligginginligting monitor en bestuur."</string>
+ <!-- no translation found for monitoring_description_do_body (3639594537660975895) -->
+ <skip />
<string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
<string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Kom meer te wete"</string>
<string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Jy is gekoppel aan <xliff:g id="VPN_APP">%1$s</xliff:g>, wat jou netwerkaktiwiteit, insluitend e-posse, programme en webwerwe, kan monitor."</string>
<string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
<string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Maak VPN-instellings oop"</string>
- <string name="monitoring_description_network_logging" msgid="3901006351911787915">"Jou administrateur het netwerkloglêers aangeskakel wat verkeer op jou toestel monitor.\n\nKontak jou administrateur vir meer inligting."</string>
+ <!-- no translation found for monitoring_description_network_logging (7223505523384076027) -->
+ <skip />
<string name="monitoring_description_vpn" msgid="4445150119515393526">"Jy het \'n program toestemming gegee om \'n VPN-verbinding op te stel.\n\nHierdie program kan jou toestel- en netwerkaktiwiteit monitor, insluitend e-posse, programme en webwerwe."</string>
- <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Jou werkprofiel word deur <xliff:g id="ORGANIZATION">%1$s</xliff:g> bestuur.\n\nJou administrateur is in staat om jou netwerkaktiwiteit, insluitend e-posse, programme en webwerwe, te monitor.\n\nKontak jou administrateur vir meer inligting.\n\nJy is ook aan \'n VPN gekoppel wat jou netwerkaktiwiteit kan monitor."</string>
+ <!-- no translation found for monitoring_description_vpn_profile_owned (2958019119161161530) -->
+ <skip />
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Jy is gekoppel aan <xliff:g id="APPLICATION">%1$s</xliff:g>, wat jou netwerkaktiwiteit, insluitend e-posse, programme en webwerwe, kan monitor."</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"Jy is gekoppel aan <xliff:g id="APPLICATION">%1$s</xliff:g>, wat jou persoonlike netwerkaktiwiteit, insluitend e-posse, programme en webwerwe, kan monitor."</string>
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Jy is gekoppel aan <xliff:g id="APPLICATION">%1$s</xliff:g>, wat jou persoonlike netwerkaktiwiteit, insluitend e-posse, programme en webwerwe, kan monitor."</string>
- <string name="monitoring_description_app_work" msgid="1754325860918060897">"Jou werkprofiel word deur <xliff:g id="ORGANIZATION">%1$s</xliff:g> bestuur. Dit is gekoppel aan <xliff:g id="APPLICATION">%2$s</xliff:g>, wat jou werknetwerkaktiwiteit, insluitend e-posse, programme en webwerwe, kan monitor.\n\nKontak jou administrateur vir meer inligting."</string>
+ <!-- no translation found for monitoring_description_app_work (7777228449969022305) -->
+ <skip />
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Jou werkprofiel word deur <xliff:g id="ORGANIZATION">%1$s</xliff:g> bestuur. Dit is gekoppel aan <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, wat jou werknetwerkaktiwiteit, insluitend e-posse, programme en webwerwe, kan monitor.\n\nJy is ook gekoppel aan <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, wat jou persoonlike netwerkaktiwiteit kan monitor."</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Toestel sal gesluit bly totdat jy dit handmatig ontsluit"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"Kry kennisgewings vinniger"</string>
diff --git a/packages/SystemUI/res/values-am/strings.xml b/packages/SystemUI/res/values-am/strings.xml
index a45dd18..b3354f1 100644
--- a/packages/SystemUI/res/values-am/strings.xml
+++ b/packages/SystemUI/res/values-am/strings.xml
@@ -321,6 +321,12 @@
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"የ<xliff:g id="DATA_LIMIT">%s</xliff:g> ማስጠንቀቂያ"</string>
<string name="quick_settings_work_mode_label" msgid="6244915274350490429">"የሥራ ሁነታ"</string>
<string name="quick_settings_night_display_label" msgid="3577098011487644395">"የምሽት ብርሃን"</string>
+ <!-- no translation found for quick_settings_nfc_label (9012153754816969325) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_off (6883274004315134333) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_on (6680317193676884311) -->
+ <skip />
<string name="recents_empty_message" msgid="808480104164008572">"ምንም የቅርብ ጊዜ ንጥሎች የሉም"</string>
<string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"ሁሉንም ነገር አጽድተዋል"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"የመተግበሪያ መረጃ"</string>
@@ -334,6 +340,16 @@
<string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"አግድም ክፈል"</string>
<string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"ቁልቁል ክፈል"</string>
<string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"በብጁ ክፈል"</string>
+ <!-- no translation found for recents_accessibility_dismissed (2354459747918667050) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_open (1651449827614876864) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_top (9056056469282256287) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_left (8987144699630620019) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_right (275069779299592867) -->
+ <skip />
<string-array name="recents_blacklist_array">
</string-array>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"ባትሪ ሞልቷል"</string>
@@ -414,20 +430,24 @@
<string name="disconnect_vpn" msgid="1324915059568548655">"የVPN ግንኙነት አቋርጥ"</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"የእርስዎ መሣሪያ በ<xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g> ነው የሚቀናበረው።"</string>
<string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> የእርስዎን መሣሪያ ለማቀናበር <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g>ን ይጠቀማል።"</string>
- <string name="monitoring_description_do_body" msgid="6764108354701060766">"የእርስዎ አስተዳዳሪ ከዚህ መሣሪያ ጋር የተጎዳኙ ቅንብሮችን፣ የኮርፖሬት መዳረሻን፣ መተግበሪያዎችን፣ እና የመሣሪያዎን አካባቢ መከታተል እና ማቀናበር ይችላሉ።"</string>
+ <!-- no translation found for monitoring_description_do_body (3639594537660975895) -->
+ <skip />
<string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
<string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"የበለጠ ለመረዳት"</string>
<string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"እርስዎ ኢሜይሎችን፣ መተግበሪያዎችን እና ድር ጣቢያዎችንም ጨምሮ የግል የአውታረ መረብ እንቅስቃሴዎን መከታተል ከሚችለው <xliff:g id="VPN_APP">%1$s</xliff:g> ጋር ተገናኝተዋል።"</string>
<string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
<string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"የVPN ቅንብሮችን ይክፈቱ"</string>
- <string name="monitoring_description_network_logging" msgid="3901006351911787915">"የእርስዎ አስተዳዳሪ የአውታረ መረብ ምዝግብ ማስታወሻ መያዝን አብርተዋል፣ ይህም በመሣሪያዎ ላይ ያለው ትራፊክ ይከታተላል።\n\nተጨማሪ መረጃ ለማግኘት አስተዳዳሪዎን ያነጋግሩ።"</string>
+ <!-- no translation found for monitoring_description_network_logging (7223505523384076027) -->
+ <skip />
<string name="monitoring_description_vpn" msgid="4445150119515393526">"አንድ መተግበሪያ የVPN ግንኙነት እንዲያዋቅር ፍቃድ ሰጥተውታል።\n\nይህ መተግበሪያ ኢሜይሎችን፣ መተግበሪያዎችን እና ድር ጣቢያዎችንም ጨምሮ የመሣሪያዎን እና የአውታረ መረብ እንቅስቃሴዎን መከታተል ይችላል።"</string>
- <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"የስራ መገለጫዎ በ<xliff:g id="ORGANIZATION">%1$s</xliff:g> ነው የሚተዳደረው።\n\nየእርስዎ አስተዳዳሪ ቅንብሮችን፣ የኮርፖሬት መዳረሻን፣ መተግበሪያዎችን፣ ከመሣሪያዎ ጋር የተጎዳኘ ውሂብን እና የመሣሪያዎ የአካባቢ መረጃን መከታተል እና ማቀናበር ይችላል።\n\nተጨማሪ መረጃ ለማግኘት አስተዳዳሪዎን ያነጋግሩ።\n\nእንዲሁም የአውታረ መረብ ግንኙነትዎን መከታተል ከሚችል አንድ VPN ጋር ተገናኝተዋል።"</string>
+ <!-- no translation found for monitoring_description_vpn_profile_owned (2958019119161161530) -->
+ <skip />
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"እርስዎ ኢሜይሎችን፣ መተግበሪያዎችን እና ድር ጣቢያዎችንም ጨምሮ የአውታረ መረብ እንቅስቃሴዎን መከታተል ከሚችለው <xliff:g id="APPLICATION">%1$s</xliff:g> ጋር ተገናኝተዋል።"</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"እርስዎ ኢሜይሎችን፣ መተግበሪያዎችን እና ድር ጣቢያዎችንም ጨምሮ የግል የአውታረ መረብ እንቅስቃሴዎን መከታተል ከሚችለው <xliff:g id="APPLICATION">%1$s</xliff:g> ጋር ተገናኝተዋል።"</string>
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"እርስዎ ኢሜይሎችን፣ መተግበሪያዎችን እና ድር ጣቢያዎችንም ጨምሮ የግል የአውታረ መረብ እንቅስቃሴዎን ከሚከታተለው ከ<xliff:g id="APPLICATION">%1$s</xliff:g> ጋር ተገናኝተዋል።"</string>
- <string name="monitoring_description_app_work" msgid="1754325860918060897">"የስራ መገለጫዎ በ<xliff:g id="ORGANIZATION">%1$s</xliff:g> ነው እየተዳደረ ያለው። ኢሜይሎችን፣ መተግበሪያዎችን እና ድር ጣቢያዎችንም ጨምሮ የአውታረ መረብ እንቅስቃሴዎን መከታተል ከሚችለው <xliff:g id="APPLICATION">%2$s</xliff:g> ጋር ተገናኝተዋል።\n\nተጨማሪ መረጃ ለማግኘት አስተዳዳሪዎን ያነጋግሩ።"</string>
+ <!-- no translation found for monitoring_description_app_work (7777228449969022305) -->
+ <skip />
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"የስራ መገለጫዎ በ<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_disabled" msgid="7412534203633528135">"እራስዎ እስኪከፍቱት ድረስ መሣሪያ እንደተቆለፈ ይቆያል"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"ማሳወቂያዎችን ፈጥነው ያግኙ"</string>
diff --git a/packages/SystemUI/res/values-ar/strings.xml b/packages/SystemUI/res/values-ar/strings.xml
index 074f754..1a92e67 100644
--- a/packages/SystemUI/res/values-ar/strings.xml
+++ b/packages/SystemUI/res/values-ar/strings.xml
@@ -329,6 +329,12 @@
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"تحذير <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
<string name="quick_settings_work_mode_label" msgid="6244915274350490429">"وضع العمل"</string>
<string name="quick_settings_night_display_label" msgid="3577098011487644395">"إضاءة ليلية"</string>
+ <!-- no translation found for quick_settings_nfc_label (9012153754816969325) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_off (6883274004315134333) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_on (6680317193676884311) -->
+ <skip />
<string name="recents_empty_message" msgid="808480104164008572">"ليست هناك عناصر تم استخدامها مؤخرًا"</string>
<string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"لقد محوتَ كل شيء"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"معلومات التطبيق"</string>
@@ -342,6 +348,16 @@
<string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"تقسيم أفقي"</string>
<string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"تقسيم رأسي"</string>
<string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"تقسيم مخصص"</string>
+ <!-- no translation found for recents_accessibility_dismissed (2354459747918667050) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_open (1651449827614876864) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_top (9056056469282256287) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_left (8987144699630620019) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_right (275069779299592867) -->
+ <skip />
<string-array name="recents_blacklist_array">
</string-array>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"تم الشحن"</string>
@@ -422,20 +438,24 @@
<string name="disconnect_vpn" msgid="1324915059568548655">"قطع الاتصال بشبكة VPN"</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"تتم إدارة جهازك بواسطة <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
<string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"تستخدم <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> تطبيق <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> لإدارة جهازك."</string>
- <string name="monitoring_description_do_body" msgid="6764108354701060766">"يمكن للمشرف مراقبة الإعدادات وإدارتها والدخول إلى المؤسسة والتطبيقات والبيانات المقترنة بجهازك ومعلومات موقع الجهاز."</string>
+ <!-- no translation found for monitoring_description_do_body (3639594537660975895) -->
+ <skip />
<string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
<string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"مزيد من المعلومات"</string>
<string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"لقد اتصلت بتطبيق <xliff:g id="VPN_APP">%1$s</xliff:g>، الذي يمكن أن يراقب نشاط الشبكة، بما في ذلك رسائل البريد الإلكتروني والتطبيقات والمواقع الإلكترونية."</string>
<string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
<string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"فتح إعدادات الشبكة الظاهرية الخاصة (VPN)"</string>
- <string name="monitoring_description_network_logging" msgid="3901006351911787915">"شغَّل المشرف ميزة تسجيل بيانات الشبكة، والتي يتم من خلالها مراقبة حركة البيانات على جهازك.\n\nللحصول على المزيد من المعلومات، اتصل بالمشرف."</string>
+ <!-- no translation found for monitoring_description_network_logging (7223505523384076027) -->
+ <skip />
<string name="monitoring_description_vpn" msgid="4445150119515393526">"لقد منحت تطبيقًا الإذن لإعداد اتصال شبكة ظاهرية خاصة (VPN).\n\nيمكن لهذا التطبيق مراقبة أنشطتك على الجهاز والشبكة، بما في ذلك الرسائل الإلكترونية والتطبيقات ومواقع الويب."</string>
- <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"تتم إدارة ملفك الشخصي للعمل عن طريق <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nبإمكان المشرف مراقبة أنشطتك على الشبكة، بما في ذلك الرسائل الإلكترونية والتطبيقات ومواقع الويب.\n\nللمزيد من المعلومات، اتصل بالمشرف.\n\nأنت متصل أيضًا بشبكة ظاهرية خاصة (VPN)، يمكنها مراقبة أنشطتك على الشبكة."</string>
+ <!-- no translation found for monitoring_description_vpn_profile_owned (2958019119161161530) -->
+ <skip />
<string name="legacy_vpn_name" msgid="6604123105765737830">"شبكة ظاهرية خاصة"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"أنت متصل بـ <xliff:g id="APPLICATION">%1$s</xliff:g>، الذي يمكنه مراقبة أنشطتك على الشبكة، بما في ذلك الرسائل الإلكترونية والتطبيقات ومواقع الويب."</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"أنت متصل بـ <xliff:g id="APPLICATION">%1$s</xliff:g>، الذي يمكنه مراقبة أنشطتك الشخصية على الشبكة، بما في ذلك الرسائل الإلكترونية والتطبيقات ومواقع الويب."</string>
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"أنت متصل بـ <xliff:g id="APPLICATION">%1$s</xliff:g>، الذي يمكنه مراقبة أنشطتك الشخصية على الشبكة، بما في ذلك الرسائل الإلكترونية والتطبيقات ومواقع الويب."</string>
- <string name="monitoring_description_app_work" msgid="1754325860918060897">"تتم إدارة ملفك الشخصي للعمل عن طريق <xliff:g id="ORGANIZATION">%1$s</xliff:g>. وهذا الملف الشخصي للعمل متصل بـ <xliff:g id="APPLICATION">%2$s</xliff:g>، الذي يمكنه مراقبة أنشطتك على شبكة العمل، بما في ذلك الرسائل الإلكترونية والتطبيقات ومواقع الويب.\n\nللمزيد من المعلومات، اتصل بالمشرف."</string>
+ <!-- no translation found for monitoring_description_app_work (7777228449969022305) -->
+ <skip />
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"تتم إدارة ملفك الشخصي للعمل عن طريق <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_disabled" msgid="7412534203633528135">"سيظل الجهاز مقفلاً إلى أن يتم إلغاء قفله يدويًا"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"الحصول على الإشعارات بشكل أسرع"</string>
diff --git a/packages/SystemUI/res/values-az/strings.xml b/packages/SystemUI/res/values-az/strings.xml
index 7169d54..8950034 100644
--- a/packages/SystemUI/res/values-az/strings.xml
+++ b/packages/SystemUI/res/values-az/strings.xml
@@ -321,6 +321,12 @@
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> xəbərdarlığı"</string>
<string name="quick_settings_work_mode_label" msgid="6244915274350490429">"İş rejimi"</string>
<string name="quick_settings_night_display_label" msgid="3577098011487644395">"Gecə işığı"</string>
+ <!-- no translation found for quick_settings_nfc_label (9012153754816969325) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_off (6883274004315134333) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_on (6680317193676884311) -->
+ <skip />
<string name="recents_empty_message" msgid="808480104164008572">"Son elementlər yoxdur"</string>
<string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Hərşeyi təmizlədiniz"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"Tətbiq haqqında"</string>
@@ -334,6 +340,16 @@
<string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Üfüqi Böl"</string>
<string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Şaquli Böl"</string>
<string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Fərdi Böl"</string>
+ <!-- no translation found for recents_accessibility_dismissed (2354459747918667050) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_open (1651449827614876864) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_top (9056056469282256287) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_left (8987144699630620019) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_right (275069779299592867) -->
+ <skip />
<string-array name="recents_blacklist_array">
</string-array>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"Dolub"</string>
@@ -414,20 +430,24 @@
<string name="disconnect_vpn" msgid="1324915059568548655">"VPN-i bağlantıdan ayırın"</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Cihaz <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g> tərəfindən idarə olunur."</string>
<string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> cihazınızı idarə etmək üçün <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> istifadə edir."</string>
- <string name="monitoring_description_do_body" msgid="6764108354701060766">"Administratorunuz ayarlara, korporativ girişə, tətbiqlərə, cihaz ilə əlaqədar dataya və cihazın məkan məlumatına nəzarət və idarə edə bilər."</string>
+ <!-- no translation found for monitoring_description_do_body (3639594537660975895) -->
+ <skip />
<string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" ("</string>
<string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Ətraflı məlumat"</string>
<string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"<xliff:g id="VPN_APP">%1$s</xliff:g> tətbiqinə qoşulmusunuz və o, e-məktublar, tətbiq və veb saytlar daxil olmaqla şəbəkə fəaliyyətinizə nəzarət edə bilər."</string>
<string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" ("</string>
<string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"VPN Ayarlarını açın"</string>
- <string name="monitoring_description_network_logging" msgid="3901006351911787915">"Admin, cihazdakı trafikə nəzarət edən şəbəkə loqlarını aktiv etdi.\n\nƏtraflı məlumat üçün admin ilə əlaqə saxlayın."</string>
+ <!-- no translation found for monitoring_description_network_logging (7223505523384076027) -->
+ <skip />
<string name="monitoring_description_vpn" msgid="4445150119515393526">"VPN bağlantısı quraşdırmağa icazə vermisiniz.\n\nBu tətbiq cihazınızı və şəbəkə fəaliyyətinizi, həmçinin, e-məktubları, tətbiq və veb saytları izləyə bilər."</string>
- <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Sizin iş profile tərəfindən idarə olunur <xliff:g id="ORGANIZATION">%1$s</xliff:g> . \n\n Sizin administrator e-poçt, apps, və web o cümlədən şəbəkə fəaliyyəti monitorinq qadirdir. \n\n Daha ətraflı məlumat üçün, administratora müraciət. \n\n Siz həmçinin şəbəkə fəaliyyətinə nəzarət edə bilərsiniz bir VPN, bağlı olduğunuz."</string>
+ <!-- no translation found for monitoring_description_vpn_profile_owned (2958019119161161530) -->
+ <skip />
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN (Virtual Şəxsi Şəbəkələr)"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"<xliff:g id="APPLICATION">%1$s</xliff:g> tətbiqinə qoşulmusunuz və o, e-məktublar, tətbiq və veb saytlar daxil olmaqla şəbəkə fəaliyyətinizə nəzarət edə bilər."</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"<xliff:g id="APPLICATION">%1$s</xliff:g> tətbiqinə qoşulmusunuz və o, e-məktublar, tətbiq və veb saytlar daxil olmaqla şəxsi şəbəkə fəaliyyətinizə nəzarət edə bilər."</string>
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"<xliff:g id="APPLICATION">%1$s</xliff:g> tətbiqinə qoşulmusunuz və o, e-məktublar, tətbiq və veb saytlar daxil olmaqla şəxsi şəbəkə fəaliyyətinizə nəzarət edə bilər."</string>
- <string name="monitoring_description_app_work" msgid="1754325860918060897">"İş profiliniz <xliff:g id="ORGANIZATION">%1$s</xliff:g> tərəfindən idarə olunur. <xliff:g id="APPLICATION">%2$s</xliff:g> tətbiqinə qoşuludur və iş şəbəkə fəaliyyətinizə nəzarət edə bilər, bura e-məktubıar, tətbiq və veb saytlar daxildir.\n\nƏtraflı məlumat üçün administratorunuz ilə əlaqə saxlayın."</string>
+ <!-- no translation found for monitoring_description_app_work (7777228449969022305) -->
+ <skip />
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"İş profiliniz <xliff:g id="ORGANIZATION">%1$s</xliff:g> tərəfindən idarə olunur. <xliff:g id="APPLICATION_WORK">%2$s</xliff:g> tətbiqinə qoşuludur və iş şəbəkə fəaliyyətinizi idarə edə bilər, bura e-məktubıar, tətbiq və veb saytlar daxildir\n\nSiz, həmçinin, <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g> tətbiqinə də qoşulsunuz və o, şəxsi şəbəkə fəaliyyətinizə nəzarət edə bilər."</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Device will stay locked until you manually unlock"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"Bildirişləri daha sürətlə əldə 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 465bf70..2313487f 100644
--- a/packages/SystemUI/res/values-b+sr+Latn/strings.xml
+++ b/packages/SystemUI/res/values-b+sr+Latn/strings.xml
@@ -323,6 +323,12 @@
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Upozorenje za <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
<string name="quick_settings_work_mode_label" msgid="6244915274350490429">"Režim rada"</string>
<string name="quick_settings_night_display_label" msgid="3577098011487644395">"Noćno svetlo"</string>
+ <!-- no translation found for quick_settings_nfc_label (9012153754816969325) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_off (6883274004315134333) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_on (6680317193676884311) -->
+ <skip />
<string name="recents_empty_message" msgid="808480104164008572">"Nema nedavnih stavki"</string>
<string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Obrisali ste sve"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"Informacije o aplikaciji"</string>
@@ -336,6 +342,16 @@
<string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Podeli horizontalno"</string>
<string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Podeli vertikalno"</string>
<string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Prilagođeno deljenje"</string>
+ <!-- no translation found for recents_accessibility_dismissed (2354459747918667050) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_open (1651449827614876864) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_top (9056056469282256287) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_left (8987144699630620019) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_right (275069779299592867) -->
+ <skip />
<string-array name="recents_blacklist_array">
</string-array>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"Napunjena je"</string>
@@ -416,20 +432,24 @@
<string name="disconnect_vpn" msgid="1324915059568548655">"Prekini vezu sa VPN-om"</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Uređajem upravlja <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
<string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> koristi <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> za upravljanje uređajem."</string>
- <string name="monitoring_description_do_body" msgid="6764108354701060766">"Administrator može da nadgleda podešavanja, korporativni pristup, aplikacije, podatke povezane sa uređajem i informacije o lokaciji uređaja, kao i da upravlja njima."</string>
+ <!-- no translation found for monitoring_description_do_body (3639594537660975895) -->
+ <skip />
<string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
<string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Saznajte više"</string>
<string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Povezani ste sa aplikacijom <xliff:g id="VPN_APP">%1$s</xliff:g>, koja može da nadgleda aktivnosti na mreži, uključujući imejlove, aplikacije i veb-sajtove."</string>
<string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
<string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Otvorite podešavanja VPN-a"</string>
- <string name="monitoring_description_network_logging" msgid="3901006351911787915">"Administrator je uključio evidentiranje mreže, koje prati saobraćaj na uređaju.\n\nKontaktirajte administratora za više informacija."</string>
+ <!-- no translation found for monitoring_description_network_logging (7223505523384076027) -->
+ <skip />
<string name="monitoring_description_vpn" msgid="4445150119515393526">"Dali ste dozvolu aplikaciji da podešava VPN vezu.\n\nTa aplikacija može da nadgleda aktivnosti na uređaju i mreži, uključujući imejlove, aplikacije i veb-sajtove."</string>
- <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Profilom za Work upravlja <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nAdministrator može da nadgleda aktivnosti na mreži, uključujući imejlove, aplikacije i veb-sajtove.\n\nViše informacija potražite od administratora.\n\nPovezani ste i na VPN, koji može da nadgleda aktivnosti na ličnoj mreži."</string>
+ <!-- no translation found for monitoring_description_vpn_profile_owned (2958019119161161530) -->
+ <skip />
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Povezani ste sa aplikacijom <xliff:g id="APPLICATION">%1$s</xliff:g>, koja može da nadgleda aktivnosti na mreži, uključujući imejlove, aplikacije i veb-sajtove."</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"Povezani ste sa aplikacijom <xliff:g id="APPLICATION">%1$s</xliff:g>, koja može da nadgleda aktivnosti na ličnoj mreži, uključujući imejlove, aplikacije i veb-sajtove."</string>
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Povezani ste sa aplikacijom <xliff:g id="APPLICATION">%1$s</xliff:g>, koja može da nadgleda aktivnosti na ličnoj mreži, uključujući imejlove, aplikacije i veb-sajtove."</string>
- <string name="monitoring_description_app_work" msgid="1754325860918060897">"Profilom za Work upravlja <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Povezan je sa aplikacijom <xliff:g id="APPLICATION">%2$s</xliff:g>, koja može da nadgleda aktivnosti na poslovnoj mreži, uključujući imejlove, aplikacije i veb-sajtove.\n\nViše informacija potražite od administratora."</string>
+ <!-- no translation found for monitoring_description_app_work (7777228449969022305) -->
+ <skip />
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Profilom za Work upravlja <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Povezan je sa aplikacijom <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, koja može da nadgleda aktivnosti na poslovnoj mreži, uključujući imejlove, aplikacije i veb-sajtove.\n\nPovezani ste i sa aplikacijom <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, koja može da nadgleda aktivnosti na ličnoj mreži."</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Uređaj će ostati zaključan dok ga ne otključate ručno"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"Brže dobijajte obaveštenja"</string>
diff --git a/packages/SystemUI/res/values-be/strings.xml b/packages/SystemUI/res/values-be/strings.xml
index ee65b49..083342a 100644
--- a/packages/SystemUI/res/values-be/strings.xml
+++ b/packages/SystemUI/res/values-be/strings.xml
@@ -327,6 +327,12 @@
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Папярэджанне: <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
<string name="quick_settings_work_mode_label" msgid="6244915274350490429">"Рэжым працы"</string>
<string name="quick_settings_night_display_label" msgid="3577098011487644395">"Начная падсветка"</string>
+ <!-- no translation found for quick_settings_nfc_label (9012153754816969325) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_off (6883274004315134333) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_on (6680317193676884311) -->
+ <skip />
<string name="recents_empty_message" msgid="808480104164008572">"Няма нядаўніх элементаў"</string>
<string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Вы ачысцілі усё"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"Звесткі аб праграме"</string>
@@ -340,6 +346,16 @@
<string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Падзяліць гарызантальна"</string>
<string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Падзяліць вертыкальна"</string>
<string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Падзяліць іншым чынам"</string>
+ <!-- no translation found for recents_accessibility_dismissed (2354459747918667050) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_open (1651449827614876864) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_top (9056056469282256287) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_left (8987144699630620019) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_right (275069779299592867) -->
+ <skip />
<string-array name="recents_blacklist_array">
</string-array>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"Зараджаны"</string>
@@ -420,20 +436,24 @@
<string name="disconnect_vpn" msgid="1324915059568548655">"Адлучыць VPN"</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Ваша прылада знаходзіцца пад кіраваннем <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
<string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> выкарыстоўвае <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> для кіравання вашай прыладай."</string>
- <string name="monitoring_description_do_body" msgid="6764108354701060766">"Адміністратар можа маніторыць налады, карп. доступ, прагр., даныя, звяз. з прыл., і звесткі пра месцазн. прылады і кіраваць гэтым."</string>
+ <!-- no translation found for monitoring_description_do_body (3639594537660975895) -->
+ <skip />
<string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
<string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Даведацца больш"</string>
<string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Вы падключаны да праграмы <xliff:g id="VPN_APP">%1$s</xliff:g>, якая можа сачыць за вашай сеткавай дзейнасцю, уключаючы электронную пошту, праграмы і вэб-сайты."</string>
<string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" ,"</string>
<string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Адкрыйце налады VPN"</string>
- <string name="monitoring_description_network_logging" msgid="3901006351911787915">"Ваш адміністратар уключыў вядзенне журнала сеткі, з дапамогай якога адсочваецца трафік на вашай прыладзе.\n\nДля атрымання дадатковай інфармацыі звярніцеся да адміністратара."</string>
+ <!-- no translation found for monitoring_description_network_logging (7223505523384076027) -->
+ <skip />
<string name="monitoring_description_vpn" msgid="4445150119515393526">"Вы далі праграме дазвол на наладжванне злучэння VPN.\n\nГэта праграма можа сачыць за актыўнасцю вашай прылады і вашай сеткавай актыўнасцю, уключаючы электронную пошту, праграмы і вэб-сайты."</string>
- <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Ваш працоўны профіль знаходзіцца пад кіраваннем <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nВаш адміністратар можа сачыць і кіраваць наладамі, доступам да карпаратыўных рэсурсаў, праграмамі, данымі, звязанымі з вашай прыладай, і звесткамі пра месцазнаходжанне прылады.\n\nДля атрымання дадатковай інфармацыі звярніцеся да адміністратара.\n\nВы таксама падключаны да VPN, які можа сачыць за вашай сеткавай актыўнасцю."</string>
+ <!-- no translation found for monitoring_description_vpn_profile_owned (2958019119161161530) -->
+ <skip />
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Вы падлучаны да праграмы <xliff:g id="APPLICATION">%1$s</xliff:g>, якая можа сачыць за вашай сеткавай актыўнасцю, уключаючы электронную пошту, праграмы і вэб-сайты."</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"Вы падлучаны да праграмы <xliff:g id="APPLICATION">%1$s</xliff:g>, якая сачыць за вашай асабістай сеткавай актыўнасцю, уключаючы электронную пошту, праграмы і вэб-сайты."</string>
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Вы падключаны да праграмы <xliff:g id="APPLICATION">%1$s</xliff:g>, якая можа сачыць за вашай асабістай сеткавай дзейнасцю, уключаючы электронную пошту, праграмы і вэб-сайты."</string>
- <string name="monitoring_description_app_work" msgid="1754325860918060897">"Ваш працоўны профіль знаходзіцца пад кіраваннем <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Ён падлучаны да праграмы <xliff:g id="APPLICATION">%2$s</xliff:g>, якая можа сачыць за вашай сеткавай актыўнасцю, уключаючы электронную пошту, праграмы і вэб-сайты.\n\nДля атрымання дадатковай інфармацыі звярніцеся да адміністратара."</string>
+ <!-- no translation found for monitoring_description_app_work (7777228449969022305) -->
+ <skip />
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Ваш працоўны профіль знаходзіцца пад кіраваннем <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_disabled" msgid="7412534203633528135">"Прылада будзе заставацца заблакіраванай, пакуль вы не разблакіруеце яе ўручную"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"Атрымлівайце апавяшчэнні хутчэй"</string>
diff --git a/packages/SystemUI/res/values-bg/strings.xml b/packages/SystemUI/res/values-bg/strings.xml
index bc07ed2..8382e38 100644
--- a/packages/SystemUI/res/values-bg/strings.xml
+++ b/packages/SystemUI/res/values-bg/strings.xml
@@ -321,6 +321,12 @@
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Предупреждение: <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
<string name="quick_settings_work_mode_label" msgid="6244915274350490429">"Работен режим"</string>
<string name="quick_settings_night_display_label" msgid="3577098011487644395">"Нощно осветление"</string>
+ <!-- no translation found for quick_settings_nfc_label (9012153754816969325) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_off (6883274004315134333) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_on (6680317193676884311) -->
+ <skip />
<string name="recents_empty_message" msgid="808480104164008572">"Няма скорошни елементи"</string>
<string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Изчистихте всичко"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"Информация за приложението"</string>
@@ -334,6 +340,16 @@
<string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Хоризонтално разделяне"</string>
<string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Вертикално разделяне"</string>
<string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Персонализирано разделяне"</string>
+ <!-- no translation found for recents_accessibility_dismissed (2354459747918667050) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_open (1651449827614876864) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_top (9056056469282256287) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_left (8987144699630620019) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_right (275069779299592867) -->
+ <skip />
<string-array name="recents_blacklist_array">
</string-array>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"Заредена"</string>
@@ -414,20 +430,24 @@
<string name="disconnect_vpn" msgid="1324915059568548655">"Прекратяване на връзката с VPN"</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Устройството ви се управлява от <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
<string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> използва <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g>, за да управлява устройството ви."</string>
- <string name="monitoring_description_do_body" msgid="6764108354701060766">"Администраторът ви може да набл. и управл. настройките, корпор. достъп, прилож., данните, свързани с у-вото, както и информ. за местоп. на у-вото ви."</string>
+ <!-- no translation found for monitoring_description_do_body (3639594537660975895) -->
+ <skip />
<string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
<string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Научете повече"</string>
<string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Установена е връзка с приложението <xliff:g id="VPN_APP">%1$s</xliff:g>, което може да наблюдава активността ви в мрежата, вкл. имейли, приложения и уебсайтове."</string>
<string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
<string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Отваряне на настройките за VPN"</string>
- <string name="monitoring_description_network_logging" msgid="3901006351911787915">"Администраторът ви е включил функцията за регистриране на мрежовата активност, която следи трафика на устройството ви.\n\nЗа повече информация се свържете с администратора си."</string>
+ <!-- no translation found for monitoring_description_network_logging (7223505523384076027) -->
+ <skip />
<string name="monitoring_description_vpn" msgid="4445150119515393526">"Разрешихте на приложение да настрои връзка с виртуална частна мрежа (VPN).\n\nТова приложение може да наблюдава активността ви на устройството и в мрежата, включително имейли, приложения и уебсайтове."</string>
- <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Служебният ви потребителски профил се управлява от <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nАдминистраторът ви може да наблюдава активността ви в мрежата, включително имейли, приложения и уебсайтове.\n\nЗа още информация се свържете с администратора си.\n\nСъщо така е установена връзка с виртуална частна мрежа (VPN) и активността ви в нея може да се наблюдава."</string>
+ <!-- no translation found for monitoring_description_vpn_profile_owned (2958019119161161530) -->
+ <skip />
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Установена е връзка с приложението <xliff:g id="APPLICATION">%1$s</xliff:g>, което може да наблюдава активността ви в мрежата, включително имейли, приложения и уебсайтове."</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"Установена е връзка с приложението <xliff:g id="APPLICATION">%1$s</xliff:g>, което може да наблюдава личната ви активност в мрежата, включително имейли, приложения и уебсайтове."</string>
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Установена е връзка с приложението <xliff:g id="APPLICATION">%1$s</xliff:g>, което може да наблюдава личната ви активност в мрежата, включително имейли, приложения и уебсайтове."</string>
- <string name="monitoring_description_app_work" msgid="1754325860918060897">"Служебният ви потребителски профил се управлява от <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Той е свързан с приложението <xliff:g id="APPLICATION">%2$s</xliff:g>, което може да наблюдава служебната ви активност в мрежата, включително имейли, приложения и уебсайтове.\n\nЗа още информация се свържете с администратора си."</string>
+ <!-- no translation found for monitoring_description_app_work (7777228449969022305) -->
+ <skip />
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Служебният ви потребителски профил се управлява от <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_disabled" msgid="7412534203633528135">"Устройството ще остане заключено, докато не го отключите ръчно"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"Получавайте известия по-бързо"</string>
diff --git a/packages/SystemUI/res/values-bn/strings.xml b/packages/SystemUI/res/values-bn/strings.xml
index 65f74c8..f732279 100644
--- a/packages/SystemUI/res/values-bn/strings.xml
+++ b/packages/SystemUI/res/values-bn/strings.xml
@@ -321,6 +321,12 @@
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> সতর্কতা"</string>
<string name="quick_settings_work_mode_label" msgid="6244915274350490429">"কাজের মোড"</string>
<string name="quick_settings_night_display_label" msgid="3577098011487644395">"নাইট লাইট"</string>
+ <!-- no translation found for quick_settings_nfc_label (9012153754816969325) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_off (6883274004315134333) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_on (6680317193676884311) -->
+ <skip />
<string name="recents_empty_message" msgid="808480104164008572">"কোনো সাম্প্রতিক আইটেম নেই"</string>
<string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"আপনি সবকিছু সাফ করেছেন"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"অ্যাপ্লিকেশানের তথ্য"</string>
@@ -334,6 +340,16 @@
<string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"অনুভূমিক স্প্লিট"</string>
<string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"উল্লম্ব স্প্লিট"</string>
<string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"কাস্টম স্প্লিট করুন"</string>
+ <!-- no translation found for recents_accessibility_dismissed (2354459747918667050) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_open (1651449827614876864) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_top (9056056469282256287) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_left (8987144699630620019) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_right (275069779299592867) -->
+ <skip />
<string-array name="recents_blacklist_array">
</string-array>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"চার্জ হয়েছে"</string>
@@ -414,20 +430,24 @@
<string name="disconnect_vpn" msgid="1324915059568548655">"VPN এর সংযোগ বিচ্ছিন্ন করুন"</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"আপনার ডিভাইসটি <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g> এর দ্বারা পরিচালিত৷"</string>
<string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> আপনার ডিভাইস পরিচালনা করার জন্য <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> ব্যবহার করে৷"</string>
- <string name="monitoring_description_do_body" msgid="6764108354701060766">"আপনার প্রশাসক আপনার ডিভাইসের অবস্থান তথ্য সহ এই ডিভাইসের সেটিংস, কর্পোরেট অ্যাক্সেস, অ্যাপ্স, ডেটা নিরীক্ষণ ও পরিচালনা করতে পারেন৷"</string>
+ <!-- no translation found for monitoring_description_do_body (3639594537660975895) -->
+ <skip />
<string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
<string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"আরো জানুন"</string>
<string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"আপনি <xliff:g id="VPN_APP">%1$s</xliff:g> এ সংযুক্ত হয়েছেন, যা ইমেল, অ্যাপ এবং ওয়েবসাইটগুলি সহ আপনার নেটওয়ার্ক কার্যকলাপ নিরীক্ষণ করবে৷"</string>
<string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
<string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"VPN সেটিংস খুলুন"</string>
- <string name="monitoring_description_network_logging" msgid="3901006351911787915">"আপনার প্রশাসক \'নেটওয়ার্ক লগিং\' চালু করেছেন, যা আপনার ডিভাইসের ট্রাফিক মনিটর করে৷\n\nআরো তথ্যের জন্য আপনার প্রশাসকের সাথে যোগাযোগ করুন৷"</string>
+ <!-- no translation found for monitoring_description_network_logging (7223505523384076027) -->
+ <skip />
<string name="monitoring_description_vpn" msgid="4445150119515393526">"আপনি VPN সংযোগ সেট আপ করার জন্য একটি অ্যাপ্লিকেশানকে অনুমতি দিন৷\n\nএই অ্যাপ্লিকেশানটি ইমেল, অ্যাপ্লিকেশান ও ওয়েবসাইটগুলি সহ আপনার ডিভাইস এবং নেটওয়ার্কের কার্যকলাপ নিরীক্ষণ করতে পারে।"</string>
- <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"<xliff:g id="ORGANIZATION">%1$s</xliff:g> আপনার কাজের প্রোফাইল পরিচালনা করে৷\n\nআপনার প্রশাসক ইমেল, অ্যাপ্লিকেশান ও ওয়েবসাইটগুলি সহ আপনার নেটওয়ার্কের কার্যকলাপ নিরীক্ষণ করতে সক্ষম৷\n\nআরো তথ্যের জন্য, আপনার প্রশাসকের সাথে যোগাযোগ করুন৷\n\nএছাড়াও আপনি একটি VPN, এর সাথে সংযুক্ত রয়েছেন যা আপনার নেটওয়ার্কের কার্যকলাপ নিরীক্ষণ করতে পারে৷"</string>
+ <!-- no translation found for monitoring_description_vpn_profile_owned (2958019119161161530) -->
+ <skip />
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"আপনি <xliff:g id="APPLICATION">%1$s</xliff:g> -এ সংযুক্ত হয়েছেন, যা ইমেল, অ্যাপ্লিকেশান এবং ওয়েবসাইটগুলি সমেত আপনার নেটওয়ার্ক কার্যকলাপ নিরীক্ষণ করতে পারে৷"</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"আপনি <xliff:g id="APPLICATION">%1$s</xliff:g> -এ সংযুক্ত হয়েছেন, যা ইমেল, অ্যাপ্লিকেশান এবং ওয়েবসাইটগুলি সমেত আপনার ব্যক্তিগত নেটওয়ার্ক কার্যকলাপ নিরীক্ষণ করতে পারে৷"</string>
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"আপনি <xliff:g id="APPLICATION">%1$s</xliff:g> এর সাথে সংযুক্ত হয়েছেন, যা ইমেল, অ্যাপ এবং ওয়েবসাইটগুলি সহ আপনার ব্যক্তিগত নেটওয়ার্কের কার্যকলাপ নিরীক্ষণ করবে৷"</string>
- <string name="monitoring_description_app_work" msgid="1754325860918060897">"<xliff:g id="ORGANIZATION">%1$s</xliff:g> আপনার কাজের প্রোফাইল পরিচালনা করে৷ এটি <xliff:g id="APPLICATION">%2$s</xliff:g> -এ সংযুক্ত রয়েছে যা আপনার ইমেল, অ্যাপ্লিকেশান ও ওয়েবসাইটগুলি সহ আপনার কাজের নেটওয়ার্কের কার্যকলাপ নিরীক্ষণ করতে পারে৷\n\nআরো তথ্যের জন্য, আপনার প্রশাসকের সাথে যোগাযোগ করুন৷"</string>
+ <!-- no translation found for monitoring_description_app_work (7777228449969022305) -->
+ <skip />
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"<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_disabled" msgid="7412534203633528135">"আপনি নিজে আনলক না করা পর্যন্ত ডিভাইসটি লক হয়ে থাকবে"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"বিজ্ঞপ্তিগুলি আরো দ্রুত পান"</string>
diff --git a/packages/SystemUI/res/values-bs/strings.xml b/packages/SystemUI/res/values-bs/strings.xml
index 48fb824..948fccd 100644
--- a/packages/SystemUI/res/values-bs/strings.xml
+++ b/packages/SystemUI/res/values-bs/strings.xml
@@ -323,6 +323,12 @@
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Upozorenje <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
<string name="quick_settings_work_mode_label" msgid="6244915274350490429">"Poslovni režim"</string>
<string name="quick_settings_night_display_label" msgid="3577098011487644395">"Noćno svjetlo"</string>
+ <!-- no translation found for quick_settings_nfc_label (9012153754816969325) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_off (6883274004315134333) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_on (6680317193676884311) -->
+ <skip />
<string name="recents_empty_message" msgid="808480104164008572">"Nema nedavnih stavki"</string>
<string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Sve ste obrisali"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"Informacije o aplikaciji"</string>
@@ -336,6 +342,16 @@
<string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Podjela po horizontali"</string>
<string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Podjela po vertikali"</string>
<string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Prilagođena podjela"</string>
+ <!-- no translation found for recents_accessibility_dismissed (2354459747918667050) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_open (1651449827614876864) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_top (9056056469282256287) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_left (8987144699630620019) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_right (275069779299592867) -->
+ <skip />
<string-array name="recents_blacklist_array">
</string-array>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"Napunjeno"</string>
@@ -416,20 +432,24 @@
<string name="disconnect_vpn" msgid="1324915059568548655">"Prekini VPN vezu"</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Vašim uređajem upravlja aplikacija <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
<string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> koristi aplikaciju <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> za upravljanje vašim uređajem."</string>
- <string name="monitoring_description_do_body" msgid="6764108354701060766">"Vaš administrator može pratiti postavke, korporativni pristup, aplikacije, podatke povezane s vašim uređajem i informacije o lokaciji vašeg uređaja."</string>
+ <!-- no translation found for monitoring_description_do_body (3639594537660975895) -->
+ <skip />
<string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
<string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Saznajte više"</string>
<string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Povezani ste s aplikacijom <xliff:g id="VPN_APP">%1$s</xliff:g>, koja može pratiti vašu aktivnost na mreži, uključujući e-poruke i web lokacije."</string>
<string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
<string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Postavke otvorene VPN mreže"</string>
- <string name="monitoring_description_network_logging" msgid="3901006351911787915">"Vaš administrator je uključio zapisivanje na mreži, čime se prati saobraćaj na vašem uređaju.\n\nZa više informacija obratite se administratoru."</string>
+ <!-- no translation found for monitoring_description_network_logging (7223505523384076027) -->
+ <skip />
<string name="monitoring_description_vpn" msgid="4445150119515393526">"Jednoj aplikaciji ste dali odobrenje da uspostavi VPN vezu.\n\nTa aplikacija može pratiti vašu aktivnost na uređaju i mreži, uključujući e-poštu, aplikacije i web-lokacije."</string>
- <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Vašim profilom za posao upravlja <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nVaš administrator može pratiti vašu aktivnost na mreži, uključujući e-poštu, aplikacije i web-lokacije.\n\nZa više informacija kontaktirajte svog administratora.\n\nPovezani ste i na VPN, koji može pratiti vašu aktivnost na mreži."</string>
+ <!-- no translation found for monitoring_description_vpn_profile_owned (2958019119161161530) -->
+ <skip />
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Povezani ste sa aplikacijom <xliff:g id="APPLICATION">%1$s</xliff:g>, koja može pratiti vašu aktivnost na mreži, uključujući e-mailove, aplikacije i web-lokacije."</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"Povezani ste sa aplikacijom <xliff:g id="APPLICATION">%1$s</xliff:g>, koja može pratiti vašu aktivnost na privatnoj mreži, uključujući e-mailove, aplikacije i web-lokacije."</string>
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Povezani ste na aplikaciju <xliff:g id="APPLICATION">%1$s</xliff:g>, koja može pratiti vaše privatne aktivnosti na mreži, uključujući e-poštu, aplikacije i web stranice."</string>
- <string name="monitoring_description_app_work" msgid="1754325860918060897">"Profilom za posao upravlja <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Povezan je sa aplikacijom <xliff:g id="APPLICATION">%2$s</xliff:g>, koja može pratiti vašu aktivnost na radnoj mreži, uključujući e-poštu, aplikacije i web-lokacije.\n\nZa više informacija kontaktirajte svog administratora."</string>
+ <!-- no translation found for monitoring_description_app_work (7777228449969022305) -->
+ <skip />
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Profilom za posao upravlja <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Povezan je sa aplikacijom <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, koja može pratiti vašu aktivnost na radnoj mreži, uključujući e-poštu, aplikacije i web-lokacije.\n\nPovezani ste i sa aplikacijom <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, koja može pratiti vašu aktivnost na privatnoj mreži."</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Uređaj će ostati zaključan dok ga ručno ne otključate"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"Brže primaj obavještenja"</string>
diff --git a/packages/SystemUI/res/values-ca/strings.xml b/packages/SystemUI/res/values-ca/strings.xml
index 691bc6b..fd10d12 100644
--- a/packages/SystemUI/res/values-ca/strings.xml
+++ b/packages/SystemUI/res/values-ca/strings.xml
@@ -321,6 +321,12 @@
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Advertiment: <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
<string name="quick_settings_work_mode_label" msgid="6244915274350490429">"Mode de feina"</string>
<string name="quick_settings_night_display_label" msgid="3577098011487644395">"Llum nocturna"</string>
+ <!-- no translation found for quick_settings_nfc_label (9012153754816969325) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_off (6883274004315134333) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_on (6680317193676884311) -->
+ <skip />
<string name="recents_empty_message" msgid="808480104164008572">"No hi ha cap element recent"</string>
<string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Ho has esborrat tot"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"Informació de l\'aplicació"</string>
@@ -334,6 +340,16 @@
<string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Divisió horitzontal"</string>
<string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Divisió vertical"</string>
<string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Divisió personalitzada"</string>
+ <!-- no translation found for recents_accessibility_dismissed (2354459747918667050) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_open (1651449827614876864) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_top (9056056469282256287) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_left (8987144699630620019) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_right (275069779299592867) -->
+ <skip />
<string-array name="recents_blacklist_array">
</string-array>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"Carregada"</string>
@@ -414,20 +430,24 @@
<string name="disconnect_vpn" msgid="1324915059568548655">"Desconnecta la VPN"</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"<xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g> gestiona el teu dispositiu."</string>
<string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> utilitza <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> per gestionar el teu dispositiu."</string>
- <string name="monitoring_description_do_body" msgid="6764108354701060766">"L\'administrador pot supervisar i gestionar la configuració, l\'accés corporatiu, les aplicacions, la informació d\'ubicació del dispositiu i les dades associades."</string>
+ <!-- no translation found for monitoring_description_do_body (3639594537660975895) -->
+ <skip />
<string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
<string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Més informació"</string>
<string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Estàs connectat a <xliff:g id="VPN_APP">%1$s</xliff:g>, que pot supervisar la teva activitat a la xarxa, com els correus electrònics, les aplicacions i els llocs web."</string>
<string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
<string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Obre la configuració de la VPN"</string>
- <string name="monitoring_description_network_logging" msgid="3901006351911787915">"L\'administrador ha activat el registre de xarxa, que supervisa el trànsit del teu dispositiu.\n\nPer obtenir més informació, contacta amb l\'administrador."</string>
+ <!-- no translation found for monitoring_description_network_logging (7223505523384076027) -->
+ <skip />
<string name="monitoring_description_vpn" msgid="4445150119515393526">"Has donat permís a una aplicació per configurar una connexió VPN.\n\nAquesta aplicació pot supervisar el dispositiu i l\'activitat a la xarxa, com ara els correus electrònics, les aplicacions i els llocs web."</string>
- <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"<xliff:g id="ORGANIZATION">%1$s</xliff:g> gestiona el perfil de Work.\n\nL\'administrador pot supervisar l\'activitat a la xarxa, com ara els correus electrònics, les aplicacions i els llocs web.\n\nPer obtenir més informació, contacta amb l\'administrador.\n\nA més, estàs connectat a una VPN, que pot supervisar l\'activitat a la xarxa."</string>
+ <!-- no translation found for monitoring_description_vpn_profile_owned (2958019119161161530) -->
+ <skip />
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Estàs connectat a <xliff:g id="APPLICATION">%1$s</xliff:g>, que pot supervisar la teva activitat a la xarxa, com ara els correus electrònics, les aplicacions i els llocs web."</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"Estàs connectat a <xliff:g id="APPLICATION">%1$s</xliff:g>, que pot supervisar la teva activitat personal a la xarxa, com ara els correus electrònics, les aplicacions i els llocs web."</string>
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Estàs connectat a <xliff:g id="APPLICATION">%1$s</xliff:g>, que pot supervisar la teva activitat personal a la xarxa, com ara els correus electrònics, les aplicacions i els llocs web."</string>
- <string name="monitoring_description_app_work" msgid="1754325860918060897">"<xliff:g id="ORGANIZATION">%1$s</xliff:g> gestiona el teu perfil professional. Aquest perfil està connectat a <xliff:g id="APPLICATION">%2$s</xliff:g>, que pot supervisar la teva activitat professional a la xarxa, com ara els correus electrònics, les aplicacions i els llocs web.\n\nPer obtenir més informació, contacta amb l\'administrador."</string>
+ <!-- no translation found for monitoring_description_app_work (7777228449969022305) -->
+ <skip />
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"<xliff:g id="ORGANIZATION">%1$s</xliff:g> gestiona el teu perfil professional. Aquest perfil està connectat a <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, que pot supervisar la teva activitat professional a la xarxa, com ara els correus electrònics, les aplicacions i els llocs web.\n\nA més, estàs connectat a <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, que també pot supervisar la teva activitat personal a la xarxa."</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"El dispositiu continuarà bloquejat fins que no el desbloquegis manualment."</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"Obtén notificacions més ràpidament"</string>
diff --git a/packages/SystemUI/res/values-cs/strings.xml b/packages/SystemUI/res/values-cs/strings.xml
index 2810d77..51fb530 100644
--- a/packages/SystemUI/res/values-cs/strings.xml
+++ b/packages/SystemUI/res/values-cs/strings.xml
@@ -327,6 +327,12 @@
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Upozornění při <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
<string name="quick_settings_work_mode_label" msgid="6244915274350490429">"Pracovní režim"</string>
<string name="quick_settings_night_display_label" msgid="3577098011487644395">"Noční režim"</string>
+ <!-- no translation found for quick_settings_nfc_label (9012153754816969325) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_off (6883274004315134333) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_on (6680317193676884311) -->
+ <skip />
<string name="recents_empty_message" msgid="808480104164008572">"Žádné nedávné položky"</string>
<string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Vše je vymazáno"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"Informace o aplikaci"</string>
@@ -340,6 +346,16 @@
<string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Vodorovné rozdělení"</string>
<string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Vertikální rozdělení"</string>
<string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Vlastní rozdělení"</string>
+ <!-- no translation found for recents_accessibility_dismissed (2354459747918667050) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_open (1651449827614876864) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_top (9056056469282256287) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_left (8987144699630620019) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_right (275069779299592867) -->
+ <skip />
<string-array name="recents_blacklist_array">
</string-array>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"Nabito"</string>
@@ -420,20 +436,24 @@
<string name="disconnect_vpn" msgid="1324915059568548655">"Odpojit VPN"</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Vaše zařízení je spravováno aplikací <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
<string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"Organizace <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> používá ke správě tohoto zařízení aplikaci <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g>."</string>
- <string name="monitoring_description_do_body" msgid="6764108354701060766">"Administrátor může sledovat a spravovat nastavení, firemní přístup, aplikace, data přidružená k tomuto zařízení a jeho polohu."</string>
+ <!-- no translation found for monitoring_description_do_body (3639594537660975895) -->
+ <skip />
<string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
<string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Další informace"</string>
<string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Jste připojeni k aplikaci <xliff:g id="VPN_APP">%1$s</xliff:g>, která může sledovat vaši aktivitu v síti, včetně e-mailů, aplikací a webů."</string>
<string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
<string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Otevřít nastavení VPN"</string>
- <string name="monitoring_description_network_logging" msgid="3901006351911787915">"Administrátor zapnul protokolování sítě, které monitoruje síťový provoz v zařízení.\n\nDalší informace vám poskytne administrátor."</string>
+ <!-- no translation found for monitoring_description_network_logging (7223505523384076027) -->
+ <skip />
<string name="monitoring_description_vpn" msgid="4445150119515393526">"Udělili jste aplikaci oprávnění k nastavení připojení VPN.\n\nTato aplikace může sledovat vaši aktivitu v zařízení a v síti, včetně e-mailů, aplikací a webů."</string>
- <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Váš pracovní profil spravuje organizace <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nAdministrátor může monitorovat vaši síťovou aktivitu, včetně e-mailů, aplikací a webů.\n\nO další informace požádejte svého administrátora.\n\nJste také připojeni k síti VPN, která může sledovat vaši aktivitu v síti."</string>
+ <!-- no translation found for monitoring_description_vpn_profile_owned (2958019119161161530) -->
+ <skip />
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Jste připojeni k aplikaci <xliff:g id="APPLICATION">%1$s</xliff:g>, která může sledovat vaši aktivitu v síti, včetně e-mailů, aplikací a webů."</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"Jste připojeni k aplikaci <xliff:g id="APPLICATION">%1$s</xliff:g>, která může sledovat vaši osobní aktivitu v síti, včetně e-mailů, aplikací a webů."</string>
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Jste připojeni k aplikaci <xliff:g id="APPLICATION">%1$s</xliff:g>, která může sledovat vaši osobní aktivitu v síti, včetně e-mailů, aplikací a webů."</string>
- <string name="monitoring_description_app_work" msgid="1754325860918060897">"Váš pracovní profil spravuje organizace <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Je připojen k aplikaci <xliff:g id="APPLICATION">%2$s</xliff:g>, která může sledovat vaši aktivitu v síti, včetně e-mailů, aplikací a webů.\n\nO další informace požádejte svého administrátora."</string>
+ <!-- no translation found for monitoring_description_app_work (7777228449969022305) -->
+ <skip />
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Váš pracovní profil spravuje organizace <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Je připojen k aplikaci <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, která může sledovat vaši aktivitu v síti, včetně e-mailů, aplikací a webů.\n\nTaké jste připojeni k aplikaci <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, která může sledovat vaši osobní aktivitu v síti."</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Zařízení zůstane uzamčeno, dokud je ručně neodemknete"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"Čtěte si oznámení rychleji"</string>
diff --git a/packages/SystemUI/res/values-da/strings.xml b/packages/SystemUI/res/values-da/strings.xml
index 675029d..5c603a8 100644
--- a/packages/SystemUI/res/values-da/strings.xml
+++ b/packages/SystemUI/res/values-da/strings.xml
@@ -321,6 +321,12 @@
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Advarsel ved <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
<string name="quick_settings_work_mode_label" msgid="6244915274350490429">"Arbejdstilstand"</string>
<string name="quick_settings_night_display_label" msgid="3577098011487644395">"Nattelys"</string>
+ <!-- no translation found for quick_settings_nfc_label (9012153754816969325) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_off (6883274004315134333) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_on (6680317193676884311) -->
+ <skip />
<string name="recents_empty_message" msgid="808480104164008572">"Ingen nye elementer"</string>
<string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Du har ryddet alt"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"Oplysninger om applikationen"</string>
@@ -334,6 +340,16 @@
<string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Opdel vandret"</string>
<string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Opdel lodret"</string>
<string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Opdel brugerdefineret"</string>
+ <!-- no translation found for recents_accessibility_dismissed (2354459747918667050) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_open (1651449827614876864) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_top (9056056469282256287) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_left (8987144699630620019) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_right (275069779299592867) -->
+ <skip />
<string-array name="recents_blacklist_array">
</string-array>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"Opladet"</string>
@@ -414,20 +430,24 @@
<string name="disconnect_vpn" msgid="1324915059568548655">"Afbryd VPN-forbindelse"</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Din enhed administreres af <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
<string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> bruger <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> til at administrere din enhed."</string>
- <string name="monitoring_description_do_body" msgid="6764108354701060766">"Din administrator kan overvåge og administrere indstillinger, virksomhedsadgang, apps og data, der er knyttet til denne enhed, samt enhedens placeringsoplysninger."</string>
+ <!-- no translation found for monitoring_description_do_body (3639594537660975895) -->
+ <skip />
<string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
<string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Få flere oplysninger"</string>
<string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Du har forbindelse til <xliff:g id="VPN_APP">%1$s</xliff:g>, som kan overvåge din netværksaktivitet, bl.a. e-mails, apps og websites."</string>
<string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
<string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Åbn VPN-indstillinger"</string>
- <string name="monitoring_description_network_logging" msgid="3901006351911787915">"Din administrator har aktiveret netværksregistrering, som overvåger trafik på din enhed.\n\nKontakt din administrator for at få flere oplysninger."</string>
+ <!-- no translation found for monitoring_description_network_logging (7223505523384076027) -->
+ <skip />
<string name="monitoring_description_vpn" msgid="4445150119515393526">"Du gav en app tilladelse til at konfigurere en VPN-forbindelse.\n\nDenne app kan overvåge din enhed og netværksaktivitet, bl.a. e-mails, apps og websites."</string>
- <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Din arbejdsprofil administreres af <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nDin administrator kan overvåge din netværksaktivitet, bl.a. e-mails, apps og websites.\n\nKontakt din administrator for at få flere oplysninger.\n\nDu er også forbundet til en VPN-forbindelse, som kan overvåge din netværksaktivitet."</string>
+ <!-- no translation found for monitoring_description_vpn_profile_owned (2958019119161161530) -->
+ <skip />
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Du har forbindelse til <xliff:g id="APPLICATION">%1$s</xliff:g>, som kan overvåge din netværksaktivitet, bl.a. e-mails, apps og websites."</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"Du har forbindelse til <xliff:g id="APPLICATION">%1$s</xliff:g>, som kan overvåge din private netværksaktivitet, bl.a. e-mails, apps og websites."</string>
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Du har forbindelse til <xliff:g id="APPLICATION">%1$s</xliff:g>, som kan overvåge din private netværksaktivitet, bl.a. e-mails, apps og websites."</string>
- <string name="monitoring_description_app_work" msgid="1754325860918060897">"Din arbejdsprofil administreres af <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Den er forbundet til <xliff:g id="APPLICATION">%2$s</xliff:g>, som kan overvåge din arbejdsrelaterede netværksaktivitet, bl.a. e-mails, apps og websites.\n\nKontakt din administrator for at få flere oplysninger."</string>
+ <!-- no translation found for monitoring_description_app_work (7777228449969022305) -->
+ <skip />
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Din arbejdsprofil administreres af <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Den er forbundet til <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, som kan overvåge din arbejdsrelaterede netværksaktivitet, bl.a. e-mails, apps og websites.\n\nDu er også forbundet til <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, som kan overvåge din private netværksaktivitet."</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Enheden vil forblive låst, indtil du manuelt låser den op"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"Modtag underretninger hurtigere"</string>
diff --git a/packages/SystemUI/res/values-de/strings.xml b/packages/SystemUI/res/values-de/strings.xml
index fb580cd..8da6e9c 100644
--- a/packages/SystemUI/res/values-de/strings.xml
+++ b/packages/SystemUI/res/values-de/strings.xml
@@ -323,6 +323,12 @@
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Warnung für <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
<string name="quick_settings_work_mode_label" msgid="6244915274350490429">"Arbeitsmodus"</string>
<string name="quick_settings_night_display_label" msgid="3577098011487644395">"Nachtlicht"</string>
+ <!-- no translation found for quick_settings_nfc_label (9012153754816969325) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_off (6883274004315134333) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_on (6680317193676884311) -->
+ <skip />
<string name="recents_empty_message" msgid="808480104164008572">"Keine kürzlich verwendeten Elemente"</string>
<string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Du hast alles gelöscht"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"App-Info"</string>
@@ -336,6 +342,16 @@
<string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Geteilte Schaltfläche – horizontal"</string>
<string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Geteilte Schaltfläche – vertikal"</string>
<string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Geteilte Schaltfläche – benutzerdefiniert"</string>
+ <!-- no translation found for recents_accessibility_dismissed (2354459747918667050) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_open (1651449827614876864) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_top (9056056469282256287) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_left (8987144699630620019) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_right (275069779299592867) -->
+ <skip />
<string-array name="recents_blacklist_array">
</string-array>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"Aufgeladen"</string>
@@ -416,20 +432,24 @@
<string name="disconnect_vpn" msgid="1324915059568548655">"VPN-Verbindung trennen"</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Dein Gerät wird von <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g> verwaltet."</string>
<string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> verwaltet dein Gerät mit <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g>."</string>
- <string name="monitoring_description_do_body" msgid="6764108354701060766">"Dein Administrator kann Einstellungen, Zugriffsrechte, Apps und Daten deines Geräts und dessen Standortinformationen überwachen."</string>
+ <!-- no translation found for monitoring_description_do_body (3639594537660975895) -->
+ <skip />
<string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
<string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Weitere Informationen"</string>
<string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Du bist mit <xliff:g id="VPN_APP">%1$s</xliff:g> verbunden. Die VPN-App kann deine Netzwerkaktivitäten (E-Mails, Apps und Websites) erfassen."</string>
<string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
<string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"VPN-Einstellungen öffnen"</string>
- <string name="monitoring_description_network_logging" msgid="3901006351911787915">"Dein Administrator hat die Netzwerkprotokollierung aktiviert. Damit wird der Verkehr auf deinem Gerät erfasst.\n\nWeitere Informationen erhältst du von deinem Administrator."</string>
+ <!-- no translation found for monitoring_description_network_logging (7223505523384076027) -->
+ <skip />
<string name="monitoring_description_vpn" msgid="4445150119515393526">"Du hast einer App gestattet, eine VPN-Verbindung einzurichten.\n\nDiese App kann dein Gerät und deine Netzwerkaktivitäten überwachen, einschließlich E-Mails, Apps und Websites."</string>
- <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Dein Arbeitsprofil wird von <xliff:g id="ORGANIZATION">%1$s</xliff:g> verwaltet.\n\nDein Administrator kann deine Netzwerkaktivität überwachen, einschließlich E-Mails, Apps und Websites.\n\nWeitere Informationen erhältst du bei deinem Administrator.\n\nDu bist außerdem mit einem VPN verbunden, das deine persönliche Netzwerkaktivität überwachen kann."</string>
+ <!-- no translation found for monitoring_description_vpn_profile_owned (2958019119161161530) -->
+ <skip />
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Du bist mit der App <xliff:g id="APPLICATION">%1$s</xliff:g> verbunden, die deine Netzwerkaktivität überwachen kann, einschließlich E-Mails, Apps und Websites."</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"Du bist mit der App <xliff:g id="APPLICATION">%1$s</xliff:g> verbunden, die deine persönliche Netzwerkaktivität überwachen kann, einschließlich E-Mails, Apps und Websites."</string>
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Du bist mit der App \"<xliff:g id="APPLICATION">%1$s</xliff:g>\" verbunden. Diese kann deine persönlichen Netzwerkaktivitäten erfassen, einschließlich E-Mails, Apps und Websites."</string>
- <string name="monitoring_description_app_work" msgid="1754325860918060897">"Dein Arbeitsprofil wird von <xliff:g id="ORGANIZATION">%1$s</xliff:g> verwaltet. Das Profil ist mit der App <xliff:g id="APPLICATION">%2$s</xliff:g> verbunden, die deine geschäftlichen Netzwerkaktivitäten überwachen kann, einschließlich E-Mails, Apps und Websites.\n\nWeitere Informationen erhältst du von deinem Administrator."</string>
+ <!-- no translation found for monitoring_description_app_work (7777228449969022305) -->
+ <skip />
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Dein Arbeitsprofil wird von <xliff:g id="ORGANIZATION">%1$s</xliff:g> verwaltet. Das Profil ist mit der App <xliff:g id="APPLICATION_WORK">%2$s</xliff:g> verbunden, die deine geschäftliche Netzwerkaktivität überwachen kann, einschließlich E-Mails, Apps und Websites.\n\nDu bist außerdem mit der App <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g> verbunden, die deine persönliche Netzwerkaktivität überwachen kann."</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Das Gerät bleibt gesperrt, bis du es manuell entsperrst."</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"Benachrichtigungen schneller erhalten"</string>
diff --git a/packages/SystemUI/res/values-el/strings.xml b/packages/SystemUI/res/values-el/strings.xml
index 6190f07..bc9d264 100644
--- a/packages/SystemUI/res/values-el/strings.xml
+++ b/packages/SystemUI/res/values-el/strings.xml
@@ -321,6 +321,12 @@
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Προειδοποίηση για <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
<string name="quick_settings_work_mode_label" msgid="6244915274350490429">"Λειτουργία εργασίας"</string>
<string name="quick_settings_night_display_label" msgid="3577098011487644395">"Νυχτερινός φωτισμός"</string>
+ <!-- no translation found for quick_settings_nfc_label (9012153754816969325) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_off (6883274004315134333) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_on (6680317193676884311) -->
+ <skip />
<string name="recents_empty_message" msgid="808480104164008572">"Δεν υπάρχουν πρόσφατα στοιχεία"</string>
<string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Έχει γίνει διαγραφή όλων των στοιχείων"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"Πληροφορίες εφαρμογής"</string>
@@ -334,6 +340,16 @@
<string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Οριζόντιος διαχωρισμός"</string>
<string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Κάθετος διαχωρισμός"</string>
<string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Προσαρμοσμένος διαχωρισμός"</string>
+ <!-- no translation found for recents_accessibility_dismissed (2354459747918667050) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_open (1651449827614876864) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_top (9056056469282256287) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_left (8987144699630620019) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_right (275069779299592867) -->
+ <skip />
<string-array name="recents_blacklist_array">
</string-array>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"Φορτίστηκε"</string>
@@ -414,20 +430,24 @@
<string name="disconnect_vpn" msgid="1324915059568548655">"Αποσύνδεση VPN"</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Η διαχείριση της συσκευής σας γίνεται από <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
<string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> χρησιμοποιεί <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> για τη διαχείριση της συσκευής σας."</string>
- <string name="monitoring_description_do_body" msgid="6764108354701060766">"Ο διαχειριστής σας μπορεί να παρακολουθεί και να διαχειρίζεται τις ρυθμίσεις, την εταιρική πρόσβαση, τις εφαρμογές και τα δεδομένα που σχετίζονται με τη συσκευή σας, καθώς και τις πληροφορίες τοποθεσίας της συσκευής σας."</string>
+ <!-- no translation found for monitoring_description_do_body (3639594537660975895) -->
+ <skip />
<string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
<string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Μάθετε περισσότερα"</string>
<string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Έχετε συνδεθεί στην εφαρμογή <xliff:g id="VPN_APP">%1$s</xliff:g>, η οποία μπορεί να παρακολουθεί τη δραστηριότητα δικτύου σας, συμπεριλαμβανομένων μηνυμάτων ηλεκτρονικού ταχυδρομείου, εφαρμογών και ιστοτόπων."</string>
<string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
<string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Άνοιγμα Ρυθμίσεων VPN"</string>
- <string name="monitoring_description_network_logging" msgid="3901006351911787915">"Ο διαχειριστής σας έχει ενεργοποιήσει την καταγραφή δικτύου, η οποία παρακολουθεί την επισκεψιμότητα στη συσκευή σας.\n\nΓια περισσότερες πληροφορίες, επικοινωνήστε με τον διαχειριστή σας."</string>
+ <!-- no translation found for monitoring_description_network_logging (7223505523384076027) -->
+ <skip />
<string name="monitoring_description_vpn" msgid="4445150119515393526">"Παραχωρήσατε σε μια εφαρμογή άδεια για τη ρύθμιση σύνδεσης VPN.\n\nΑυτή η εφαρμογή μπορεί να παρακολουθεί τη δραστηριότητα της συσκευής και του δικτύου σας, συμπεριλαμβανομένων μηνυμάτων ηλεκτρονικού ταχυδρομείου, εφαρμογών και ιστότοπων."</string>
- <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Η διαχείριση του προφίλ εργασίας γίνεται από τον οργανισμό <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nΟ διαχειριστής έχει τη δυνατότητα παρακολούθησης της δραστηριότητας του δικτύου σας, συμπεριλαμβανομένων μηνυμάτων ηλεκτρονικού ταχυδρομείου, εφαρμογών και ιστότοπων.\n\nΓια περισσότερες πληροφορίες, επικοινωνήστε με το διαχειριστή.\n\nΕπίσης, είστε συνδεδεμένοι σε VPN, το οποίο μπορεί να παρακολουθεί τη δραστηριότητα του δικτύου σας."</string>
+ <!-- no translation found for monitoring_description_vpn_profile_owned (2958019119161161530) -->
+ <skip />
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Έχετε συνδεθεί στην εφαρμογή <xliff:g id="APPLICATION">%1$s</xliff:g>, η οποία μπορεί να παρακολουθεί τη δραστηριότητα του δικτύου σας, συμπεριλαμβανομένων μηνυμάτων ηλεκτρονικού ταχυδρομείου, εφαρμογών και ιστότοπων."</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"Έχετε συνδεθεί στην εφαρμογή <xliff:g id="APPLICATION">%1$s</xliff:g>, η οποία μπορεί να παρακολουθεί τη δραστηριότητα του προσωπικού σας δικτύου, συμπεριλαμβανομένων μηνυμάτων ηλεκτρονικού ταχυδρομείου, εφαρμογών και ιστότοπων."</string>
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Έχετε συνδεθεί στην εφαρμογή <xliff:g id="APPLICATION">%1$s</xliff:g>, η οποία μπορεί να παρακολουθεί τη δραστηριότητα του προσωπικού σας δικτύου, συμπεριλαμβανομένων μηνυμάτων ηλεκτρονικού ταχυδρομείου, εφαρμογών και ιστοτόπων."</string>
- <string name="monitoring_description_app_work" msgid="1754325860918060897">"Η διαχείριση του προφίλ εργασίας γίνεται από τον οργανισμό <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Είναι συνδεδεμένο στην εφαρμογή <xliff:g id="APPLICATION">%2$s</xliff:g>, η οποία μπορεί να παρακολουθεί τη δραστηριότητα του δικτύου εργασίας, συμπεριλαμβανομένων μηνυμάτων ηλεκτρονικού ταχυδρομείου, εφαρμογών και ιστότοπων.\n\nΓια περισσότερες πληροφορίες, επικοινωνήστε με το διαχειριστή."</string>
+ <!-- no translation found for monitoring_description_app_work (7777228449969022305) -->
+ <skip />
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Η διαχείριση του προφίλ εργασίας γίνεται από τον οργανισμό <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_disabled" msgid="7412534203633528135">"Η συσκευή θα παραμείνει κλειδωμένη έως ότου την ξεκλειδώσετε μη αυτόματα"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"Λάβετε ειδοποιήσεις γρηγορότερα"</string>
diff --git a/packages/SystemUI/res/values-en-rAU/strings.xml b/packages/SystemUI/res/values-en-rAU/strings.xml
index 9d74a2f..a19ac0b 100644
--- a/packages/SystemUI/res/values-en-rAU/strings.xml
+++ b/packages/SystemUI/res/values-en-rAU/strings.xml
@@ -321,6 +321,12 @@
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> warning"</string>
<string name="quick_settings_work_mode_label" msgid="6244915274350490429">"Work mode"</string>
<string name="quick_settings_night_display_label" msgid="3577098011487644395">"Night Light"</string>
+ <!-- no translation found for quick_settings_nfc_label (9012153754816969325) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_off (6883274004315134333) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_on (6680317193676884311) -->
+ <skip />
<string name="recents_empty_message" msgid="808480104164008572">"No recent items"</string>
<string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"You\'ve cleared everything"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"Application Info"</string>
@@ -334,6 +340,16 @@
<string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Split Horizontal"</string>
<string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Split Vertical"</string>
<string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Split Customised"</string>
+ <!-- no translation found for recents_accessibility_dismissed (2354459747918667050) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_open (1651449827614876864) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_top (9056056469282256287) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_left (8987144699630620019) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_right (275069779299592867) -->
+ <skip />
<string-array name="recents_blacklist_array">
</string-array>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"Charged"</string>
@@ -414,20 +430,24 @@
<string name="disconnect_vpn" msgid="1324915059568548655">"Disconnect VPN"</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Your device is managed by <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
<string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> uses <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> to manage your device."</string>
- <string name="monitoring_description_do_body" msgid="6764108354701060766">"Your administrator can monitor and manage settings, corporate access, apps, data associated with your device and your device\'s location information."</string>
+ <!-- no translation found for monitoring_description_do_body (3639594537660975895) -->
+ <skip />
<string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
<string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Find out more"</string>
<string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"You\'re connected to <xliff:g id="VPN_APP">%1$s</xliff:g>, which can monitor your network activity, including emails, apps and websites."</string>
<string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
<string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Open VPN Settings"</string>
- <string name="monitoring_description_network_logging" msgid="3901006351911787915">"Your admin has turned on network logging, which monitors traffic on your device.\n\nFor more information contact your admin."</string>
+ <!-- no translation found for monitoring_description_network_logging (7223505523384076027) -->
+ <skip />
<string name="monitoring_description_vpn" msgid="4445150119515393526">"You gave an app permission to set up a VPN connection.\n\nThis app can monitor your device and network activity, including emails, apps and websites."</string>
- <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Your work profile is managed by <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nYour administrator is capable of monitoring your network activity including emails, apps, and websites.\n\nFor more information, contact your administrator.\n\nYou\'re also connected to a VPN, which can monitor your network activity."</string>
+ <!-- no translation found for monitoring_description_vpn_profile_owned (2958019119161161530) -->
+ <skip />
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"You\'re connected to <xliff:g id="APPLICATION">%1$s</xliff:g>, which can monitor your network activity including emails, apps and websites."</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"You\'re connected to <xliff:g id="APPLICATION">%1$s</xliff:g>, which can monitor your personal network activity, including emails, apps and websites."</string>
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"You\'re connected to <xliff:g id="APPLICATION">%1$s</xliff:g>, which can monitor your personal network activity, including emails, apps and websites."</string>
- <string name="monitoring_description_app_work" msgid="1754325860918060897">"Your work profile is managed by <xliff:g id="ORGANIZATION">%1$s</xliff:g>. It is connected to <xliff:g id="APPLICATION">%2$s</xliff:g>, which can monitor your work network activity, including emails, apps and websites.\n\nFor more information, contact your administrator."</string>
+ <!-- no translation found for monitoring_description_app_work (7777228449969022305) -->
+ <skip />
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Your work profile is managed by <xliff:g id="ORGANIZATION">%1$s</xliff:g>. It is connected to <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, which can monitor your work network activity, including emails, apps and websites.\n\nYou\'re also connected to <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, which can monitor your personal network activity."</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Device will stay locked until you manually unlock"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"Get notifications faster"</string>
diff --git a/packages/SystemUI/res/values-en-rGB/strings.xml b/packages/SystemUI/res/values-en-rGB/strings.xml
index 9d74a2f..a19ac0b 100644
--- a/packages/SystemUI/res/values-en-rGB/strings.xml
+++ b/packages/SystemUI/res/values-en-rGB/strings.xml
@@ -321,6 +321,12 @@
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> warning"</string>
<string name="quick_settings_work_mode_label" msgid="6244915274350490429">"Work mode"</string>
<string name="quick_settings_night_display_label" msgid="3577098011487644395">"Night Light"</string>
+ <!-- no translation found for quick_settings_nfc_label (9012153754816969325) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_off (6883274004315134333) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_on (6680317193676884311) -->
+ <skip />
<string name="recents_empty_message" msgid="808480104164008572">"No recent items"</string>
<string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"You\'ve cleared everything"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"Application Info"</string>
@@ -334,6 +340,16 @@
<string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Split Horizontal"</string>
<string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Split Vertical"</string>
<string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Split Customised"</string>
+ <!-- no translation found for recents_accessibility_dismissed (2354459747918667050) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_open (1651449827614876864) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_top (9056056469282256287) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_left (8987144699630620019) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_right (275069779299592867) -->
+ <skip />
<string-array name="recents_blacklist_array">
</string-array>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"Charged"</string>
@@ -414,20 +430,24 @@
<string name="disconnect_vpn" msgid="1324915059568548655">"Disconnect VPN"</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Your device is managed by <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
<string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> uses <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> to manage your device."</string>
- <string name="monitoring_description_do_body" msgid="6764108354701060766">"Your administrator can monitor and manage settings, corporate access, apps, data associated with your device and your device\'s location information."</string>
+ <!-- no translation found for monitoring_description_do_body (3639594537660975895) -->
+ <skip />
<string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
<string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Find out more"</string>
<string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"You\'re connected to <xliff:g id="VPN_APP">%1$s</xliff:g>, which can monitor your network activity, including emails, apps and websites."</string>
<string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
<string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Open VPN Settings"</string>
- <string name="monitoring_description_network_logging" msgid="3901006351911787915">"Your admin has turned on network logging, which monitors traffic on your device.\n\nFor more information contact your admin."</string>
+ <!-- no translation found for monitoring_description_network_logging (7223505523384076027) -->
+ <skip />
<string name="monitoring_description_vpn" msgid="4445150119515393526">"You gave an app permission to set up a VPN connection.\n\nThis app can monitor your device and network activity, including emails, apps and websites."</string>
- <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Your work profile is managed by <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nYour administrator is capable of monitoring your network activity including emails, apps, and websites.\n\nFor more information, contact your administrator.\n\nYou\'re also connected to a VPN, which can monitor your network activity."</string>
+ <!-- no translation found for monitoring_description_vpn_profile_owned (2958019119161161530) -->
+ <skip />
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"You\'re connected to <xliff:g id="APPLICATION">%1$s</xliff:g>, which can monitor your network activity including emails, apps and websites."</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"You\'re connected to <xliff:g id="APPLICATION">%1$s</xliff:g>, which can monitor your personal network activity, including emails, apps and websites."</string>
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"You\'re connected to <xliff:g id="APPLICATION">%1$s</xliff:g>, which can monitor your personal network activity, including emails, apps and websites."</string>
- <string name="monitoring_description_app_work" msgid="1754325860918060897">"Your work profile is managed by <xliff:g id="ORGANIZATION">%1$s</xliff:g>. It is connected to <xliff:g id="APPLICATION">%2$s</xliff:g>, which can monitor your work network activity, including emails, apps and websites.\n\nFor more information, contact your administrator."</string>
+ <!-- no translation found for monitoring_description_app_work (7777228449969022305) -->
+ <skip />
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Your work profile is managed by <xliff:g id="ORGANIZATION">%1$s</xliff:g>. It is connected to <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, which can monitor your work network activity, including emails, apps and websites.\n\nYou\'re also connected to <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, which can monitor your personal network activity."</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Device will stay locked until you manually unlock"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"Get notifications faster"</string>
diff --git a/packages/SystemUI/res/values-en-rIN/strings.xml b/packages/SystemUI/res/values-en-rIN/strings.xml
index 9d74a2f..a19ac0b 100644
--- a/packages/SystemUI/res/values-en-rIN/strings.xml
+++ b/packages/SystemUI/res/values-en-rIN/strings.xml
@@ -321,6 +321,12 @@
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> warning"</string>
<string name="quick_settings_work_mode_label" msgid="6244915274350490429">"Work mode"</string>
<string name="quick_settings_night_display_label" msgid="3577098011487644395">"Night Light"</string>
+ <!-- no translation found for quick_settings_nfc_label (9012153754816969325) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_off (6883274004315134333) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_on (6680317193676884311) -->
+ <skip />
<string name="recents_empty_message" msgid="808480104164008572">"No recent items"</string>
<string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"You\'ve cleared everything"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"Application Info"</string>
@@ -334,6 +340,16 @@
<string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Split Horizontal"</string>
<string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Split Vertical"</string>
<string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Split Customised"</string>
+ <!-- no translation found for recents_accessibility_dismissed (2354459747918667050) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_open (1651449827614876864) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_top (9056056469282256287) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_left (8987144699630620019) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_right (275069779299592867) -->
+ <skip />
<string-array name="recents_blacklist_array">
</string-array>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"Charged"</string>
@@ -414,20 +430,24 @@
<string name="disconnect_vpn" msgid="1324915059568548655">"Disconnect VPN"</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Your device is managed by <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
<string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> uses <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> to manage your device."</string>
- <string name="monitoring_description_do_body" msgid="6764108354701060766">"Your administrator can monitor and manage settings, corporate access, apps, data associated with your device and your device\'s location information."</string>
+ <!-- no translation found for monitoring_description_do_body (3639594537660975895) -->
+ <skip />
<string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
<string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Find out more"</string>
<string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"You\'re connected to <xliff:g id="VPN_APP">%1$s</xliff:g>, which can monitor your network activity, including emails, apps and websites."</string>
<string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
<string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Open VPN Settings"</string>
- <string name="monitoring_description_network_logging" msgid="3901006351911787915">"Your admin has turned on network logging, which monitors traffic on your device.\n\nFor more information contact your admin."</string>
+ <!-- no translation found for monitoring_description_network_logging (7223505523384076027) -->
+ <skip />
<string name="monitoring_description_vpn" msgid="4445150119515393526">"You gave an app permission to set up a VPN connection.\n\nThis app can monitor your device and network activity, including emails, apps and websites."</string>
- <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Your work profile is managed by <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nYour administrator is capable of monitoring your network activity including emails, apps, and websites.\n\nFor more information, contact your administrator.\n\nYou\'re also connected to a VPN, which can monitor your network activity."</string>
+ <!-- no translation found for monitoring_description_vpn_profile_owned (2958019119161161530) -->
+ <skip />
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"You\'re connected to <xliff:g id="APPLICATION">%1$s</xliff:g>, which can monitor your network activity including emails, apps and websites."</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"You\'re connected to <xliff:g id="APPLICATION">%1$s</xliff:g>, which can monitor your personal network activity, including emails, apps and websites."</string>
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"You\'re connected to <xliff:g id="APPLICATION">%1$s</xliff:g>, which can monitor your personal network activity, including emails, apps and websites."</string>
- <string name="monitoring_description_app_work" msgid="1754325860918060897">"Your work profile is managed by <xliff:g id="ORGANIZATION">%1$s</xliff:g>. It is connected to <xliff:g id="APPLICATION">%2$s</xliff:g>, which can monitor your work network activity, including emails, apps and websites.\n\nFor more information, contact your administrator."</string>
+ <!-- no translation found for monitoring_description_app_work (7777228449969022305) -->
+ <skip />
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Your work profile is managed by <xliff:g id="ORGANIZATION">%1$s</xliff:g>. It is connected to <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, which can monitor your work network activity, including emails, apps and websites.\n\nYou\'re also connected to <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, which can monitor your personal network activity."</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Device will stay locked until you manually unlock"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"Get notifications faster"</string>
diff --git a/packages/SystemUI/res/values-es-rUS/strings.xml b/packages/SystemUI/res/values-es-rUS/strings.xml
index 24a82ab..7379347 100644
--- a/packages/SystemUI/res/values-es-rUS/strings.xml
+++ b/packages/SystemUI/res/values-es-rUS/strings.xml
@@ -323,6 +323,12 @@
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Advertencia de <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
<string name="quick_settings_work_mode_label" msgid="6244915274350490429">"Modo de trabajo"</string>
<string name="quick_settings_night_display_label" msgid="3577098011487644395">"Luz nocturna"</string>
+ <!-- no translation found for quick_settings_nfc_label (9012153754816969325) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_off (6883274004315134333) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_on (6680317193676884311) -->
+ <skip />
<string name="recents_empty_message" msgid="808480104164008572">"No hay elementos recientes"</string>
<string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Todo borrado"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"Información de la aplicación"</string>
@@ -336,6 +342,16 @@
<string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"División horizontal"</string>
<string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"División vertical"</string>
<string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"División personalizada"</string>
+ <!-- no translation found for recents_accessibility_dismissed (2354459747918667050) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_open (1651449827614876864) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_top (9056056469282256287) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_left (8987144699630620019) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_right (275069779299592867) -->
+ <skip />
<string-array name="recents_blacklist_array">
</string-array>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"Cargada"</string>
@@ -416,20 +432,24 @@
<string name="disconnect_vpn" msgid="1324915059568548655">"Desconectar VPN"</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"<xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g> administra tu dispositivo."</string>
<string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> usa <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> para administrar tu dispositivo."</string>
- <string name="monitoring_description_do_body" msgid="6764108354701060766">"Tu administrador puede controlar la configuración, el acceso corporativo, las apps, los datos asociados y la información de ubicación de tu dispositivo."</string>
+ <!-- no translation found for monitoring_description_do_body (3639594537660975895) -->
+ <skip />
<string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
<string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Más información"</string>
<string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Estás conectado a <xliff:g id="VPN_APP">%1$s</xliff:g>, que puede controlar la actividad de tu red, incluidos los correos electrónicos, las apps y los sitios web."</string>
<string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
<string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Abrir configuración de VPN"</string>
- <string name="monitoring_description_network_logging" msgid="3901006351911787915">"Tu administrador activó el registro de red, que controla el tráfico en tu dispositivo.\n\nComunícate con él para obtener más información."</string>
+ <!-- no translation found for monitoring_description_network_logging (7223505523384076027) -->
+ <skip />
<string name="monitoring_description_vpn" msgid="4445150119515393526">"Permitiste que una aplicación configurara una conexión VPN.\n\nEsta aplicación puede supervisar la actividad de la red y del dispositivo, incluidos los correos electrónicos, las aplicaciones y los sitios web."</string>
- <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"<xliff:g id="ORGANIZATION">%1$s</xliff:g> administra tu perfil de trabajo.\n\nEl administrador puede supervisar la actividad de la red, incluidos los correos electrónicos, las aplicaciones y los sitios web.\n\nPara obtener más información, comunícate con el administrador.\n\nTambién tienes conexión a una VPN, que puede supervisar la actividad de tu red."</string>
+ <!-- no translation found for monitoring_description_vpn_profile_owned (2958019119161161530) -->
+ <skip />
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Tienes conexión a la aplicación <xliff:g id="APPLICATION">%1$s</xliff:g>, que puede supervisar la actividad de la red, incluidos los correos electrónicos, las aplicaciones y los sitios web."</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"Tienes conexión a la aplicación <xliff:g id="APPLICATION">%1$s</xliff:g>, que puede supervisar la actividad de la red personal, incluidos los correos electrónicos, las aplicaciones y los sitios web."</string>
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Te conectaste a <xliff:g id="APPLICATION">%1$s</xliff:g>, que puede supervisar la actividad de tu red personal, incluidos los correos electrónicos, las apps y los sitios web."</string>
- <string name="monitoring_description_app_work" msgid="1754325860918060897">"<xliff:g id="ORGANIZATION">%1$s</xliff:g> administra tu perfil de trabajo. Tiene conexión a <xliff:g id="APPLICATION">%2$s</xliff:g>, que puede supervisar la actividad de tu red de trabajo, incluidos los correos electrónicos, las aplicaciones y los sitios web.\n\nPara obtener más información, comunícate con el administrador."</string>
+ <!-- no translation found for monitoring_description_app_work (7777228449969022305) -->
+ <skip />
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"<xliff:g id="ORGANIZATION">%1$s</xliff:g> administra tu perfil de trabajo. Tiene conexión a <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, que puede supervisar la actividad de tu red de trabajo, incluidos los correos electrónicos, las aplicaciones y los sitios web.\n\nTambién tienes conexión a <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, que puede supervisar la actividad de la red personal."</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"El dispositivo permanecerá bloqueado hasta que lo desbloquees manualmente."</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"Recibe notificaciones más rápido"</string>
diff --git a/packages/SystemUI/res/values-es/strings.xml b/packages/SystemUI/res/values-es/strings.xml
index 76ea158..ea1d08f 100644
--- a/packages/SystemUI/res/values-es/strings.xml
+++ b/packages/SystemUI/res/values-es/strings.xml
@@ -323,6 +323,12 @@
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Advertencia de <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
<string name="quick_settings_work_mode_label" msgid="6244915274350490429">"Modo de trabajo"</string>
<string name="quick_settings_night_display_label" msgid="3577098011487644395">"Luz nocturna"</string>
+ <!-- no translation found for quick_settings_nfc_label (9012153754816969325) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_off (6883274004315134333) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_on (6680317193676884311) -->
+ <skip />
<string name="recents_empty_message" msgid="808480104164008572">"No hay elementos recientes"</string>
<string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Has rechazado todo"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"Información de la aplicación"</string>
@@ -336,6 +342,16 @@
<string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"División horizontal"</string>
<string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"División vertical"</string>
<string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"División personalizada"</string>
+ <!-- no translation found for recents_accessibility_dismissed (2354459747918667050) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_open (1651449827614876864) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_top (9056056469282256287) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_left (8987144699630620019) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_right (275069779299592867) -->
+ <skip />
<string-array name="recents_blacklist_array">
</string-array>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"Cargada"</string>
@@ -416,20 +432,24 @@
<string name="disconnect_vpn" msgid="1324915059568548655">"Desconectar VPN"</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Tu dispositivo está administrado por <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
<string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> utiliza <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> para administrar tu dispositivo."</string>
- <string name="monitoring_description_do_body" msgid="6764108354701060766">"Tu admin. puede controlar y gestionar ajustes, acceso corporativo, apps, datos asociados al dispositivo y sus datos de ubicación."</string>
+ <!-- no translation found for monitoring_description_do_body (3639594537660975895) -->
+ <skip />
<string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
<string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Más información"</string>
<string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Te has conectado a <xliff:g id="VPN_APP">%1$s</xliff:g>, que puede controlar tu actividad de red, como los correos electrónicos, las aplicaciones y los sitios web."</string>
<string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
<string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Abrir Ajustes de red VPN"</string>
- <string name="monitoring_description_network_logging" msgid="3901006351911787915">"Tu administrador ha activado el registro de la red para controlar el tráfico en tu dispositivo.\n\nPonte en contacto con él para obtener más información."</string>
+ <!-- no translation found for monitoring_description_network_logging (7223505523384076027) -->
+ <skip />
<string name="monitoring_description_vpn" msgid="4445150119515393526">"Has concedido permiso a una aplicación para configurar una conexión VPN.\n\nEsta aplicación puede controlar tu dispositivo y tu actividad de red, como correos electrónicos, aplicaciones y sitios web."</string>
- <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"El administrador de tu perfil de trabajo es <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nTu administrador puede supervisar tu actividad de red, como correos electrónicos, aplicaciones y sitios web.\n\nPara obtener más información, ponte en contacto con tu administrador.\n\nTambién estás conectado a una red VPN que puede supervisar tu actividad de red."</string>
+ <!-- no translation found for monitoring_description_vpn_profile_owned (2958019119161161530) -->
+ <skip />
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Estás conectado a <xliff:g id="APPLICATION">%1$s</xliff:g>, que puede controlar tu actividad de red, como correos electrónicos, aplicaciones y sitios web."</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"Estas conectado a <xliff:g id="APPLICATION">%1$s</xliff:g>, que puede controlar tu actividad de red personal, como correos electrónicos, aplicaciones y sitios web."</string>
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Estas conectado a <xliff:g id="APPLICATION">%1$s</xliff:g>, que puede controlar tu actividad de red personal, como correos electrónicos, aplicaciones y sitios web."</string>
- <string name="monitoring_description_app_work" msgid="1754325860918060897">"El administrador de tu perfil de trabajo es <xliff:g id="ORGANIZATION">%1$s</xliff:g> y está conectado a <xliff:g id="APPLICATION">%2$s</xliff:g>, que puede controlar tu actividad de red del trabajo, como correos electrónicos, aplicaciones y sitios web.\n\nPara obtener más información, ponte en contacto con el administrador."</string>
+ <!-- no translation found for monitoring_description_app_work (7777228449969022305) -->
+ <skip />
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"El administrador de tu perfil de trabajo es <xliff:g id="ORGANIZATION">%1$s</xliff:g> y está conectado a <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, que puede controlar tu actividad de red, como correos electrónicos, aplicaciones y sitios web.\n\nTú también estás conectado a <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, que puede controlar tu actividad de red personal."</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"El dispositivo permanecerá bloqueado hasta que se desbloquee manualmente"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"Recibe notificaciones más rápido"</string>
diff --git a/packages/SystemUI/res/values-et/strings.xml b/packages/SystemUI/res/values-et/strings.xml
index 696585b..e6f03a1 100644
--- a/packages/SystemUI/res/values-et/strings.xml
+++ b/packages/SystemUI/res/values-et/strings.xml
@@ -323,6 +323,12 @@
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> hoiatus"</string>
<string name="quick_settings_work_mode_label" msgid="6244915274350490429">"Töörežiim"</string>
<string name="quick_settings_night_display_label" msgid="3577098011487644395">"Öövalgus"</string>
+ <!-- no translation found for quick_settings_nfc_label (9012153754816969325) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_off (6883274004315134333) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_on (6680317193676884311) -->
+ <skip />
<string name="recents_empty_message" msgid="808480104164008572">"Hiljutisi üksusi pole"</string>
<string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Olete kõik ära kustutanud"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"Rakenduste teave"</string>
@@ -336,6 +342,16 @@
<string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Horisontaalne poolitamine"</string>
<string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Vertikaalne poolitamine"</string>
<string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Kohandatud poolitamine"</string>
+ <!-- no translation found for recents_accessibility_dismissed (2354459747918667050) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_open (1651449827614876864) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_top (9056056469282256287) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_left (8987144699630620019) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_right (275069779299592867) -->
+ <skip />
<string-array name="recents_blacklist_array">
</string-array>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"Laetud"</string>
@@ -416,20 +432,24 @@
<string name="disconnect_vpn" msgid="1324915059568548655">"Katkesta VPN-i ühendus"</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Teie seadet haldab rakendus <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
<string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"Organisatsioon <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> kasutab teie seadme haldamiseks rakendust <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g>."</string>
- <string name="monitoring_description_do_body" msgid="6764108354701060766">"Administraator saab jälgida ja hallata teie seadmega seotud seadeid, ettevõtte juurdepääsu, rakendusi ning andmeid ja teie seadme asukohateavet."</string>
+ <!-- no translation found for monitoring_description_do_body (3639594537660975895) -->
+ <skip />
<string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
<string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Lisateave"</string>
<string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Olete ühendatud rakendusega <xliff:g id="VPN_APP">%1$s</xliff:g>, mis saab jälgida teie võrgutegevusi, sh meile, rakendusi ja veebisaite."</string>
<string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
<string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Ava VPN-i seaded"</string>
- <string name="monitoring_description_network_logging" msgid="3901006351911787915">"Teie administraator on sisse lülitanud võrgu logimise funktsiooni, mis jälgib liiklust teie seadmes.\n\nLisateabe saamiseks pöörduge administraatori poole."</string>
+ <!-- no translation found for monitoring_description_network_logging (7223505523384076027) -->
+ <skip />
<string name="monitoring_description_vpn" msgid="4445150119515393526">"Andsite rakendusele loa VPN-i ühenduse seadistamiseks.\n\nSee rakendus võib jälgida teie seadet ja võrgutegevusi, sh meile, rakendusi ja veebisaite."</string>
- <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Teie tööprofiili haldab organisatsioon <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nAdministraator saab jälgida teie võrgutegevusi, sh meile, rakendusi ja veebisaite.\n\nLisateabe saamiseks võtke ühendust administraatoriga.\n\nTeil on ühendus ka VPN-iga, mis saab jälgida teie võrgutegevusi."</string>
+ <!-- no translation found for monitoring_description_vpn_profile_owned (2958019119161161530) -->
+ <skip />
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Teie seade on ühendatud rakendusega <xliff:g id="APPLICATION">%1$s</xliff:g>, mis võib jälgida teie võrgutegevusi, sh meile, rakendusi ja veebisaite."</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"Teie seade on ühendatud rakendusega <xliff:g id="APPLICATION">%1$s</xliff:g>, mis võib jälgida teie isiklikke võrgutegevusi, sh meile, rakendusi ja veebisaite."</string>
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Olete ühendatud rakendusega <xliff:g id="APPLICATION">%1$s</xliff:g>, mis võib jälgida teie isiklikke võrgutegevusi, sh meile, rakendusi ja veebisaite."</string>
- <string name="monitoring_description_app_work" msgid="1754325860918060897">"Teie tööprofiili haldab organisatsioon <xliff:g id="ORGANIZATION">%1$s</xliff:g>. See on ühendatud rakendusega <xliff:g id="APPLICATION">%2$s</xliff:g>, mis võib jälgida teie töökoha võrgutegevusi, sh meile, rakendusi ja veebisaite.\n\nLisateabe saamiseks võtke ühendust administraatoriga."</string>
+ <!-- no translation found for monitoring_description_app_work (7777228449969022305) -->
+ <skip />
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Teie tööprofiili haldab organisatsioon <xliff:g id="ORGANIZATION">%1$s</xliff:g>. See on ühendatud rakendusega <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, mis võib jälgida teie töökoha võrgutegevusi, sh meile, rakendusi ja veebisaite.\n\nTeie seade on ühendatud ka rakendusega <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, mis võib jälgida teie isiklikke võrgutegevusi."</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Seade jääb lukku, kuni selle käsitsi avate"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"Saate märguandeid kiiremini"</string>
diff --git a/packages/SystemUI/res/values-eu/strings.xml b/packages/SystemUI/res/values-eu/strings.xml
index 72cd63d..eff5931 100644
--- a/packages/SystemUI/res/values-eu/strings.xml
+++ b/packages/SystemUI/res/values-eu/strings.xml
@@ -323,6 +323,12 @@
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Abisua: <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
<string name="quick_settings_work_mode_label" msgid="6244915274350490429">"Lan modua"</string>
<string name="quick_settings_night_display_label" msgid="3577098011487644395">"Gaueko argia"</string>
+ <!-- no translation found for quick_settings_nfc_label (9012153754816969325) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_off (6883274004315134333) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_on (6680317193676884311) -->
+ <skip />
<string name="recents_empty_message" msgid="808480104164008572">"Ez dago azkenaldi honetako ezer"</string>
<string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Dena garbitu duzu"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"Aplikazioaren informazioa"</string>
@@ -336,6 +342,16 @@
<string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Zatitze horizontala"</string>
<string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Zatitze bertikala"</string>
<string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Zatitze pertsonalizatua"</string>
+ <!-- no translation found for recents_accessibility_dismissed (2354459747918667050) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_open (1651449827614876864) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_top (9056056469282256287) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_left (8987144699630620019) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_right (275069779299592867) -->
+ <skip />
<string-array name="recents_blacklist_array">
</string-array>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"Kargatuta"</string>
@@ -416,20 +432,24 @@
<string name="disconnect_vpn" msgid="1324915059568548655">"Deskonektatu VPN sarea"</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"<xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g> aplikazioak kudeatzen du gailu hau."</string>
<string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> erakundeak <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> erabiltzen du gailua kudeatzeko."</string>
- <string name="monitoring_description_do_body" msgid="6764108354701060766">"Gailuko ezarpenak, enpresa-sarbidea, aplikazioak eta datuak gainbegira eta kudea ditzake administratzaileak, baita gailuaren kokapen-informazioa ere."</string>
+ <!-- no translation found for monitoring_description_do_body (3639594537660975895) -->
+ <skip />
<string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
<string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Informazio gehiago"</string>
<string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"<xliff:g id="VPN_APP">%1$s</xliff:g> aplikaziora konektatuta zaude eta hark sareko jarduerak gainbegira ditzake, mezu elektronikoak, aplikazioak eta webguneak barne."</string>
<string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
<string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Ireki VPN ezarpenak"</string>
- <string name="monitoring_description_network_logging" msgid="3901006351911787915">"Administratzaileak sare-erregistroak aktibatu ditu; horrela, zure gailuko trafikoa gainbegira dezake.\n\nInformazio gehiago lortzeko, jarri administratzailearekin harremanetan."</string>
+ <!-- no translation found for monitoring_description_network_logging (7223505523384076027) -->
+ <skip />
<string name="monitoring_description_vpn" msgid="4445150119515393526">"Aplikazio bati VPN konexio bat konfiguratzeko baimena eman diozu.\n\nAplikazio horrek gailuko eta sareko jarduerak kontrola ditzake, mezu elektronikoak, aplikazioak eta webguneak barne."</string>
- <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"<xliff:g id="ORGANIZATION">%1$s</xliff:g> da laneko profilaren kudeatzailea.\n\nAdministratzaileak sareko jarduerak (mezu elektronikoak, aplikazioak eta webguneak barne) kontrola ditzake.\n\nInformazio gehiago lortzeko, jarri administratzailearekin harremanetan.\n\nHorrez gain, sareko jarduerak kontrola ditzakeen VPN batera konektatuta zaude."</string>
+ <!-- no translation found for monitoring_description_vpn_profile_owned (2958019119161161530) -->
+ <skip />
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN konexioa"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"<xliff:g id="APPLICATION">%1$s</xliff:g> aplikaziora konektatuta zaude. Aplikazio horrek sarean egiten dituzun jarduerak kontrola ditzake, mezu elektronikoak, aplikazioak eta webguneak barne."</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"<xliff:g id="APPLICATION">%1$s</xliff:g> aplikaziora konektatuta zaude. Aplikazio horrek sarean egiten dituzun jarduera pertsonalak kontrola ditzake, mezu elektronikoak, aplikazioak eta webguneak barne."</string>
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"<xliff:g id="APPLICATION">%1$s</xliff:g> aplikaziora konektatuta zaude. Aplikazio horrek sarean egiten dituzun jarduera pertsonalak kontrola ditzake, mezu elektronikoak, aplikazioak eta webguneak barne."</string>
- <string name="monitoring_description_app_work" msgid="1754325860918060897">"<xliff:g id="ORGANIZATION">%1$s</xliff:g> da laneko profilaren kudeatzailea, eta profila <xliff:g id="APPLICATION">%2$s</xliff:g> aplikaziora konektatuta dago. Aplikazio horrek sarean egiten dituzun laneko jarduerak kontrola ditzake, mezu elektronikoak, aplikazioak eta webguneak barne.\n\nInformazio gehiago lortzeko, jarri administratzailearekin harremanetan."</string>
+ <!-- no translation found for monitoring_description_app_work (7777228449969022305) -->
+ <skip />
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"<xliff:g id="ORGANIZATION">%1$s</xliff:g> da laneko profilaren kudeatzailea, eta profila <xliff:g id="APPLICATION_WORK">%2$s</xliff:g> aplikaziora konektatuta dago. Aplikazio horrek sarean egiten dituzun laneko jarduerak kontrola ditzake, mezu elektronikoak, aplikazioak eta webguneak barne.\n\nHorrez gain, sarean egiten dituzun jarduera pertsonalak kontrola ditzakeen <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g> aplikaziora konektatuta zaude."</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Gailua blokeatuta egongo da eskuz desblokeatu arte"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"Eskuratu jakinarazpenak azkarrago"</string>
diff --git a/packages/SystemUI/res/values-fa/strings.xml b/packages/SystemUI/res/values-fa/strings.xml
index 7c63beb..8cba6a9 100644
--- a/packages/SystemUI/res/values-fa/strings.xml
+++ b/packages/SystemUI/res/values-fa/strings.xml
@@ -321,6 +321,12 @@
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"هشدار <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
<string name="quick_settings_work_mode_label" msgid="6244915274350490429">"حالت کار"</string>
<string name="quick_settings_night_display_label" msgid="3577098011487644395">"نور شب"</string>
+ <!-- no translation found for quick_settings_nfc_label (9012153754816969325) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_off (6883274004315134333) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_on (6680317193676884311) -->
+ <skip />
<string name="recents_empty_message" msgid="808480104164008572">"بدون موارد اخیر"</string>
<string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"همهچیز را پاک کردهاید"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"اطلاعات برنامه"</string>
@@ -334,6 +340,16 @@
<string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"تقسیم افقی"</string>
<string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"تقسیم عمودی"</string>
<string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"سفارشی کردن تقسیم"</string>
+ <!-- no translation found for recents_accessibility_dismissed (2354459747918667050) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_open (1651449827614876864) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_top (9056056469282256287) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_left (8987144699630620019) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_right (275069779299592867) -->
+ <skip />
<string-array name="recents_blacklist_array">
</string-array>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"شارژ کامل شد"</string>
@@ -414,20 +430,24 @@
<string name="disconnect_vpn" msgid="1324915059568548655">"قطع اتصال VPN"</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"<xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g> دستگاه شما را مدیریت میکند."</string>
<string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> با استفاده از <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> دستگاهتان را مدیریت میکند."</string>
- <string name="monitoring_description_do_body" msgid="6764108354701060766">"سرپرست سیستم شما میتواند بر تنظیمات، دسترسی شرکتی، برنامهها، دادههای مرتبط با دستگاه و اطلاعات مکان دستگاهتان نظارت داشته باشد و آنها را مدیریت کند."</string>
+ <!-- no translation found for monitoring_description_do_body (3639594537660975895) -->
+ <skip />
<string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
<string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"بیشتر بدانید"</string>
<string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"به <xliff:g id="VPN_APP">%1$s</xliff:g> وصل شدهاید، که میتواند فعالیت شبکه شما را (ازجمله رایانامهها، برنامهها و وبسایتها) کنترل کند."</string>
<string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
<string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"باز کردن تنظیمات VPN"</string>
- <string name="monitoring_description_network_logging" msgid="3901006351911787915">"سرپرست شما گزارشگیری شبکه را (که بر ترافیک دستگاهتان نظارت میکند) روشن کرده است.\n\nبرای اطلاعات بیشتر با سرپرست خود تماس بگیرید."</string>
+ <!-- no translation found for monitoring_description_network_logging (7223505523384076027) -->
+ <skip />
<string name="monitoring_description_vpn" msgid="4445150119515393526">"شما به برنامهای برای تنظیم اتصال VPN اجازه دادید.\n\n این برنامه میتواند دستگاه و فعالیت شبکهتان را کنترل کند، از جمله رایانامه، برنامه و وبسایتها."</string>
- <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"نمایه کاری شما توسط <xliff:g id="ORGANIZATION">%1$s</xliff:g> مدیریت میشود.\n\nسرپرستتان میتواند فعالیت شبکهتان از جمله رایانامه، برنامه و وبسایتها را کنترل کند.\n\nبرای دریافت اطلاعات بیشتر با سرپرستتان تماس بگیرید.\n\nهمچنین به یک VPN وصل هستید که میتواند فعالیت شبکه شما را کنترل کند."</string>
+ <!-- no translation found for monitoring_description_vpn_profile_owned (2958019119161161530) -->
+ <skip />
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"شما به <xliff:g id="APPLICATION">%1$s</xliff:g> وصل شدهاید، که میتواند فعالیت شبکه شما از جمله رایانامه، برنامه و وبسایتها را کنترل کند."</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"شما به <xliff:g id="APPLICATION">%1$s</xliff:g> وصل شدهاید، که میتواند فعالیت شبکه شخصی شما از جمله رایانامه، برنامه و وبسایتها را کنترل کند."</string>
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"به <xliff:g id="APPLICATION">%1$s</xliff:g> وصل شدهاید، که میتواند فعالیت شبکه شخصی شما را (ازجمله رایانامهها، برنامهها و وبسایتها) کنترل کند."</string>
- <string name="monitoring_description_app_work" msgid="1754325860918060897">"نمایه کاریتان توسط <xliff:g id="ORGANIZATION">%1$s</xliff:g> مدیریت میشود. این به <xliff:g id="APPLICATION">%2$s</xliff:g> وصل است که فعالیت شبکه کاریتان از جمله رایانامه، برنامه و وبسایتها را کنترل میکند.\n\nبرای دریافت اطلاعات بیشتر، با سرپرستتان تماس بگیرید."</string>
+ <!-- no translation found for monitoring_description_app_work (7777228449969022305) -->
+ <skip />
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"نمایه کاری شما توسط <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_disabled" msgid="7412534203633528135">"دستگاه قفل باقی میماند تا زمانی که قفل آن را به صورت دستی باز کنید"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"دریافت سریعتر اعلانها"</string>
diff --git a/packages/SystemUI/res/values-fi/strings.xml b/packages/SystemUI/res/values-fi/strings.xml
index d6ce213..89178d6 100644
--- a/packages/SystemUI/res/values-fi/strings.xml
+++ b/packages/SystemUI/res/values-fi/strings.xml
@@ -321,6 +321,12 @@
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> – varoitus"</string>
<string name="quick_settings_work_mode_label" msgid="6244915274350490429">"Työtila"</string>
<string name="quick_settings_night_display_label" msgid="3577098011487644395">"Yövalo"</string>
+ <!-- no translation found for quick_settings_nfc_label (9012153754816969325) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_off (6883274004315134333) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_on (6680317193676884311) -->
+ <skip />
<string name="recents_empty_message" msgid="808480104164008572">"Ei viimeaikaisia kohteita"</string>
<string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Kaikki on hoidettu."</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"Sovellustiedot"</string>
@@ -334,6 +340,16 @@
<string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Vaakasuuntainen jako"</string>
<string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Pystysuuntainen jako"</string>
<string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Muokattu jako"</string>
+ <!-- no translation found for recents_accessibility_dismissed (2354459747918667050) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_open (1651449827614876864) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_top (9056056469282256287) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_left (8987144699630620019) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_right (275069779299592867) -->
+ <skip />
<string-array name="recents_blacklist_array">
</string-array>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"Ladattu"</string>
@@ -414,20 +430,24 @@
<string name="disconnect_vpn" msgid="1324915059568548655">"Katkaise VPN-yhteys"</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Laitettasi hallinnoi <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
<string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> hallinnoi laitettasi sovelluksen <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> avulla."</string>
- <string name="monitoring_description_do_body" msgid="6764108354701060766">"Järjestelmänvalvoja voi valvoa ja hallinnoida asetuksia, yrityskäyttöä, sovelluksia, laitteen sijaintitietoja ja muita tietoja."</string>
+ <!-- no translation found for monitoring_description_do_body (3639594537660975895) -->
+ <skip />
<string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
<string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Lisätietoja"</string>
<string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Olet yhteydessä sovellukseen <xliff:g id="VPN_APP">%1$s</xliff:g>, joka voi valvoa verkkotoimintaasi, esimerkiksi sähköposteja, sovelluksia ja verkkosivustoja."</string>
<string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
<string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Avaa VPN-asetukset"</string>
- <string name="monitoring_description_network_logging" msgid="3901006351911787915">"Järjestelmänvalvoja on ottanut käyttöön verkkolokitiedostojen tallentamisen. Sen avulla seurataan laitteellasi tapahtuvaa liikennettä.\n\nPyydä lisätietoja järjestelmänvalvojalta."</string>
+ <!-- no translation found for monitoring_description_network_logging (7223505523384076027) -->
+ <skip />
<string name="monitoring_description_vpn" msgid="4445150119515393526">"Olet myöntänyt sovellukselle oikeuden VPN-yhteyden muodostamiseen.\n\nSovellus voi valvoa laitettasi ja toimintaasi verkossa, esimerkiksi avaamiasi sähköposteja, sovelluksia ja verkkosivustoja."</string>
- <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Työprofiiliasi hallinnoi <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nJärjestelmänvalvojasi voi valvoa toimintaasi verkossa. Hän voi seurata esimerkiksi avaamiasi sähköposteja, sovelluksia ja verkkosivustoja.\n\nLisätietoja saat järjestelmänvalvojaltasi.\n\nLisäksi olet muodostanut yhteyden VPN-palveluun, joka voi valvoa toimintaasi verkossa."</string>
+ <!-- no translation found for monitoring_description_vpn_profile_owned (2958019119161161530) -->
+ <skip />
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Olet muodostanut yhteyden sovellukseen <xliff:g id="APPLICATION">%1$s</xliff:g>, joka voi valvoa toimintaasi verkossa. Sovellus voi seurata esimerkiksi avaamiasi sähköposteja, sovelluksia ja verkkosivustoja."</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"Olet muodostanut yhteyden sovellukseen <xliff:g id="APPLICATION">%1$s</xliff:g>, joka voi valvoa henkilökohtaista toimintaasi verkossa. Sovellus voi seurata esimerkiksi avaamiasi sähköposteja, sovelluksia ja verkkosivustoja."</string>
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Olet muodostanut yhteyden sovellukseen <xliff:g id="APPLICATION">%1$s</xliff:g>, joka voi valvoa henkilökohtaista toimintaasi verkossa. Sovellus voi esimerkiksi seurata avaamiasi sähköposteja, sovelluksia ja verkkosivustoja."</string>
- <string name="monitoring_description_app_work" msgid="1754325860918060897">"Työprofiiliasi hallinnoi <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Se on yhteydessä sovellukseen <xliff:g id="APPLICATION">%2$s</xliff:g>, joka voi valvoa työhön liittyvää toimintaasi verkossa. Sovellus voi seurata esimerkiksi avaamiasi sähköposteja, sovelluksia ja verkkosivustoja.\n\nSaat lisätietoja järjestelmänvalvojaltasi."</string>
+ <!-- no translation found for monitoring_description_app_work (7777228449969022305) -->
+ <skip />
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Työprofiiliasi hallinnoi <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Se on yhteydessä sovellukseen <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, joka voi valvoa työhön liittyvää toimintaasi verkossa. Sovellus voi seurata esimerkiksi avaamiasi sähköposteja, sovelluksia ja verkkosivustoja.\n\nLisäksi olet yhteydessä sovellukseen <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, joka voi valvoa henkilökohtaista toimintaasi verkossa."</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Laite pysyy lukittuna, kunnes se avataan käsin"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"Näe ilmoitukset nopeammin"</string>
diff --git a/packages/SystemUI/res/values-fr-rCA/strings.xml b/packages/SystemUI/res/values-fr-rCA/strings.xml
index 897890a..a26f155 100644
--- a/packages/SystemUI/res/values-fr-rCA/strings.xml
+++ b/packages/SystemUI/res/values-fr-rCA/strings.xml
@@ -323,6 +323,12 @@
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Avertissement : <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
<string name="quick_settings_work_mode_label" msgid="6244915274350490429">"Mode Travail"</string>
<string name="quick_settings_night_display_label" msgid="3577098011487644395">"Éclairage nocturne"</string>
+ <!-- no translation found for quick_settings_nfc_label (9012153754816969325) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_off (6883274004315134333) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_on (6680317193676884311) -->
+ <skip />
<string name="recents_empty_message" msgid="808480104164008572">"Aucun élément récent"</string>
<string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Vous avez tout effacé"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"Détails de l\'application"</string>
@@ -336,6 +342,16 @@
<string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Séparation horizontale"</string>
<string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Séparation verticale"</string>
<string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Séparation personnalisée"</string>
+ <!-- no translation found for recents_accessibility_dismissed (2354459747918667050) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_open (1651449827614876864) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_top (9056056469282256287) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_left (8987144699630620019) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_right (275069779299592867) -->
+ <skip />
<string-array name="recents_blacklist_array">
</string-array>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"Chargée"</string>
@@ -416,20 +432,24 @@
<string name="disconnect_vpn" msgid="1324915059568548655">"Déconnecter le RPV"</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Votre appareil est géré par <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
<string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> utilise <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> pour gérer votre appareil."</string>
- <string name="monitoring_description_do_body" msgid="6764108354701060766">"L\'admin. de l\'entreprise peut surv. et gérer les param., l\'accès, les applis et les données de cet app., y compris sa localisation"</string>
+ <!-- no translation found for monitoring_description_do_body (3639594537660975895) -->
+ <skip />
<string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
<string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"En savoir plus"</string>
<string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Vous êtes connecté à <xliff:g id="VPN_APP">%1$s</xliff:g>, qui peut contrôler votre activité réseau, y compris les courriels, les applications et les sites Web."</string>
<string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
<string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Paramètres RPV ouverts"</string>
- <string name="monitoring_description_network_logging" msgid="3901006351911787915">"Votre administrateur a activé la journalisation réseau, qui surveille le trafic sur votre appareil.\n\nPour en savoir plus, communiquez avec lui."</string>
+ <!-- no translation found for monitoring_description_network_logging (7223505523384076027) -->
+ <skip />
<string name="monitoring_description_vpn" msgid="4445150119515393526">"Vous avez autorisé une application à configurer une connexion RPV.\n\nCette application peut contrôler l\'activité de votre appareil et votre activité sur le réseau, y compris les courriels, les applications et les sites Web."</string>
- <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Votre profil professionnel est géré par <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nVotre administrateur peut contrôler votre activité sur le réseau, y compris les courriels, les applications et les sites Web.\n\nPour en savoir plus, communiquez avec votre administrateur.\n\nVous êtes également connecté à un RPV qui peut contrôler votre activité sur le réseau."</string>
+ <!-- no translation found for monitoring_description_vpn_profile_owned (2958019119161161530) -->
+ <skip />
<string name="legacy_vpn_name" msgid="6604123105765737830">"RPV"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Vous êtes connecté à <xliff:g id="APPLICATION">%1$s</xliff:g>. Cette application peut contrôler votre activité sur le réseau, y compris les courriels, les applications et les sites Web."</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"Vous êtes connecté à <xliff:g id="APPLICATION">%1$s</xliff:g>. Cette application peut contrôler votre activité personnelle sur le réseau, y compris les courriels, les applications et les sites Web."</string>
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Vous êtes connecté à <xliff:g id="APPLICATION">%1$s</xliff:g>. Cette application peut contrôler votre activité personnelle sur le réseau, y compris les courriels, les applications et les sites Web."</string>
- <string name="monitoring_description_app_work" msgid="1754325860918060897">"Votre profil professionnel est géré par <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Il est connecté à <xliff:g id="APPLICATION">%2$s</xliff:g>. Cette application peut contrôler votre activité sur le réseau, y compris les courriels, les applications et les sites Web.\n\nPour en savoir plus, communiquez avec votre administrateur."</string>
+ <!-- no translation found for monitoring_description_app_work (7777228449969022305) -->
+ <skip />
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Votre profil professionnel est géré par <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Il est connecté à <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>. Cette application peut contrôler votre activité sur le réseau, y compris les courriels, les applications et les sites Web.\n\nVous êtes également connecté à <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>. Cette application peut contrôler votre activité personnelle sur le réseau."</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"L\'appareil restera verrouillé jusqu\'à ce que vous le déverrouilliez manuellement"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"Voir les notifications plus rapidement"</string>
diff --git a/packages/SystemUI/res/values-fr/strings.xml b/packages/SystemUI/res/values-fr/strings.xml
index 90bec35..4090aed 100644
--- a/packages/SystemUI/res/values-fr/strings.xml
+++ b/packages/SystemUI/res/values-fr/strings.xml
@@ -323,6 +323,12 @@
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Avertissement : <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
<string name="quick_settings_work_mode_label" msgid="6244915274350490429">"Mode Travail"</string>
<string name="quick_settings_night_display_label" msgid="3577098011487644395">"Éclairage nocturne"</string>
+ <!-- no translation found for quick_settings_nfc_label (9012153754816969325) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_off (6883274004315134333) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_on (6680317193676884311) -->
+ <skip />
<string name="recents_empty_message" msgid="808480104164008572">"Aucun élément récent"</string>
<string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Vous avez tout effacé."</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"Infos application"</string>
@@ -336,6 +342,16 @@
<string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Séparation horizontale"</string>
<string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Séparation verticale"</string>
<string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Séparation personnalisée"</string>
+ <!-- no translation found for recents_accessibility_dismissed (2354459747918667050) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_open (1651449827614876864) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_top (9056056469282256287) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_left (8987144699630620019) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_right (275069779299592867) -->
+ <skip />
<string-array name="recents_blacklist_array">
</string-array>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"Chargé"</string>
@@ -416,20 +432,24 @@
<string name="disconnect_vpn" msgid="1324915059568548655">"Déconnecter le VPN"</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Votre appareil est géré par <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
<string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> utilise <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> pour gérer votre appareil."</string>
- <string name="monitoring_description_do_body" msgid="6764108354701060766">"Votre administrateur peut contrôler et gérer paramètres, accès aux contenus entreprise, applications, données et informations de localisation associées à cet appareil."</string>
+ <!-- no translation found for monitoring_description_do_body (3639594537660975895) -->
+ <skip />
<string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
<string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"En savoir plus"</string>
<string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Vous êtes connecté à <xliff:g id="VPN_APP">%1$s</xliff:g>, qui peut contrôler votre activité sur le réseau, y compris les e-mails, les applications et les sites Web."</string>
<string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
<string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Ouvrir les paramètres VPN"</string>
- <string name="monitoring_description_network_logging" msgid="3901006351911787915">"Votre administrateur a activé la journalisation réseau, qui surveille le trafic sur votre appareil.\n\nPour en savoir plus, contactez-le."</string>
+ <!-- no translation found for monitoring_description_network_logging (7223505523384076027) -->
+ <skip />
<string name="monitoring_description_vpn" msgid="4445150119515393526">"Vous avez autorisé une application à configurer une connexion VPN.\n\nCette application peut contrôler l\'activité de votre appareil et votre activité sur le réseau, y compris votre activité relative aux e-mails, aux applications et aux sites Web."</string>
- <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Votre profil professionnel est géré par <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nVotre administrateur peut contrôler votre activité sur le réseau (e-mails, applications et sites Web).\n\nPour en savoir plus, contactez votre administrateur.\n\nVous êtes également connecté à un VPN qui peut contrôler votre activité sur le réseau."</string>
+ <!-- no translation found for monitoring_description_vpn_profile_owned (2958019119161161530) -->
+ <skip />
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Vous êtes connecté à <xliff:g id="APPLICATION">%1$s</xliff:g>. Cette application peut contrôler votre activité sur le réseau, y compris l\'activité relative aux e-mails, aux applications et aux sites Web."</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"Vous êtes connecté à <xliff:g id="APPLICATION">%1$s</xliff:g>. Cette application peut contrôler votre activité personnelle sur le réseau, y compris votre activité relative aux e-mails, aux applications et aux sites Web."</string>
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Vous êtes connecté à <xliff:g id="APPLICATION">%1$s</xliff:g>. Cette application peut contrôler votre activité personnelle sur le réseau, y compris les e-mails, les applications et les sites Web."</string>
- <string name="monitoring_description_app_work" msgid="1754325860918060897">"Votre profil professionnel est géré par <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Il est connecté à <xliff:g id="APPLICATION">%2$s</xliff:g>. Cette application peut contrôler l\'activité de ce profil sur le réseau, y compris l\'activité relative aux e-mails, aux applications et aux sites Web.\n\nPour en savoir plus, contactez votre administrateur."</string>
+ <!-- no translation found for monitoring_description_app_work (7777228449969022305) -->
+ <skip />
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Votre profil professionnel est géré par <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Il est connecté à <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>. Cette application peut contrôler l\'activité de ce profil sur le réseau, y compris l\'activité relative aux e-mails, aux applications et aux sites Web.\n\nVous êtes également connecté à <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>. Cette application peut surveiller votre activité personnelle sur le réseau."</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"L\'appareil restera verrouillé jusqu\'à ce que vous le déverrouilliez manuellement."</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"Recevoir les notifications plus vite"</string>
diff --git a/packages/SystemUI/res/values-gl/strings.xml b/packages/SystemUI/res/values-gl/strings.xml
index 7d9b137..881d967 100644
--- a/packages/SystemUI/res/values-gl/strings.xml
+++ b/packages/SystemUI/res/values-gl/strings.xml
@@ -323,6 +323,12 @@
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Advertencia <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
<string name="quick_settings_work_mode_label" msgid="6244915274350490429">"Modo de traballo"</string>
<string name="quick_settings_night_display_label" msgid="3577098011487644395">"Luz nocturna"</string>
+ <!-- no translation found for quick_settings_nfc_label (9012153754816969325) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_off (6883274004315134333) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_on (6680317193676884311) -->
+ <skip />
<string name="recents_empty_message" msgid="808480104164008572">"Non hai elementos recentes"</string>
<string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Borraches todo"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"Información da aplicación"</string>
@@ -336,6 +342,16 @@
<string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Dividir en horizontal"</string>
<string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Dividir en vertical"</string>
<string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Dividir de xeito personalizado"</string>
+ <!-- no translation found for recents_accessibility_dismissed (2354459747918667050) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_open (1651449827614876864) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_top (9056056469282256287) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_left (8987144699630620019) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_right (275069779299592867) -->
+ <skip />
<string-array name="recents_blacklist_array">
</string-array>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"Cargada"</string>
@@ -416,20 +432,24 @@
<string name="disconnect_vpn" msgid="1324915059568548655">"Desconectar VPN"</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"O teu dispositivo está xestionado por <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
<string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> utiliza <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> para xestionar o teu dispositivo."</string>
- <string name="monitoring_description_do_body" msgid="6764108354701060766">"Para este dispositivo, o administrador pode controlar: configuración, acceso, aplicacións, datos e información de localización."</string>
+ <!-- no translation found for monitoring_description_do_body (3639594537660975895) -->
+ <skip />
<string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
<string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Máis información"</string>
<string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Estás conectado a <xliff:g id="VPN_APP">%1$s</xliff:g>, que pode controlar a túa actividade na rede, mesmo os correos electrónicos, as aplicacións e os sitios web."</string>
<string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
<string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Abrir configuración da VPN"</string>
- <string name="monitoring_description_network_logging" msgid="3901006351911787915">"O administrador activou o rexistro na rede, que controla o tráfico do teu dispositivo.\n\nPara obter máis información, contacta co teu administrador."</string>
+ <!-- no translation found for monitoring_description_network_logging (7223505523384076027) -->
+ <skip />
<string name="monitoring_description_vpn" msgid="4445150119515393526">"Outorgaches permiso a unha aplicación para configurar unha conexión VPN.\n\nEsta aplicación pode supervisar a túa actividade na rede, incluídos os correos electrónicos, as aplicacións e os sitios web."</string>
- <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"O teu perfil de traballo está xestionado por <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nO teu administrador é capaz de supervisar a túa actividade na rede, incluídos os correos electrónicos, as aplicacións e os sitios web.\n\nPara obter máis información, ponte en contacto co teu administrador.\n\nTamén estás conectado a unha VPN, que pode supervisar a túa actividade na rede."</string>
+ <!-- no translation found for monitoring_description_vpn_profile_owned (2958019119161161530) -->
+ <skip />
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Estás conectado a <xliff:g id="APPLICATION">%1$s</xliff:g>, que pode supervisar a túa actividade na rede, incluídos os correos electrónicos, as aplicacións e os sitios web."</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"Estás conectado a <xliff:g id="APPLICATION">%1$s</xliff:g>, que pode supervisar a túa actividade persoal na rede, incluídos os correos electrónicos, as aplicacións e os sitios web."</string>
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Estás conectado a <xliff:g id="APPLICATION">%1$s</xliff:g>, que pode supervisar a túa actividade persoal na rede, incluídos os correos electrónicos, as aplicacións e os sitios web."</string>
- <string name="monitoring_description_app_work" msgid="1754325860918060897">"O teu perfil de traballo está xestionado por <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Está conectado a <xliff:g id="APPLICATION">%2$s</xliff:g>, que pode supervisar a túa actividade na rede, incluídos os correos electrónicos, as aplicacións e os sitios web.\n\nPara obter máis información, ponte en contacto co teu administrador."</string>
+ <!-- no translation found for monitoring_description_app_work (7777228449969022305) -->
+ <skip />
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"O teu perfil de traballo está xestionado por <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Está conectado a <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, que pode supervisar a túa actividade na rede, incluídos os correos electrónicos, as aplicacións e os sitios web.\n\nTamén estás conectado a <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, que pode supervisar a túa actividade persoal na rede."</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"O dispositivo permanecerá bloqueado ata que o desbloquees manualmente"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"Recibir notificacións máis rápido"</string>
diff --git a/packages/SystemUI/res/values-gu/strings.xml b/packages/SystemUI/res/values-gu/strings.xml
index 3bc21e1..1b9ea1d 100644
--- a/packages/SystemUI/res/values-gu/strings.xml
+++ b/packages/SystemUI/res/values-gu/strings.xml
@@ -321,6 +321,12 @@
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> ચેતવણી"</string>
<string name="quick_settings_work_mode_label" msgid="6244915274350490429">"કાર્ય મોડ"</string>
<string name="quick_settings_night_display_label" msgid="3577098011487644395">"રાત્રિ પ્રકાશ"</string>
+ <!-- no translation found for quick_settings_nfc_label (9012153754816969325) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_off (6883274004315134333) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_on (6680317193676884311) -->
+ <skip />
<string name="recents_empty_message" msgid="808480104164008572">"કોઇ તાજેતરની આઇટમ્સ નથી"</string>
<string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"તમે બધું સાફ કર્યું"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"ઍપ્લિકેશન માહિતી"</string>
@@ -334,6 +340,16 @@
<string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"આડું વિભક્ત કરો"</string>
<string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"ઊભું વિભક્ત કરો"</string>
<string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"કસ્ટમ વિભક્ત કરો"</string>
+ <!-- no translation found for recents_accessibility_dismissed (2354459747918667050) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_open (1651449827614876864) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_top (9056056469282256287) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_left (8987144699630620019) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_right (275069779299592867) -->
+ <skip />
<string-array name="recents_blacklist_array">
</string-array>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"ચાર્જ થઈ ગયું"</string>
@@ -414,20 +430,24 @@
<string name="disconnect_vpn" msgid="1324915059568548655">"VPN ડિસ્કનેક્ટ કરો"</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"તમારું ઉપકરણ <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g> દ્વારા સંચાલિત થાય છે."</string>
<string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>, તમારા ઉપકરણનું સંચાલન કરવા માટે <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> નો ઉપયોગ કરે છે."</string>
- <string name="monitoring_description_do_body" msgid="6764108354701060766">"તમારા વ્યવસ્થાપક સેટિંગ્સ, કૉર્પોરેટ ઍક્સેસ, ઍપ્સ, તમારા ઉપકરણ સાથે સંકળાયેલ ડેટા અને તમારા ઉપકરણની સ્થાન માહિતીને મૉનિટર અને સંચાલિત કરી શકે છે."</string>
+ <!-- no translation found for monitoring_description_do_body (3639594537660975895) -->
+ <skip />
<string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
<string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"વધુ જાણો"</string>
<string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"તમે <xliff:g id="VPN_APP">%1$s</xliff:g> સાથે કનેક્ટ થયાં છો, જે ઇમેઇલ્સ, ઍપ્લિકેશનો અને વેબસાઇટ્સ સહિત તમારી નેટવર્ક પ્રવૃત્તિને મૉનિટર કરી શકે છે."</string>
<string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
<string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"VPN સેટિંગ્સ ખોલો"</string>
- <string name="monitoring_description_network_logging" msgid="3901006351911787915">"તમારા વ્યવસ્થાપકે નેટવર્ક લૉગિંગ ચાલુ કરેલ છે, જે તમારા ઉપકરણ પર ટ્રાફિકને મૉનિટર કરે છે.\n\nવધુ માહિતી માટે, તમારા વ્યવસ્થાપકનો સંપર્ક કરો."</string>
+ <!-- no translation found for monitoring_description_network_logging (7223505523384076027) -->
+ <skip />
<string name="monitoring_description_vpn" msgid="4445150119515393526">"તમે VPN કનેક્શન સેટ કરવા માટે ઍપ્લિકેશન પરવાનગી આપી.\n\nઆ ઍપ્લિકેશન ઇમેઇલ્સ, ઍપ્લિકેશનો અને વેબસાઇટ્સ સહિત તમારા ઉપકરણ અને નેટવર્ક પ્રવૃત્તિને મૉનિટર કરી શકે છે."</string>
- <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"તમારી કાર્ય પ્રોફાઇલ <xliff:g id="ORGANIZATION">%1$s</xliff:g> દ્વારા સંચાલિત થાય છે.\n\nતમારા વ્યવસ્થાપક ઇમેઇલ્સ, ઍપ્લિકેશનો અને વેબસાઇટ્સ સહિતની તમારી નેટવર્ક પ્રવૃત્તિને મૉનિટર કરવામાં સમર્થ છે.\n\nવધુ માહિતી માટે, તમારા વ્યવસ્થાપકનો સંપર્ક કરો.\n\nતમે VPN સાથે પણ કનેક્ટ છો, જે તમારી નેટવર્ક પ્રવૃત્તિને મૉનિટર કરી શકે છે."</string>
+ <!-- no translation found for monitoring_description_vpn_profile_owned (2958019119161161530) -->
+ <skip />
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"તમે <xliff:g id="APPLICATION">%1$s</xliff:g> સાથે કનેક્ટ થયાં છો, જે ઇમેઇલ્સ, ઍપ્લિકેશનો અને વેબસાઇટ્સ સહિતની તમારી નેટવર્ક પ્રવૃત્તિને મૉનિટર કરી શકે છે."</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"તમે <xliff:g id="APPLICATION">%1$s</xliff:g> સાથે કનેક્ટ થયાં છો, જે ઇમેઇલ્સ, ઍપ્લિકેશનો અને વેબસાઇટ્સ સહિતની તમારી વ્યક્તિગત નેટવર્ક પ્રવૃત્તિને મૉનિટર કરી શકે છે."</string>
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"તમે <xliff:g id="APPLICATION">%1$s</xliff:g> સાથે કનેક્ટ થયાં છો, જે ઇમેઇલ્સ, ઍપ્લિકેશનો અને વેબસાઇટ્સ સહિત તમારી વ્યક્તિગત નેટવર્ક પ્રવૃત્તિને મૉનિટર કરી શકે છે."</string>
- <string name="monitoring_description_app_work" msgid="1754325860918060897">"તમારી કાર્ય પ્રોફાઇલ <xliff:g id="ORGANIZATION">%1$s</xliff:g> દ્વારા સંચાલિત થાય છે. તે <xliff:g id="APPLICATION">%2$s</xliff:g> સાથે કનેક્ટ થયેલ છે, જે ઇમેઇલ્સ, ઍપ્લિકેશનો અને વેબસાઇટ્સ સહિતની તમારી કાર્ય નેટવર્ક પ્રવૃત્તિને મૉનિટર કરી શકે છે.\n\nવધુ માહિતી માટે, તમારા વ્યવસ્થાપકનો સંપર્ક કરો."</string>
+ <!-- no translation found for monitoring_description_app_work (7777228449969022305) -->
+ <skip />
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"તમારી કાર્ય પ્રોફાઇલ <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_disabled" msgid="7412534203633528135">"તમે ઉપકરણને મેન્યુઅલી અનલૉક કરશો નહીં ત્યાં સુધી તે લૉક રહેશે"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"વધુ ઝડપથી સૂચનાઓ મેળવો"</string>
diff --git a/packages/SystemUI/res/values-hi/strings.xml b/packages/SystemUI/res/values-hi/strings.xml
index e019e09..84dc2c4 100644
--- a/packages/SystemUI/res/values-hi/strings.xml
+++ b/packages/SystemUI/res/values-hi/strings.xml
@@ -321,6 +321,12 @@
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> चेतावनी"</string>
<string name="quick_settings_work_mode_label" msgid="6244915274350490429">"कार्य मोड"</string>
<string name="quick_settings_night_display_label" msgid="3577098011487644395">"नाइट लाइट"</string>
+ <!-- no translation found for quick_settings_nfc_label (9012153754816969325) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_off (6883274004315134333) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_on (6680317193676884311) -->
+ <skip />
<string name="recents_empty_message" msgid="808480104164008572">"हाल ही का कोई आइटम नहीं"</string>
<string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"आपने सब कुछ साफ़ कर दिया है"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"एप्लिकेशन जानकारी"</string>
@@ -334,6 +340,16 @@
<string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"क्षैतिज रूप से विभाजित करें"</string>
<string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"लम्बवत रूप से विभाजित करें"</string>
<string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"कस्टम रूप से विभाजित करें"</string>
+ <!-- no translation found for recents_accessibility_dismissed (2354459747918667050) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_open (1651449827614876864) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_top (9056056469282256287) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_left (8987144699630620019) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_right (275069779299592867) -->
+ <skip />
<string-array name="recents_blacklist_array">
</string-array>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"चार्ज हो गई है"</string>
@@ -414,20 +430,24 @@
<string name="disconnect_vpn" msgid="1324915059568548655">"VPN डिस्कनेक्ट करें"</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"<xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g> आपका डिवाइस प्रबंधित करता है."</string>
<string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> आपका डिवाइस प्रबंधित करने के लिए <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> का उपयोग करता है."</string>
- <string name="monitoring_description_do_body" msgid="6764108354701060766">"व्यवस्थापक डिवाइस से संबद्ध सेटिंग, कॉर्पोरेट एक्सेस, ऐप्लिकेशन, डेटा और डिवाइस की स्थान जानकारी को मॉनिटर और प्रबंधित कर सकता है."</string>
+ <!-- no translation found for monitoring_description_do_body (3639594537660975895) -->
+ <skip />
<string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
<string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"अधिक जानें"</string>
<string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"आप <xliff:g id="VPN_APP">%1$s</xliff:g> से कनेक्ट हैं, जो ईमेल, ऐप्लिकेशन और वेबसाइट सहित आपकी नेटवर्क गतिविधि को मॉनिटर कर सकता है."</string>
<string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
<string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"VPN सेटिंग खोलें"</string>
- <string name="monitoring_description_network_logging" msgid="3901006351911787915">"आपके व्यवस्थापक ने नेटवर्क लॉगिंग को चालू कर दिया है, जो आपके डिवाइस पर ट्रैफ़िक को मॉनीटर करती है.\n\nअधिक जानकारी के लिए अपने व्यवस्थापक से संपर्क करें."</string>
+ <!-- no translation found for monitoring_description_network_logging (7223505523384076027) -->
+ <skip />
<string name="monitoring_description_vpn" msgid="4445150119515393526">"आपने किसी ऐप को VPN कनेक्शन सेट करने की अनुमति दी है.\n\nयह ऐप ईमेल, ऐप्स और सुरक्षित वेबसाइटों सहित आपके डिवाइस और नेटवर्क की गतिविधि की निगरानी कर सकता है."</string>
- <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"आपकी कार्य प्रोफ़ाइल <xliff:g id="ORGANIZATION">%1$s</xliff:g> के द्वारा प्रबंधित है.\n\nआपका नियंत्रक ईमेल, ऐप्स और सुरक्षित वेबसाइटों सहित आपकी नेटवर्क गतिविधि की निगरानी करने में सक्षम है.\n\nअधिक जानकारी के लिए, अपने नियंत्रक से संपर्क करें.\n\nआप एक ऐसे VPN से भी कनेक्ट हैं, जो आपकी नेटवर्क गतिविधि की निगरानी कर सकता है."</string>
+ <!-- no translation found for monitoring_description_vpn_profile_owned (2958019119161161530) -->
+ <skip />
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"आप <xliff:g id="APPLICATION">%1$s</xliff:g> से कनेक्ट हैं, जो ईमेल, ऐप्स और वेबसाइटों सहित आपकी नेटवर्क गतिविधि की निगरानी कर सकता है."</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"आप <xliff:g id="APPLICATION">%1$s</xliff:g> से कनेक्ट हैं, जो ईमेल, ऐप्स और वेबसाइटों सहित आपकी व्यक्तिगत नेटवर्क गतिविधि की निगरानी कर सकता है."</string>
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"आप <xliff:g id="APPLICATION">%1$s</xliff:g> से कनेक्ट हैं, जो ईमेल, ऐप्लिकेशन और वेबसाइट सहित आपकी व्यक्तिगत नेटवर्क गतिविधि को मॉनिटर कर सकता है."</string>
- <string name="monitoring_description_app_work" msgid="1754325860918060897">"आपकी कार्य प्रोफ़ाइल <xliff:g id="ORGANIZATION">%1$s</xliff:g> के द्वारा प्रबंधित है. वह <xliff:g id="APPLICATION">%2$s</xliff:g> से कनेक्ट है, जो ईमेल, ऐप्स और वेबसाइटों सहित आपकी कार्य नेटवर्क गतिविधि की निगरानी कर सकता है.\n\nअधिक जानकारी के लिए, अपने नियंत्रक से संपर्क करें."</string>
+ <!-- no translation found for monitoring_description_app_work (7777228449969022305) -->
+ <skip />
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"आपकी कार्य प्रोफ़ाइल <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_disabled" msgid="7412534203633528135">"जब तक कि आप मैन्युअल रूप से अनलॉक नहीं करते तब तक डिवाइस लॉक रहेगा"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"सूचनाएं अधिक तेज़ी से प्राप्त करें"</string>
@@ -648,7 +668,7 @@
<string name="accessibility_quick_settings_open_details" msgid="4230931801728005194">"विवरण खोलें."</string>
<string name="accessibility_quick_settings_open_settings" msgid="7806613775728380737">"<xliff:g id="ID_1">%s</xliff:g> सेटिंग खोलें."</string>
<string name="accessibility_quick_settings_edit" msgid="7839992848995240393">"सेटिंग का क्रम संपादित करें."</string>
- <string name="accessibility_quick_settings_page" msgid="5032979051755200721">"पृष्ठ <xliff:g id="ID_2">%2$d</xliff:g> में से <xliff:g id="ID_1">%1$d</xliff:g>"</string>
+ <string name="accessibility_quick_settings_page" msgid="5032979051755200721">"पेज <xliff:g id="ID_2">%2$d</xliff:g> में से <xliff:g id="ID_1">%1$d</xliff:g>"</string>
<string name="pip_phone_expand" msgid="5889780005575693909">"विस्तृत करें"</string>
<string name="pip_phone_minimize" msgid="1079119422589131792">"छोटा करें"</string>
<string name="pip_phone_dismiss" msgid="1305916715402775904">"खारिज करें"</string>
diff --git a/packages/SystemUI/res/values-hr/strings.xml b/packages/SystemUI/res/values-hr/strings.xml
index 6414afc..8d626c8 100644
--- a/packages/SystemUI/res/values-hr/strings.xml
+++ b/packages/SystemUI/res/values-hr/strings.xml
@@ -323,6 +323,12 @@
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Upozorenje <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
<string name="quick_settings_work_mode_label" msgid="6244915274350490429">"Način rada"</string>
<string name="quick_settings_night_display_label" msgid="3577098011487644395">"Noćno svjetlo"</string>
+ <!-- no translation found for quick_settings_nfc_label (9012153754816969325) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_off (6883274004315134333) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_on (6680317193676884311) -->
+ <skip />
<string name="recents_empty_message" msgid="808480104164008572">"Nema nedavnih stavki"</string>
<string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Izbrisali ste sve"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"Informacije o aplikaciji"</string>
@@ -336,6 +342,16 @@
<string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Podijeli vodoravno"</string>
<string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Podijeli okomito"</string>
<string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Podijeli prilagođeno"</string>
+ <!-- no translation found for recents_accessibility_dismissed (2354459747918667050) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_open (1651449827614876864) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_top (9056056469282256287) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_left (8987144699630620019) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_right (275069779299592867) -->
+ <skip />
<string-array name="recents_blacklist_array">
</string-array>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"Napunjeno"</string>
@@ -416,20 +432,24 @@
<string name="disconnect_vpn" msgid="1324915059568548655">"Prekini vezu s VPN-om"</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Vašim uređajem upravlja aplikacija <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
<string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> upotrebljava aplikaciju <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> za upravljanje vašim uređajem."</string>
- <string name="monitoring_description_do_body" msgid="6764108354701060766">"Administrator može nadzirati postavke, korporacijski pristup, aplikacije, podatke o uređaju i lokaciji uređaja te upravljati njima"</string>
+ <!-- no translation found for monitoring_description_do_body (3639594537660975895) -->
+ <skip />
<string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
<string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Saznajte više"</string>
<string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Povezani ste s aplikacijom <xliff:g id="VPN_APP">%1$s</xliff:g> koja može nadzirati vašu aktivnost na mreži, uključujući e-poštu, aplikacije i web-lokacije."</string>
<string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
<string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Otvorite postavke VPN-a"</string>
- <string name="monitoring_description_network_logging" msgid="3901006351911787915">"Administrator je uključio mrežni zapisnik koji prati promet na vašem uređaju.\n\nViše informacija možete dobiti od administratora."</string>
+ <!-- no translation found for monitoring_description_network_logging (7223505523384076027) -->
+ <skip />
<string name="monitoring_description_vpn" msgid="4445150119515393526">"Dali ste dopuštenje aplikaciji za postavljanje VPN veze.\n\nTa aplikacija može nadzirati vašu aktivnost na uređaju i mreži, uključujući e-poštu, aplikacije i web-lokacije."</string>
- <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Vašim poslovnim profilom upravlja <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nVaš administrator može nadzirati vašu aktivnost na mreži, uključujući e-poštu, aplikacije i web-lokacije.\n\nObratite se administratoru za više informacija.\n\nPovezani ste i s VPN-om koji može nadzirati vašu aktivnost na mreži."</string>
+ <!-- no translation found for monitoring_description_vpn_profile_owned (2958019119161161530) -->
+ <skip />
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Povezani ste s aplikacijom <xliff:g id="APPLICATION">%1$s</xliff:g> koja može nadzirati vašu aktivnost na mreži, uključujući e-poštu, aplikacije i web-lokacije."</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"Povezani ste s aplikacijom <xliff:g id="APPLICATION">%1$s</xliff:g> koja može nadzirati vašu osobnu aktivnost na mreži, uključujući e-poštu, aplikacije i web-lokacije."</string>
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Povezani ste s aplikacijom <xliff:g id="APPLICATION">%1$s</xliff:g> koja može nadzirati vašu osobnu aktivnost na mreži, uključujući e-poštu, aplikacije i web-lokacije."</string>
- <string name="monitoring_description_app_work" msgid="1754325860918060897">"Vašim poslovnim profilom upravlja <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Povezan je s aplikacijom <xliff:g id="APPLICATION">%2$s</xliff:g> koja može nadzirati vašu poslovnu aktivnost na mreži, uključujući e-poštu, aplikacije i web-lokacije.\n\nObratite se svojem administratoru za više informacija."</string>
+ <!-- no translation found for monitoring_description_app_work (7777228449969022305) -->
+ <skip />
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Vašim poslovnim profilom upravlja <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Povezan je s aplikacijom <xliff:g id="APPLICATION_WORK">%2$s</xliff:g> koja može nadzirati vašu poslovnu aktivnost na mreži, uključujući e-poštu, aplikacije i web-lokacije.\n\nPovezani ste i s aplikacijom <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g> koja može nadzirati vašu osobnu aktivnost na mreži."</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Uređaj će ostati zaključan dok ga ručno ne otključate"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"Primajte obavijesti brže"</string>
diff --git a/packages/SystemUI/res/values-hu/strings.xml b/packages/SystemUI/res/values-hu/strings.xml
index 2a891b7..b18d594 100644
--- a/packages/SystemUI/res/values-hu/strings.xml
+++ b/packages/SystemUI/res/values-hu/strings.xml
@@ -321,6 +321,12 @@
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Figyelem! <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
<string name="quick_settings_work_mode_label" msgid="6244915274350490429">"Munka mód"</string>
<string name="quick_settings_night_display_label" msgid="3577098011487644395">"Éjszakai fény"</string>
+ <!-- no translation found for quick_settings_nfc_label (9012153754816969325) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_off (6883274004315134333) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_on (6680317193676884311) -->
+ <skip />
<string name="recents_empty_message" msgid="808480104164008572">"Nincsenek mostanában használt elemek"</string>
<string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Mindent törölt"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"Az alkalmazás adatai"</string>
@@ -334,6 +340,16 @@
<string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Osztott vízszintes"</string>
<string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Osztott függőleges"</string>
<string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Osztott egyéni"</string>
+ <!-- no translation found for recents_accessibility_dismissed (2354459747918667050) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_open (1651449827614876864) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_top (9056056469282256287) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_left (8987144699630620019) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_right (275069779299592867) -->
+ <skip />
<string-array name="recents_blacklist_array">
</string-array>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"Feltöltve"</string>
@@ -414,20 +430,24 @@
<string name="disconnect_vpn" msgid="1324915059568548655">"VPN-kapcsolat bontása"</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Az eszközt a(z) <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g> kezeli."</string>
<string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"A(z) <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> a(z) <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> alkalmazást használja az eszközkezeléshez."</string>
- <string name="monitoring_description_do_body" msgid="6764108354701060766">"A rendszergazda kezelheti az eszközzel kapcsolatos beállításokat, vállalati hozzáférést, alkalmazásokat, adatokat és helyadatokat."</string>
+ <!-- no translation found for monitoring_description_do_body (3639594537660975895) -->
+ <skip />
<string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
<string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"További információ"</string>
<string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Ön kapcsolódik ehhez: <xliff:g id="VPN_APP">%1$s</xliff:g>, amely figyelheti hálózati tevékenységét, köztük a levelezést, az alkalmazás- és webhelyhasználatot."</string>
<string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
<string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"VPN-beállítások megnyitása"</string>
- <string name="monitoring_description_network_logging" msgid="3901006351911787915">"Rendszergazdája bekapcsolta a hálózati naplózást, amely figyeli eszköze forgalmát.\n\nHa további információra van szüksége, vegye fel a kapcsolatot rendszergazdájával."</string>
+ <!-- no translation found for monitoring_description_network_logging (7223505523384076027) -->
+ <skip />
<string name="monitoring_description_vpn" msgid="4445150119515393526">"Engedélyezte egy alkalmazásnak, hogy VPN-kapcsolatot létesítsen.\n\nEz az alkalmazás (az e-mailekre, alkalmazásokra és a webhelyekre is kiterjedően) figyelemmel kísérheti az Ön eszközét és hálózati tevékenységét."</string>
- <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Munkaprofilját a következő felügyeli: <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nA rendszergazda (az e-mailekre, alkalmazásokra és a webhelyekre is kiterjedően) figyelemmel kísérheti hálózati tevékenységét.\n\nTovábbi információért forduljon a rendszergazdához.\n\nÖn egy VPN-hez is csatlakozik, amely szintén figyelemmel kísérheti hálózati tevékenységét."</string>
+ <!-- no translation found for monitoring_description_vpn_profile_owned (2958019119161161530) -->
+ <skip />
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Csatlakoztatta a(z) <xliff:g id="APPLICATION">%1$s</xliff:g> alkalmazást, amely figyelheti hálózati tevékenységét, beleértve az e-maileket, az alkalmazásokat és a webhelyeket."</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"Csatlakoztatta a(z) <xliff:g id="APPLICATION">%1$s</xliff:g> alkalmazást, amely figyelheti személyes hálózati tevékenységét, beleértve az e-maileket, az alkalmazásokat és a webhelyeket."</string>
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Ön a(z) <xliff:g id="APPLICATION">%1$s</xliff:g> alkalmazáshoz csatlakozik, amely figyelheti személyes hálózati tevékenységét, beleértve az e-maileket, alkalmazásokat és webhelyeket."</string>
- <string name="monitoring_description_app_work" msgid="1754325860918060897">"Munkaprofilját a(z) <xliff:g id="ORGANIZATION">%1$s</xliff:g> felügyeli. Csatlakoztatva van hozzá a(z) <xliff:g id="APPLICATION">%2$s</xliff:g> alkalmazás, amely figyelheti az Ön hálózati tevékenységét, beleértve az e-maileket, az alkalmazásokat és a webhelyeket.\n\nTovábbi információért forduljon a rendszergazdájához."</string>
+ <!-- no translation found for monitoring_description_app_work (7777228449969022305) -->
+ <skip />
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Munkaprofilját a(z) <xliff:g id="ORGANIZATION">%1$s</xliff:g> felügyeli. Csatlakoztatva van hozzá a(z) <xliff:g id="APPLICATION_WORK">%2$s</xliff:g> alkalmazás, amely figyelheti az Ön hálózati tevékenységét, beleértve az e-maileket, az alkalmazásokat és a webhelyeket.\n\nCsatlakoztatta továbbá a(z) <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g> alkalmazást, amely szintén figyelemmel kísérheti személyes hálózati tevékenységét."</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Az eszköz addig zárolva marad, amíg kézileg fel nem oldja"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"Gyorsabban megkaphatja az értesítéseket"</string>
diff --git a/packages/SystemUI/res/values-hy/strings.xml b/packages/SystemUI/res/values-hy/strings.xml
index c17c522..fa7cbe1 100644
--- a/packages/SystemUI/res/values-hy/strings.xml
+++ b/packages/SystemUI/res/values-hy/strings.xml
@@ -321,6 +321,12 @@
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> զգուշացում"</string>
<string name="quick_settings_work_mode_label" msgid="6244915274350490429">"Աշխատանքային ռեժիմ"</string>
<string name="quick_settings_night_display_label" msgid="3577098011487644395">"Գիշերային լույս"</string>
+ <!-- no translation found for quick_settings_nfc_label (9012153754816969325) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_off (6883274004315134333) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_on (6680317193676884311) -->
+ <skip />
<string name="recents_empty_message" msgid="808480104164008572">"Վերջին տարրեր չկան"</string>
<string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Դուք ջնջել եք ամենը"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"Հավելվածի մասին"</string>
@@ -334,6 +340,16 @@
<string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Հորիզոնական տրոհում"</string>
<string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Ուղղահայաց տրոհում"</string>
<string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Հատուկ տրոհում"</string>
+ <!-- no translation found for recents_accessibility_dismissed (2354459747918667050) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_open (1651449827614876864) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_top (9056056469282256287) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_left (8987144699630620019) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_right (275069779299592867) -->
+ <skip />
<string-array name="recents_blacklist_array">
</string-array>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"Լիցքավորված է"</string>
@@ -414,20 +430,24 @@
<string name="disconnect_vpn" msgid="1324915059568548655">"Անջատել VPN-ը"</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Ձեր սարքը կառավարվում է <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g> հավելվածի կողմից:"</string>
<string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>-ը ձեր սարքը կառավարելու համար օգտագործում է <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> հավելվածը:"</string>
- <string name="monitoring_description_do_body" msgid="6764108354701060766">"Ձեր ադմինիստրատորը կարող է վերահսկել և կառավարել ձեր սարքի հետ կապակցված կարգավորումները, կորպորատիվ մուտքը, հավելվածները և տվյալները, ինչպես նաև ձեր սարքի տեղադրության տվյալները:"</string>
+ <!-- no translation found for monitoring_description_do_body (3639594537660975895) -->
+ <skip />
<string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
<string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Իմանալ ավելին"</string>
<string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Դուք կապակցված եք <xliff:g id="VPN_APP">%1$s</xliff:g> հավելվածին, որը կարող է վերահսկել ձեր ցանցային գործողությունը, այդ թվում նաև էլփոստը, հավելվածները և կայքերը:"</string>
<string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
<string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Բացել VPN-ի կարգավորումները"</string>
- <string name="monitoring_description_network_logging" msgid="3901006351911787915">"Ձեր ադմինիստրատորը միացրել է ցանցային իրադարձությունների գրանցումը, որը վերահսկում է ձեր սարքի թրաֆիկը։\n\nԼրացուցիչ տեղեկություններ ստանալու համար դիմեք ձեր ադմինիստրատորին։"</string>
+ <!-- no translation found for monitoring_description_network_logging (7223505523384076027) -->
+ <skip />
<string name="monitoring_description_vpn" msgid="4445150119515393526">"Ինչ-որ հավելվածի թույլ եք տվել հաստատել VPN կապակցում:\n\nԱյդ հավելվածը կարող է վերահսկել ձեր սարքի և ցանցի գործունեությունը, այդ թվում նաև էլփոստի հաշիվները, հավելվածները և կայքերը:"</string>
- <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Աշխատանքային պրոֆիլի կառավարիչն է՝ <xliff:g id="ORGANIZATION">%1$s</xliff:g>:\n\nԱդմինիստրատորը կարող է վերահսկել ցանցում ունեցած գործունեությունը, այդ թվում նաև էլփոստի հաշիվները, հավելվածները և կայքերը:\n\nԼրացուցիչ տեղեկությունների համար դիմեք ադմինիստրատորին:\n\nՆաև ունեք VPN կապակցում, ինչը կարող է վերահսկել ձեր ցանցում կատարած գործողությունները:"</string>
+ <!-- no translation found for monitoring_description_vpn_profile_owned (2958019119161161530) -->
+ <skip />
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Դուք կապակցված եք <xliff:g id="APPLICATION">%1$s</xliff:g> հավելվածին, որը կարող է վերահսկել ձեր ցանցի գործունեությունը, այդ թվում նաև էլփոստի հաշիվները, հավելվածները և կայքերը:"</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"Դուք կապակցված եք <xliff:g id="APPLICATION">%1$s</xliff:g> հավելվածին, որը կարող է վերահսկել անձնական ցանցում կատարած ձեր գործողությունները, այդ թվում նաև էլփոստի հաշիվները, հավելվածները և կայքերը:"</string>
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Դուք կապակցված եք <xliff:g id="APPLICATION">%1$s</xliff:g> հավելվածին, որը կարող է վերահսկել անձնական ցանցում կատարած ձեր գործողությունները, այդ թվում նաև էլփոստի հաշիվները, հավելվածները և կայքերը:"</string>
- <string name="monitoring_description_app_work" msgid="1754325860918060897">"Աշխատանքային պրոֆիլի կառավարիչն է՝ <xliff:g id="ORGANIZATION">%1$s</xliff:g>: Այն կապակցված է <xliff:g id="APPLICATION">%2$s</xliff:g> հավելվածին, որը կարող է վերահսկել աշխատանքային ցանցում կատարած գործունեությունը, այդ թվում նաև էլփոստի հաշիվները, հավելվածները և կայքերը:\n\nԼրացուցիչ տեղեկությունների համար դիմեք ադմինիստրատորին:"</string>
+ <!-- no translation found for monitoring_description_app_work (7777228449969022305) -->
+ <skip />
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Աշխատանքային պրոֆիլի կառավարիչն է՝ <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_disabled" msgid="7412534203633528135">"Սարքը կմնա արգելափակված՝ մինչև ձեռքով չբացեք"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"Ավելի արագ ստացեք ծանուցումները"</string>
diff --git a/packages/SystemUI/res/values-in/strings.xml b/packages/SystemUI/res/values-in/strings.xml
index e7d7c5d..d2b7a81 100644
--- a/packages/SystemUI/res/values-in/strings.xml
+++ b/packages/SystemUI/res/values-in/strings.xml
@@ -321,6 +321,12 @@
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Peringatan <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
<string name="quick_settings_work_mode_label" msgid="6244915274350490429">"Mode kerja"</string>
<string name="quick_settings_night_display_label" msgid="3577098011487644395">"Cahaya Malam"</string>
+ <!-- no translation found for quick_settings_nfc_label (9012153754816969325) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_off (6883274004315134333) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_on (6680317193676884311) -->
+ <skip />
<string name="recents_empty_message" msgid="808480104164008572">"Tidak ada item baru-baru ini"</string>
<string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Anda sudah menghapus semua"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"Info Aplikasi"</string>
@@ -334,6 +340,16 @@
<string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Pisahkan Horizontal"</string>
<string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Pisahkan Vertikal"</string>
<string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Pisahkan Khusus"</string>
+ <!-- no translation found for recents_accessibility_dismissed (2354459747918667050) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_open (1651449827614876864) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_top (9056056469282256287) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_left (8987144699630620019) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_right (275069779299592867) -->
+ <skip />
<string-array name="recents_blacklist_array">
</string-array>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"Terisi"</string>
@@ -414,20 +430,24 @@
<string name="disconnect_vpn" msgid="1324915059568548655">"Putuskan sambungan VPN"</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Perangkat dikelola oleh <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
<string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> menggunakan <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> untuk mengelola perangkat Anda."</string>
- <string name="monitoring_description_do_body" msgid="6764108354701060766">"Admin dapat memantau dan mengelola setelan, akses perusahaan, aplikasi, data terkait perangkat, dan informasi lokasi perangkat."</string>
+ <!-- no translation found for monitoring_description_do_body (3639594537660975895) -->
+ <skip />
<string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
<string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Pelajari lebih lanjut"</string>
<string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Anda tersambung ke <xliff:g id="VPN_APP">%1$s</xliff:g>, yang dapat memantau aktivitas jaringan, termasuk email, aplikasi, dan situs web."</string>
<string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
<string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Buka Setelan VPN"</string>
- <string name="monitoring_description_network_logging" msgid="3901006351911787915">"Admin telah mengaktifkan pencatatan log jaringan, yang memantau traffic di perangkat.\n\nUntuk informasi selengkapnya, hubungi admin."</string>
+ <!-- no translation found for monitoring_description_network_logging (7223505523384076027) -->
+ <skip />
<string name="monitoring_description_vpn" msgid="4445150119515393526">"Anda memberikan izin kepada aplikasi untuk menyiapkan sambungan VPN.\n\nAplikasi ini ini dapat memantau aktivitas perangkat dan jaringan, termasuk email, aplikasi, dan situs web."</string>
- <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Profil kerja dikelola oleh <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nAdministrator dapat memantau aktivitas jaringan, termasuk email, aplikasi, dan situs web.\n\nUntuk informasi selengkapnya, hubungi administrator.\n\nAnda juga tersambung ke VPN yang dapat memantau aktivitas jaringan."</string>
+ <!-- no translation found for monitoring_description_vpn_profile_owned (2958019119161161530) -->
+ <skip />
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Anda tersambung ke <xliff:g id="APPLICATION">%1$s</xliff:g>, yang dapat memantau aktivitas jaringan, termasuk email, aplikasi, dan situs web."</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"Anda tersambung ke <xliff:g id="APPLICATION">%1$s</xliff:g>, yang dapat memantau aktivitas jaringan pribadi, termasuk email, aplikasi, dan situs web."</string>
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Anda tersambung ke <xliff:g id="APPLICATION">%1$s</xliff:g>, yang dapat memantau aktivitas jaringan pribadi, termasuk email, aplikasi, dan situs web.."</string>
- <string name="monitoring_description_app_work" msgid="1754325860918060897">"Profil kerja dikelola oleh <xliff:g id="ORGANIZATION">%1$s</xliff:g> dan tersambung ke <xliff:g id="APPLICATION">%2$s</xliff:g>, yang dapat memantau aktivitas jaringan kerja, termasuk email, aplikasi, dan situs web.\n\nUntuk informasi selengkapnya, hubungi administrator."</string>
+ <!-- no translation found for monitoring_description_app_work (7777228449969022305) -->
+ <skip />
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Profil kerja dikelola oleh <xliff:g id="ORGANIZATION">%1$s</xliff:g> dan tersambung ke <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, yang dapat memantau aktivitas jaringan kerja, termasuk email, aplikasi, dan situs web.\n\nAnda juga tersambung ke <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, yang dapat memantau aktivitas jaringan pribadi."</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Perangkat akan tetap terkunci hingga Anda membukanya secara manual"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"Dapatkan pemberitahuan lebih cepat"</string>
diff --git a/packages/SystemUI/res/values-is/strings.xml b/packages/SystemUI/res/values-is/strings.xml
index 3807554..28ccdf5 100644
--- a/packages/SystemUI/res/values-is/strings.xml
+++ b/packages/SystemUI/res/values-is/strings.xml
@@ -321,6 +321,12 @@
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> viðvörun"</string>
<string name="quick_settings_work_mode_label" msgid="6244915274350490429">"Vinnustilling"</string>
<string name="quick_settings_night_display_label" msgid="3577098011487644395">"Næturljós"</string>
+ <!-- no translation found for quick_settings_nfc_label (9012153754816969325) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_off (6883274004315134333) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_on (6680317193676884311) -->
+ <skip />
<string name="recents_empty_message" msgid="808480104164008572">"Engin nýleg atriði"</string>
<string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Þú hefur hreinsað allt"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"Forritsupplýsingar"</string>
@@ -334,6 +340,16 @@
<string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Lárétt skipting"</string>
<string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Lóðrétt skipting"</string>
<string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Sérsniðin skipting"</string>
+ <!-- no translation found for recents_accessibility_dismissed (2354459747918667050) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_open (1651449827614876864) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_top (9056056469282256287) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_left (8987144699630620019) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_right (275069779299592867) -->
+ <skip />
<string-array name="recents_blacklist_array">
</string-array>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"Fullhlaðin"</string>
@@ -414,20 +430,24 @@
<string name="disconnect_vpn" msgid="1324915059568548655">"Aftengja VPN-net"</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Þessu tæki er stýrt af <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
<string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> notar <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> til að stýra tækinu þínu."</string>
- <string name="monitoring_description_do_body" msgid="6764108354701060766">"Kerfisstjóri getur fylgst með og stjórnað stillingum, fyrirtækjaaðgangi, forritum, gögnum tengdum tækinu og staðsetningu tækisins."</string>
+ <!-- no translation found for monitoring_description_do_body (3639594537660975895) -->
+ <skip />
<string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
<string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Frekari upplýsingar"</string>
<string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Þú ert með tengingu við <xliff:g id="VPN_APP">%1$s</xliff:g>, sem getur fylgst með netnotkun þinni, þ. á m. tölvupósti, forritum og vefsvæðum."</string>
<string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
<string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Opna VPN-stillingar"</string>
- <string name="monitoring_description_network_logging" msgid="3901006351911787915">"Kerfisstjóri hefur kveikt á eftirliti netkerfa, sem fylgist með netumferð á tækinu þínu.\n\nHafðu samband við kerfisstjóra til að fá frekari upplýsingar."</string>
+ <!-- no translation found for monitoring_description_network_logging (7223505523384076027) -->
+ <skip />
<string name="monitoring_description_vpn" msgid="4445150119515393526">"Þú veittir forriti heimild til að koma á VPN-tengingu.\n\nÞetta forrit getur fylgst með virkni þinni í tækinu og á netinu, þar á meðal tölvupósti, forritum og vefsvæðum."</string>
- <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Vinnusniðinu þínu er stjórnað af <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nKerfisstjórinn þinn getur fylgst með netnotkun þinni, þar á meðal tölvupósti, forritum og vefsvæðum.\n\nHafðu samband við kerfisstjórann til að fá frekari upplýsingar.\n\nÞú ert einnig með tengingu við VPN-net sem getur fylgst með netnotkun þinni."</string>
+ <!-- no translation found for monitoring_description_vpn_profile_owned (2958019119161161530) -->
+ <skip />
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Þú ert með tengingu við <xliff:g id="APPLICATION">%1$s</xliff:g>, sem getur fylgst með netnotkun þinni, þ. á m. tölvupósti, forritum og vefsvæðum."</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"Þú ert með tengingu við <xliff:g id="APPLICATION">%1$s</xliff:g>, sem getur fylgst með persónulegri netnotkun þinni, þ. á m. tölvupósti, forritum og vefsvæðum."</string>
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Þú ert með tengingu við <xliff:g id="APPLICATION">%1$s</xliff:g>, sem getur fylgst með persónulegri netnotkun þinni, þ. á m. tölvupósti, forritum og vefsvæðum."</string>
- <string name="monitoring_description_app_work" msgid="1754325860918060897">"Vinnusniðinu þínu er stjórnað af <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Það er tengt <xliff:g id="APPLICATION">%2$s</xliff:g>, sem getur fylgst með vinnutengdri netnotkun þinni, þar á meðal tölvupósti, forritum og vefsvæðum.\n\nHafðu samband við kerfisstjórann til að fá frekari upplýsingar."</string>
+ <!-- no translation found for monitoring_description_app_work (7777228449969022305) -->
+ <skip />
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Vinnusniðinu þínu er stjórnað af <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Það er tengt <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, sem getur fylgst með vinnutengdri netnotkun þinni, þar á meðal tölvupósti, forritum og vefsvæðum.\n\nÞú ert einnig með tengingu við <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, sem getur fylgst með persónulegri netnotkun þinni."</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Tækið verður læst þar til þú opnar það handvirkt"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"Fáðu tilkynningar hraðar"</string>
diff --git a/packages/SystemUI/res/values-it/strings.xml b/packages/SystemUI/res/values-it/strings.xml
index 967f353..515f77f 100644
--- a/packages/SystemUI/res/values-it/strings.xml
+++ b/packages/SystemUI/res/values-it/strings.xml
@@ -323,6 +323,12 @@
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Avviso <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
<string name="quick_settings_work_mode_label" msgid="6244915274350490429">"Modalità Lavoro"</string>
<string name="quick_settings_night_display_label" msgid="3577098011487644395">"Luminosità notturna"</string>
+ <!-- no translation found for quick_settings_nfc_label (9012153754816969325) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_off (6883274004315134333) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_on (6680317193676884311) -->
+ <skip />
<string name="recents_empty_message" msgid="808480104164008572">"Nessun elemento recente"</string>
<string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Hai cancellato tutto"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"Informazioni sull\'applicazione"</string>
@@ -336,6 +342,16 @@
<string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Divisione in orizzontale"</string>
<string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Divisione in verticale"</string>
<string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Divisione personalizzata"</string>
+ <!-- no translation found for recents_accessibility_dismissed (2354459747918667050) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_open (1651449827614876864) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_top (9056056469282256287) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_left (8987144699630620019) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_right (275069779299592867) -->
+ <skip />
<string-array name="recents_blacklist_array">
</string-array>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"Carica"</string>
@@ -416,20 +432,24 @@
<string name="disconnect_vpn" msgid="1324915059568548655">"Scollega VPN"</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Il dispositivo è gestito dall\'app <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
<string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> utilizza l\'app <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> per gestire il dispositivo."</string>
- <string name="monitoring_description_do_body" msgid="6764108354701060766">"L\'amministratore può monitorare e gestire impostazioni, accesso aziendale, app, dati associati al dispositivo e informazioni sulla posizione del dispositivo."</string>
+ <!-- no translation found for monitoring_description_do_body (3639594537660975895) -->
+ <skip />
<string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
<string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Ulteriori informazioni"</string>
<string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Sei connesso a <xliff:g id="VPN_APP">%1$s</xliff:g>, che consente di monitorare le attività di rete, inclusi siti web, email e app."</string>
<string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
<string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Apri impostazioni VPN"</string>
- <string name="monitoring_description_network_logging" msgid="3901006351911787915">"L\'amministratore ha attivato i log di rete, che monitorano il traffico sul dispositivo.\n\nContatta l\'amministratore per ulteriori informazioni."</string>
+ <!-- no translation found for monitoring_description_network_logging (7223505523384076027) -->
+ <skip />
<string name="monitoring_description_vpn" msgid="4445150119515393526">"Hai autorizzato l\'app a configurare una connessione VPN.\n\nQuesta app può monitorare il tuo dispositivo e l\'attività di rete, inclusi email, app e siti web."</string>
- <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Il tuo profilo di lavoro è gestito da <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nL\'amministratore può monitorare l\'attività di rete, inclusi email, app e siti web.\n\nPer ulteriori informazioni, contatta l\'amministratore.\n\nSei connesso anche a VPN, da cui è possibile monitorare la tua attività di rete."</string>
+ <!-- no translation found for monitoring_description_vpn_profile_owned (2958019119161161530) -->
+ <skip />
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Sei connesso a <xliff:g id="APPLICATION">%1$s</xliff:g>, da cui è possibile monitorare la tua attività di rete, inclusi email, app e siti web."</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"Sei connesso a <xliff:g id="APPLICATION">%1$s</xliff:g>, da cui è possibile monitorare la tua attività di rete personale, inclusi email, app e siti web."</string>
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Sei collegato a <xliff:g id="APPLICATION">%1$s</xliff:g>, che consente di monitorare la tua attività di rete personale, inclusi siti web, email e app."</string>
- <string name="monitoring_description_app_work" msgid="1754325860918060897">"Il tuo profilo di lavoro è gestito da <xliff:g id="ORGANIZATION">%1$s</xliff:g>. È connesso a <xliff:g id="APPLICATION">%2$s</xliff:g>, da cui è possibile monitorare la tua attività di rete lavorativa, inclusi email, app e siti web.\n\nPer ulteriori informazioni, contatta il tuo amministratore."</string>
+ <!-- no translation found for monitoring_description_app_work (7777228449969022305) -->
+ <skip />
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Il tuo profilo di lavoro è gestito da <xliff:g id="ORGANIZATION">%1$s</xliff:g>. È connesso a <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, da cui è possibile monitorare la tua attività di rete lavorativa, inclusi email, app e siti web.\n\nSei connesso anche a <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, da cui è possibile monitorare la tua attività di rete personale."</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Il dispositivo resterà bloccato fino allo sblocco manuale"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"Ricevi notifiche più velocemente"</string>
diff --git a/packages/SystemUI/res/values-iw/strings.xml b/packages/SystemUI/res/values-iw/strings.xml
index 7dac321..a32fbf6 100644
--- a/packages/SystemUI/res/values-iw/strings.xml
+++ b/packages/SystemUI/res/values-iw/strings.xml
@@ -325,6 +325,12 @@
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"אזהרה - <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
<string name="quick_settings_work_mode_label" msgid="6244915274350490429">"מצב עבודה"</string>
<string name="quick_settings_night_display_label" msgid="3577098011487644395">"תאורת לילה"</string>
+ <!-- no translation found for quick_settings_nfc_label (9012153754816969325) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_off (6883274004315134333) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_on (6680317193676884311) -->
+ <skip />
<string name="recents_empty_message" msgid="808480104164008572">"אין פריטים אחרונים"</string>
<string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"מחקת הכול"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"מידע על האפליקציה"</string>
@@ -338,6 +344,16 @@
<string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"פיצול אופקי"</string>
<string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"פיצול אנכי"</string>
<string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"פיצול מותאם אישית"</string>
+ <!-- no translation found for recents_accessibility_dismissed (2354459747918667050) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_open (1651449827614876864) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_top (9056056469282256287) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_left (8987144699630620019) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_right (275069779299592867) -->
+ <skip />
<string-array name="recents_blacklist_array">
</string-array>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"טעון"</string>
@@ -418,20 +434,24 @@
<string name="disconnect_vpn" msgid="1324915059568548655">"נתק את ה-VPN"</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"המכשיר שלך מנוהל על ידי <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
<string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> משתמש באפליקציה <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> כדי לנהל את מכשירך."</string>
- <string name="monitoring_description_do_body" msgid="6764108354701060766">"מנהל המערכת יכול לבצע מעקב ולנהל הגדרות, גישה ארגונית, אפליקציות ונתונים המשויכים למכשירך, ולמידע על מיקום המכשיר."</string>
+ <!-- no translation found for monitoring_description_do_body (3639594537660975895) -->
+ <skip />
<string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
<string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"למידע נוסף"</string>
<string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"אתה מחובר לאפליקציה <xliff:g id="VPN_APP">%1$s</xliff:g>, שיכולה לעקוב אחר הפעילות שלך ברשת, כולל הודעות אימייל, אפליקציות ואתרים."</string>
<string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
<string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"פתח את הגדרות ה-VPN"</string>
- <string name="monitoring_description_network_logging" msgid="3901006351911787915">"מנהל המערכת הפעיל את תכונת רישום התנועה ברשת, אשר מנטרת את תנועת הנתונים במכשירך.\n\nלמידע נוסף, צור קשר עם מנהל המערכת."</string>
+ <!-- no translation found for monitoring_description_network_logging (7223505523384076027) -->
+ <skip />
<string name="monitoring_description_vpn" msgid="4445150119515393526">"נתת לאפליקציה כלשהי הרשאה להגדיר חיבור VPN.\n\nהאפליקציה הזו יכולה לעקוב אחר הפעילות שלך ברשת ובמכשיר, כולל הודעות אימייל, אפליקציות ואתרים."</string>
- <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"פרופיל העבודה שלך מנוהל על ידי <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nמנהל המערכת שלך יכול לעקוב אחר הפעילות שלך ברשת, כולל הודעות אימייל, אפליקציות ואתרים.\n\nלמידע נוסף, פנה למנהל המערכת שלך.\n\nאתה מחובר גם לרשת VPN, שיכולה לעקוב אחר הפעילות שלך ברשת."</string>
+ <!-- no translation found for monitoring_description_vpn_profile_owned (2958019119161161530) -->
+ <skip />
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"אתה מחובר לאפליקציה <xliff:g id="APPLICATION">%1$s</xliff:g>, שיכולה לעקוב אחר הפעילות שלך ברשת, כולל הודעות אימייל, אפליקציות ואתרים."</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"אתה מחובר לאפליקציה <xliff:g id="APPLICATION">%1$s</xliff:g>, שיכולה לעקוב אחר הפעילות שלך ברשת הפרטית, כולל הודעות אימייל, אפליקציות ואתרים."</string>
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"אתה מחובר לאפליקציה <xliff:g id="APPLICATION">%1$s</xliff:g>, שיכולה לעקוב אחר הפעילות שלך ברשת הפרטית, כולל הודעות אימייל, אפליקציות ואתרים."</string>
- <string name="monitoring_description_app_work" msgid="1754325860918060897">"פרופיל העבודה שלך מנוהל על ידי <xliff:g id="ORGANIZATION">%1$s</xliff:g>. הוא מחובר לאפליקציה <xliff:g id="APPLICATION">%2$s</xliff:g>, שיכולה לעקוב אחר הפעילות שלך ברשת העסקית, כולל הודעות אימייל, אפליקציות ואתרים.\n\nלמידע נוסף, פנה למנהל המערכת שלך."</string>
+ <!-- no translation found for monitoring_description_app_work (7777228449969022305) -->
+ <skip />
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"פרופיל העבודה שלך מנוהל על ידי <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_disabled" msgid="7412534203633528135">"המכשיר יישאר נעול עד שתבטל את נעילתו באופן ידני"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"קבל התראות מהר יותר"</string>
diff --git a/packages/SystemUI/res/values-ja/strings.xml b/packages/SystemUI/res/values-ja/strings.xml
index f01b82d..4ac5e07 100644
--- a/packages/SystemUI/res/values-ja/strings.xml
+++ b/packages/SystemUI/res/values-ja/strings.xml
@@ -323,6 +323,12 @@
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"警告: 上限は<xliff:g id="DATA_LIMIT">%s</xliff:g>です"</string>
<string name="quick_settings_work_mode_label" msgid="6244915274350490429">"Work モード"</string>
<string name="quick_settings_night_display_label" msgid="3577098011487644395">"読書灯"</string>
+ <!-- no translation found for quick_settings_nfc_label (9012153754816969325) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_off (6883274004315134333) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_on (6680317193676884311) -->
+ <skip />
<string name="recents_empty_message" msgid="808480104164008572">"最近のタスクはありません"</string>
<string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"すべてのタスクを消去しました"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"アプリ情報"</string>
@@ -336,6 +342,16 @@
<string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"横に分割"</string>
<string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"縦に分割"</string>
<string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"分割(カスタム)"</string>
+ <!-- no translation found for recents_accessibility_dismissed (2354459747918667050) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_open (1651449827614876864) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_top (9056056469282256287) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_left (8987144699630620019) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_right (275069779299592867) -->
+ <skip />
<string-array name="recents_blacklist_array">
</string-array>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"充電が完了しました"</string>
@@ -416,20 +432,24 @@
<string name="disconnect_vpn" msgid="1324915059568548655">"VPNを切断"</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"この端末は <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>で管理されています。"</string>
<string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> は <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g>を使用してこの端末を管理しています。"</string>
- <string name="monitoring_description_do_body" msgid="6764108354701060766">"管理者は、この端末に関連付けられた設定、コーポレート アクセス、アプリ、データと、端末の位置情報を監視および管理できます。"</string>
+ <!-- no translation found for monitoring_description_do_body (3639594537660975895) -->
+ <skip />
<string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
<string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"詳細"</string>
<string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"「<xliff:g id="VPN_APP">%1$s</xliff:g>」に接続しています。このアプリはあなたのネットワーク アクティビティ(メール、アプリ、ウェブサイトなど)を監視できます。"</string>
<string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
<string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"VPN 設定を開く"</string>
- <string name="monitoring_description_network_logging" msgid="3901006351911787915">"管理者がネットワーク ログを有効にしているため、この端末のトラフィックは監視されています。\n\n詳しくは、管理者にお問い合わせください。"</string>
+ <!-- no translation found for monitoring_description_network_logging (7223505523384076027) -->
+ <skip />
<string name="monitoring_description_vpn" msgid="4445150119515393526">"アプリにVPN接続の設定を許可しました。\n\nこのアプリはあなたの端末やネットワークアクティビティ(メール、アプリ、ウェブサイトなど)を監視できます。"</string>
- <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"この仕事用プロファイルは<xliff:g id="ORGANIZATION">%1$s</xliff:g>によって管理されています。\n\n管理者はあなたのネットワークアクティビティ(メール、アプリ、ウェブサイトなど)を監視できます。\n\n詳しくは管理者にお問い合わせください。\n\nVPNにも接続しているため、VPNもネットワークアクティビティを監視できます。"</string>
+ <!-- no translation found for monitoring_description_vpn_profile_owned (2958019119161161530) -->
+ <skip />
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"<xliff:g id="APPLICATION">%1$s</xliff:g>に接続しています。このアプリはあなたのネットワークアクティビティ(メール、アプリ、ウェブサイトなど)を監視できます。"</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"<xliff:g id="APPLICATION">%1$s</xliff:g>に接続しています。このアプリはあなたの個人のネットワークアクティビティ(メール、アプリ、ウェブサイトなど)を監視できます。"</string>
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"「<xliff:g id="APPLICATION">%1$s</xliff:g>」に接続しています。このアプリはあなたの個人のネットワーク アクティビティ(メール、アプリ、ウェブサイトなど)を監視できます。"</string>
- <string name="monitoring_description_app_work" msgid="1754325860918060897">"この仕事用プロファイルは<xliff:g id="ORGANIZATION">%1$s</xliff:g>によって管理され、<xliff:g id="APPLICATION">%2$s</xliff:g>に接続しています。このアプリはあなたの仕事のネットワークアクティビティ(メール、アプリ、ウェブサイトなど)を監視できます。\n\n詳しくは管理者にお問い合わせください。"</string>
+ <!-- no translation found for monitoring_description_app_work (7777228449969022305) -->
+ <skip />
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"この仕事用プロファイルは<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_disabled" msgid="7412534203633528135">"手動でロックを解除するまでロックされたままとなります"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"通知をすばやく確認できます"</string>
diff --git a/packages/SystemUI/res/values-ka/strings.xml b/packages/SystemUI/res/values-ka/strings.xml
index ca8978d..c0b6b79 100644
--- a/packages/SystemUI/res/values-ka/strings.xml
+++ b/packages/SystemUI/res/values-ka/strings.xml
@@ -321,6 +321,12 @@
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> გაფრთხილება"</string>
<string name="quick_settings_work_mode_label" msgid="6244915274350490429">"სამსახურის რეჟიმი"</string>
<string name="quick_settings_night_display_label" msgid="3577098011487644395">"ღამის განათება"</string>
+ <!-- no translation found for quick_settings_nfc_label (9012153754816969325) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_off (6883274004315134333) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_on (6680317193676884311) -->
+ <skip />
<string name="recents_empty_message" msgid="808480104164008572">"ბოლოს გამოყენებული ერთეულები არ არის"</string>
<string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"ყველაფერი გასუფთავდა"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"აპლიკაციის შესახებ"</string>
@@ -334,6 +340,16 @@
<string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"ჰორიზონტალური გაყოფა"</string>
<string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"ვერტიკალური გაყოფა"</string>
<string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"ინდივიდუალური გაყობა"</string>
+ <!-- no translation found for recents_accessibility_dismissed (2354459747918667050) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_open (1651449827614876864) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_top (9056056469282256287) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_left (8987144699630620019) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_right (275069779299592867) -->
+ <skip />
<string-array name="recents_blacklist_array">
</string-array>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"დატენილია"</string>
@@ -414,20 +430,24 @@
<string name="disconnect_vpn" msgid="1324915059568548655">"VPN-ის გათიშვა"</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"თქვენს მოწყობილობას მართავს <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
<string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> იყენებს <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g>-ს თქვენი მოწყობილობის სამართავად."</string>
- <string name="monitoring_description_do_body" msgid="6764108354701060766">"თქვენს ადმინისტრატორს შეუძლია მოწყობილობასთან დაკავშირებული პარამეტრების, კორპორატიული წვდომის, აპებისა და მონაცემების, მათ შორის, თქვენი მოწყობილობის მდებარეობის ინფორმაციის, მონიტორინგი და მართვა."</string>
+ <!-- no translation found for monitoring_description_do_body (3639594537660975895) -->
+ <skip />
<string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
<string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"შეიტყვეთ მეტი"</string>
<string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"თქვენ დაუკავშირდით <xliff:g id="VPN_APP">%1$s</xliff:g>-ს, რომელსაც თქვენი ქსელის აქტივობის, მათ შორის, ელფოსტის, აპებისა და ვებსაიტების, მონიტორინგი შეუძლია."</string>
<string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
<string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"VPN-ის პარამეტრების გახსნა"</string>
- <string name="monitoring_description_network_logging" msgid="3901006351911787915">"თქვენმა ადმინისტრატორმა ქსელის ჟურნალირება ჩართო, რომელიც თქვენი მოწყობილობის ტრაფიკის მონიტორინგს ახორციელებს.\n\nდამატებითი ინფორმაციისთვის დაუკავშირდით თქვენს ადმინისტრატორს."</string>
+ <!-- no translation found for monitoring_description_network_logging (7223505523384076027) -->
+ <skip />
<string name="monitoring_description_vpn" msgid="4445150119515393526">"თქვენ მიეცით ნებართვა აპს, დააყენოს VPN კავშირი.\n\nამ აპს შეუძლია თქვენი მოწყობილობის და ქსელის აქტივობის, მათ შორის, ელფოსტის, აპებისა და ვებსაიტების მონიტორინგი."</string>
- <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"თქვენს სამუშაო პროფილს მართავს <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nთქვენს ადმინისტრატორს შეუძლია თქვენი ქსელის აქტივობის მონიტორინგი, მათ შორის, ელფოსტის, აპებისა და ვებ-საიტების.\n\nდამატებითი ინფორმაციისთვის, დაუკავშირდით თქვენს ადმინისტრატორს.\n\nთქვენ ასევე დაკავშირებული ხართ VPN-თან, რომელსაც შეუძლია თქვენი ქსელის აქტივობის მონიტორინგი."</string>
+ <!-- no translation found for monitoring_description_vpn_profile_owned (2958019119161161530) -->
+ <skip />
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"თქვენ დაუკავშირდით <xliff:g id="APPLICATION">%1$s</xliff:g>-ს, რომელსაც შეუძლია თქვენი ქსელის აქტივობის, მათ შორის, ელფოსტის, აპებისა და ვებსაიტების მონიტორინგი."</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"თქვენ დაუკავშირდით <xliff:g id="APPLICATION">%1$s</xliff:g>-ს, რომელსაც შეუძლია თქვენი პირადი ქსელის აქტივობის, მათ შორის, ელფოსტის, აპებისა და ვებსაიტების მონიტორინგი."</string>
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"თქვენ დაუკავშირდით <xliff:g id="APPLICATION">%1$s</xliff:g>-ს, რომელსაც თქვენი პირადი ქსელის აქტივობის მონიტორინგი შეუძლია, მათ შორის, ელფოსტის, აპებისა და ვებსაიტების."</string>
- <string name="monitoring_description_app_work" msgid="1754325860918060897">"თქვენი სამუშაო პროფილი <xliff:g id="ORGANIZATION">%1$s</xliff:g>-ის მიერ იმართება. ის დაკავშირებულია <xliff:g id="APPLICATION">%2$s</xliff:g>-თან, რომელსაც შეუძლია თქვენი სამსახურის ქსელის აქტივობის, მათ შორის, ელფოსტის, აპებისა და ვებსაიტების მონიტორინგი.\n\nდამატებითი ინფორმაციისთვის მიმართეთ თქვენს ადმინისტრატორს."</string>
+ <!-- no translation found for monitoring_description_app_work (7777228449969022305) -->
+ <skip />
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"თქვენი სამუშაო პროფილი <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_disabled" msgid="7412534203633528135">"მოწყობილობის დარჩება ჩაკეტილი, სანამ ხელით არ გახსნით"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"შეტყობინებების უფრო სწრაფად მიღება"</string>
diff --git a/packages/SystemUI/res/values-kk/strings.xml b/packages/SystemUI/res/values-kk/strings.xml
index 9faa5dc..69cd8bf 100644
--- a/packages/SystemUI/res/values-kk/strings.xml
+++ b/packages/SystemUI/res/values-kk/strings.xml
@@ -321,6 +321,12 @@
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> туралы ескерту"</string>
<string name="quick_settings_work_mode_label" msgid="6244915274350490429">"Жұмыс режимі"</string>
<string name="quick_settings_night_display_label" msgid="3577098011487644395">"Түнгі жарық"</string>
+ <!-- no translation found for quick_settings_nfc_label (9012153754816969325) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_off (6883274004315134333) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_on (6680317193676884311) -->
+ <skip />
<string name="recents_empty_message" msgid="808480104164008572">"Жақындағы элементтер жоқ"</string>
<string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Сіз барлығын өшірдіңіз"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"Қолданба туралы ақпарат"</string>
@@ -334,6 +340,16 @@
<string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Бөлінген көлденең"</string>
<string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Бөлінген тік"</string>
<string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Бөлінген теңшелетін"</string>
+ <!-- no translation found for recents_accessibility_dismissed (2354459747918667050) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_open (1651449827614876864) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_top (9056056469282256287) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_left (8987144699630620019) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_right (275069779299592867) -->
+ <skip />
<string-array name="recents_blacklist_array">
</string-array>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"Зарядталды"</string>
@@ -414,20 +430,24 @@
<string name="disconnect_vpn" msgid="1324915059568548655">"VPN желісін ажырату"</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Құрылғыңызды <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g> басқарады."</string>
<string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> құрылғыны <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> қолданбасымен басқарады."</string>
- <string name="monitoring_description_do_body" msgid="6764108354701060766">"Әкімші параметрлерді, корпоративтік кіру құқығын, қолданбаларды, құрылғыға қатысты деректерді, құрылғының орналасқан жер ақпаратын бақылай және басқара алады."</string>
+ <!-- no translation found for monitoring_description_do_body (3639594537660975895) -->
+ <skip />
<string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
<string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Толығырақ"</string>
<string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Желідегі әрекеттерді, соның ішінде электрондық хабарларды, қолданбаларды және вебсайттарды бақылайтын <xliff:g id="VPN_APP">%1$s</xliff:g> қолданбасына қосылдыңыз."</string>
<string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
<string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"VPN параметрлерін ашу"</string>
- <string name="monitoring_description_network_logging" msgid="3901006351911787915">"Әкімші құрылғыдағы трафикті қадағалау үшін желі журналын жүргізуді қосып қойған.\n\nТолығырақ ақпарат алу үшін әкімшімен хабарласыңыз."</string>
+ <!-- no translation found for monitoring_description_network_logging (7223505523384076027) -->
+ <skip />
<string name="monitoring_description_vpn" msgid="4445150119515393526">"Қолданбаға VPN байланысын орнату рұқсатын бердіңіз.\n\nБұл қолданба құрылғыңызды және желідегі белсенділігіңізді, соның ішінде электрондық пошталарды, қолданбаларды және веб-сайттарды бақылай алады."</string>
- <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Жұмыс профиліңізді <xliff:g id="ORGANIZATION">%1$s</xliff:g> басқарады.\n\nӘкімші желідегі белсенділігіңізді, соның ішінде электрондық пошталарды, қолданбаларды және веб-сайттарды бақылай алады.\n\nҚосымша ақпарат алу үшін әкімшіге хабарласыңыз.\n\nСондай-ақ сіз желідегі белсенділігіңізді бақылай алатын VPN желісіне қосылғансыз."</string>
+ <!-- no translation found for monitoring_description_vpn_profile_owned (2958019119161161530) -->
+ <skip />
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Сіз желідегі белсенділігіңізді, соның ішінде электрондық пошталарды, қолданбаларды және веб-сайттарды бақылай алатын <xliff:g id="APPLICATION">%1$s</xliff:g> қолданбасына қосылғансыз."</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"Сіз жеке желідегі белсенділігіңізді, соның ішінде электрондық пошталарды, қолданбаларды және веб-сайттарды бақылай алатын <xliff:g id="APPLICATION">%1$s</xliff:g> қолданбасына қосылғансыз."</string>
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Жеке желідегі әрекеттеріңізді, соның ішінде электрондық пошта хабарларын, қолданбаларды және вебсайттарды бақылай алатын <xliff:g id="APPLICATION">%1$s</xliff:g> қолданбасына қосылғансыз."</string>
- <string name="monitoring_description_app_work" msgid="1754325860918060897">"Жұмыс профиліңізді <xliff:g id="ORGANIZATION">%1$s</xliff:g> басқарады. Ол жұмыс кезінде желідегі белсенділігіңізді, соның ішінде электрондық пошталарды, қолданбаларды және веб-сайттарды бақылай алатын <xliff:g id="APPLICATION">%2$s</xliff:g> қолданбасына қосылған.\n\nҚосымша ақпарат алу үшін әкімшіге хабарласыңыз."</string>
+ <!-- no translation found for monitoring_description_app_work (7777228449969022305) -->
+ <skip />
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Жұмыс профиліңізді <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_disabled" msgid="7412534203633528135">"Қолмен бекітпесін ашқанша құрылғы бекітілген күйде қалады"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"Хабарландыруларды тезірек алу"</string>
diff --git a/packages/SystemUI/res/values-km/strings.xml b/packages/SystemUI/res/values-km/strings.xml
index 562727b..3b04eca 100644
--- a/packages/SystemUI/res/values-km/strings.xml
+++ b/packages/SystemUI/res/values-km/strings.xml
@@ -321,6 +321,12 @@
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> ការព្រមាន"</string>
<string name="quick_settings_work_mode_label" msgid="6244915274350490429">"របៀបការងារ"</string>
<string name="quick_settings_night_display_label" msgid="3577098011487644395">"ពន្លឺពេលយប់"</string>
+ <!-- no translation found for quick_settings_nfc_label (9012153754816969325) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_off (6883274004315134333) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_on (6680317193676884311) -->
+ <skip />
<string name="recents_empty_message" msgid="808480104164008572">"មិនមានធាតុថ្មីៗទេ"</string>
<string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"អ្នកបានជម្រះអ្វីៗទាំងអស់"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"ព័ត៌មានកម្មវិធី"</string>
@@ -334,6 +340,16 @@
<string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"បំបែកផ្តេក"</string>
<string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"បំបែកបញ្ឈរ"</string>
<string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"បំបែកផ្ទាល់ខ្លួន"</string>
+ <!-- no translation found for recents_accessibility_dismissed (2354459747918667050) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_open (1651449827614876864) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_top (9056056469282256287) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_left (8987144699630620019) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_right (275069779299592867) -->
+ <skip />
<string-array name="recents_blacklist_array">
</string-array>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"បានបញ្ចូលថ្ម"</string>
@@ -414,20 +430,24 @@
<string name="disconnect_vpn" msgid="1324915059568548655">"ផ្ដាច់ VPN"</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"ឧបករណ៍របស់អ្នកគ្រប់គ្រងដោយ <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g> ។"</string>
<string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> ប្រើប្រាស់ <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> ដើម្បីគ្រប់គ្រងឧបករណ៍របស់អ្នក។"</string>
- <string name="monitoring_description_do_body" msgid="6764108354701060766">"អ្នកគ្រប់គ្រងរបស់អ្នកអាចតាមដាន និងគ្រប់គ្រងការកំណត់ ការចូលលក្ខណៈក្រុមហ៊ុន កម្មវិធី ទិន្នន័យពាក់ព័ន្ធនឹងឧបករណ៍របស់អ្នក និងព័ត៌មានទីតាំងឧបករណ៍របស់អ្នក។"</string>
+ <!-- no translation found for monitoring_description_do_body (3639594537660975895) -->
+ <skip />
<string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
<string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"ស្វែងយល់បន្ថែម"</string>
<string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"អ្នកបានភ្ជាប់ទៅ <xliff:g id="VPN_APP">%1$s</xliff:g> ដែលអាចតាមដានសកម្មភាពក្នុងបណ្តាញរបស់អ្នក រួមទាំងអ៊ីមែល កម្មវិធី និងគេហទំព័រផងដែរ។"</string>
<string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
<string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"បើកការកំណត់ VPN"</string>
- <string name="monitoring_description_network_logging" msgid="3901006351911787915">"អ្នកគ្រប់គ្រងរបស់អ្នកបានបើកការធ្វើកំណត់ហេតុបណ្តាញ ដែលវានឹងតាមដានចរាចរណ៍បណ្តាញនៅលើឧបករណ៍របស់អ្នក។\n\nសម្រាប់ព័ត៌មានបន្ថែម សូមទាក់ទងអ្នកគ្រប់គ្រងរបស់អ្នក។"</string>
+ <!-- no translation found for monitoring_description_network_logging (7223505523384076027) -->
+ <skip />
<string name="monitoring_description_vpn" msgid="4445150119515393526">"អ្នកបានអនុញ្ញាតឲ្យកម្មវិធីដំឡើងការតភ្ជាប់ VPN។\n\nកម្មវិធីនេះអាចឃ្លាំមើលឧបករណ៍ និងសកម្មភាពបណ្តាញរបស់អ្នក រាប់បញ្ចូលទាំងអ៊ីមែល កម្មវិធី និងគេហទំព័រ។"</string>
- <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"ប្រវត្តិការងាររបស់អ្នកត្រូវបានគ្រប់គ្រងដោយ <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nអ្នកគ្រប់គ្រងរបស់អ្នកមានលទ្ធភាពអាចឃ្លាំមើលសកម្មភាពបណ្តាញរបស់អ្នក រួមបញ្ចូលទាំងអ៊ីមែល កម្មវិធី គេហទំព័រ។\n\nសម្រាប់ព័ត៌មានបន្ថែម សូមទាក់ទងអ្នកគ្រប់គ្រងរបស់អ្នក។\n\nអ្នកក៏ត្រូវបានភ្ជាប់ជាមួួយ VPN ផងដែរ ដែលវាអាចឃ្លាំមើលសកម្មភាពបណ្តាញរបស់អ្នក។"</string>
+ <!-- no translation found for monitoring_description_vpn_profile_owned (2958019119161161530) -->
+ <skip />
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"អ្នកត្រូវបានតភ្ជាប់ទៅ <xliff:g id="APPLICATION">%1$s</xliff:g> ដែលអាចឃ្លាំមើលសកម្មភាពបណ្តាញរបស់អ្នក រាប់បញ្ចូលទាំងអ៊ីមែល កម្មវិធី និងគេហទំព័រ។"</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"អ្នកត្រូវបានតភ្ជាប់ទៅ <xliff:g id="APPLICATION">%1$s</xliff:g> ដែលអាចឃ្លាំមើលសកម្មភាពបណ្តាញរបស់អ្នក រាប់បញ្ចូលទាំងអ៊ីមែល កម្មវិធី និងគេហទំព័រ។"</string>
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"អ្នកត្រូវបានភ្ជាប់ទៅ <xliff:g id="APPLICATION">%1$s</xliff:g> ដែលអាចឃ្លាំមើលសកម្មភាពបណ្តាញរបស់អ្នក រាប់បញ្ចូលទាំងអ៊ីមែល កម្មវិធី និងគេហទំព័រ។"</string>
- <string name="monitoring_description_app_work" msgid="1754325860918060897">"ប្រវត្តិរូបការងាររបស់អ្នកត្រូវបានគ្រប់គ្រងដោយ <xliff:g id="ORGANIZATION">%1$s</xliff:g>។ វាត្រូវបានតភ្ជាប់ទៅនឹង <xliff:g id="APPLICATION">%2$s</xliff:g> ដែលអាចឃ្លាំមើលសកម្មភាពបណ្តាញរបស់អ្នក រាប់បញ្ចូលទាំងអ៊ីមែល កម្មវិធី គេហទំព័រ។\n\nសម្រាប់ព័ត៌មានបន្ថែម សូមទាក់ទងអ្នកគ្រប់គ្រប់របស់អ្នក។"</string>
+ <!-- no translation found for monitoring_description_app_work (7777228449969022305) -->
+ <skip />
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"ប្រវត្តិរូបការងាររបស់អ្នកត្រូវបានគ្រប់គ្រងដោយ <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_disabled" msgid="7412534203633528135">"ឧបករណ៍នឹងចាក់សោរហូតដល់អ្នកដោះសោដោយដៃ"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"ទទួលបានការជូនដំណឹងកាន់តែលឿន"</string>
diff --git a/packages/SystemUI/res/values-kn/strings.xml b/packages/SystemUI/res/values-kn/strings.xml
index a0e2808..e26ac87 100644
--- a/packages/SystemUI/res/values-kn/strings.xml
+++ b/packages/SystemUI/res/values-kn/strings.xml
@@ -321,6 +321,12 @@
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> ಎಚ್ಚರಿಕೆ"</string>
<string name="quick_settings_work_mode_label" msgid="6244915274350490429">"ಕೆಲಸದ ಮೋಡ್"</string>
<string name="quick_settings_night_display_label" msgid="3577098011487644395">"ನೈಟ್ ಲೈಟ್"</string>
+ <!-- no translation found for quick_settings_nfc_label (9012153754816969325) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_off (6883274004315134333) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_on (6680317193676884311) -->
+ <skip />
<string name="recents_empty_message" msgid="808480104164008572">"ಯಾವುದೇ ಇತ್ತೀಚಿನ ಐಟಂಗಳಿಲ್ಲ"</string>
<string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"ನೀವು ಎಲ್ಲವನ್ನೂ ತೆರವುಗೊಳಿಸಿರುವಿರಿ"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"ಅಪ್ಲಿಕೇಶನ್ ಮಾಹಿತಿ"</string>
@@ -334,6 +340,16 @@
<string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"ಅಡ್ಡಲಾಗಿ ವಿಭಜಿಸಿದ"</string>
<string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"ಲಂಬವಾಗಿ ವಿಭಜಿಸಿದ"</string>
<string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"ಕಸ್ಟಮ್ ವಿಭಜಿಸಿದ"</string>
+ <!-- no translation found for recents_accessibility_dismissed (2354459747918667050) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_open (1651449827614876864) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_top (9056056469282256287) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_left (8987144699630620019) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_right (275069779299592867) -->
+ <skip />
<string-array name="recents_blacklist_array">
</string-array>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"ಚಾರ್ಜ್ ಆಗಿದೆ"</string>
@@ -414,20 +430,24 @@
<string name="disconnect_vpn" msgid="1324915059568548655">"VPN ಸಂಪರ್ಕಕಡಿತಗೊಳಿಸಿ"</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"ನಿಮ್ಮ ಸಾಧನವನ್ನು <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g> ನಿಂದ ನಿರ್ವಹಿಸಲಾಗಿದೆ."</string>
<string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"ನಿಮ್ಮ ಸಾಧನವನ್ನು ನಿರ್ವಹಿಸಲು <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> ಅನ್ನು ಬಳಸುತ್ತದೆ."</string>
- <string name="monitoring_description_do_body" msgid="6764108354701060766">"ನಿಮ್ಮ ನಿರ್ವಾಹಕರು ಸೆಟ್ಟಿಂಗ್ಗಳು, ಕಾರ್ಪೊರೇಟ್ ಪ್ರವೇಶ, ಅಪ್ಲಿಕೇಶನ್ಗಳು, ನಿಮ್ಮ ಸಾಧನಕ್ಕೆ ಸಂಬಂಧಿಸಿದ ಡೇಟಾ ಮತ್ತು ನಿಮ್ಮ ಸಾಧನದ ಸ್ಥಳ ಮಾಹಿತಿಯನ್ನು ಮೇಲ್ವಿಚಾರಣೆ ಮಾಡಬಹುದು ಮತ್ತು ನಿರ್ವಹಿಸಬಹುದು."</string>
+ <!-- no translation found for monitoring_description_do_body (3639594537660975895) -->
+ <skip />
<string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
<string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"ಇನ್ನಷ್ಟು ತಿಳಿಯಿರಿ"</string>
<string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"ನೀವು ಇಮೇಲ್ಗಳು, ಅಪ್ಲಿಕೇಶನ್ಗಳು ಮತ್ತು ವೆಬ್ಸೈಟ್ಗಳನ್ನು ಒಳಗೊಂಡಂತೆ ನಿಮ್ಮ ನೆಟ್ವರ್ಕ್ ಚಟುವಟಿಕೆಯ ಮೇಲ್ವಿಚಾರಣೆ ಮಾಡಬಹುದಾದ, <xliff:g id="VPN_APP">%1$s</xliff:g> ಗೆ ನೀವು ಸಂಪರ್ಕಗೊಂಡಿರುವಿರಿ."</string>
<string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
<string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"VPN ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು ತೆರೆಯಿರಿ"</string>
- <string name="monitoring_description_network_logging" msgid="3901006351911787915">"ನಿಮ್ಮ ನಿರ್ವಾಹಕರು ನಿಮ್ಮ ಸಾಧನದಲ್ಲಿ ಟ್ರಾಫಿಕ್ ಮೇಲ್ವಿಚಾರಣೆ ಮಾಡಲು ನೆಟ್ವರ್ಕ್ ಲಾಗಿನ್ ಮಾಡುವಿಕೆಯನ್ನು ಆನ್ ಮಾಡಿದ್ದಾರೆ.\n\nಹೆಚ್ಚಿನ ಮಾಹಿತಿಗೆ ನಿಮ್ಮ ನಿರ್ವಾಹಕರನ್ನು ಸಂಪರ್ಕಿಸಿ."</string>
+ <!-- no translation found for monitoring_description_network_logging (7223505523384076027) -->
+ <skip />
<string name="monitoring_description_vpn" msgid="4445150119515393526">"ನೀವು VPN ಸಂಪರ್ಕ ಹೊಂದಿಸಲು ಅಪ್ಲಿಕೇಶನ್ಗೆ ಅನುಮತಿ ನೀಡಿರುವಿರಿ.\n\nಈ ಅಪ್ಲಿಕೇಶನ್ ಇಮೇಲ್ಗಳು, ಅಪ್ಲಿಕೇಶನ್ಗಳು ಮತ್ತು ವೆಬ್ಸೈಟ್ಗಳನ್ನು ಒಳಗೊಂಡಂತೆ ನಿಮ್ಮ ನೆಟ್ವರ್ಕ್ ಚಟುವಟಿಕೆಯ ಮೇಲ್ವಿಚಾರಣೆ ಮಾಡಬಹುದು."</string>
- <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"ನಿಮ್ಮ ಪ್ರೊಫೈಲ್ ಅನ್ನು <xliff:g id="ORGANIZATION">%1$s</xliff:g> ಮೂಲಕ ನಿರ್ವಹಿಸಲಾಗುತ್ತಿದೆ.\n\nನಿಮ್ಮ ನಿರ್ವಾಹಕರು ಇಮೇಲ್ಗಳು, ಅಪ್ಲಿಕೇಶನ್ಗಳು ಮತ್ತು ವೆಬ್ಸೈಟ್ಗಳನ್ನು ಒಳಗೊಂಡಂತೆ ನಿಮ್ಮ ನೆಟ್ವರ್ಕ್ ಚಟುವಟಿಕೆಯ ಮೇಲ್ವಿಚಾರಣೆ ಮಾಡುವ ಸಾಮರ್ಥ್ಯವನ್ನು ಹೊಂದಿದ್ದಾರೆ.\n\nಹೆಚ್ಚಿನ ಮಾಹಿತಿಗಾಗಿ, ನಿಮ್ಮ ನಿರ್ವಾಹಕರನ್ನು ಸಂಪರ್ಕಿಸಿ.\n\nನಿಮ್ಮ ವೈಯಕ್ತಿಕ ನೆಟ್ವರ್ಕ್ ಚಟುವಟಿಕೆಯನ್ನು ಮೇಲ್ವಿಚಾರಣೆ ಮಾಡಬಹುದಾದ VPN ಗೆ ಕೂಡಾ ನೀವು ಸಂಪರ್ಕಗೊಂಡಿರುವಿರಿ."</string>
+ <!-- no translation found for monitoring_description_vpn_profile_owned (2958019119161161530) -->
+ <skip />
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"ನೀವು ಇಮೇಲ್ಗಳು, ಅಪ್ಲಿಕೇಶನ್ಗಳು ಮತ್ತು ವೆಬ್ಸೈಟ್ಗಳನ್ನು ಒಳಗೊಂಡಂತೆ ನಿಮ್ಮ ನೆಟ್ವರ್ಕ್ ಚಟುವಟಿಕೆಯ ಮೇಲ್ವಿಚಾರಣೆ ಮಾಡಬಹುದಾದ <xliff:g id="APPLICATION">%1$s</xliff:g> ಗೆ ಸಂಪರ್ಕಗೊಂಡಿರುವಿರಿ."</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"ನೀವು ಇಮೇಲ್ಗಳು, ಅಪ್ಲಿಕೇಶನ್ಗಳು ಮತ್ತು ವೆಬ್ಸೈಟ್ಗಳು ಸೇರಿದಂತೆ ನಿಮ್ಮ ವೈಯಕ್ತಿಕ ನೆಟ್ವರ್ಕ್ ಚಟುವಟಿಕೆಯ ಮೇಲ್ವಿಚಾರಣೆ ಮಾಡಬಹುದಾದ <xliff:g id="APPLICATION">%1$s</xliff:g> ಗೆ ಸಂಪರ್ಕಗೊಂಡಿರುವಿರಿ."</string>
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"ನೀವು ಇಮೇಲ್ಗಳು, ಅಪ್ಲಿಕೇಶನ್ಗಳು, ಮತ್ತು ವೆಬ್ಸೈಟ್ಗಳನ್ನು ಒಳಗೊಂಡಂತೆ ನಿಮ್ಮ ವೈಯಕ್ತಿಕ ನೆಟ್ವರ್ಕ್ ಚಟುವಟಿಕೆಯ ಮೇಲ್ವಿಚಾರಣೆ ಮಾಡಬಹುದಾದ <xliff:g id="APPLICATION">%1$s</xliff:g> ಗೆ ಸಂಪರ್ಕಗೊಂಡಿರುವಿರಿ."</string>
- <string name="monitoring_description_app_work" msgid="1754325860918060897">"ನಿಮ್ಮ ಕೆಲಸದ ಪ್ರೊಫೈಲ್ ಅನ್ನು <xliff:g id="ORGANIZATION">%1$s</xliff:g> ಮೂಲಕ ನಿರ್ವಹಿಸಲಾಗುತ್ತಿದೆ. ಇದು ಇಮೇಲ್ಗಳು, ಅಪ್ಲಿಕೇಶನ್ಗಳು, ಮತ್ತು ವೆಬ್ಸೈಟ್ಗಳನ್ನು ಒಳಗೊಂಡಂತೆ ನಿಮ್ಮ ಕೆಲಸದ ನೆಟ್ವರ್ಕ್ ಚಟುವಟಿಕೆಯ ಮೇಲ್ವಿಚಾರಣೆ ಮಾಡಬಹುದಾದ <xliff:g id="APPLICATION">%2$s</xliff:g> ಗೆ ಸಂಪರ್ಕಗೊಂಡಿದೆ.\n\nಹೆಚ್ಚಿನ ಮಾಹಿತಿಗಾಗಿ, ನಿಮ್ಮ ನಿರ್ವಾಹಕರನ್ನು ಸಂಪರ್ಕಿಸಿ."</string>
+ <!-- no translation found for monitoring_description_app_work (7777228449969022305) -->
+ <skip />
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"ನಿಮ್ಮ ಕೆಲಸದ ಪ್ರೊಫೈಲ್ ಅನ್ನು <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_disabled" msgid="7412534203633528135">"ನೀವಾಗಿಯೇ ಅನ್ಲಾಕ್ ಮಾಡುವವರೆಗೆ ಸಾಧನವು ಲಾಕ್ ಆಗಿಯೇ ಇರುತ್ತದೆ"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"ವೇಗವಾಗಿ ಅಧಿಸೂಚನೆಗಳನ್ನು ಪಡೆದುಕೊಳ್ಳಿ"</string>
diff --git a/packages/SystemUI/res/values-ko/strings.xml b/packages/SystemUI/res/values-ko/strings.xml
index de4e6ed..62b5d47 100644
--- a/packages/SystemUI/res/values-ko/strings.xml
+++ b/packages/SystemUI/res/values-ko/strings.xml
@@ -323,6 +323,12 @@
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> 경고"</string>
<string name="quick_settings_work_mode_label" msgid="6244915274350490429">"작업 모드"</string>
<string name="quick_settings_night_display_label" msgid="3577098011487644395">"야간 조명"</string>
+ <!-- no translation found for quick_settings_nfc_label (9012153754816969325) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_off (6883274004315134333) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_on (6680317193676884311) -->
+ <skip />
<string name="recents_empty_message" msgid="808480104164008572">"최근 항목이 없습니다."</string>
<string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"모든 항목을 삭제했습니다."</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"애플리케이션 정보"</string>
@@ -336,6 +342,16 @@
<string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"수평 분할"</string>
<string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"수직 분할"</string>
<string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"맞춤 분할"</string>
+ <!-- no translation found for recents_accessibility_dismissed (2354459747918667050) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_open (1651449827614876864) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_top (9056056469282256287) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_left (8987144699630620019) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_right (275069779299592867) -->
+ <skip />
<string-array name="recents_blacklist_array">
</string-array>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"충전됨"</string>
@@ -416,20 +432,24 @@
<string name="disconnect_vpn" msgid="1324915059568548655">"VPN 연결 해제"</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"<xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>에서 관리하는 기기입니다."</string>
<string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>이(가) <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g>을(를) 사용하여 내 기기를 관리합니다."</string>
- <string name="monitoring_description_do_body" msgid="6764108354701060766">"관리자는 설정, 기업 액세스, 앱, 기기 관련 데이터 및 기기의 위치 정보를 모니터링하고 관리할 수 있습니다."</string>
+ <!-- no translation found for monitoring_description_do_body (3639594537660975895) -->
+ <skip />
<string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
<string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"자세히 알아보기"</string>
<string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"<xliff:g id="VPN_APP">%1$s</xliff:g>에 연결되었습니다. 이 앱은 이메일, 앱, 웹사이트와 같은 내 네트워크 활동을 모니터링할 수 있습니다."</string>
<string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
<string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"공개 VPN 설정"</string>
- <string name="monitoring_description_network_logging" msgid="3901006351911787915">"관리자가 기기 트래픽을 모니터링하는 네트워크 로깅을 사용 설정했습니다.\n\n자세한 정보는 관리자에게 문의하세요."</string>
+ <!-- no translation found for monitoring_description_network_logging (7223505523384076027) -->
+ <skip />
<string name="monitoring_description_vpn" msgid="4445150119515393526">"VPN 연결을 설정할 수 있는 권한을 앱에 부여했습니다.\n\n이 앱에서 이메일, 앱, 웹사이트와 같은 내 네트워크 활동 및 기기를 모니터링할 수 있습니다."</string>
- <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"직장 프로필은 <xliff:g id="ORGANIZATION">%1$s</xliff:g>에서 관리합니다.\n\n관리자는 이메일, 앱, 웹사이트와 같은 네트워크 활동을 모니터링할 수 있습니다.\n\n자세한 내용은 관리자에게 문의하세요.\n\n또한 VPN에 연결되어 있으며 여기에서 내 네트워크 활동을 모니터링할 수 있습니다."</string>
+ <!-- no translation found for monitoring_description_vpn_profile_owned (2958019119161161530) -->
+ <skip />
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"<xliff:g id="APPLICATION">%1$s</xliff:g>에 연결되었습니다. 이 앱은 이메일, 앱, 웹사이트와 같은 내 네트워크 활동을 모니터링할 수 있습니다."</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"<xliff:g id="APPLICATION">%1$s</xliff:g>에 연결되었습니다. 이 앱은 이메일, 앱, 웹사이트와 같은 내 네트워크 활동을 모니터링할 수 있습니다."</string>
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"<xliff:g id="APPLICATION">%1$s</xliff:g>에 연결되었습니다. 이 앱은 이메일, 앱, 웹사이트와 같은 내 개인 네트워크 활동을 모니터링할 수 있습니다."</string>
- <string name="monitoring_description_app_work" msgid="1754325860918060897">"직장 프로필은 <xliff:g id="ORGANIZATION">%1$s</xliff:g>에서 관리합니다. 이는 <xliff:g id="APPLICATION">%2$s</xliff:g>에 연결되어 있으며 여기에서 이메일, 앱, 웹사이트와 같은 직장 네트워크 활동을 모니터링할 수 있습니다.\n\n자세한 내용은 관리자에게 문의하세요."</string>
+ <!-- no translation found for monitoring_description_app_work (7777228449969022305) -->
+ <skip />
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"직장 프로필은 <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_disabled" msgid="7412534203633528135">"수동으로 잠금 해제할 때까지 기기가 잠금 상태로 유지됩니다."</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"알림을 더욱 빠르게 받기"</string>
diff --git a/packages/SystemUI/res/values-ky/strings.xml b/packages/SystemUI/res/values-ky/strings.xml
index 89790ee..2dc5c1d 100644
--- a/packages/SystemUI/res/values-ky/strings.xml
+++ b/packages/SystemUI/res/values-ky/strings.xml
@@ -321,6 +321,12 @@
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> эскертүү"</string>
<string name="quick_settings_work_mode_label" msgid="6244915274350490429">"Иштөө режими"</string>
<string name="quick_settings_night_display_label" msgid="3577098011487644395">"Түнкү жарык"</string>
+ <!-- no translation found for quick_settings_nfc_label (9012153754816969325) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_off (6883274004315134333) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_on (6680317193676884311) -->
+ <skip />
<string name="recents_empty_message" msgid="808480104164008572">"Акыркы колдонмолор жок"</string>
<string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Баарын тазаладыңыз"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"Колдонмо жөнүндө маалымат"</string>
@@ -334,6 +340,16 @@
<string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Туурасынан бөлүү"</string>
<string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Тигинен бөлүү"</string>
<string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Ыңгайлаштырылган бөлүү"</string>
+ <!-- no translation found for recents_accessibility_dismissed (2354459747918667050) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_open (1651449827614876864) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_top (9056056469282256287) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_left (8987144699630620019) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_right (275069779299592867) -->
+ <skip />
<string-array name="recents_blacklist_array">
</string-array>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"Кубатталды"</string>
@@ -414,20 +430,24 @@
<string name="disconnect_vpn" msgid="1324915059568548655">"VPN\'ди ажыратуу"</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Түзмөгүңүз <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g> тарабынан башкарылат."</string>
<string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"Түзмөгүңүздү башкаруу үчүн <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> уюму <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> колдонмосун колдонот."</string>
- <string name="monitoring_description_do_body" msgid="6764108354701060766">"Администраторуңуз жөндөөлөрдү, корпоративдик кирүү мүмкүнчүлүгүн, колдонмолорду, уруксаттарды жана ушул түзмөкө байланыштуу дайындарды, ошондой эле түзмөгүңүздүн жайгашкан жери тууралуу маалыматты көзөмөлдөп жана башкара алат."</string>
+ <!-- no translation found for monitoring_description_do_body (3639594537660975895) -->
+ <skip />
<string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
<string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Кеңири маалымат"</string>
<string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Электрондук почта, колдонмолор жана вебсайттар сыяктуу тармактагы аракеттериңизди тескей турган <xliff:g id="VPN_APP">%1$s</xliff:g> колдонмосуна туташып турасыз."</string>
<string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
<string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"VPN жөндөөлөрүн ачуу"</string>
- <string name="monitoring_description_network_logging" msgid="3901006351911787915">"Администраторуңуз тармактын таржымалын алууну иштетти, андыктан түзмөгүңүздөгү трафик көзөмөлгө алынды.\n\nКеңири маалымат алуу үчүн администраторуңузга кайрылыңыз."</string>
+ <!-- no translation found for monitoring_description_network_logging (7223505523384076027) -->
+ <skip />
<string name="monitoring_description_vpn" msgid="4445150119515393526">"Колдонмого VPN туташуусун орнотууга уруксат бердиңиз.\n\nБул колдонмо түзмөгүңүздү жана электрондук почталар, колдонмолор жана вебсайттар сыяктуу тармактагы аракеттериңизди көзөмөлдөй алат."</string>
- <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Жумуш профилиңизди <xliff:g id="ORGANIZATION">%1$s</xliff:g> башкарат.\n\nАдминистраторуңуз электрондук почталар, колдонмолор жана вебсайттар сыяктуу тармактагы аракеттериңизди тескей алат.\n\nКөбүрөөк маалымат алуу үчүн, администраторуңузга кайрылыңыз.\n\nМындан тышкары, тармактагы аракеттериңизди тескей турган VPN\'ге да туташып турасыз."</string>
+ <!-- no translation found for monitoring_description_vpn_profile_owned (2958019119161161530) -->
+ <skip />
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Электрондук почта, колдонмолор жана вебсайттар сыяктуу тармактык аракеттерди көзөмөлдөй турган <xliff:g id="APPLICATION">%1$s</xliff:g> колдонмосуна туташып турасыз."</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"Электрондук почта, колдонмолор жана вебсайттар сыяктуу тармактагы жеке аракеттериңизди көзөмөлдөй турган <xliff:g id="APPLICATION">%1$s</xliff:g> колдонмосуна туташып турасыз."</string>
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Электрондук почта, колдонмолор жана вебсайттар сыяктуу тармактагы жеке аракеттериңизди тескей турган <xliff:g id="APPLICATION">%1$s</xliff:g> колдонмосуна туташып турасыз."</string>
- <string name="monitoring_description_app_work" msgid="1754325860918060897">"Жумуш профилиңизди <xliff:g id="ORGANIZATION">%1$s</xliff:g> башкарат. Ал электрондук почта, колдонмолор жана вебсайттар сыяктуу жумуш тармагыңыздагы аракеттерди көзөмөлдөй турган <xliff:g id="APPLICATION">%2$s</xliff:g> менен туташкан.\n\nКөбүрөөк маалымат алуу үчүн администраторуңузга кайрылыңыз."</string>
+ <!-- no translation found for monitoring_description_app_work (7777228449969022305) -->
+ <skip />
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Жумуш профилиңизди <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_disabled" msgid="7412534203633528135">"Түзмөктүн кулпусу кол менен ачылмайынча кулпуланган бойдон алат"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"Эскертмелерди тезирээк алуу"</string>
diff --git a/packages/SystemUI/res/values-lo/strings.xml b/packages/SystemUI/res/values-lo/strings.xml
index da8a467..7fb5c1e 100644
--- a/packages/SystemUI/res/values-lo/strings.xml
+++ b/packages/SystemUI/res/values-lo/strings.xml
@@ -321,6 +321,12 @@
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"ຄຳເຕືອນ <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
<string name="quick_settings_work_mode_label" msgid="6244915274350490429">"ໂໝດການເຮັດວຽກ"</string>
<string name="quick_settings_night_display_label" msgid="3577098011487644395">"ແສງກາງຄືນ"</string>
+ <!-- no translation found for quick_settings_nfc_label (9012153754816969325) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_off (6883274004315134333) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_on (6680317193676884311) -->
+ <skip />
<string name="recents_empty_message" msgid="808480104164008572">"ບໍ່ມີລາຍການຫຼ້າສຸດ"</string>
<string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"ທ່ານລຶບລ້າງທຸກຢ່າງແລ້ວ"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"ຂໍ້ມູນແອັບພລິເຄຊັນ"</string>
@@ -334,6 +340,16 @@
<string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"ການແຍກລວງຂວາງ"</string>
<string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"ການແຍກລວງຕັ້ງ"</string>
<string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"ການແຍກກຳນົດເອງ"</string>
+ <!-- no translation found for recents_accessibility_dismissed (2354459747918667050) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_open (1651449827614876864) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_top (9056056469282256287) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_left (8987144699630620019) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_right (275069779299592867) -->
+ <skip />
<string-array name="recents_blacklist_array">
</string-array>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"ສາກເຕັມແລ້ວ."</string>
@@ -414,20 +430,24 @@
<string name="disconnect_vpn" msgid="1324915059568548655">"ຕັດການເຊື່ອມຕໍ່ VPN"</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"ອຸປະກອນຂອງທ່ານແມ່ນຈັດການໂດຍ <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
<string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> ໃຊ້ <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> ເພື່ອຈັດການອຸປະກອນຂອງທ່ານ."</string>
- <string name="monitoring_description_do_body" msgid="6764108354701060766">"ຜູ້ເບິ່ງແຍງລະບົບຂອງທ່ານສາມາດຕິດຕາມ ແລະ ຈັດການການຕັ້ງຄ່າ, ການເຂົ້າເຖິງອົງກອນ, ແອັບ, ຂໍ້ມູນທີ່ເຊື່ອມໂຍງກັບອຸປະກອນຂອງທ່ານແລະ ຂໍ້ມູນສະຖານທີ່ຂອງອຸປະກອນທ່ານໄດ້."</string>
+ <!-- no translation found for monitoring_description_do_body (3639594537660975895) -->
+ <skip />
<string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
<string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"ສຶກສາເພີ່ມເຕີມ"</string>
<string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"ທ່ານເຊື່ອມຕໍ່ກັບ <xliff:g id="VPN_APP">%1$s</xliff:g> ແລ້ວ, ເຊິ່ງສາມາດຕິດຕາມການເຄື່ອນໄຫວເຄືອຂ່າຍ, ຮວມທັງອີເມວ, ແອັບ ແລະ ເວັບໄຊຕ່າງໆໄດ້."</string>
<string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
<string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"ເປີດການຕັ້ງຄ່າ VPN"</string>
- <string name="monitoring_description_network_logging" msgid="3901006351911787915">"ຜູ້ເບິ່ງແຍງລະບົບຂອງທ່ານໄດ້ເປີດໃຊ້ການບັນທຶກເຄືອຂ່າຍໄວ້, ເຊິ່ງຈະກວດສອບທຣາບຟິກໃນອຸປະກອນຂອງທ່ານ.\n\nສຳລັບຂໍ້ມູນເພີ່ມເຕີມໃຫ້ຕິດຕໍ່ຜູ້ເບິ່ງແຍງລະບົບຂອງທ່ານ."</string>
+ <!-- no translation found for monitoring_description_network_logging (7223505523384076027) -->
+ <skip />
<string name="monitoring_description_vpn" msgid="4445150119515393526">"ທ່ານໄດ້ອະນຸຍາດໃຫ້ແອັບຕັ້ງການເຊື່ອມຕໍ່ VPN.\n\nແອັບນີ້ສາມາດຕິດຕາມການເຄື່ອນໄຫວຂອງອຸປະກອນ ແລະເຄືອຂ່າຍຂອງທ່ານ ເຊິ່ງລວມທັງອີເມວ, ແອັບ ແລະເວັບໄຊທ໌."</string>
- <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"ໂປຣໄຟລ໌ວຽກຂອງທ່ານຖືກຄຸ້ມຄອງໂດຍ <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nຜູ້ຄວບຄຸມຂອງທ່ານສາມາດຕິດຕາມການເຄື່ອນໄຫວເຄືອຂ່າຍຂອງທ່ານໄດ້ ລວມທັງອີເມວ, ແອັບ, ແລະເວັບໄຊທ໌.\n\nສຳລັບຂໍ້ມູນເພີ່ມເຕີມ, ຕິດຕໍ່ຜູ້ຄວບຄຸມຂອງທ່ານ.\n\nທ່ານຍັງເຊື່ອມຕໍ່ກັບ VPN, ເຊິ່ງສາມາດຕິດຕາມກິດຈະກຳເຄືອຂ່າຍຂອງທ່ານ."</string>
+ <!-- no translation found for monitoring_description_vpn_profile_owned (2958019119161161530) -->
+ <skip />
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"ທ່ານເຊື່ອມຕໍ່ກັບ <xliff:g id="APPLICATION">%1$s</xliff:g>, ເຊິ່ງສາມາດຕິດຕາມການເຄື່ອນໄຫວເຄືອຂ່າຍຂອງທ່ານ ລວມທັງອີເມວ, ແອັບ ແລະເວັບໄຊທ໌."</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"ທ່ານເຊື່ອມຕໍ່ກັບ <xliff:g id="APPLICATION">%1$s</xliff:g>, ເຊິ່ງສາມາດຕິດຕາມການເຄື່ອນໄຫວເຄືອຂ່າຍສ່ວນຕົວຂອງທ່ານ ລວມທັງອີເມວ, ແອັບ ແລະເວັບໄຊທ໌."</string>
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"ທ່ານເຊື່ອມຕໍ່ກັບ <xliff:g id="APPLICATION">%1$s</xliff:g> ແລ້ວ, ເຊິ່ງສາມາດຕິດຕາມການເຄື່ອນໄຫວເຄືອຂ່າຍສ່ວນຕົວຂອງທ່ານ ຮວມທັງອີເມວ, ແອັບ ແລະເວັບໄຊໄດ້."</string>
- <string name="monitoring_description_app_work" msgid="1754325860918060897">"ໂປຣໄຟລ໌ບ່ອນເຮັດວຽກຂອງທ່ານຖືກຄວບຄຸມໂດຍ <xliff:g id="ORGANIZATION">%1$s</xliff:g>. ມັນຖືກເຊື່ອມຕໍ່ກັບ <xliff:g id="APPLICATION">%2$s</xliff:g>, ເຊິ່ງສາມາດຕິດຕາມການເຄື່ອນໄຫວເຄືອຂ່າຍບ່ອນເຮັດວຽກຂອງທ່ານ ລວມທັງອີເມວ, ແອັບ ແລະເວັບໄຊທ໌.\n\nສຳລັບຂໍ້ມູນເພີ່ມເຕີມ, ໃຫ້ຕິດຕໍ່ຜູ້ບໍລິຫານຂອງທ່ານ."</string>
+ <!-- no translation found for monitoring_description_app_work (7777228449969022305) -->
+ <skip />
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"ໂປຣໄຟລ໌ບ່ອນເຮັດວຽກຂອງທ່ານຖືກຈັດການໂດຍ <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_disabled" msgid="7412534203633528135">"Device will stay locked until you manually unlock"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"ຮັບເອົາການແຈ້ງເຕືອນໄວຂຶ້ນ"</string>
diff --git a/packages/SystemUI/res/values-lt/strings.xml b/packages/SystemUI/res/values-lt/strings.xml
index b2ead25..6036842 100644
--- a/packages/SystemUI/res/values-lt/strings.xml
+++ b/packages/SystemUI/res/values-lt/strings.xml
@@ -325,6 +325,12 @@
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> įspėjimas"</string>
<string name="quick_settings_work_mode_label" msgid="6244915274350490429">"Darbo režimas"</string>
<string name="quick_settings_night_display_label" msgid="3577098011487644395">"Nakties šviesa"</string>
+ <!-- no translation found for quick_settings_nfc_label (9012153754816969325) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_off (6883274004315134333) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_on (6680317193676884311) -->
+ <skip />
<string name="recents_empty_message" msgid="808480104164008572">"Nėra jokių naujausių elementų"</string>
<string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Viską išvalėte"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"Programos informacija"</string>
@@ -338,6 +344,16 @@
<string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Horizontalus skaidymas"</string>
<string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Vertikalus skaidymas"</string>
<string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Tinkintas skaidymas"</string>
+ <!-- no translation found for recents_accessibility_dismissed (2354459747918667050) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_open (1651449827614876864) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_top (9056056469282256287) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_left (8987144699630620019) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_right (275069779299592867) -->
+ <skip />
<string-array name="recents_blacklist_array">
</string-array>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"Įkrautas"</string>
@@ -418,20 +434,24 @@
<string name="disconnect_vpn" msgid="1324915059568548655">"Atjungti VPN"</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Įrenginį tvarko „<xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>“."</string>
<string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"„<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>“ naudoja „<xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g>“ įrenginiui tvarkyti."</string>
- <string name="monitoring_description_do_body" msgid="6764108354701060766">"Administr. gali stebėti ir tvark. nustat., įmonės prieigos par., progr., su įreng. susietus duomenis ir įreng. vietovės inform."</string>
+ <!-- no translation found for monitoring_description_do_body (3639594537660975895) -->
+ <skip />
<string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
<string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Sužinoti daugiau"</string>
<string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Esate prisijungę prie programos „<xliff:g id="VPN_APP">%1$s</xliff:g>“, kuri gali stebėti tinklo veiklą, įskaitant el. laiškus, programas ir svetaines."</string>
<string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
<string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Atidaryti VPN nustatymus"</string>
- <string name="monitoring_description_network_logging" msgid="3901006351911787915">"Administratorius įjungė tinklo duomenų įrašymą į žurnalą. Įjungus šią funkciją stebimas srautas jūsų įrenginyje.\n\nJei reikia daugiau informacijos, susisiekite su administratoriumi."</string>
+ <!-- no translation found for monitoring_description_network_logging (7223505523384076027) -->
+ <skip />
<string name="monitoring_description_vpn" msgid="4445150119515393526">"Suteikėte programai leidimą nustatyti VPN ryšį.\n\nŠi programa gali stebėti įrenginio ir tinklo veiklą, įskaitant el. laiškus, programas ir svetaines."</string>
- <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Jūsų darbo profilį tvarko „<xliff:g id="ORGANIZATION">%1$s</xliff:g>“.\n\nAdministratorius gali stebėti tinklo veiklą, įskaitant el. laiškus, programas ir svetaines.\n\nDaugiau informacijos galite gauti susisiekę su administratoriumi.\n\nBe to, esate prisijungę prie VPN, kuris gali stebėti tinklo veiklą."</string>
+ <!-- no translation found for monitoring_description_vpn_profile_owned (2958019119161161530) -->
+ <skip />
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Esate prisijungę prie programos „<xliff:g id="APPLICATION">%1$s</xliff:g>“, kuri gali stebėti tinklo veiklą, įskaitant el. laiškus, programas ir svetaines."</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"Esate prisijungę prie programos „<xliff:g id="APPLICATION">%1$s</xliff:g>“, kuri gali stebėti asmeninio profilio tinklo veiklą, įskaitant el. laiškus, programas ir svetaines."</string>
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Esate prisijungę prie programos „<xliff:g id="APPLICATION">%1$s</xliff:g>“, kuri gali stebėti asmeninio tinklo veiklą, įskaitant el. laiškus, programas ir svetaines."</string>
- <string name="monitoring_description_app_work" msgid="1754325860918060897">"Darbo profilį tvarko „<xliff:g id="ORGANIZATION">%1$s</xliff:g>“. Jis susietas su programa „<xliff:g id="APPLICATION">%2$s</xliff:g>“, kuri gali stebėti darbo profilio tinklo veiklą, įskaitant el. laiškus, programas ir svetaines.\n\nDaugiau informacijos galite gauti susisiekę su administratoriumi."</string>
+ <!-- no translation found for monitoring_description_app_work (7777228449969022305) -->
+ <skip />
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Darbo profilį tvarko „<xliff:g id="ORGANIZATION">%1$s</xliff:g>“. Jis susietas su programa „<xliff:g id="APPLICATION_WORK">%2$s</xliff:g>“, kuri gali stebėti darbo profilio tinklo veiklą, įskaitant el. laiškus, programas ir svetaines.\n\nTaip pat esate prisijungę prie programos „<xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>“, kuri gali stebėti asmeninio profilio tinklo veiklą."</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Įrenginys liks užrakintas, kol neatrakinsite jo neautomatiniu būdu"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"Greičiau gaukite pranešimus"</string>
diff --git a/packages/SystemUI/res/values-lv/strings.xml b/packages/SystemUI/res/values-lv/strings.xml
index 375b75e..9911109 100644
--- a/packages/SystemUI/res/values-lv/strings.xml
+++ b/packages/SystemUI/res/values-lv/strings.xml
@@ -323,6 +323,12 @@
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> brīdinājums"</string>
<string name="quick_settings_work_mode_label" msgid="6244915274350490429">"Darba režīms"</string>
<string name="quick_settings_night_display_label" msgid="3577098011487644395">"Nakts režīms"</string>
+ <!-- no translation found for quick_settings_nfc_label (9012153754816969325) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_off (6883274004315134333) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_on (6680317193676884311) -->
+ <skip />
<string name="recents_empty_message" msgid="808480104164008572">"Nav nesenu vienumu"</string>
<string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Visi uzdevumi ir notīrīti"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"Informācija par lietojumprogrammu"</string>
@@ -336,6 +342,16 @@
<string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Horizontāls dalījums"</string>
<string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Vertikāls dalījums"</string>
<string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Pielāgots dalījums"</string>
+ <!-- no translation found for recents_accessibility_dismissed (2354459747918667050) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_open (1651449827614876864) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_top (9056056469282256287) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_left (8987144699630620019) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_right (275069779299592867) -->
+ <skip />
<string-array name="recents_blacklist_array">
</string-array>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"Akumulators uzlādēts"</string>
@@ -416,20 +432,24 @@
<string name="disconnect_vpn" msgid="1324915059568548655">"Atvienot VPN tīklu"</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Jūsu ierīci pārvalda <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
<string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> izmanto lietotni <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> jūsu ierīces pārvaldībai."</string>
- <string name="monitoring_description_do_body" msgid="6764108354701060766">"Administrators var pārraudzīt un pārvaldīt iestatījumus, korporatīvo piekļuvi, lietotnes, ierīces datus un informāciju par ierīces atrašanās vietu."</string>
+ <!-- no translation found for monitoring_description_do_body (3639594537660975895) -->
+ <skip />
<string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
<string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Uzzināt vairāk"</string>
<string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Ir izveidots savienojums ar lietotni <xliff:g id="VPN_APP">%1$s</xliff:g>, kas var pārraudzīt jūsu darbības tīklā, tostarp e-pasta ziņojumus, lietotnes un vietnes."</string>
<string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
<string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Atvērt VPN iestatījumus"</string>
- <string name="monitoring_description_network_logging" msgid="3901006351911787915">"Administrators ir ieslēdzis tīkla reģistrēšanu, kuru izmanto, lai pārraudzītu datplūsmu jūsu ierīcē.\n\nLai iegūtu plašāku informāciju, sazinieties ar administratoru."</string>
+ <!-- no translation found for monitoring_description_network_logging (7223505523384076027) -->
+ <skip />
<string name="monitoring_description_vpn" msgid="4445150119515393526">"Jūs piešķīrāt lietotnei atļauju izveidot savienojumu ar VPN tīklu.\n\nŠī lietotne var pārraudzīt jūsu ierīcē un tīklā veiktās darbības, tostarp e-pasta ziņojumus, lietotnes un vietnes."</string>
- <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Jūsu darba profilu pārvalda <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nJūsu administrators var pārraudzīt jūsu tīklā veiktās darbības, tostarp e-pasta ziņojumus, lietotnes un vietnes.\n\nLai iegūtu plašāku informāciju, sazinieties ar administratoru.\n\nIerīcē ir arī izveidots savienojums ar VPN tīklu, kurā var tikt pārraudzītas jūsu tīklā veiktās darbības."</string>
+ <!-- no translation found for monitoring_description_vpn_profile_owned (2958019119161161530) -->
+ <skip />
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Ir izveidots savienojums ar lietotni <xliff:g id="APPLICATION">%1$s</xliff:g>, kura var pārraudzīt jūsu tīklā veiktās darbības, tostarp e-pasta ziņojumus, lietotnes un vietnes."</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"Ir izveidots savienojums ar lietotni <xliff:g id="APPLICATION">%1$s</xliff:g>, kura var pārraudzīt jūsu tīklā veiktās privātās darbības, tostarp e-pasta ziņojumus, lietotnes un vietnes."</string>
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Ir izveidots savienojums ar lietotni <xliff:g id="APPLICATION">%1$s</xliff:g>, kas var pārraudzīt jūsu tīklā veiktās privātās darbības, tostarp e-pasta ziņojumus, lietotnes un vietnes."</string>
- <string name="monitoring_description_app_work" msgid="1754325860918060897">"Jūsu darba profilu pārvalda <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Tas ir saistīts ar lietojumprogrammu <xliff:g id="APPLICATION">%2$s</xliff:g>, kura var pārraudzīt jūsu tīklā veiktās darbības, tostarp e-pasta ziņojumus, lietotnes un vietnes.\n\nLai iegūtu plašāku informāciju, sazinieties ar administratoru."</string>
+ <!-- no translation found for monitoring_description_app_work (7777228449969022305) -->
+ <skip />
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Jūsu darba profilu pārvalda <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Tas ir saistīts ar lietojumprogrammu <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, kura var pārraudzīt jūsu tīklā veiktās darbības, tostarp e-pasta ziņojumus, lietotnes un vietnes.\n\nIr piesaistīta arī lietojumprogramma <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, kas var pārraudzīt jūsu tīklā veiktās privātās darbības."</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Ierīce būs bloķēta, līdz to manuāli atbloķēsiet."</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"Saņemiet paziņojumus ātrāk"</string>
diff --git a/packages/SystemUI/res/values-mk/strings.xml b/packages/SystemUI/res/values-mk/strings.xml
index 7fccbe6..500cb4f 100644
--- a/packages/SystemUI/res/values-mk/strings.xml
+++ b/packages/SystemUI/res/values-mk/strings.xml
@@ -321,6 +321,12 @@
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Предупредување за <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
<string name="quick_settings_work_mode_label" msgid="6244915274350490429">"Режим на работа"</string>
<string name="quick_settings_night_display_label" msgid="3577098011487644395">"Ноќно светло"</string>
+ <!-- no translation found for quick_settings_nfc_label (9012153754816969325) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_off (6883274004315134333) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_on (6680317193676884311) -->
+ <skip />
<string name="recents_empty_message" msgid="808480104164008572">"Нема неодамнешни ставки"</string>
<string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Исчистивте сѐ"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"Информации за апликацијата"</string>
@@ -334,6 +340,16 @@
<string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Раздели хоризонтално"</string>
<string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Раздели вертикално"</string>
<string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Раздели прилагодено"</string>
+ <!-- no translation found for recents_accessibility_dismissed (2354459747918667050) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_open (1651449827614876864) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_top (9056056469282256287) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_left (8987144699630620019) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_right (275069779299592867) -->
+ <skip />
<string-array name="recents_blacklist_array">
</string-array>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"Наполнета"</string>
@@ -414,20 +430,24 @@
<string name="disconnect_vpn" msgid="1324915059568548655">"Исклучи ВПН"</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"<xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g> управува со уредов."</string>
<string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> ја користи <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> за да управува со вашиот уред."</string>
- <string name="monitoring_description_do_body" msgid="6764108354701060766">"Админ. може да следи и да управува со: поставки, корпоративен пристап, апликации, податоци за уредот и информации за локација."</string>
+ <!-- no translation found for monitoring_description_do_body (3639594537660975895) -->
+ <skip />
<string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
<string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Дознајте повеќе"</string>
<string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Поврзани сте на <xliff:g id="VPN_APP">%1$s</xliff:g>, којашто може да ја следи вашата активност на мрежата, вклучувајќи ги е-пораките, апликациите и веб-сајтовите."</string>
<string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
<string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Отворете „Поставки за VPN“"</string>
- <string name="monitoring_description_network_logging" msgid="3901006351911787915">"Вашиот администратор вклучил евиденција на мрежата, што подразбира следење на сообраќајот на вашиот уред.\n\nЗа повеќе информации, контактирајте со администраторот."</string>
+ <!-- no translation found for monitoring_description_network_logging (7223505523384076027) -->
+ <skip />
<string name="monitoring_description_vpn" msgid="4445150119515393526">"Дозволивте апликацијата да постави поврзување преку ВПН.\n\nАпликацијата може да го следи уредот и активноста на мрежата, вклучувајќи ги е-пораките, апликациите и веб-локациите."</string>
- <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"<xliff:g id="ORGANIZATION">%1$s</xliff:g> управува со вашиот работен профил.\n\nАдминистратор е во можност да ја следи вашата активност на мрежата, вклучувајќи ги е-пораките, апликациите и веб-локациите.\n\nЗа повеќе информации, контактирајте со администраторот.\n\nИсто така, поврзани сте на ВПН, којашто може да ја следи вашата активност на мрежата."</string>
+ <!-- no translation found for monitoring_description_vpn_profile_owned (2958019119161161530) -->
+ <skip />
<string name="legacy_vpn_name" msgid="6604123105765737830">"ВПН"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Поврзани сте на <xliff:g id="APPLICATION">%1$s</xliff:g>, којашто може да ја следи вашата активност на мрежата, вклучувајќи ги е-пораките, апликациите и веб-локациите."</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"Поврзани сте на <xliff:g id="APPLICATION">%1$s</xliff:g>, којашто може да ја следи вашата лична активност на мрежата, вклучувајќи ги е-пораките, апликациите и веб-локациите."</string>
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Поврзани сте на <xliff:g id="APPLICATION">%1$s</xliff:g>, којашто може да ја следи вашата лична активност на мрежата, вклучувајќи ги е-пораките, апликациите и веб-локациите."</string>
- <string name="monitoring_description_app_work" msgid="1754325860918060897">"<xliff:g id="ORGANIZATION">%1$s</xliff:g> управува со вашиот работен профил. Истиот е поврзан на <xliff:g id="APPLICATION">%2$s</xliff:g>, којашто може да ја следи вашата работна активност на мрежата, вклучувајќи ги е-пораките, апликациите и веб-локациите.\n\nЗа повеќе информации, контактирајте со администраторот."</string>
+ <!-- no translation found for monitoring_description_app_work (7777228449969022305) -->
+ <skip />
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"<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_disabled" msgid="7412534203633528135">"Уредот ќе остане заклучен додека рачно не го отклучите"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"Добивајте известувања побрзо"</string>
diff --git a/packages/SystemUI/res/values-ml/strings.xml b/packages/SystemUI/res/values-ml/strings.xml
index 4e64a74..1787d21 100644
--- a/packages/SystemUI/res/values-ml/strings.xml
+++ b/packages/SystemUI/res/values-ml/strings.xml
@@ -321,6 +321,12 @@
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> മുന്നറിയിപ്പ്"</string>
<string name="quick_settings_work_mode_label" msgid="6244915274350490429">"പ്രവർത്തന മോഡ്"</string>
<string name="quick_settings_night_display_label" msgid="3577098011487644395">"നൈറ്റ് ലൈറ്റ്"</string>
+ <!-- no translation found for quick_settings_nfc_label (9012153754816969325) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_off (6883274004315134333) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_on (6680317193676884311) -->
+ <skip />
<string name="recents_empty_message" msgid="808480104164008572">"സമീപകാല ഇനങ്ങൾ ഒന്നുമില്ല"</string>
<string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"നിങ്ങൾ എല്ലാം മായ്ച്ചിരിക്കുന്നു"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"ആപ്പ് വിവരം"</string>
@@ -334,6 +340,16 @@
<string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"തിരശ്ചീനമായി വേർതിരിക്കുക"</string>
<string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"ലംബമായി വേർതിരിക്കുക"</string>
<string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"ഇഷ്ടാനുസൃതമായി വേർതിരിക്കുക"</string>
+ <!-- no translation found for recents_accessibility_dismissed (2354459747918667050) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_open (1651449827614876864) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_top (9056056469282256287) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_left (8987144699630620019) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_right (275069779299592867) -->
+ <skip />
<string-array name="recents_blacklist_array">
</string-array>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"ചാർജായി"</string>
@@ -414,20 +430,24 @@
<string name="disconnect_vpn" msgid="1324915059568548655">"VPN വിച്ഛേദിക്കുക"</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"നിങ്ങളുടെ ഉപകരണം മാനേജുചെയ്യുന്നത് <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g> ആണ്."</string>
<string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"നിങ്ങളുടെ ഉപകരണം മാനേജുചെയ്യാൻ <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> ഉപയോഗിക്കുന്നത് <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> ആണ്."</string>
- <string name="monitoring_description_do_body" msgid="6764108354701060766">"ഈ ഉപകരണവുമായി ബന്ധപ്പെട്ട ക്രമീകരണം, കോർപ്പറേറ്റ് ആക്സസ്സ്, ആപ്സ്, വിവരങ്ങൾ എന്നിവയും ഉപകരണത്തിന്റെ ലൊക്കേഷൻ വിവരവും നിരീക്ഷിക്കാനും മാനേജുചെയ്യാനും അഡ്മിനിസ്ട്രേറ്റർക്ക് കഴിയും."</string>
+ <!-- no translation found for monitoring_description_do_body (3639594537660975895) -->
+ <skip />
<string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" 5"</string>
<string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"കൂടുതലറിയുക"</string>
<string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"നിങ്ങൾ <xliff:g id="VPN_APP">%1$s</xliff:g> ആപ്പിലേക്ക് കണക്റ്റുചെയ്തിരിക്കുന്നു, ഇമെയിലുകൾ, ആപ്സ്, വെബ്സൈറ്റുകൾ എന്നിവ ഉൾപ്പെടെ നിങ്ങളുടെ നെറ്റ്വർക്ക് ആക്റ്റിവിറ്റി നിരീക്ഷിക്കാൻ ഈ ആപ്പിന് കഴിയും."</string>
<string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" 5"</string>
<string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"VPN ക്രമീകരണം തുറക്കുക"</string>
- <string name="monitoring_description_network_logging" msgid="3901006351911787915">"നിങ്ങളുടെ അഡ്മിൻ, ഉപകരണത്തിലെ ട്രാഫിക്ക് നിരീക്ഷിക്കുന്ന നെറ്റ്വർക്ക് ലോഗിംഗ് ഓണാക്കിയിട്ടുണ്ട്.\n\nകൂടുതൽ വിവരങ്ങൾക്ക് നിങ്ങളുടെ അഡ്മിനെ ബന്ധപ്പെടുക."</string>
+ <!-- no translation found for monitoring_description_network_logging (7223505523384076027) -->
+ <skip />
<string name="monitoring_description_vpn" msgid="4445150119515393526">"VPN കണക്ഷൻ സജ്ജീകരിക്കാൻ നിങ്ങൾ ഒരു ആപ്പിന് അനുമതി നൽകി.\n\nഈ ആപ്പിന് നിങ്ങളുടെ ഇമെയിലുകളും ആപ്സും വെബ്സൈറ്റുകളും ഉൾപ്പെടെ, ഉപകരണവും നെറ്റ്വർക്ക് പ്രവർത്തനവും നിരീക്ഷിക്കാൻ കഴിയും."</string>
- <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"നിങ്ങളുടെ ഔദ്യോഗിക പ്രൊഫൈൽ നിയന്ത്രിക്കുന്നത് <xliff:g id="ORGANIZATION">%1$s</xliff:g> ആണ്.\n\nനിങ്ങളുടെ അഡ്മിനിസ്ട്രേറ്റർക്ക് ഇമെയിലുകളും അപ്ലിക്കേഷനുകളും സുരക്ഷിത വെബ്സൈറ്റുകളും ഉൾപ്പെടെയുള്ള നെറ്റ്വർക്ക് പ്രവർത്തനം നിരീക്ഷിക്കാൻ കഴിയും.\n\nകൂടുതൽ വിവരങ്ങൾക്ക്, അഡ്മിനിസ്ട്രേറ്ററെ ബന്ധപ്പെടുക.\n\nനിങ്ങളുടെ നെറ്റ്വർക്ക് പ്രവർത്തനം നിരീക്ഷിക്കാനാകുന്ന ഒരു VPN-ലേക്കും നിങ്ങൾ കണക്റ്റുചെയ്തിരിക്കുന്നു."</string>
+ <!-- no translation found for monitoring_description_vpn_profile_owned (2958019119161161530) -->
+ <skip />
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"നിങ്ങൾ <xliff:g id="APPLICATION">%1$s</xliff:g> എന്നതിലേക്ക് കണക്റ്റുചെയ്തിരിക്കുന്നു, അതിന് ഇമെയിലുകൾ, ആപ്സ്, വെബ്സൈറ്റുകൾ എന്നിവ ഉൾപ്പെടെ നിങ്ങളുടെ നെറ്റ്വർക്ക് പ്രവർത്തനം നിരീക്ഷിക്കാനാകും."</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"നിങ്ങൾ <xliff:g id="APPLICATION">%1$s</xliff:g> എന്നതിലേക്ക് കണക്റ്റുചെയ്തിരിക്കുന്നു, അതിന് ഇമെയിലുകൾ, ആപ്സ്, വെബ്സൈറ്റുകൾ എന്നിവ ഉൾപ്പെടെ നിങ്ങളുടെ സ്വകാര്യ നെറ്റ്വർക്ക് പ്രവർത്തനം നിരീക്ഷിക്കാനാകും."</string>
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"നിങ്ങൾ <xliff:g id="APPLICATION">%1$s</xliff:g> ആപ്പിലേക്ക് കണക്റ്റുചെയ്തിരിക്കുന്നു, ഇമെയിലുകൾ, ആപ്സ്, വെബ്സൈറ്റുകൾ എന്നിവ ഉൾപ്പെടെ നെറ്റ്വർക്ക് ആക്റ്റിവിറ്റി നിരീക്ഷിക്കാൻ ഈ ആപ്പിന് കഴിയും."</string>
- <string name="monitoring_description_app_work" msgid="1754325860918060897">"നിങ്ങളുടെ ഔദ്യോഗിക പ്രൊഫൈൽ നിയന്ത്രിക്കുന്നത് <xliff:g id="ORGANIZATION">%1$s</xliff:g> ആണ്. നിങ്ങൾ <xliff:g id="APPLICATION">%2$s</xliff:g> എന്നതിലേക്ക് കണക്റ്റുചെയ്തിരിക്കുന്നു, അതിന് ഇമെയിലുകൾ, ആപ്സ്, വെബ്സൈറ്റുകൾ എന്നിവ ഉൾപ്പെടെ നിങ്ങളുടെ ഔദ്യോഗിക നെറ്റ്വർക്ക് പ്രവർത്തനം നിരീക്ഷിക്കാനാകും.\n\nകൂടുതൽ വിവരങ്ങൾക്ക്, നിങ്ങളുടെ അഡ്മിനിസ്ട്രേറ്ററെ ബന്ധപ്പെടുക."</string>
+ <!-- no translation found for monitoring_description_app_work (7777228449969022305) -->
+ <skip />
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"നിങ്ങളുടെ ഔദ്യോഗിക പ്രൊഫൈൽ നിയന്ത്രിക്കുന്നത് <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_disabled" msgid="7412534203633528135">"നിങ്ങൾ സ്വമേധയാ അൺലോക്കുചെയ്യുന്നതുവരെ ഉപകരണം ലോക്കുചെയ്തതായി തുടരും"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"അറിയിപ്പുകൾ വേഗത്തിൽ സ്വീകരിക്കുക"</string>
diff --git a/packages/SystemUI/res/values-mn/strings.xml b/packages/SystemUI/res/values-mn/strings.xml
index 3c12896..b8b9222 100644
--- a/packages/SystemUI/res/values-mn/strings.xml
+++ b/packages/SystemUI/res/values-mn/strings.xml
@@ -319,6 +319,12 @@
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> анхааруулга"</string>
<string name="quick_settings_work_mode_label" msgid="6244915274350490429">"Ажлын горим"</string>
<string name="quick_settings_night_display_label" msgid="3577098011487644395">"Шөнийн гэрэл"</string>
+ <!-- no translation found for quick_settings_nfc_label (9012153754816969325) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_off (6883274004315134333) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_on (6680317193676884311) -->
+ <skip />
<string name="recents_empty_message" msgid="808480104164008572">"Сүүлийн үеийн зүйл байхгүй"</string>
<string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Та бүгдийг нь устгасан"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"Аппликешны мэдээлэл"</string>
@@ -332,6 +338,16 @@
<string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Хэвтээ чиглэлд хуваах"</string>
<string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Босоо чиглэлд хуваах"</string>
<string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Хүссэн хэлбэрээр хуваах"</string>
+ <!-- no translation found for recents_accessibility_dismissed (2354459747918667050) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_open (1651449827614876864) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_top (9056056469282256287) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_left (8987144699630620019) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_right (275069779299592867) -->
+ <skip />
<string-array name="recents_blacklist_array">
</string-array>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"Цэнэглэгдсэн"</string>
@@ -412,20 +428,24 @@
<string name="disconnect_vpn" msgid="1324915059568548655">"VPN таслах"</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Таны төхөөрөмжийг <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g> удирддаг."</string>
<string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> таны төхөөрөмжийг удирдахын тулд <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g>-г ашигладаг."</string>
- <string name="monitoring_description_do_body" msgid="6764108354701060766">"Таны админ тохиргоо, байгууллагын хандалт, апп, төхөөрөмжтэй холбоотой өгөгдөл болон төхөөрөмжийн байршлын мэдээллийг хянах, удирдах боломжтой."</string>
+ <!-- no translation found for monitoring_description_do_body (3639594537660975895) -->
+ <skip />
<string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
<string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Дэлгэрэнгүй үзэх"</string>
<string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Таны имэйл, апп, вэб хуудас зэрэг сүлжээний үйл ажиллагааг хянах боломжтой <xliff:g id="VPN_APP">%1$s</xliff:g>-д холбогдсон байна."</string>
<string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
<string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"VPN тохиргоог нээх"</string>
- <string name="monitoring_description_network_logging" msgid="3901006351911787915">"Таны админ төхөөрөмжийн ачааллыг хянадаг сүлжээний логийг асаасан байна.\n\nДэлгэрэнгүй мэдээлэл авахын тулд админтайгаа холбогдоно уу."</string>
+ <!-- no translation found for monitoring_description_network_logging (7223505523384076027) -->
+ <skip />
<string name="monitoring_description_vpn" msgid="4445150119515393526">"Та апп-д VPN холболт хийхийг зөвшөөрсөн байна.\n\nЭнэхүү апп нь таны имэйл, апп, вэбсайт зэрэг төхөөрөмж болон сүлжээний үйл ажиллагааг хянах боломжтой."</string>
- <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Таны ажлын профайлыг <xliff:g id="ORGANIZATION">%1$s</xliff:g> удирддаг.\n\nАдмин нь таны имэйл,апп болон вэбсайт зэрэг сүлжээний үйл ажиллагааг хянадаг. \n\n Дэлгэрэнгүй мэдээлэл авахыг хүсвэл админтайгаа холбогдоно уу. \n\nМөн та VPN-д холбогдсон бөгөөд ингэснээр өөрийн сүлжээний үйл ажиллагааг хянах боломжтой байна."</string>
+ <!-- no translation found for monitoring_description_vpn_profile_owned (2958019119161161530) -->
+ <skip />
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Та <xliff:g id="APPLICATION">%1$s</xliff:g>-д холбогдсон бөгөөд энэ нь таны имэйл, апп, вэбсайт зэрэг сүлжээний үйл ажиллагааг хянах боломжтой."</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"Та <xliff:g id="APPLICATION">%1$s</xliff:g>-д холбогдсон бөгөөд энэ нь таны имэйл, апп, вэбсайт зэрэг сүлжээний хувийн үйл ажиллагааг хянах боломжтой."</string>
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Та имэйл, апп, вэб хуудас зэрэг хувийн сүлжээнийхээ үйл ажиллагааг хянах боломжтой <xliff:g id="APPLICATION">%1$s</xliff:g>-д холбогдсон байна."</string>
- <string name="monitoring_description_app_work" msgid="1754325860918060897">"Таны ажлын профайлыг <xliff:g id="ORGANIZATION">%1$s</xliff:g> удирддаг. Энэ нь <xliff:g id="APPLICATION">%2$s</xliff:g>-тэй холбогдсон бөгөөд таны имэйл, апп, вэбсайт зэрэг сүлжээний үйл ажиллагааг хянах боломжтой.\n\nДэлгэрэнгүй мэдээлэл авахыг хүсвэл админтайгаа холбогдоно уу."</string>
+ <!-- no translation found for monitoring_description_app_work (7777228449969022305) -->
+ <skip />
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Таны ажлын профайлыг <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_disabled" msgid="7412534203633528135">"Таныг гараар онгойлгох хүртэл төхөөрөмж түгжээтэй байх болно"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"Мэдэгдлийг хурдан авах"</string>
diff --git a/packages/SystemUI/res/values-mr/strings.xml b/packages/SystemUI/res/values-mr/strings.xml
index 7fc127a..4c8d59c 100644
--- a/packages/SystemUI/res/values-mr/strings.xml
+++ b/packages/SystemUI/res/values-mr/strings.xml
@@ -321,6 +321,12 @@
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> चेतावणी"</string>
<string name="quick_settings_work_mode_label" msgid="6244915274350490429">"कार्य मोड"</string>
<string name="quick_settings_night_display_label" msgid="3577098011487644395">"रात्रीचा प्रकाश"</string>
+ <!-- no translation found for quick_settings_nfc_label (9012153754816969325) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_off (6883274004315134333) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_on (6680317193676884311) -->
+ <skip />
<string name="recents_empty_message" msgid="808480104164008572">"अलीकडील कोणतेही आयटम नाहीत"</string>
<string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"आपण सर्वकाही साफ केले"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"अनुप्रयोग माहिती"</string>
@@ -334,6 +340,16 @@
<string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"क्षैतिज विभाजित करा"</string>
<string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"अनुलंब विभाजित करा"</string>
<string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"सानुकूल विभाजित करा"</string>
+ <!-- no translation found for recents_accessibility_dismissed (2354459747918667050) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_open (1651449827614876864) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_top (9056056469282256287) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_left (8987144699630620019) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_right (275069779299592867) -->
+ <skip />
<string-array name="recents_blacklist_array">
</string-array>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"चार्ज झाली"</string>
@@ -414,20 +430,24 @@
<string name="disconnect_vpn" msgid="1324915059568548655">"VPN डिस्कनेक्ट करा"</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"आपले डिव्हाइस <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g> ने व्यवस्थापित केले आहे."</string>
<string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"आपले डिव्हाइस व्यवस्थापित करण्यासाठी <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> वापरते."</string>
- <string name="monitoring_description_do_body" msgid="6764108354701060766">"आपला प्रशासक सेटिंग्ज, कॉर्पोरेट प्रवेश, अॅप्स, आपल्या डिव्हाइसशी संबद्ध डेटा आणि आपल्या डिव्हाइसच्या स्थान माहितीचे परीक्षण करू आणि ते व्यवस्थापित करू शकतो."</string>
+ <!-- no translation found for monitoring_description_do_body (3639594537660975895) -->
+ <skip />
<string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
<string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"अधिक जाणून घ्या"</string>
<string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"आपण <xliff:g id="VPN_APP">%1$s</xliff:g> शी कनेक्ट केले आहे, जो ईमेल, अॅप्स आणि वेबसाइटसह आपल्या नेटवर्क क्रियाकलापाचे परीक्षण करू शकतो."</string>
<string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
<string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"VPN सेटिंग्ज उघडा"</string>
- <string name="monitoring_description_network_logging" msgid="3901006351911787915">"आपल्या प्रशासकाने नेटवर्क लॉगिंग चालू केले आहे, जे आपल्या डिव्हाइस वरील रहदारीचे परीक्षण करते.\n\nअधिक माहितीसाठी आपल्या प्रशासकाशी संपर्क साधा."</string>
+ <!-- no translation found for monitoring_description_network_logging (7223505523384076027) -->
+ <skip />
<string name="monitoring_description_vpn" msgid="4445150119515393526">"आपण VPN कनेक्शन सेट करण्यासाठी अॅपला परवानगी दिली.\n\nहा अॅप ईमेल, अॅप्स आणि वेबसाइटसह, आपल्या डिव्हाइस आणि नेटवर्क क्रियाकलापाचे परीक्षण करू शकतो."</string>
- <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"आपले कार्य प्रोफाईल <xliff:g id="ORGANIZATION">%1$s</xliff:g> द्वारे व्यवस्थापित केले आहे.\n\nआपला प्रशासक ईमेल, अॅप्स आणि वेबसाइटसह आपल्या नेटवर्क क्रियाकलापाचे परीक्षण करण्यास सक्षम आहे.\n\nअधिक माहितीसाठी, आपल्या प्रशासकाशी संपर्क साधा.\n\nआपण एका VPN शी देखील कनेक्ट केले आहे, जो आपल्या नेटवर्क क्रियाकलापाचे परीक्षण करू शकतो."</string>
+ <!-- no translation found for monitoring_description_vpn_profile_owned (2958019119161161530) -->
+ <skip />
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"आपण <xliff:g id="APPLICATION">%1$s</xliff:g> शी कनेक्ट केले आहे, जो ईमेल, अॅप्स आणि वेबसाइटसह आपल्या नेटवर्क क्रियाकलापाचे परीक्षण करू शकतो."</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"आपण <xliff:g id="APPLICATION">%1$s</xliff:g> शी कनेक्ट केले आहे, जो ईमेल, अॅप्स आणि वेबसाइटसह आपल्या वैयक्तिक नेटवर्क क्रियाकलापाचे परीक्षण करू शकतो."</string>
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"आपण <xliff:g id="APPLICATION">%1$s</xliff:g> शी कनेक्ट केले आहे, जो ईमेल, अॅप्स आणि वेबसाइटसह आपल्या वैयक्तिक नेटवर्क क्रियाकलापाचे परीक्षण करू शकतो."</string>
- <string name="monitoring_description_app_work" msgid="1754325860918060897">"आपले कार्य प्रोफाईल <xliff:g id="ORGANIZATION">%1$s</xliff:g> द्वारे व्यवस्थापित केले आहे. ते <xliff:g id="APPLICATION">%2$s</xliff:g> शी कनेक्ट केले आहे, जो ईमेल, अॅप्स आणि वेबसाइटसह आपल्या कार्य नेटवर्क क्रियाकलापाचे परीक्षण करू शकतो.\n\nअधिक माहितीसाठी, आपल्या प्रशासकाशी संपर्क साधा."</string>
+ <!-- no translation found for monitoring_description_app_work (7777228449969022305) -->
+ <skip />
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"आपले कार्य प्रोफाईल <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_disabled" msgid="7412534203633528135">"आपण व्यक्तिचलितपणे अनलॉक करेपर्यंत डिव्हाइस लॉक केलेले राहील"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"सूचना अधिक जलद मिळवा"</string>
diff --git a/packages/SystemUI/res/values-ms/strings.xml b/packages/SystemUI/res/values-ms/strings.xml
index 2069959..6e29cc9 100644
--- a/packages/SystemUI/res/values-ms/strings.xml
+++ b/packages/SystemUI/res/values-ms/strings.xml
@@ -321,6 +321,12 @@
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Amaran <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
<string name="quick_settings_work_mode_label" msgid="6244915274350490429">"Mod kerja"</string>
<string name="quick_settings_night_display_label" msgid="3577098011487644395">"Cahaya Malam"</string>
+ <!-- no translation found for quick_settings_nfc_label (9012153754816969325) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_off (6883274004315134333) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_on (6680317193676884311) -->
+ <skip />
<string name="recents_empty_message" msgid="808480104164008572">"Tiada item terbaharu"</string>
<string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Anda telah mengetepikan semua item"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"Maklumat Aplikasi"</string>
@@ -334,6 +340,16 @@
<string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Mendatar Terpisah"</string>
<string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Menegak Terpisah"</string>
<string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Tersuai Terpisah"</string>
+ <!-- no translation found for recents_accessibility_dismissed (2354459747918667050) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_open (1651449827614876864) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_top (9056056469282256287) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_left (8987144699630620019) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_right (275069779299592867) -->
+ <skip />
<string-array name="recents_blacklist_array">
</string-array>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"Sudah dicas"</string>
@@ -414,20 +430,24 @@
<string name="disconnect_vpn" msgid="1324915059568548655">"Putuskan sambungan VPN"</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Peranti anda diurus oleh <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
<string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> menggunakan <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> untuk mengurus peranti anda."</string>
- <string name="monitoring_description_do_body" msgid="6764108354701060766">"Pentadbir anda boleh memantau dan mengurus tetapan, akses korporat, apl, data yang dikaitkan dengan peranti dan maklumat lokasi peranti anda."</string>
+ <!-- no translation found for monitoring_description_do_body (3639594537660975895) -->
+ <skip />
<string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
<string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Ketahui lebih lanjut"</string>
<string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Anda disambungkan ke <xliff:g id="VPN_APP">%1$s</xliff:g>, yang boleh memantau aktiviti rangkaian anda, termasuk e-mel, apl dan tapak web."</string>
<string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
<string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Buka Tetapan VPN"</string>
- <string name="monitoring_description_network_logging" msgid="3901006351911787915">"Pentadbir anda telah menghidupkan pengelogan rangkaian yang memantau trafik pada peranti anda.\n\nUntuk mendapatkan maklumat lanjut, hubungi pentadbir anda."</string>
+ <!-- no translation found for monitoring_description_network_logging (7223505523384076027) -->
+ <skip />
<string name="monitoring_description_vpn" msgid="4445150119515393526">"Anda memberikan kebenaran kepada apl untuk menyediakan sambungan VPN.\n\nApl ini boleh memantau aktiviti peranti dan rangkaian anda, termasuk e-mel, apl dan tapak web."</string>
- <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Profil kerja anda diurus oleh <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nPentadbir anda boleh memantau aktiviti rangkaian anda, termasuk e-mel, apl dan tapak web.\n\nUntuk mendapatkan maklumat lanjut, hubungi pentadbir anda.\n\nAnda turut disambungkan ke VPN, yang boleh memantau aktiviti rangkaian anda."</string>
+ <!-- no translation found for monitoring_description_vpn_profile_owned (2958019119161161530) -->
+ <skip />
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Anda disambungkan ke <xliff:g id="APPLICATION">%1$s</xliff:g>, yang boleh memantau aktiviti rangkaian anda, termasuk e-mel, apl dan tapak web."</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"Anda disambungkan ke <xliff:g id="APPLICATION">%1$s</xliff:g>, yang boleh memantau aktiviti rangkaian peribadi anda, termasuk e-mel, apl dan tapak web."</string>
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Anda disambungkan ke <xliff:g id="APPLICATION">%1$s</xliff:g>, yang boleh memantau aktiviti rangkaian peribadi anda, termasuk e-mel, apl dan tapak web."</string>
- <string name="monitoring_description_app_work" msgid="1754325860918060897">"Profil kerja anda diurus oleh <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Profil ini disambungkan ke <xliff:g id="APPLICATION">%2$s</xliff:g>, yang boleh memantau aktiviti rangkaian kerja anda, termasuk e-mel, apl dan tapak web.\n\nUntuk mendapatkan maklumat lanjut, sila hubungi pentadbir anda."</string>
+ <!-- no translation found for monitoring_description_app_work (7777228449969022305) -->
+ <skip />
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Profil kerja anda diurus oleh <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Profil disambungkan ke <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, yang boleh memantau aktiviti rangkaian kerja anda, termasuk e-mel, apl dan tapak web.\n\nAnda turut disambungkan ke <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, yang boleh memantau aktiviti rangkaian peribadi anda."</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Peranti akan kekal terkunci sehingga anda membuka kunci secara manual"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"Dapatkan pemberitahuan lebih cepat"</string>
diff --git a/packages/SystemUI/res/values-my/strings.xml b/packages/SystemUI/res/values-my/strings.xml
index db6edad..a439a01 100644
--- a/packages/SystemUI/res/values-my/strings.xml
+++ b/packages/SystemUI/res/values-my/strings.xml
@@ -321,6 +321,12 @@
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> သတိပေးချက်"</string>
<string name="quick_settings_work_mode_label" msgid="6244915274350490429">"အလုပ် မုဒ်"</string>
<string name="quick_settings_night_display_label" msgid="3577098011487644395">"ညအလင်းရောင်"</string>
+ <!-- no translation found for quick_settings_nfc_label (9012153754816969325) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_off (6883274004315134333) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_on (6680317193676884311) -->
+ <skip />
<string name="recents_empty_message" msgid="808480104164008572">"မကြာမီကဖွင့်ထားသည်များ မရှိပါ"</string>
<string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"သင်အားလုံးကို ရှင်းလင်းပြီးပါပြီ"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"အပလီကေးရှင်းအင်ဖို"</string>
@@ -334,6 +340,16 @@
<string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"ရေပြင်ညီ ပိုင်းမည်"</string>
<string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"ဒေါင်လိုက်ပိုင်းမည်"</string>
<string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"စိတ်ကြိုက် ပိုင်းမည်"</string>
+ <!-- no translation found for recents_accessibility_dismissed (2354459747918667050) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_open (1651449827614876864) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_top (9056056469282256287) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_left (8987144699630620019) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_right (275069779299592867) -->
+ <skip />
<string-array name="recents_blacklist_array">
</string-array>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"အားသွင်းပြီး"</string>
@@ -414,20 +430,24 @@
<string name="disconnect_vpn" msgid="1324915059568548655">"VPN ကို အဆက်ဖြတ်ရန်"</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"သင့်စက်ပစ္စည်းကို <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g> က စီမံခန့်ခွဲထားပါသည်။"</string>
<string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> သည် သင့်စက်ပစ္စည်းကို စီမံခန့်ခွဲရန် <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> ကို အသုံးပြုပါသည်။"</string>
- <string name="monitoring_description_do_body" msgid="6764108354701060766">"စီမံသူသည် ဆက်တင်၊ ကော်ပိုရိတ် သုံးခွင့်၊ အက်ပ်၊ စက်ပစ္စည်းနှင့် ဆက်စပ်ဒေတာနှင့် ၎င်း၏တည်နေရာအချက်အလက်ကိုစောင့်ကြည့်စီမံနိုင်ပါသည်။"</string>
+ <!-- no translation found for monitoring_description_do_body (3639594537660975895) -->
+ <skip />
<string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
<string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"ပိုမိုလေ့လာရန်"</string>
<string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"အီးမေးလ်၊ အက်ပ်နှင့် ဝဘ်ဆိုက်များအပါအဝင် သင့်ကွန်ရက်လုပ်ဆောင်ချက်ကို စောင့်ကြည့်နိုင်သည့် <xliff:g id="VPN_APP">%1$s</xliff:g> သို့ သင်သည် ချိတ်ဆက်ထားပါသည်။"</string>
<string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
<string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Open VPN ဆက်တင်များ"</string>
- <string name="monitoring_description_network_logging" msgid="3901006351911787915">"သင့်စီမံခန့်ခွဲသူသည် သင့်စက်ပစ္စည်းပေါ်ရှိ ဒေတာအသွားအလာကို စောင့်ကြည့်နိုင်သည့် ကွန်ရက်မှတ်တမ်းတင်ခြင်းကို ဖွင့်ထားပါသည်။\n\nထပ်မံလေ့လာရန်အတွက် သင့်စီမံခန့်ခွဲသူကို ဆက်သွယ်ပါ။"</string>
+ <!-- no translation found for monitoring_description_network_logging (7223505523384076027) -->
+ <skip />
<string name="monitoring_description_vpn" msgid="4445150119515393526">"VPN ချိတ်ဆက်မှုပြုလုပ်ရန် အက်ပ်ကို သင်ခွင့်ပြုလိုက်သည်။ \n\n ဤအက်ပ်သည် အီးမေးလ်များ၊ အက်ပ်များနှင့် ဝဘ်ဆိုက်များအပါအဝင် သင့်ကွန်ရက်လုပ်ဆောင်ချက်များကို စောင့်ကြည့်နိုင်သည်။"</string>
- <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"သင့်အလုပ်ပရိုဖိုင်ကို <xliff:g id="ORGANIZATION">%1$s</xliff:g>မှ စီမံခန့်ခွဲပါသည်။ \n\nသင့်စီမံခန့်ခွဲသူသည် အီးမေးလ်များ၊ အက်ပ်များ၊ နှင့် ဝဘ်ဆိုက်များအပါအဝင် သင့်ကွန်ရက်လုပ်ဆောက်ချက်ကို စောင့်ကြည့်နိုင်သည်။ \n\nအချက်အလက်များ ပိုမိုရယူရန် သင်၏ စီမံခန့်ခွဲသူကို ဆက်သွယ်ပါ။ \n\nသင်သည် VPN တစ်ခုသို့ပါ ချိတ်ဆက်ထားပြီး ၎င်းကပါ သင်၏ ကွန်ရက်လုပ်ဆောင်ချက်ကို စောင့်ကြည့်နိုင်ပါသည်။"</string>
+ <!-- no translation found for monitoring_description_vpn_profile_owned (2958019119161161530) -->
+ <skip />
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"သင်သည် <xliff:g id="APPLICATION">%1$s</xliff:g> သို့ ချိတ်ဆက်ထားသည်၊ ၎င်းသည် အီးမေးများ၊ အက်ပ်များနှင့် ဝဘ်ဆိုက်များအပါအဝင် သင့်ကွန်ရက်လုပ်ဆောင်ချက်များကို စောင့်ကြည့်နိုင်သည်။"</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"သင်သည် <xliff:g id="APPLICATION">%1$s</xliff:g> သို့ ချိတ်ဆက်ထားသည်။ ၎င်းသည် အီးမေးလ်များ၊ အက်ပ်များနှင့် ဝဘ်ဆိုက်များအပါအဝင် သင့်ကွန်ရက်လုပ်ဆောင်ချက်ကို စောင့်ကြည့်နိုင်သည်။"</string>
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"သင်သည် အီးမေးလ်၊ အက်ပ်နှင့် ဝဘ်ဆိုက်များအပါအဝင် သင့်ကိုယ်ရေးကိုယ်တာ ကွန်ရက်အသုံးပြုမှုကို စောင့်ကြည့်နိုင်သည့် <xliff:g id="APPLICATION">%1$s</xliff:g> သို့ ချိတ်ဆက်ထားပါသည်။"</string>
- <string name="monitoring_description_app_work" msgid="1754325860918060897">"သင့်အလုပ်ပရိုဖိုင်ကို <xliff:g id="ORGANIZATION">%1$s</xliff:g> မှစီမံခန့်ခွဲသည်။ ၎င်းကို <xliff:g id="APPLICATION">%2$s</xliff:g> သို့ ချိတ်ဆက်ထားသည်၊ ၎င်းသည် အီးမေးလ်များ၊ အက်ပ်များနှင့် ဝဘ်ဆိုက်များအပါအဝင် သင့်အလုပ်ကွန်ရက်လုပ်ဆောင်ချက်ကို စောင့်ကြည့်နိုင်သည်။ \n\nအချက်အလက်များ ပိုမိုရယူရန် သင်၏ စီမံခန့်ခွဲသူကို ဆက်သွယ်ပါ။"</string>
+ <!-- no translation found for monitoring_description_app_work (7777228449969022305) -->
+ <skip />
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"သင့်အလုပ် ပရိုဖိုင်ကို <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_disabled" msgid="7412534203633528135">"သင်က လက်ဖြင့် သော့မဖွင့်မချင်း ကိရိယာမှာ သော့ပိတ်လျက် ရှိနေမည်"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"အကြောင်းကြားချက်များ မြန်မြန်ရရန်"</string>
diff --git a/packages/SystemUI/res/values-nb/strings.xml b/packages/SystemUI/res/values-nb/strings.xml
index e5b94bd..d95dd29 100644
--- a/packages/SystemUI/res/values-nb/strings.xml
+++ b/packages/SystemUI/res/values-nb/strings.xml
@@ -321,6 +321,12 @@
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Advarsel for <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
<string name="quick_settings_work_mode_label" msgid="6244915274350490429">"Arbeidsmodus"</string>
<string name="quick_settings_night_display_label" msgid="3577098011487644395">"Nattlys"</string>
+ <!-- no translation found for quick_settings_nfc_label (9012153754816969325) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_off (6883274004315134333) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_on (6680317193676884311) -->
+ <skip />
<string name="recents_empty_message" msgid="808480104164008572">"Ingen nylige elementer"</string>
<string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Du har fjernet alt"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"Appinformasjon"</string>
@@ -334,6 +340,16 @@
<string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Del horisontalt"</string>
<string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Del vertikalt"</string>
<string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Del tilpasset"</string>
+ <!-- no translation found for recents_accessibility_dismissed (2354459747918667050) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_open (1651449827614876864) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_top (9056056469282256287) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_left (8987144699630620019) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_right (275069779299592867) -->
+ <skip />
<string-array name="recents_blacklist_array">
</string-array>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"Oppladet"</string>
@@ -414,20 +430,24 @@
<string name="disconnect_vpn" msgid="1324915059568548655">"Koble fra VPN"</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Enheten din administreres av <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
<string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> bruker <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> til å administrere enheten din."</string>
- <string name="monitoring_description_do_body" msgid="6764108354701060766">"Administratoren din kan overvåke og administrere innstillinger, bedriftstilgang, apper, data som er tilknyttet denne enheten, og enhetens posisjonsinformasjon."</string>
+ <!-- no translation found for monitoring_description_do_body (3639594537660975895) -->
+ <skip />
<string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
<string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Finn ut mer"</string>
<string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Enheten er koblet til <xliff:g id="VPN_APP">%1$s</xliff:g>, som kan overvåke nettverksaktiviteten din, inkludert e-post, apper og nettsteder."</string>
<string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
<string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Åpne VPN-innstillingene"</string>
- <string name="monitoring_description_network_logging" msgid="3901006351911787915">"Administratoren din har slått på loggføring av nettverk, som overvåker trafikken på enheten din.\n\nKontakt administratoren for mer informasjon."</string>
+ <!-- no translation found for monitoring_description_network_logging (7223505523384076027) -->
+ <skip />
<string name="monitoring_description_vpn" msgid="4445150119515393526">"Du ga en app tillatelse til å konfigurere en VPN-tilkobling.\n\nDenne appen kan overvåke enheten og nettverksaktiviteten din, inkludert e-post, apper og nettsteder."</string>
- <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Work-profilen din administreres av <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nAdministratoren din kan overvåke nettverksaktiviteten din, inkludert e-post, apper og nettsteder.\n\nFor mer informasjon, ta kontakt med administratoren.\n\nDu er også koblet til et VPN, som kan overvåke nettverksaktiviteten din."</string>
+ <!-- no translation found for monitoring_description_vpn_profile_owned (2958019119161161530) -->
+ <skip />
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Enheten er koblet til <xliff:g id="APPLICATION">%1$s</xliff:g>, som kan overvåke nettverksaktiviteten din, inkludert e-post, apper og nettsteder."</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"Enheten er koblet til <xliff:g id="APPLICATION">%1$s</xliff:g>, som kan overvåke den personlige nettverksaktiviteten din, inkludert e-post, apper og nettsteder."</string>
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Enheten er koblet til <xliff:g id="APPLICATION">%1$s</xliff:g>, som kan overvåke den personlige nettverksaktiviteten din, inkludert e-post, apper og nettsteder."</string>
- <string name="monitoring_description_app_work" msgid="1754325860918060897">"Work-profilen din administreres av <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Den er koblet til <xliff:g id="APPLICATION">%2$s</xliff:g>, som kan overvåke nettverksaktiviteten din på jobben, inkludert e-post, apper og nettsteder.\n\nFor å få mer informasjon, ta kontakt med administratoren."</string>
+ <!-- no translation found for monitoring_description_app_work (7777228449969022305) -->
+ <skip />
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Work-profilen din administreres av <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Den er koblet til <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, som kan overvåke nettverksaktiviteten din på jobben, inkludert e-post, apper og nettsteder.\n\nDu er også koblet til <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, som kan overvåke den personlige nettverksaktiviteten din."</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Enheten forblir låst til du låser den opp manuelt"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"Motta varsler raskere"</string>
diff --git a/packages/SystemUI/res/values-ne/strings.xml b/packages/SystemUI/res/values-ne/strings.xml
index 893f638..296d934 100644
--- a/packages/SystemUI/res/values-ne/strings.xml
+++ b/packages/SystemUI/res/values-ne/strings.xml
@@ -321,6 +321,12 @@
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> चेतावनी दिँदै"</string>
<string name="quick_settings_work_mode_label" msgid="6244915274350490429">"कार्य मोड"</string>
<string name="quick_settings_night_display_label" msgid="3577098011487644395">"रात्रिको प्रकाश"</string>
+ <!-- no translation found for quick_settings_nfc_label (9012153754816969325) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_off (6883274004315134333) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_on (6680317193676884311) -->
+ <skip />
<string name="recents_empty_message" msgid="808480104164008572">"हालका कुनै पनि वस्तुहरू छैनन्"</string>
<string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"तपाईँले सबै कुरा खाली गर्नुभएको छ"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"अनुप्रयोग जानकारी"</string>
@@ -334,6 +340,16 @@
<string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"तेर्सो रूपमा विभाजन गर्नुहोस्"</string>
<string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"ठाडो रूपमा विभाजन गर्नुहोस्"</string>
<string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"आफू अनुकूल विभाजन गर्नुहोस्"</string>
+ <!-- no translation found for recents_accessibility_dismissed (2354459747918667050) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_open (1651449827614876864) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_top (9056056469282256287) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_left (8987144699630620019) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_right (275069779299592867) -->
+ <skip />
<string-array name="recents_blacklist_array">
</string-array>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"चार्ज भयो"</string>
@@ -414,20 +430,24 @@
<string name="disconnect_vpn" msgid="1324915059568548655">"विच्छेद VPN"</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"तपाईंको यन्त्र <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g> द्वारा व्यवस्थापन गरिएको छ।"</string>
<string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> ले तपाईंको यन्त्रको व्यवस्थापन गर्न <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> को प्रयोग गर्दछ।"</string>
- <string name="monitoring_description_do_body" msgid="6764108354701060766">"तपाईंको प्रशासकले सेटिङ, संस्थागत पहुँच, अनुप्रयोग, तपाईंको यन्त्रसँग सम्बन्धित डेटा र तपाईंको यन्त्रको स्थान सम्बन्धी जानकारीको अनुगमन तथा व्यवस्थापन गर्न सक्नुहुन्छ।"</string>
+ <!-- no translation found for monitoring_description_do_body (3639594537660975895) -->
+ <skip />
<string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
<string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"थप जान्नुहोस्"</string>
<string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"तपाईं <xliff:g id="VPN_APP">%1$s</xliff:g> मा जोडिनुभएको छ जसले इमेल, अनुप्रयोग र वेबसाइटहरू लगायत तपाईंको नेटवर्क सम्बन्धी गतिविधिको अनुगमन गर्न सक्छ।"</string>
<string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
<string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"VPN सम्बन्धी सेटिङहरू खोल्नुहोस्"</string>
- <string name="monitoring_description_network_logging" msgid="3901006351911787915">"तपाईंको प्रशासकले तपाईंको यन्त्रमा ट्राफिकको अनुगमन गर्ने नेटवर्कको लगिङलाई सक्रिय गर्नुभएको छ।\n\nथप जानकरीका लागि आफ्नो प्रशासकलाई सम्पर्क गर्नुहोस्।"</string>
+ <!-- no translation found for monitoring_description_network_logging (7223505523384076027) -->
+ <skip />
<string name="monitoring_description_vpn" msgid="4445150119515393526">"तपाईँले VPN जडान गर्न अनुप्रयोगलाई अनुमति दिनुभयो।\n\nयो अनुप्रयोगले तपाईँका यन्त्र र नेटवर्क गतिविधि लगायत इमेल, अनुप्रयोग र वेबसाइटहरू अनुगमन गर्न सक्छ।"</string>
- <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"तपाईँको कार्य प्रोफाइल <xliff:g id="ORGANIZATION">%1$s</xliff:g>द्वारा व्यवस्थापन गरिन्छ।.\n\nतपाईँको प्रशासक इमेल, अनुप्रयोगहरू, र सुरक्षित वेबसाइटहरू लगायतका तपाईँका नेटवर्क गतिविधि अनुगमन गर्न सक्षम छ।\n\nथप जानकारीको लागि, आफ्नो प्रशासकसँग सम्पर्क राख्नुहोस्।\n\nतपाईँ VPN सँग पनि जडित हुनुहुन्छ, जसले तपाईँको नेटवर्क गतिविधि अनुगमन गर्न सक्छ।"</string>
+ <!-- no translation found for monitoring_description_vpn_profile_owned (2958019119161161530) -->
+ <skip />
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"तपाईँ <xliff:g id="APPLICATION">%1$s</xliff:g> सँग जडित हुनुहुन्छ जसले इ-मेल, अनुप्रयोगहरू र वेबसाइट लगायतका तपाईँका नेटवर्क गतिविधिको अनुगमन गर्न सक्छ।"</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"तपाईँ <xliff:g id="APPLICATION">%1$s</xliff:g> सँग जडित हुनुहुन्छ जसले इ-मेल, अनुप्रयोगहरू र वेबसाइट लगायतका तपाईँको निजी नेटवर्क गतिविधिका अनुगमन गर्न सक्छ।"</string>
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"तपाईं <xliff:g id="APPLICATION">%1$s</xliff:g> मा जोडिनुभएको छ जसले इमेल, अनुप्रयोग र वेबसाइटहरू लगायतको तपाईंको व्यक्तिगत नेटवर्क सम्बन्धी गतिविधिको अनुगमन गर्न सक्छ।"</string>
- <string name="monitoring_description_app_work" msgid="1754325860918060897">"तपाईँको कार्य प्रोफाइल <xliff:g id="ORGANIZATION">%1$s</xliff:g> द्वारा व्यवस्थापन गरिन्छ। यो <xliff:g id="APPLICATION">%2$s</xliff:g> सँग जोडिएको छ जसले इमेल, अनुप्रयोगहरू, र वेबसाइटहरू लगायतका तपाईँका नेटवर्क गतिविधि अनुगमन गर्न सक्छ।\n\nथप जानकारीको लागि, आफ्नो प्रशासकलाई सम्पर्क गर्नुहोस्।"</string>
+ <!-- no translation found for monitoring_description_app_work (7777228449969022305) -->
+ <skip />
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"तपाईँको कार्य प्रोफाइल <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_disabled" msgid="7412534203633528135">"तपाईँले नखोले सम्म उपकरण बन्द रहनेछ"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"छिटो सूचनाहरू प्राप्त गर्नुहोस्"</string>
diff --git a/packages/SystemUI/res/values-nl/strings.xml b/packages/SystemUI/res/values-nl/strings.xml
index df1f97b..cfb030d 100644
--- a/packages/SystemUI/res/values-nl/strings.xml
+++ b/packages/SystemUI/res/values-nl/strings.xml
@@ -321,6 +321,12 @@
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Waarschuwing voor <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
<string name="quick_settings_work_mode_label" msgid="6244915274350490429">"Werkmodus"</string>
<string name="quick_settings_night_display_label" msgid="3577098011487644395">"Nachtverlichting"</string>
+ <!-- no translation found for quick_settings_nfc_label (9012153754816969325) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_off (6883274004315134333) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_on (6680317193676884311) -->
+ <skip />
<string name="recents_empty_message" msgid="808480104164008572">"Geen recente items"</string>
<string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Je hebt alles gewist"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"App-informatie"</string>
@@ -334,6 +340,16 @@
<string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Horizontaal splitsen"</string>
<string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Verticaal splitsen"</string>
<string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Aangepast splitsen"</string>
+ <!-- no translation found for recents_accessibility_dismissed (2354459747918667050) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_open (1651449827614876864) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_top (9056056469282256287) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_left (8987144699630620019) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_right (275069779299592867) -->
+ <skip />
<string-array name="recents_blacklist_array">
</string-array>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"Opgeladen"</string>
@@ -414,20 +430,24 @@
<string name="disconnect_vpn" msgid="1324915059568548655">"Verbinding met VPN verbreken"</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Je apparaat wordt beheerd door <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
<string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> gebruikt <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> om je apparaat te beheren."</string>
- <string name="monitoring_description_do_body" msgid="6764108354701060766">"Je beheerder kan instellingen, zakelijke toegang, apps, aan je apparaat gekoppelde gegevens en de locatiegegevens van je apparaat controleren en beheren."</string>
+ <!-- no translation found for monitoring_description_do_body (3639594537660975895) -->
+ <skip />
<string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
<string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Meer informatie"</string>
<string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Je bent verbonden met <xliff:g id="VPN_APP">%1$s</xliff:g>, waarmee je netwerkactiviteit (waaronder e-mails, apps en websites) kan worden gecontroleerd."</string>
<string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
<string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"VPN-instellingen openen"</string>
- <string name="monitoring_description_network_logging" msgid="3901006351911787915">"Je beheerder heeft netwerkregistratie ingeschakeld, waarmee verkeer op je apparaat wordt bijgehouden.\n\nNeem voor meer informatie contact op met je beheerder."</string>
+ <!-- no translation found for monitoring_description_network_logging (7223505523384076027) -->
+ <skip />
<string name="monitoring_description_vpn" msgid="4445150119515393526">"Je hebt een app toestemming gegeven voor het instellen van een VPN-verbinding.\n\nMet deze app kan je apparaat- en netwerkactiviteit worden gecontroleerd, inclusief e-mails, apps en websites."</string>
- <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Je werkprofiel wordt beheerd door <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nJe beheerder kan je netwerkactiviteit controleren, inclusief e-mails, apps en websites.\n\nNeem contact op met je beheerder voor meer informatie.\n\nU bent ook verbonden met een VPN waarmee je netwerkactiviteit kan worden gecontroleerd."</string>
+ <!-- no translation found for monitoring_description_vpn_profile_owned (2958019119161161530) -->
+ <skip />
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"U bent verbonden met <xliff:g id="APPLICATION">%1$s</xliff:g>, waarmee je netwerkactiviteit kan worden gecontroleerd, inclusief e-mails, apps en websites."</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"U bent verbonden met <xliff:g id="APPLICATION">%1$s</xliff:g>, waarmee je persoonlijke netwerkactiviteit kan worden gecontroleerd, inclusief e-mails, apps en websites."</string>
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Je bent verbonden met <xliff:g id="APPLICATION">%1$s</xliff:g>, waarmee je persoonlijke netwerkactiviteit kan worden gecontroleerd, inclusief e-mails, apps en websites."</string>
- <string name="monitoring_description_app_work" msgid="1754325860918060897">"Je werkprofiel wordt beheerd door <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Deze is verbonden met <xliff:g id="APPLICATION">%2$s</xliff:g>, waarmee je werkgerelateerde netwerkactiviteit kan worden gecontroleerd, inclusief e-mails, apps en websites.\n\nNeem contact op met je beheerder voor meer informatie."</string>
+ <!-- no translation found for monitoring_description_app_work (7777228449969022305) -->
+ <skip />
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Je werkprofiel wordt beheerd door <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Deze is verbonden met <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, waarmee je werkgerelateerde netwerkactiviteit kan worden gecontroleerd, inclusief e-mails, apps en websites.\n\nU bent ook verbonden met <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, waarmee je persoonlijke netwerkactiviteit kan worden gecontroleerd."</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Het apparaat blijft vergrendeld totdat u het handmatig ontgrendelt"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"Sneller meldingen ontvangen"</string>
diff --git a/packages/SystemUI/res/values-pa/strings.xml b/packages/SystemUI/res/values-pa/strings.xml
index 763ee1f..0ec824d 100644
--- a/packages/SystemUI/res/values-pa/strings.xml
+++ b/packages/SystemUI/res/values-pa/strings.xml
@@ -321,6 +321,12 @@
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> ਚਿਤਾਵਨੀ"</string>
<string name="quick_settings_work_mode_label" msgid="6244915274350490429">"ਕੰਮ ਮੋਡ"</string>
<string name="quick_settings_night_display_label" msgid="3577098011487644395">"ਰਾਤਰੀ ਲਾਈਟ"</string>
+ <!-- no translation found for quick_settings_nfc_label (9012153754816969325) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_off (6883274004315134333) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_on (6680317193676884311) -->
+ <skip />
<string name="recents_empty_message" msgid="808480104164008572">"ਕੋਈ ਹਾਲੀਆ ਆਈਟਮਾਂ ਨਹੀਂ"</string>
<string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"ਤੁਸੀਂ ਸਭ ਕੁਝ ਸਾਫ਼ ਕਰ ਦਿੱਤਾ ਹੈ"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"ਐਪਲੀਕੇਸ਼ਨ ਜਾਣਕਾਰੀ"</string>
@@ -334,6 +340,16 @@
<string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"ਹੌਰੀਜ਼ੌਂਟਲ ਸਪਲਿਟ"</string>
<string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"ਵਰਟੀਕਲ ਸਪਲਿਟ"</string>
<string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"ਕਸਟਮ ਸਪਲਿਟ"</string>
+ <!-- no translation found for recents_accessibility_dismissed (2354459747918667050) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_open (1651449827614876864) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_top (9056056469282256287) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_left (8987144699630620019) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_right (275069779299592867) -->
+ <skip />
<string-array name="recents_blacklist_array">
</string-array>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"ਚਾਰਜ ਹੋਇਆ"</string>
@@ -414,20 +430,24 @@
<string name="disconnect_vpn" msgid="1324915059568548655">"VPN ਨੂੰ ਡਿਸਕਨੈਕਟ ਕਰੋ"</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"ਤੁਹਾਡੀ ਡੀਵਾਈਸ <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g> ਵੱਲੋਂ ਪ੍ਰਬੰਧਿਤ ਕੀਤੀ ਜਾਂਦੀ ਹੈ।"</string>
<string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> ਤੁਹਾਡੀ ਡੀਵਾਈਸ ਦੇ ਪ੍ਰਬੰਧਨ ਲਈ <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> ਦੀ ਵਰਤੋਂ ਕਰਦੀ ਹੈ।"</string>
- <string name="monitoring_description_do_body" msgid="6764108354701060766">"ਤੁਹਾਡਾ ਪ੍ਰਸ਼ਾਸਕ ਤੁਹਾਡੀ ਡੀਵਾਈਸ ਅਤੇ ਉਸਦੀ ਟਿਕਾਣਾ ਜਾਣਕਾਰੀ ਸਬੰਧੀ ਸੈਟਿੰਗਾਂ, ਕਾਰਪੋਰੇਟ ਪਹੁੰਚ, ਐਪਾਂ, ਡੈਟੇ ਦੀ ਨਿਗਰਾਨੀ ਅਤੇ ਪ੍ਰਬੰਧਨ ਕਰ ਸਕਦਾ ਹੈ।"</string>
+ <!-- no translation found for monitoring_description_do_body (3639594537660975895) -->
+ <skip />
<string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
<string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"ਹੋਰ ਜਾਣੋ"</string>
<string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"ਤੁਸੀਂ <xliff:g id="VPN_APP">%1$s</xliff:g> ਨਾਲ ਕਨੈਕਟ ਹੋ, ਜੋ ਈਮੇਲਾਂ, ਐਪਾਂ, ਅਤੇ ਵੈੱਬਸਾਈਟਾਂ ਸਮੇਤ ਤੁਹਾਡੀ ਨੈੱਟਵਰਕ ਸਰਗਰਮੀ ਦੀ ਨਿਗਰਾਨੀ ਕਰ ਸਕਦੀ ਹੈ।"</string>
<string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
<string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"VPN ਸੈਟਿੰਗਾਂ ਖੋਲ੍ਹੋ"</string>
- <string name="monitoring_description_network_logging" msgid="3901006351911787915">"ਤੁਹਾਡੇ ਪ੍ਰਸ਼ਾਸਕ ਨੇ ਨੈੱਟਵਰਕ ਲੌਗਿੰਗ ਨੂੰ ਚਾਲੂ ਕੀਤਾ ਹੋਇਆ ਹੈ, ਜੋ ਕਿ ਤੁਹਾਡੀ ਡੀਵਾਈਸ \'ਤੇ ਟਰੈਫਿਕ ਦੀ ਨਿਗਰਾਨੀ ਕਰਦਾ ਹੈ।\n\nਹੋਰ ਜਾਣਕਾਰੀ ਲਈ ਆਪਣੇ ਪ੍ਰਸ਼ਾਸਕ ਨਾਲ ਸੰਪਰਕ ਕਰੋ।"</string>
+ <!-- no translation found for monitoring_description_network_logging (7223505523384076027) -->
+ <skip />
<string name="monitoring_description_vpn" msgid="4445150119515393526">"ਤੁਸੀਂ ਇੱਕ ਐਪ ਨੂੰ ਇੱਕ VPN ਕਨੈਕਸ਼ਨ ਸੈਟ ਅਪ ਕਰਨ ਦੀ ਅਨੁਮਤੀ ਦਿੱਤੀ ਹੈ।\n\nਇਹ ਐਪ ਤੁਹਾਡੀ ਡੀਵਾਈਸ ਅਤੇ ਨੈੱਟਵਰਕ ਗਤੀਵਿਧੀ ਦਾ ਨਿਰੀਖਣ ਕਰ ਸਕਦਾ ਹੈ, ਈਮੇਲਾਂ, ਐਪਸ ਅਤੇ ਸੁਰੱਖਿਅਤ ਵੈਬਸਾਈਟਾਂ ਸਮੇਤ।"</string>
- <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"ਤੁਹਾਡੀ ਕਾਰਜ ਪ੍ਰੋਫ਼ਾਈਲ <xliff:g id="ORGANIZATION">%1$s</xliff:g> ਦੁਆਰਾ ਵਿਵਸਥਿਤ ਕੀਤੀ ਜਾਂਦੀ ਹੈ।\n\nਤੁਹਾਡਾ ਪ੍ਰਸ਼ਾਸਕ ਈਮੇਲ, ਐਪਸ, ਅਤੇ ਵੈੱਬਪੰਨੇ ਸੰਤੇ ਤੁਹਾਡੀ ਨੈੱਟਵਰਕ ਗਤੀਵਿਧੀ ਦੀ ਨਿਗਰਾਨੀ ਕਰਨ ਦੇ ਸਮਰੱਥ ਹੈ।\n\nਵਧੇਰੇ ਜਾਣਕਾਰੀ ਲਈ, ਆਪਣੇ ਪ੍ਰਸ਼ਾਸਕ ਨਾਲ ਸੰਪਰਕ ਕਰੋ।\n\nਤੁਸੀਂ VPN ਨਾਲ ਵੀ ਕਨੈਕਟ ਹੋ, ਜੋ ਤੁਹਾਡੀ ਨੈੱਟਵਰਕ ਗਤੀਵਿਧੀ ਦੀ ਨਿਗਰਾਨੀ ਕਰ ਸਕਦਾ ਹੈ।"</string>
+ <!-- no translation found for monitoring_description_vpn_profile_owned (2958019119161161530) -->
+ <skip />
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"ਤੁਸੀਂ <xliff:g id="APPLICATION">%1$s</xliff:g> ਨਾਲ ਕਨੈਕਟ ਹੋ, ਜੋ ਈਮੇਲ, ਐਪਸ ਅਤੇ ਵੈਬਸਫ਼ਿਆਂ ਸਮੇਤ ਤੁਹਾਡੀ ਨੈੱਟਵਰਕ ਗਤੀਵਿਧੀ ਦਾ ਨਿਰੀਖਣ ਕਰ ਸਕਦੀ ਹੈ।"</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"ਤੁਸੀਂ <xliff:g id="APPLICATION">%1$s</xliff:g> ਨਾਲ ਕਨੈਕਟ ਹੋ, ਜੋ ਈਮੇਲ, ਐਪਸ ਅਤੇ ਵੈਬਸਫ਼ਿਆਂ ਸਮੇਤ ਤੁਹਾਡੀ ਨੈੱਟਵਰਕ ਗਤੀਵਿਧੀ ਦਾ ਨਿਰੀਖਣ ਕਰ ਸਕਦੀ ਹੈ।"</string>
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"ਤੁਸੀਂ <xliff:g id="APPLICATION">%1$s</xliff:g> ਨਾਲ ਕਨੈਕਟ ਹੋ, ਜੋ ਈਮੇਲਾਂ, ਐਪਾਂ, ਅਤੇ ਵੈੱਬਸਾਈਟਾਂ ਸਮੇਤ ਤੁਹਾਡੀ ਨਿੱਜੀ ਨੈੱਟਵਰਕ ਸਰਗਰਮੀ ਦੀ ਨਿਗਰਾਨੀ ਕਰ ਸਕਦੀ ਹੈ।"</string>
- <string name="monitoring_description_app_work" msgid="1754325860918060897">"ਤੁਹਾਡੀ ਕਾਰਜ ਪ੍ਰੋਫ਼ਾਈਲ <xliff:g id="ORGANIZATION">%1$s</xliff:g> ਦੁਆਰਾ ਵਿਵਸਥਿਤ ਕੀਤੀ ਜਾਂਦੀ ਹੈ। ਇਹ <xliff:g id="APPLICATION">%2$s</xliff:g> ਨਾਲ ਕਨੈਕਟ ਹੈ, ਜੋ ਈਮੇਲ, ਐਪਸ ਅਤੇ ਵੈਬਸਫ਼ਿਆਂ ਸਮੇਤ ਤੁਹਾਡੀ ਨੈੱਟਵਰਕ ਗਤੀਵਿਧੀ ਦਾ ਨਿਰੀਖਣ ਕਰ ਸਕਦੀ ਹੈ।\n\nਹੋਰ ਜਾਣਕਾਰੀ ਲਈ, ਆਪਣੇ ਪ੍ਰਬੰਧਕ ਨੂੰ ਸੰਪਰਕ ਕਰੋ।"</string>
+ <!-- no translation found for monitoring_description_app_work (7777228449969022305) -->
+ <skip />
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"ਤੁਹਾਡੀ ਕਾਰਜ ਪ੍ਰੋਫ਼ਾਈਲ <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_disabled" msgid="7412534203633528135">"ਡੀਵਾਈਸ ਲੌਕ ਰਹੇਗੀ ਜਦੋਂ ਤੱਕ ਤੁਸੀਂ ਮੈਨੂਅਲੀ ਅਨਲੌਕ ਨਹੀਂ ਕਰਦੇ"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"ਤੇਜ਼ੀ ਨਾਲ ਸੂਚਨਾਵਾਂ ਪ੍ਰਾਪਤ ਕਰੋ"</string>
diff --git a/packages/SystemUI/res/values-pl/strings.xml b/packages/SystemUI/res/values-pl/strings.xml
index 456ed81..4926e30 100644
--- a/packages/SystemUI/res/values-pl/strings.xml
+++ b/packages/SystemUI/res/values-pl/strings.xml
@@ -325,6 +325,12 @@
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Ostrzeżenie: <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
<string name="quick_settings_work_mode_label" msgid="6244915274350490429">"Tryb pracy"</string>
<string name="quick_settings_night_display_label" msgid="3577098011487644395">"Podświetlenie nocne"</string>
+ <!-- no translation found for quick_settings_nfc_label (9012153754816969325) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_off (6883274004315134333) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_on (6680317193676884311) -->
+ <skip />
<string name="recents_empty_message" msgid="808480104164008572">"Brak ostatnich elementów"</string>
<string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Wszystko zostało wyczyszczone"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"Informacje o aplikacji"</string>
@@ -338,6 +344,16 @@
<string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Podziel poziomo"</string>
<string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Podziel pionowo"</string>
<string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Podziel niestandardowo"</string>
+ <!-- no translation found for recents_accessibility_dismissed (2354459747918667050) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_open (1651449827614876864) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_top (9056056469282256287) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_left (8987144699630620019) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_right (275069779299592867) -->
+ <skip />
<string-array name="recents_blacklist_array">
</string-array>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"Naładowana"</string>
@@ -418,20 +434,24 @@
<string name="disconnect_vpn" msgid="1324915059568548655">"Rozłącz z VPN"</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Twoim urządzeniem zarządza <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
<string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> używa aplikacji <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> do zarządzania Twoim urządzeniem."</string>
- <string name="monitoring_description_do_body" msgid="6764108354701060766">"Administrator może monitorować ustawienia, dostęp firmowy, aplikacje, dane dotyczące urządzenia i lokalizacji oraz nimi zarządzać."</string>
+ <!-- no translation found for monitoring_description_do_body (3639594537660975895) -->
+ <skip />
<string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
<string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Więcej informacji"</string>
<string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Łączysz się z aplikacją <xliff:g id="VPN_APP">%1$s</xliff:g>, która może monitorować Twoją aktywność w sieci, w tym e-maile, aplikacje i strony internetowe."</string>
<string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
<string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Otwórz ustawienia VPN"</string>
- <string name="monitoring_description_network_logging" msgid="3901006351911787915">"Administrator włączył rejestrowanie sieciowe, które pozwala monitorować ruch na Twoim urządzeniu.\n\nAby uzyskać więcej informacji, skontaktuj się z administratorem."</string>
+ <!-- no translation found for monitoring_description_network_logging (7223505523384076027) -->
+ <skip />
<string name="monitoring_description_vpn" msgid="4445150119515393526">"Aplikacja otrzymała od Ciebie uprawnienia do konfigurowania połączenia VPN.\n\nMoże ona monitorować Twoją aktywność na urządzeniu i w sieci, w tym e-maile, aplikacje i strony internetowe."</string>
- <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Twoim profilem do pracy zarządza <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nAdministrator może monitorować Twoją aktywność w sieci, w tym e-maile, aplikacje i strony internetowe.\n\nSkontaktuj się z nim, by dowiedzieć się więcej.\n\nMasz też połączenie z siecią VPN, która może monitorować Twoją aktywność w sieci."</string>
+ <!-- no translation found for monitoring_description_vpn_profile_owned (2958019119161161530) -->
+ <skip />
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Masz połączenie z aplikacją <xliff:g id="APPLICATION">%1$s</xliff:g>, która może monitorować Twoją aktywność w sieci, w tym e-maile, aplikacje i strony internetowe."</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"Masz połączenie z aplikacją <xliff:g id="APPLICATION">%1$s</xliff:g>, która może monitorować Twoją prywatną aktywność w sieci, w tym e-maile, aplikacje i strony internetowe."</string>
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Masz połączenie z aplikacją <xliff:g id="APPLICATION">%1$s</xliff:g>, która może monitorować Twoją prywatną aktywność w sieci, w tym e-maile, aplikacje i strony internetowe."</string>
- <string name="monitoring_description_app_work" msgid="1754325860918060897">"Twoim profilem do pracy zarządza <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Profil jest połączony z aplikacją <xliff:g id="APPLICATION">%2$s</xliff:g>, która może monitorować Twoją aktywność w sieci związaną z pracą, w tym e-maile, aplikacje i strony internetowe.\n\nAby dowiedzieć się więcej, skontaktuj się z administratorem."</string>
+ <!-- no translation found for monitoring_description_app_work (7777228449969022305) -->
+ <skip />
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Twoim profilem do pracy zarządza <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Profil jest połączony z aplikacją <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, która może monitorować Twoją aktywność w sieci związaną z pracą, w tym e-maile, aplikacje i strony internetowe.\n\nMasz też połączenie z aplikacją <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, która może monitorować Twoją prywatną aktywność w sieci."</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Urządzenie pozostanie zablokowane, aż odblokujesz je ręcznie"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"Szybszy dostęp do powiadomień"</string>
diff --git a/packages/SystemUI/res/values-pt-rBR/strings.xml b/packages/SystemUI/res/values-pt-rBR/strings.xml
index e2a1818..c89cdc9 100644
--- a/packages/SystemUI/res/values-pt-rBR/strings.xml
+++ b/packages/SystemUI/res/values-pt-rBR/strings.xml
@@ -323,6 +323,12 @@
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Aviso de <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
<string name="quick_settings_work_mode_label" msgid="6244915274350490429">"Modo de trabalho"</string>
<string name="quick_settings_night_display_label" msgid="3577098011487644395">"Modo noturno"</string>
+ <!-- no translation found for quick_settings_nfc_label (9012153754816969325) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_off (6883274004315134333) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_on (6680317193676884311) -->
+ <skip />
<string name="recents_empty_message" msgid="808480104164008572">"Nenhum item recente"</string>
<string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Você limpou tudo"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"Informações do app"</string>
@@ -336,6 +342,16 @@
<string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Divisão horizontal"</string>
<string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Divisão vertical"</string>
<string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Divisão personalizada"</string>
+ <!-- no translation found for recents_accessibility_dismissed (2354459747918667050) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_open (1651449827614876864) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_top (9056056469282256287) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_left (8987144699630620019) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_right (275069779299592867) -->
+ <skip />
<string-array name="recents_blacklist_array">
</string-array>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"Carregada"</string>
@@ -416,20 +432,24 @@
<string name="disconnect_vpn" msgid="1324915059568548655">"Desconectar VPN"</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Seu dispositivo é gerenciado por <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
<string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> usa <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> para gerenciar seu dispositivo."</string>
- <string name="monitoring_description_do_body" msgid="6764108354701060766">"O admin. pode monitorar e gerenciar config., acesso corporativo, apps, dados associados ao dispos. e as info. de local do dispos."</string>
+ <!-- no translation found for monitoring_description_do_body (3639594537660975895) -->
+ <skip />
<string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
<string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Saber mais"</string>
<string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Você está conectado a <xliff:g id="VPN_APP">%1$s</xliff:g>, que pode monitorar sua atividade na rede, incluindo e-mails, apps e websites."</string>
<string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
<string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Abrir configurações de VPN"</string>
- <string name="monitoring_description_network_logging" msgid="3901006351911787915">"Seu administrador ativou o registro de rede, que monitora o tráfego no seu dispositivo.\n\nPara ver mais informações, entre em contato com o administrador."</string>
+ <!-- no translation found for monitoring_description_network_logging (7223505523384076027) -->
+ <skip />
<string name="monitoring_description_vpn" msgid="4445150119515393526">"Você deu permissão para um app configurar uma conexão VPN.\n\nEsse app pode monitorar seu dispositivo e a atividade na rede, incluindo e-mails, apps e websites."</string>
- <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Seu perfil de trabalho é gerenciado por <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nSeu administrador pode monitorar suas atividades de rede, incluindo e-mails, apps e websites.\n\nPara mais informações, entre em contato com seu administrador.\n\nVocê também está conectado a uma VPN, a qual pode monitorar suas atividades de rede."</string>
+ <!-- no translation found for monitoring_description_vpn_profile_owned (2958019119161161530) -->
+ <skip />
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Você está conectado a <xliff:g id="APPLICATION">%1$s</xliff:g>, que pode monitorar sua atividade na rede, incluindo e-mails, apps e websites."</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"Você está conectado a <xliff:g id="APPLICATION">%1$s</xliff:g>, que pode monitorar sua atividade pessoal na rede, incluindo e-mails, apps e websites."</string>
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Você está conectado a <xliff:g id="APPLICATION">%1$s</xliff:g>, que pode monitorar sua atividade pessoal na rede, incluindo e-mails, apps e websites."</string>
- <string name="monitoring_description_app_work" msgid="1754325860918060897">"Seu perfil de trabalho é gerenciado por <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Ele está conectado a <xliff:g id="APPLICATION">%2$s</xliff:g>, que pode monitorar sua atividade profissional na rede, incluindo e-mails, apps e websites.\n\nPara ver mais informações, entre em contato com seu administrador."</string>
+ <!-- no translation found for monitoring_description_app_work (7777228449969022305) -->
+ <skip />
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Seu perfil de trabalho é gerenciado por <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Ele está conectado a <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, que pode monitorar sua atividade profissional na rede, incluindo e-mails, apps e websites.\n\nVocê também está conectado a <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, que pode monitorar sua atividade pessoal na rede."</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"O dispositivo permanecerá bloqueado até que você o desbloqueie manualmente"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"Receba notificações mais rápido"</string>
diff --git a/packages/SystemUI/res/values-pt-rPT/strings.xml b/packages/SystemUI/res/values-pt-rPT/strings.xml
index f90e1ee..5f87c12 100644
--- a/packages/SystemUI/res/values-pt-rPT/strings.xml
+++ b/packages/SystemUI/res/values-pt-rPT/strings.xml
@@ -321,6 +321,12 @@
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Aviso de <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
<string name="quick_settings_work_mode_label" msgid="6244915274350490429">"Modo de trabalho"</string>
<string name="quick_settings_night_display_label" msgid="3577098011487644395">"Luz noturna"</string>
+ <!-- no translation found for quick_settings_nfc_label (9012153754816969325) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_off (6883274004315134333) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_on (6680317193676884311) -->
+ <skip />
<string name="recents_empty_message" msgid="808480104164008572">"Nenhum item recente"</string>
<string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Limpou tudo"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"Informações da aplicação"</string>
@@ -334,6 +340,16 @@
<string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Divisão horizontal"</string>
<string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Divisão vertical"</string>
<string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Divisão personalizada"</string>
+ <!-- no translation found for recents_accessibility_dismissed (2354459747918667050) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_open (1651449827614876864) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_top (9056056469282256287) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_left (8987144699630620019) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_right (275069779299592867) -->
+ <skip />
<string-array name="recents_blacklist_array">
</string-array>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"Carregada"</string>
@@ -414,20 +430,24 @@
<string name="disconnect_vpn" msgid="1324915059568548655">"Desligar VPN"</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"O seu dispositivo é gerido pelo <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
<string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"A <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> utiliza o <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> para gerir o seu dispositivo."</string>
- <string name="monitoring_description_do_body" msgid="6764108354701060766">"O administ. pode monitorizar e gerir definições, acesso empresarial, aplic. e dados associados ao dispositivo, bem como inf. de localiz. do disp."</string>
+ <!-- no translation found for monitoring_description_do_body (3639594537660975895) -->
+ <skip />
<string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
<string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Saiba mais"</string>
<string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Está ligado à rede <xliff:g id="VPN_APP">%1$s</xliff:g>, que pode monitorizar a sua atividade de rede, incluindo emails, aplicações e Websites."</string>
<string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
<string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Abrir as definições de VPN"</string>
- <string name="monitoring_description_network_logging" msgid="3901006351911787915">"O seu administrador ativou os registos de rede, que monitorizam o tráfego no seu dispositivo.\n\nPara mais informações, contacte o administrador."</string>
+ <!-- no translation found for monitoring_description_network_logging (7223505523384076027) -->
+ <skip />
<string name="monitoring_description_vpn" msgid="4445150119515393526">"Concedeu autorização a uma aplicação para configurar uma ligação VPN.\n\nEsta aplicação pode monitorizar a atividade do dispositivo e da rede, incluindo emails, aplicações e Websites."</string>
- <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"O seu perfil de trabalho é gerido por <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nO seu administrador pode monitorizar a atividade da rede, incluindo emails, aplicações e Websites.\n\nPara obter mais informações, contacte o administrador.\n\nAlém disso, está ligado a uma VPN, que pode monitorizar a atividade da rede."</string>
+ <!-- no translation found for monitoring_description_vpn_profile_owned (2958019119161161530) -->
+ <skip />
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Está ligado a <xliff:g id="APPLICATION">%1$s</xliff:g>, que pode monitorizar a atividade da rede, incluindo emails, aplicações e Websites."</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"Está ligado a <xliff:g id="APPLICATION">%1$s</xliff:g>, que pode monitorizar a atividade da rede pessoal, incluindo emails, aplicações e Websites."</string>
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Está ligado ao <xliff:g id="APPLICATION">%1$s</xliff:g>, que pode monitorizar a atividade da rede pessoal, incluindo emails, aplicações e Websites."</string>
- <string name="monitoring_description_app_work" msgid="1754325860918060897">"O seu perfil de trabalho é gerido por <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Está ligado a <xliff:g id="APPLICATION">%2$s</xliff:g>, que pode monitorizar a atividade da rede de trabalho, incluindo emails, aplicações e Websites.\n\nPara obter mais informações, contacte o administrador."</string>
+ <!-- no translation found for monitoring_description_app_work (7777228449969022305) -->
+ <skip />
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"O seu perfil de trabalho é gerido por <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Está ligado a <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, que pode monitorizar a atividade da rede de trabalho, incluindo emails, aplicações e Websites.\n\nTambém está ligado a <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, que pode monitorizar a atividade da rede pessoal."</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"O dispositivo permanecerá bloqueado até ser desbloqueado manualmente"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"Receber notificações mais rapidamente"</string>
diff --git a/packages/SystemUI/res/values-pt/strings.xml b/packages/SystemUI/res/values-pt/strings.xml
index e2a1818..c89cdc9 100644
--- a/packages/SystemUI/res/values-pt/strings.xml
+++ b/packages/SystemUI/res/values-pt/strings.xml
@@ -323,6 +323,12 @@
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Aviso de <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
<string name="quick_settings_work_mode_label" msgid="6244915274350490429">"Modo de trabalho"</string>
<string name="quick_settings_night_display_label" msgid="3577098011487644395">"Modo noturno"</string>
+ <!-- no translation found for quick_settings_nfc_label (9012153754816969325) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_off (6883274004315134333) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_on (6680317193676884311) -->
+ <skip />
<string name="recents_empty_message" msgid="808480104164008572">"Nenhum item recente"</string>
<string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Você limpou tudo"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"Informações do app"</string>
@@ -336,6 +342,16 @@
<string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Divisão horizontal"</string>
<string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Divisão vertical"</string>
<string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Divisão personalizada"</string>
+ <!-- no translation found for recents_accessibility_dismissed (2354459747918667050) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_open (1651449827614876864) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_top (9056056469282256287) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_left (8987144699630620019) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_right (275069779299592867) -->
+ <skip />
<string-array name="recents_blacklist_array">
</string-array>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"Carregada"</string>
@@ -416,20 +432,24 @@
<string name="disconnect_vpn" msgid="1324915059568548655">"Desconectar VPN"</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Seu dispositivo é gerenciado por <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
<string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> usa <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> para gerenciar seu dispositivo."</string>
- <string name="monitoring_description_do_body" msgid="6764108354701060766">"O admin. pode monitorar e gerenciar config., acesso corporativo, apps, dados associados ao dispos. e as info. de local do dispos."</string>
+ <!-- no translation found for monitoring_description_do_body (3639594537660975895) -->
+ <skip />
<string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
<string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Saber mais"</string>
<string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Você está conectado a <xliff:g id="VPN_APP">%1$s</xliff:g>, que pode monitorar sua atividade na rede, incluindo e-mails, apps e websites."</string>
<string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
<string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Abrir configurações de VPN"</string>
- <string name="monitoring_description_network_logging" msgid="3901006351911787915">"Seu administrador ativou o registro de rede, que monitora o tráfego no seu dispositivo.\n\nPara ver mais informações, entre em contato com o administrador."</string>
+ <!-- no translation found for monitoring_description_network_logging (7223505523384076027) -->
+ <skip />
<string name="monitoring_description_vpn" msgid="4445150119515393526">"Você deu permissão para um app configurar uma conexão VPN.\n\nEsse app pode monitorar seu dispositivo e a atividade na rede, incluindo e-mails, apps e websites."</string>
- <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Seu perfil de trabalho é gerenciado por <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nSeu administrador pode monitorar suas atividades de rede, incluindo e-mails, apps e websites.\n\nPara mais informações, entre em contato com seu administrador.\n\nVocê também está conectado a uma VPN, a qual pode monitorar suas atividades de rede."</string>
+ <!-- no translation found for monitoring_description_vpn_profile_owned (2958019119161161530) -->
+ <skip />
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Você está conectado a <xliff:g id="APPLICATION">%1$s</xliff:g>, que pode monitorar sua atividade na rede, incluindo e-mails, apps e websites."</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"Você está conectado a <xliff:g id="APPLICATION">%1$s</xliff:g>, que pode monitorar sua atividade pessoal na rede, incluindo e-mails, apps e websites."</string>
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Você está conectado a <xliff:g id="APPLICATION">%1$s</xliff:g>, que pode monitorar sua atividade pessoal na rede, incluindo e-mails, apps e websites."</string>
- <string name="monitoring_description_app_work" msgid="1754325860918060897">"Seu perfil de trabalho é gerenciado por <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Ele está conectado a <xliff:g id="APPLICATION">%2$s</xliff:g>, que pode monitorar sua atividade profissional na rede, incluindo e-mails, apps e websites.\n\nPara ver mais informações, entre em contato com seu administrador."</string>
+ <!-- no translation found for monitoring_description_app_work (7777228449969022305) -->
+ <skip />
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Seu perfil de trabalho é gerenciado por <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Ele está conectado a <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, que pode monitorar sua atividade profissional na rede, incluindo e-mails, apps e websites.\n\nVocê também está conectado a <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, que pode monitorar sua atividade pessoal na rede."</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"O dispositivo permanecerá bloqueado até que você o desbloqueie manualmente"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"Receba notificações mais rápido"</string>
diff --git a/packages/SystemUI/res/values-ro/strings.xml b/packages/SystemUI/res/values-ro/strings.xml
index 8dca94e..66f7bde 100644
--- a/packages/SystemUI/res/values-ro/strings.xml
+++ b/packages/SystemUI/res/values-ro/strings.xml
@@ -325,6 +325,12 @@
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Avertizare: <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
<string name="quick_settings_work_mode_label" msgid="6244915274350490429">"Modul de lucru"</string>
<string name="quick_settings_night_display_label" msgid="3577098011487644395">"Lumină de noapte"</string>
+ <!-- no translation found for quick_settings_nfc_label (9012153754816969325) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_off (6883274004315134333) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_on (6680317193676884311) -->
+ <skip />
<string name="recents_empty_message" msgid="808480104164008572">"Niciun element recent"</string>
<string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Ați șters tot"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"Informații despre aplicație"</string>
@@ -338,6 +344,16 @@
<string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Divizare pe orizontală"</string>
<string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Divizare pe verticală"</string>
<string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Divizare personalizată"</string>
+ <!-- no translation found for recents_accessibility_dismissed (2354459747918667050) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_open (1651449827614876864) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_top (9056056469282256287) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_left (8987144699630620019) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_right (275069779299592867) -->
+ <skip />
<string-array name="recents_blacklist_array">
</string-array>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"Încărcată"</string>
@@ -418,20 +434,24 @@
<string name="disconnect_vpn" msgid="1324915059568548655">"Deconectați rețeaua VPN"</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Dispozitivul dvs. este gestionat de <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
<string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> folosește <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> pentru a vă gestiona dispozitivul."</string>
- <string name="monitoring_description_do_body" msgid="6764108354701060766">"Administratorul dvs. poate monitoriza și gestiona setările, accesul la nivelul companiei, aplicațiile, datele asociate cu dispozitivul dvs. și informațiile despre locația dispozitivului."</string>
+ <!-- no translation found for monitoring_description_do_body (3639594537660975895) -->
+ <skip />
<string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
<string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Aflați mai multe"</string>
<string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"V-ați conectat la aplicația <xliff:g id="VPN_APP">%1$s</xliff:g>, care vă poate monitoriza activitatea în rețea, inclusiv e-mailurile, aplicațiile și site-urile accesate."</string>
<string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
<string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Deschideți Setări VPN"</string>
- <string name="monitoring_description_network_logging" msgid="3901006351911787915">"Administratorul dvs. a activat înregistrarea în jurnal pentru rețea, funcție ce monitorizează traficul de pe dispozitivul dvs.\n\nPentru mai multe informații, contactați administratorul."</string>
+ <!-- no translation found for monitoring_description_network_logging (7223505523384076027) -->
+ <skip />
<string name="monitoring_description_vpn" msgid="4445150119515393526">"Ați acordat unei aplicații permisiunea de a configura o conexiune VPN.\n\nAceastă aplicație poate monitoriza activitatea de pe dispozitiv și în rețea, inclusiv e-mailurile, aplicațiile și site-urile."</string>
- <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Profilul de serviciu este gestionat de <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nAdministratorul poate monitoriza activitatea în rețea, inclusiv e-mailurile, aplicațiile și site-urile.\n\nPentru mai multe informații, contactați administratorul.\n\nDe asemenea, sunteți conectat(ă) la o rețea VPN, care vă poate monitoriza activitatea în rețea."</string>
+ <!-- no translation found for monitoring_description_vpn_profile_owned (2958019119161161530) -->
+ <skip />
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Sunteți conectat(ă) la <xliff:g id="APPLICATION">%1$s</xliff:g>, care vă poate monitoriza activitatea în rețea, inclusiv e-mailurile, aplicațiile și site-urile."</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"Sunteți conectat(ă) la <xliff:g id="APPLICATION">%1$s</xliff:g>, care vă poate monitoriza activitatea în rețeaua personală, inclusiv e-mailurile, aplicațiile și site-urile."</string>
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"V-ați conectat la aplicația <xliff:g id="APPLICATION">%1$s</xliff:g>, care vă poate monitoriza activitatea personală în rețea, inclusiv e-mailurile, aplicațiile și site-urile accesate."</string>
- <string name="monitoring_description_app_work" msgid="1754325860918060897">"Profilul de serviciu este gestionat de <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Este conectat la <xliff:g id="APPLICATION">%2$s</xliff:g>, care vă poate monitoriza activitatea în rețeaua de serviciu, inclusiv e-mailurile, aplicațiile și site-urile.\n\nPentru mai multe informații, contactați administratorul."</string>
+ <!-- no translation found for monitoring_description_app_work (7777228449969022305) -->
+ <skip />
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Profilul de serviciu este gestionat de <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Este conectat la <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, care vă poate monitoriza activitatea în rețeaua de serviciu, inclusiv e-mailurile, aplicațiile și site-urile.\n\nDe asemenea, sunteți conectat(ă) la <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, care vă poate monitoriza activitatea în rețeaua personală."</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Dispozitivul va rămâne blocat până când îl deblocați manual"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"Obțineți notificări mai rapid"</string>
diff --git a/packages/SystemUI/res/values-ru/strings.xml b/packages/SystemUI/res/values-ru/strings.xml
index 9e046ed..0571e8d 100644
--- a/packages/SystemUI/res/values-ru/strings.xml
+++ b/packages/SystemUI/res/values-ru/strings.xml
@@ -327,6 +327,12 @@
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Предупреждение: <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
<string name="quick_settings_work_mode_label" msgid="6244915274350490429">"Рабочий режим"</string>
<string name="quick_settings_night_display_label" msgid="3577098011487644395">"Ночной режим"</string>
+ <!-- no translation found for quick_settings_nfc_label (9012153754816969325) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_off (6883274004315134333) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_on (6680317193676884311) -->
+ <skip />
<string name="recents_empty_message" msgid="808480104164008572">"Недавних приложений нет"</string>
<string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Вы очистили всё"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"Сведения о приложении"</string>
@@ -340,6 +346,16 @@
<string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Разделить по горизонтали"</string>
<string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Разделить по вертикали"</string>
<string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Разделить по-другому"</string>
+ <!-- no translation found for recents_accessibility_dismissed (2354459747918667050) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_open (1651449827614876864) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_top (9056056469282256287) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_left (8987144699630620019) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_right (275069779299592867) -->
+ <skip />
<string-array name="recents_blacklist_array">
</string-array>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"Батарея заряжена"</string>
@@ -420,20 +436,24 @@
<string name="disconnect_vpn" msgid="1324915059568548655">"Отключить VPN"</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Этим устройством управляет приложение \"<xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>\""</string>
<string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"Компания \"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>\" управляет устройством с помощью приложения \"<xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g>\""</string>
- <string name="monitoring_description_do_body" msgid="6764108354701060766">"Администратор контролирует настройки, приложения, доступ к ресурсам компании, связанные с устройством данные и передачу геоданных."</string>
+ <!-- no translation found for monitoring_description_do_body (3639594537660975895) -->
+ <skip />
<string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
<string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Подробнее…"</string>
<string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Запущено приложение \"<xliff:g id="VPN_APP">%1$s</xliff:g>\". Оно может отслеживать ваши действия в сети, включая работу с электронной почтой, приложениями и сайтами."</string>
<string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
<string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Открыть настройки VPN"</string>
- <string name="monitoring_description_network_logging" msgid="3901006351911787915">"Администратор включил ведение сетевого журнала, чтобы отслеживать трафик на вашем устройстве.\n\nДля получения подробной информации обращайтесь к администратору."</string>
+ <!-- no translation found for monitoring_description_network_logging (7223505523384076027) -->
+ <skip />
<string name="monitoring_description_vpn" msgid="4445150119515393526">"Вы разрешили приложению подключаться к сети VPN.\n\nОно может отслеживать ваши действия на устройстве и в Интернете, включая работу с электронной почтой, приложениями и веб-сайтами."</string>
- <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Вашим корпоративным профилем управляет <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nАдминистратор может отслеживать ваши действия в Интернете, включая работу с электронной почтой, приложениями и веб-сайтами.\n\nЗа подробностями обратитесь к нему.\n\nУстройство также подключено к сети VPN, в которой возможно отслеживание ваших действий."</string>
+ <!-- no translation found for monitoring_description_vpn_profile_owned (2958019119161161530) -->
+ <skip />
<string name="legacy_vpn_name" msgid="6604123105765737830">"Сеть VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Запущено приложение \"<xliff:g id="APPLICATION">%1$s</xliff:g>\", которое может отслеживать ваши действия в Интернете, включая работу с электронной почтой, приложениями и веб-сайтами."</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"Запущено приложение \"<xliff:g id="APPLICATION">%1$s</xliff:g>\", которое может отслеживать ваши действия в Интернете (выполняемые в личном профиле), включая работу с электронной почтой, приложениями и веб-сайтами."</string>
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Запущено приложение \"<xliff:g id="APPLICATION">%1$s</xliff:g>\", которое может отслеживать ваши действия в сети, включая работу с электронной почтой, приложениями и веб-сайтами."</string>
- <string name="monitoring_description_app_work" msgid="1754325860918060897">"Вашим рабочим профилем управляет \"<xliff:g id="ORGANIZATION">%1$s</xliff:g>\". Приложение \"<xliff:g id="APPLICATION">%2$s</xliff:g>\" может отслеживать ваши действия в Интернете, включая работу с электронной почтой, приложениями и веб-сайтами.\n\nЗа дополнительной информацией обратитесь к своему администратору."</string>
+ <!-- no translation found for monitoring_description_app_work (7777228449969022305) -->
+ <skip />
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Вашим рабочим профилем управляет \"<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_disabled" msgid="7412534203633528135">"Устройство необходимо будет разблокировать вручную"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"Быстрый доступ к уведомлениям"</string>
diff --git a/packages/SystemUI/res/values-si/strings.xml b/packages/SystemUI/res/values-si/strings.xml
index 7728570..5987fe5 100644
--- a/packages/SystemUI/res/values-si/strings.xml
+++ b/packages/SystemUI/res/values-si/strings.xml
@@ -321,6 +321,12 @@
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> අවවාද කිරීම"</string>
<string name="quick_settings_work_mode_label" msgid="6244915274350490429">"වැඩ ප්රකාරය"</string>
<string name="quick_settings_night_display_label" msgid="3577098011487644395">"රාත්රී ආලෝකය"</string>
+ <!-- no translation found for quick_settings_nfc_label (9012153754816969325) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_off (6883274004315134333) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_on (6680317193676884311) -->
+ <skip />
<string name="recents_empty_message" msgid="808480104164008572">"මෑත අයිතම නැත"</string>
<string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"ඔබ සියලු දේ හිස් කර ඇත"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"යෙදුම් තොරතුරු"</string>
@@ -334,6 +340,16 @@
<string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"තිරස්ව වෙන් කරන්න"</string>
<string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"සිරස්ව වෙන් කරන්න"</string>
<string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"අභිමත ලෙස වෙන් කරන්න"</string>
+ <!-- no translation found for recents_accessibility_dismissed (2354459747918667050) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_open (1651449827614876864) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_top (9056056469282256287) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_left (8987144699630620019) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_right (275069779299592867) -->
+ <skip />
<string-array name="recents_blacklist_array">
</string-array>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"අරෝපිතයි"</string>
@@ -414,20 +430,24 @@
<string name="disconnect_vpn" msgid="1324915059568548655">"VPN විසන්ධි කරන්න"</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"ඔබගේ උපාංගය <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g> මගින් කළමනාකරණය කෙරේ."</string>
<string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> ඔබගේ උපාංගය කළමනාකරණය කිරීමට <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> භාවිත කරයි."</string>
- <string name="monitoring_description_do_body" msgid="6764108354701060766">"ඔබේ උපාංගය සමඟ සම්බන්ධිත සැකසීම්, සංස්ථාපිත ප්රවේශය, යෙදුම්, දත්ත, සහ ඔබගේ උපාංගයේ ස්ථාන තොරතුරු නිරීක්ෂණය සහ කළමනාකරණය කිරීමට ඔබගේ පරිපාලකට හැකිය."</string>
+ <!-- no translation found for monitoring_description_do_body (3639594537660975895) -->
+ <skip />
<string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
<string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"තව දැන ගන්න"</string>
<string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"ඊ-තැපැල්, යෙදුම් සහ වෙබ් අඩවි ඇතුළු ඔබේ ජාල ක්රියාකාරකම් නිරීක්ෂණය කළ හැකි <xliff:g id="VPN_APP">%1$s</xliff:g>, වෙත ඔබ සම්බන්ධ වී ඇත."</string>
<string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
<string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"VPN සැකසීම් විවෘත කරන්න"</string>
- <string name="monitoring_description_network_logging" msgid="3901006351911787915">"ඔබගේ පරිපාලක ඔබගේ උපාංගය මත තදබදය නිරීක්ෂණය කරන, ජාල ඇතුළු වීම ක්රියාත්මක කර ඇත.\n\nවැඩිදුර තොරතුරු සඳහා ඔබේ පරිපාලක අමතන්න."</string>
+ <!-- no translation found for monitoring_description_network_logging (7223505523384076027) -->
+ <skip />
<string name="monitoring_description_vpn" msgid="4445150119515393526">"ඔබ VPN සම්බන්ධතාවක් පිහිටුවීමට යෙදුමකට අවසරයක් දී ඇත.\n\nමෙම යෙදුමට ඔබේ ඊ-තැපැල්, යෙදුම්, සහ වෙබ් අඩවි ඇතුළු, ඔබගේ උපාංග සහ ජාල ක්රියාකාරකම් නිරීක්ෂණය කිරීමට හැකිය."</string>
- <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"ඔබේ කාර්ය පැතිකඩ කළමනාකරණය කරන්නේ <xliff:g id="ORGANIZATION">%1$s</xliff:g> විසිනි.\n\nඔබේ පරිපාලකට ඔබේ ඊ-තැපැල්, යෙදුම්, සහ ආරක්ෂාකාරී වෙබ් අඩවි ඇතුළු, ඔබගේ ජාල ක්රියාකාරකම් නිරීක්ෂණය කිරීමට හැකියාව ඇත.\n\nවැඩිදුර තොරතුරු සඳහා, ඔබගේ පරිපාලක අමතන්න.\n\nඔබේ ජාල ක්රියාකාරකම් නිරීක්ෂණය කිරීමට හැකි VPN සම්බන්ධතාවයකටද, ඔබ සම්බන්ධව ඇත."</string>
+ <!-- no translation found for monitoring_description_vpn_profile_owned (2958019119161161530) -->
+ <skip />
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"ඊ-තැපැල්, යෙදුම් සහ වෙබ් අඩවි ඇතුළු ඔබේ ජාල ක්රියාකාරකම් නිරීක්ෂණය කළ හැකි, <xliff:g id="APPLICATION">%1$s</xliff:g> වෙත ඔබ සම්බන්ධ වී ඇත."</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"ඊ-තැපැල්, යෙදුම් සහ වෙබ් අඩවි ඇතුළු ඔබේ පෞද්ගලික ජාල ක්රියාකාරකම් නිරීක්ෂණය කළ හැකි, <xliff:g id="APPLICATION">%1$s</xliff:g> වෙත ඔබ සම්බන්ධ වී ඇත."</string>
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"ඊ-තැපැල්, යෙදුම් සහ වෙබ් අඩවි ඇතුළු ඔබේ පෞද්ගලික ජාල ක්රියාකාරකම් නිරීක්ෂණය කළ හැකි, <xliff:g id="APPLICATION">%1$s</xliff:g> වෙත ඔබ සම්බන්ධ වී ඇත."</string>
- <string name="monitoring_description_app_work" msgid="1754325860918060897">"ඔබේ කාර්යාල පැතිකඩ කළමනාකරණය කරන්නේ <xliff:g id="ORGANIZATION">%1$s</xliff:g> විසිනි. එය ඊ-තැපැල්, යෙදුම් සහ වෙබ් අඩවි ඇතුළු ඔබේ කාර්යාල ජාල ක්රියාකාරකම් නිරීක්ෂණය කළ හැකි, <xliff:g id="APPLICATION">%2$s</xliff:g> වෙත ඔබ සම්බන්ධ වී ඇත.\n\nවැඩිදුර විස්තර සඳහා, ඔබේ පරිපාලක අමතන්න."</string>
+ <!-- no translation found for monitoring_description_app_work (7777228449969022305) -->
+ <skip />
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"ඔබේ කාර්යාල පැතිකඩ කළමනාකරණය කරන්නේ <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_disabled" msgid="7412534203633528135">"ඔබ අතින් අගුළු අරින තුරු උපකරණය අගුළු වැටි තිබේ"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"දැනුම්දීම් ඉක්මනින් ලබාගන්න"</string>
diff --git a/packages/SystemUI/res/values-sk/strings.xml b/packages/SystemUI/res/values-sk/strings.xml
index f19b2a1..9ace153 100644
--- a/packages/SystemUI/res/values-sk/strings.xml
+++ b/packages/SystemUI/res/values-sk/strings.xml
@@ -327,6 +327,12 @@
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Upozornenie pri <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
<string name="quick_settings_work_mode_label" msgid="6244915274350490429">"Pracovný režim"</string>
<string name="quick_settings_night_display_label" msgid="3577098011487644395">"Nočný režim"</string>
+ <!-- no translation found for quick_settings_nfc_label (9012153754816969325) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_off (6883274004315134333) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_on (6680317193676884311) -->
+ <skip />
<string name="recents_empty_message" msgid="808480104164008572">"Žiadne nedávne položky"</string>
<string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Vymazali ste všetko"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"Informácie o aplikácii"</string>
@@ -340,6 +346,16 @@
<string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Rozdeliť vodorovné"</string>
<string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Rozdeliť zvislé"</string>
<string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Rozdeliť vlastné"</string>
+ <!-- no translation found for recents_accessibility_dismissed (2354459747918667050) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_open (1651449827614876864) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_top (9056056469282256287) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_left (8987144699630620019) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_right (275069779299592867) -->
+ <skip />
<string-array name="recents_blacklist_array">
</string-array>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"Nabitá"</string>
@@ -420,20 +436,24 @@
<string name="disconnect_vpn" msgid="1324915059568548655">"Odpojiť sieť VPN"</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Vaše zariadenie spravuje aplikácia <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
<string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> spravuje vaše zariadenie pomocou aplikácie <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g>."</string>
- <string name="monitoring_description_do_body" msgid="6764108354701060766">"Správca môže sledovať a spravovať nastavenia, firemný prístup, aplikácie a údaje súvisiace s týmto zariadením vrátane informácií o polohe vášho zariadenia."</string>
+ <!-- no translation found for monitoring_description_do_body (3639594537660975895) -->
+ <skip />
<string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
<string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Ďalšie informácie"</string>
<string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Ste pripojený/-á k aplikácii <xliff:g id="VPN_APP">%1$s</xliff:g>, ktorá môže sledovať vašu aktivitu v sieti vrátane e-mailových správ, aplikácií a webových stránok."</string>
<string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
<string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Otvoriť Nastavenia pripojenia VPN"</string>
- <string name="monitoring_description_network_logging" msgid="3901006351911787915">"Váš správca aktivoval zapisovanie do denníka siete, ktoré sleduje premávku na vašom zariadení.\n\nĎalšie informácie vám poskytne správca."</string>
+ <!-- no translation found for monitoring_description_network_logging (7223505523384076027) -->
+ <skip />
<string name="monitoring_description_vpn" msgid="4445150119515393526">"Určitej aplikácii ste udelili povolenie nastaviť pripojenie VPN.\n\nTáto aplikácia môže sledovať vaše zariadenie a aktivitu v sieti vrátane e-mailových správ, aplikácií a webových stránok."</string>
- <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Váš pracovný profil spravuje organizácia <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nSprávca môže sledovať vašu aktivitu v sieti vrátane e-mailových správ, aplikácií a webových stránok.\n\nĎalšie informácie získate od svojho správcu.\n\nSte tiež pripojený/-á k sieti VPN, ktorá môže sledovať vašu aktivitu v sieti."</string>
+ <!-- no translation found for monitoring_description_vpn_profile_owned (2958019119161161530) -->
+ <skip />
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Ste pripojený/-á k aplikácii <xliff:g id="APPLICATION">%1$s</xliff:g>, ktorá môže sledovať vašu aktivitu v sieti vrátane e-mailových správ, aplikácií a webových stránok."</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"Ste pripojený/-á k aplikácii <xliff:g id="APPLICATION">%1$s</xliff:g>, ktorá môže sledovať vašu osobnú aktivitu v sieti vrátane e-mailových správ, aplikácií a webových stránok."</string>
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Ste pripojený/-á k aplikácii <xliff:g id="APPLICATION">%1$s</xliff:g>, ktorá môže sledovať vašu osobnú aktivitu v sieti vrátane e-mailových správ, aplikácií a webových stránok."</string>
- <string name="monitoring_description_app_work" msgid="1754325860918060897">"Váš pracovný profil spravuje organizácia <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Je pripojený k aplikácii <xliff:g id="APPLICATION">%2$s</xliff:g>, ktorá môže sledovať vašu pracovnú aktivitu v sieti vrátane e-mailových správ, aplikácií a webových stránok.\n\nĎalšie informácie získate od svojho správcu."</string>
+ <!-- no translation found for monitoring_description_app_work (7777228449969022305) -->
+ <skip />
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Váš pracovný profil spravuje organizácia <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Je pripojený k aplikácii <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, ktorá môže sledovať vašu pracovnú aktivitu v sieti vrátane e-mailových správ, aplikácií a webových stránok.\n\nSte tiež pripojený/-á k aplikácii <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, ktorá môže sledovať vašu osobnú aktivitu v sieti."</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Zariadenie zostane uzamknuté, dokým ho ručne neodomknete."</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"Získavať upozornenia rýchlejšie"</string>
diff --git a/packages/SystemUI/res/values-sl/strings.xml b/packages/SystemUI/res/values-sl/strings.xml
index 67eec2f..ec26b53 100644
--- a/packages/SystemUI/res/values-sl/strings.xml
+++ b/packages/SystemUI/res/values-sl/strings.xml
@@ -327,6 +327,12 @@
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Opozorilo – <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
<string name="quick_settings_work_mode_label" msgid="6244915274350490429">"Način za delo"</string>
<string name="quick_settings_night_display_label" msgid="3577098011487644395">"Nočna svetloba"</string>
+ <!-- no translation found for quick_settings_nfc_label (9012153754816969325) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_off (6883274004315134333) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_on (6680317193676884311) -->
+ <skip />
<string name="recents_empty_message" msgid="808480104164008572">"Ni nedavnih elementov"</string>
<string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Vse te počistili"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"Podatki o aplikaciji"</string>
@@ -340,6 +346,16 @@
<string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Razdeli vodoravno"</string>
<string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Razdeli navpično"</string>
<string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Razdeli po meri"</string>
+ <!-- no translation found for recents_accessibility_dismissed (2354459747918667050) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_open (1651449827614876864) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_top (9056056469282256287) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_left (8987144699630620019) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_right (275069779299592867) -->
+ <skip />
<string-array name="recents_blacklist_array">
</string-array>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"Akumulator napolnjen"</string>
@@ -420,20 +436,24 @@
<string name="disconnect_vpn" msgid="1324915059568548655">"Prekini povezavo z VPN-jem"</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Napravo upravlja aplikacija <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
<string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> uporablja aplikacijo <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> za upravljanje naprave."</string>
- <string name="monitoring_description_do_body" msgid="6764108354701060766">"Skrbnik lahko nadzira in upravlja nastavitve, dostop za podjetje, aplikacije, z napravo povezane podatke in podatke o lokaciji."</string>
+ <!-- no translation found for monitoring_description_do_body (3639594537660975895) -->
+ <skip />
<string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
<string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Več o tem"</string>
<string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Povezani ste z aplikacijo <xliff:g id="VPN_APP">%1$s</xliff:g>, ki lahko nadzira omrežno dejavnost, vključno z e-pošto, aplikacijami in spletnimi mesti."</string>
<string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
<string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Odpri nastavitve omrežja VPN"</string>
- <string name="monitoring_description_network_logging" msgid="3901006351911787915">"Skrbnik je vklopil beleženje omrežnega prometa, ki nadzoruje promet v napravi.\n\nČe želite več informacij, se obrnite na skrbnika."</string>
+ <!-- no translation found for monitoring_description_network_logging (7223505523384076027) -->
+ <skip />
<string name="monitoring_description_vpn" msgid="4445150119515393526">"Aplikaciji ste dovolili vzpostavitev povezave VPN.\n\nTa aplikacija lahko nadzira napravo in omrežno dejavnost, vključno z e-pošto, aplikacijami in spletnimi mesti."</string>
- <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Delovni profil upravlja organizacija <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nSkrbnik lahko nadzira omrežno dejavnost, vključno z e-pošto, aplikacijami in spletnimi mesti.\n\nČe želite več informacij, se obrnite na skrbnika.\n\nPovezani ste tudi z omrežjem VPN, ki lahko nadzira omrežno dejavnost."</string>
+ <!-- no translation found for monitoring_description_vpn_profile_owned (2958019119161161530) -->
+ <skip />
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Povezani ste z aplikacijo <xliff:g id="APPLICATION">%1$s</xliff:g>, ki lahko nadzira omrežno dejavnost, vključno z e-pošto, aplikacijami in spletnimi mesti."</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"Povezani ste z aplikacijo <xliff:g id="APPLICATION">%1$s</xliff:g>, ki lahko nadzira vašo osebno omrežno dejavnost, vključno z e-pošto, aplikacijami in spletnimi mesti."</string>
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Povezani ste z aplikacijo <xliff:g id="APPLICATION">%1$s</xliff:g>, ki lahko nadzira vašo osebno omrežno dejavnost, vključno z e-pošto, aplikacijami in spletnimi mesti."</string>
- <string name="monitoring_description_app_work" msgid="1754325860918060897">"Delovni profil upravlja organizacija <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Povezan je z aplikacijo <xliff:g id="APPLICATION">%2$s</xliff:g>, ki lahko nadzira vašo delovno omrežno dejavnost, vključno z e-pošto, aplikacijami in spletnimi mesti.\n\nČe želite več informacij, se obrnite na skrbnika."</string>
+ <!-- no translation found for monitoring_description_app_work (7777228449969022305) -->
+ <skip />
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Delovni profil upravlja organizacija <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Povezan je z aplikacijo <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, ki lahko nadzira vašo delovno omrežno dejavnost, vključno z e-pošto, aplikacijami in spletnimi mesti.\n\nPovezani ste tudi z aplikacijo <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, ki lahko nadzira vašo osebno omrežno dejavnost."</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Naprava bo ostala zaklenjena, dokler je ročno ne odklenete."</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"Hitrejše prejemanje obvestil"</string>
diff --git a/packages/SystemUI/res/values-sq/strings.xml b/packages/SystemUI/res/values-sq/strings.xml
index f4d83c9..009b0be 100644
--- a/packages/SystemUI/res/values-sq/strings.xml
+++ b/packages/SystemUI/res/values-sq/strings.xml
@@ -321,6 +321,12 @@
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Paralajmërim për kufirin prej <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
<string name="quick_settings_work_mode_label" msgid="6244915274350490429">"Modaliteti i punës"</string>
<string name="quick_settings_night_display_label" msgid="3577098011487644395">"Drita e natës"</string>
+ <!-- no translation found for quick_settings_nfc_label (9012153754816969325) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_off (6883274004315134333) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_on (6680317193676884311) -->
+ <skip />
<string name="recents_empty_message" msgid="808480104164008572">"Nuk ka asnjë artikull të fundit"</string>
<string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"I ke pastruar të gjitha"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"Informacioni i aplikacionit"</string>
@@ -334,6 +340,16 @@
<string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Ndaje horizontalisht"</string>
<string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Ndaj vertikalisht"</string>
<string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Ndaj të personalizuarën"</string>
+ <!-- no translation found for recents_accessibility_dismissed (2354459747918667050) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_open (1651449827614876864) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_top (9056056469282256287) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_left (8987144699630620019) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_right (275069779299592867) -->
+ <skip />
<string-array name="recents_blacklist_array">
</string-array>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"I ngarkuar"</string>
@@ -414,20 +430,24 @@
<string name="disconnect_vpn" msgid="1324915059568548655">"Shkëput VPN-në"</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Pajisja jote menaxhohet nga <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
<string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> përdor <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> për të menaxhuar pajisjen tënde."</string>
- <string name="monitoring_description_do_body" msgid="6764108354701060766">"Administratori yt mund të monitorojë dhe të menaxhojë cilësimet, qasjen e korporatës, aplikacionet, të dhënat në lidhje me pajisjen si dhe informacionet e vendndodhjes së pajisjes tënde."</string>
+ <!-- no translation found for monitoring_description_do_body (3639594537660975895) -->
+ <skip />
<string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
<string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Mëso më shumë"</string>
<string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Je i lidhur me aplikacionin <xliff:g id="VPN_APP">%1$s</xliff:g>, i cili mund të monitorojë aktivitetin tënd në rrjet, duke përfshirë mail-et, aplikacionet dhe sajtet e uebit."</string>
<string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
<string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Hap cilësimet e VPN-së"</string>
- <string name="monitoring_description_network_logging" msgid="3901006351911787915">"Administratori yt ka aktivizuar regjistrimin e rrjetit, i cili monitoron trafikun në pajisjen tënde.\n\nPër më shumë informacione, kontakto me administratorin."</string>
+ <!-- no translation found for monitoring_description_network_logging (7223505523384076027) -->
+ <skip />
<string name="monitoring_description_vpn" msgid="4445150119515393526">"I dhe leje një aplikacioni që të konfigurojë një lidhje VPN.\n\nKy aplikacion mund të monitorojë pajisjen tënde dhe aktivitetin e rrjetit, përfshirë mailet, aplikacionet dhe sajtet e uebit."</string>
- <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Profili yt i punës menaxhohet nga <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nAdministratori yt mund të monitorojë aktivitetin tënd të rrjetit, duke përfshirë mail-at, aplikacionet dhe faqet e internetit.\n\nPër më shumë informacion, kontakto me administratorin tënd.\n\nJe i lidhur edhe me një VPN, që mund të monitorojë aktivitetin tënd të rrjetit."</string>
+ <!-- no translation found for monitoring_description_vpn_profile_owned (2958019119161161530) -->
+ <skip />
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Je i lidhur me aplikacionin <xliff:g id="APPLICATION">%1$s</xliff:g>, i cili mund të monitorojë aktivitetin tënd në rrjet përfshirë mailet, aplikacionet dhe sajtet e uebit."</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"Je i lidhur me aplikacionin <xliff:g id="APPLICATION">%1$s</xliff:g>, i cili mund të monitorojë aktivitetin tënd personal në rrjet, përfshirë mailet, aplikacionet dhe sajtet e uebit."</string>
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Je i lidhur me aplikacionin <xliff:g id="APPLICATION">%1$s</xliff:g>, i cili mund të monitorojë aktivitetin tënd personal në rrjet, përfshirë mailet, aplikacionet dhe sajtet e uebit."</string>
- <string name="monitoring_description_app_work" msgid="1754325860918060897">"Profili yt i punës menaxhohet nga <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Ai është i lidhur me <xliff:g id="APPLICATION">%2$s</xliff:g>, i cili mund të monitorojë aktivitetin tënd të punës në rrjet, përfshirë mailet, aplikacionet dhe sajtet e uebit.\n\nPër më shumë informacione, kontakto me administratorin tënd."</string>
+ <!-- no translation found for monitoring_description_app_work (7777228449969022305) -->
+ <skip />
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Profili yt i punës menaxhohet nga <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Ai është i lidhur me <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, i cili mund të monitorojë aktivitetin tënd të punës në rrjet, përfshirë mailet, aplikacionet dhe sajtet e uebit.\n\nJe lidhur gjithashtu edhe me <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, i cili mund të monitorojë aktivitetin tënd personal në rrjet."</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Pajisje do të qëndrojë e kyçur derisa ta shkyçësh manualisht"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"Merr njoftime më shpejt"</string>
diff --git a/packages/SystemUI/res/values-sr/strings.xml b/packages/SystemUI/res/values-sr/strings.xml
index ffb5312..a82ff68 100644
--- a/packages/SystemUI/res/values-sr/strings.xml
+++ b/packages/SystemUI/res/values-sr/strings.xml
@@ -323,6 +323,12 @@
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Упозорење за <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
<string name="quick_settings_work_mode_label" msgid="6244915274350490429">"Режим рада"</string>
<string name="quick_settings_night_display_label" msgid="3577098011487644395">"Ноћно светло"</string>
+ <!-- no translation found for quick_settings_nfc_label (9012153754816969325) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_off (6883274004315134333) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_on (6680317193676884311) -->
+ <skip />
<string name="recents_empty_message" msgid="808480104164008572">"Нема недавних ставки"</string>
<string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Обрисали сте све"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"Информације о апликацији"</string>
@@ -336,6 +342,16 @@
<string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Подели хоризонтално"</string>
<string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Подели вертикално"</string>
<string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Прилагођено дељење"</string>
+ <!-- no translation found for recents_accessibility_dismissed (2354459747918667050) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_open (1651449827614876864) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_top (9056056469282256287) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_left (8987144699630620019) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_right (275069779299592867) -->
+ <skip />
<string-array name="recents_blacklist_array">
</string-array>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"Напуњена је"</string>
@@ -416,20 +432,24 @@
<string name="disconnect_vpn" msgid="1324915059568548655">"Прекини везу са VPN-ом"</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Уређајем управља <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
<string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> користи <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> за управљање уређајем."</string>
- <string name="monitoring_description_do_body" msgid="6764108354701060766">"Администратор може да надгледа подешавања, корпоративни приступ, апликације, податке повезане са уређајем и информације о локацији уређаја, као и да управља њима."</string>
+ <!-- no translation found for monitoring_description_do_body (3639594537660975895) -->
+ <skip />
<string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
<string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Сазнајте више"</string>
<string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Повезани сте са апликацијом <xliff:g id="VPN_APP">%1$s</xliff:g>, која може да надгледа активности на мрежи, укључујући имејлове, апликације и веб-сајтове."</string>
<string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
<string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Отворите подешавања VPN-а"</string>
- <string name="monitoring_description_network_logging" msgid="3901006351911787915">"Администратор је укључио евидентирање мреже, које прати саобраћај на уређају.\n\nКонтактирајте администратора за више информација."</string>
+ <!-- no translation found for monitoring_description_network_logging (7223505523384076027) -->
+ <skip />
<string name="monitoring_description_vpn" msgid="4445150119515393526">"Дали сте дозволу апликацији да подешава VPN везу.\n\nТа апликација може да надгледа активности на уређају и мрежи, укључујући имејлове, апликације и веб-сајтове."</string>
- <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Профилом за Work управља <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nАдминистратор може да надгледа активности на мрежи, укључујући имејлове, апликације и веб-сајтове.\n\nВише информација потражите од администратора.\n\nПовезани сте и на VPN, који може да надгледа активности на личној мрежи."</string>
+ <!-- no translation found for monitoring_description_vpn_profile_owned (2958019119161161530) -->
+ <skip />
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Повезани сте са апликацијом <xliff:g id="APPLICATION">%1$s</xliff:g>, која може да надгледа активности на мрежи, укључујући имејлове, апликације и веб-сајтове."</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"Повезани сте са апликацијом <xliff:g id="APPLICATION">%1$s</xliff:g>, која може да надгледа активности на личној мрежи, укључујући имејлове, апликације и веб-сајтове."</string>
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Повезани сте са апликацијом <xliff:g id="APPLICATION">%1$s</xliff:g>, која може да надгледа активности на личној мрежи, укључујући имејлове, апликације и веб-сајтове."</string>
- <string name="monitoring_description_app_work" msgid="1754325860918060897">"Профилом за Work управља <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Повезан је са апликацијом <xliff:g id="APPLICATION">%2$s</xliff:g>, која може да надгледа активности на пословној мрежи, укључујући имејлове, апликације и веб-сајтове.\n\nВише информација потражите од администратора."</string>
+ <!-- no translation found for monitoring_description_app_work (7777228449969022305) -->
+ <skip />
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Профилом за Work управља <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_disabled" msgid="7412534203633528135">"Уређај ће остати закључан док га не откључате ручно"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"Брже добијајте обавештења"</string>
diff --git a/packages/SystemUI/res/values-sv/strings.xml b/packages/SystemUI/res/values-sv/strings.xml
index 153b4c5..8c778d0 100644
--- a/packages/SystemUI/res/values-sv/strings.xml
+++ b/packages/SystemUI/res/values-sv/strings.xml
@@ -321,6 +321,12 @@
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Varning <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
<string name="quick_settings_work_mode_label" msgid="6244915274350490429">"Arbetsläge"</string>
<string name="quick_settings_night_display_label" msgid="3577098011487644395">"Nattljus"</string>
+ <!-- no translation found for quick_settings_nfc_label (9012153754816969325) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_off (6883274004315134333) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_on (6680317193676884311) -->
+ <skip />
<string name="recents_empty_message" msgid="808480104164008572">"Listan med de senaste åtgärderna är tom"</string>
<string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Du har tömt listan"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"Appinformation"</string>
@@ -334,6 +340,16 @@
<string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Dela horisontellt"</string>
<string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Dela vertikalt"</string>
<string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Dela anpassad"</string>
+ <!-- no translation found for recents_accessibility_dismissed (2354459747918667050) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_open (1651449827614876864) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_top (9056056469282256287) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_left (8987144699630620019) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_right (275069779299592867) -->
+ <skip />
<string-array name="recents_blacklist_array">
</string-array>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"Laddat"</string>
@@ -414,20 +430,24 @@
<string name="disconnect_vpn" msgid="1324915059568548655">"Koppla från VPN"</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Enheten hanteras av <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
<string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> hanterar enheten med hjälp av <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g>."</string>
- <string name="monitoring_description_do_body" msgid="6764108354701060766">"Administratören kan övervaka och hantera inställningar, företagsåtkomst, appar, data med koppling till enheten och enhetens plats."</string>
+ <!-- no translation found for monitoring_description_do_body (3639594537660975895) -->
+ <skip />
<string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
<string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Läs mer"</string>
<string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Du är ansluten till <xliff:g id="VPN_APP">%1$s</xliff:g> som kan övervaka din aktivitet på nätverket, inklusive e-postmeddelanden, appar och webbplatser."</string>
<string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
<string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Öppna VPN-inställningar"</string>
- <string name="monitoring_description_network_logging" msgid="3901006351911787915">"Administratören har aktiverat nätverksloggning, vilken övervakar trafik på enheten.\n\nKontakta administratören om du vill veta mer."</string>
+ <!-- no translation found for monitoring_description_network_logging (7223505523384076027) -->
+ <skip />
<string name="monitoring_description_vpn" msgid="4445150119515393526">"Du har gett en app behörighet att upprätta en VPN-anslutning.\n\nAppen kan bevaka aktivitet på enheten och nätverket, inklusive e-post, appar och webbplatser."</string>
- <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Jobbprofilen hanteras av <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nAdministratören kan bevaka aktiviteten på nätverket, inklusive e-post, appar och webbplatser.\n\nKontakta administratören för mer information.\n\nDu är även ansluten till ett VPN-nätverk som kan bevaka aktiviteten på nätverket."</string>
+ <!-- no translation found for monitoring_description_vpn_profile_owned (2958019119161161530) -->
+ <skip />
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Du är ansluten till <xliff:g id="APPLICATION">%1$s</xliff:g>, som kan bevaka aktivitet på nätverket, inklusive e-post, appar och webbplatser."</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"Du är ansluten till <xliff:g id="APPLICATION">%1$s</xliff:g>, som kan bevaka din privata aktivitet på nätverket, inklusive e-post, appar och webbplatser."</string>
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Du är ansluten till <xliff:g id="APPLICATION">%1$s</xliff:g> som kan övervaka din privata aktivitet på nätverket, inklusive e-postmeddelanden, appar och webbplatser."</string>
- <string name="monitoring_description_app_work" msgid="1754325860918060897">"Jobbprofilen hanteras av <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Den är ansluten till <xliff:g id="APPLICATION">%2$s</xliff:g>, som kan hantera aktivitet på arbetsplatsens nätverk, inklusive e-post, appar och webbplatser.\n\nKontakta administratören för mer information."</string>
+ <!-- no translation found for monitoring_description_app_work (7777228449969022305) -->
+ <skip />
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Jobbprofilen hanteras av <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Den är ansluten till <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, som kan hantera aktivitet på arbetsplatsens nätverk, inklusive e-post, appar och webbplatser.\n\nDu är även ansluten till <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, som kan hantera privat aktivitet på nätverket."</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Enheten förblir låst tills du låser upp den manuellt"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"Få aviseringar snabbare"</string>
diff --git a/packages/SystemUI/res/values-sw/strings.xml b/packages/SystemUI/res/values-sw/strings.xml
index 9793e12..28ecc50 100644
--- a/packages/SystemUI/res/values-sw/strings.xml
+++ b/packages/SystemUI/res/values-sw/strings.xml
@@ -321,6 +321,12 @@
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Onyo <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
<string name="quick_settings_work_mode_label" msgid="6244915274350490429">"Hali ya kazi"</string>
<string name="quick_settings_night_display_label" msgid="3577098011487644395">"Mwanga wa Usiku"</string>
+ <!-- no translation found for quick_settings_nfc_label (9012153754816969325) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_off (6883274004315134333) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_on (6680317193676884311) -->
+ <skip />
<string name="recents_empty_message" msgid="808480104164008572">"Hakuna vipengee vya hivi karibuni"</string>
<string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Umeondoa vipengee vyote"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"Maelezo ya Programu"</string>
@@ -334,6 +340,16 @@
<string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Gawanya Mlalo"</string>
<string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Gawanya Wima"</string>
<string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Maalum Iliyogawanywa"</string>
+ <!-- no translation found for recents_accessibility_dismissed (2354459747918667050) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_open (1651449827614876864) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_top (9056056469282256287) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_left (8987144699630620019) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_right (275069779299592867) -->
+ <skip />
<string-array name="recents_blacklist_array">
</string-array>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"Betri imejaa"</string>
@@ -414,20 +430,24 @@
<string name="disconnect_vpn" msgid="1324915059568548655">"Ondoa VPN"</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Kifaa chako kinadhibitiwa na <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
<string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> inatumia <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> kudhibiti kifaa chako."</string>
- <string name="monitoring_description_do_body" msgid="6764108354701060766">"Msimamizi wako anaweza kufuatilia na kudhibiti mipangilio, ufikiaji wa mashirika, programu, data inayohusiana na kifaa chako na maelezo ya eneo la kifaa chako."</string>
+ <!-- no translation found for monitoring_description_do_body (3639594537660975895) -->
+ <skip />
<string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
<string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Pata maelezo zaidi"</string>
<string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Umeunganishwa kwenye <xliff:g id="VPN_APP">%1$s</xliff:g>, ambayo inaweza kufuatilia shughuli za mtandao wako, ikiwa ni pamoja na barua pepe, programu na tovuti."</string>
<string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
<string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Fungua Mipangilio ya VPN"</string>
- <string name="monitoring_description_network_logging" msgid="3901006351911787915">"Msimamizi wako amewasha kumbukumbu ya kuingia mtandaoni ambayo huchunguza trafiki kwenye kifaa chako.\n\nIli kupata maelezo zaidi, wasiliana na msimamizi wako."</string>
+ <!-- no translation found for monitoring_description_network_logging (7223505523384076027) -->
+ <skip />
<string name="monitoring_description_vpn" msgid="4445150119515393526">"Uliruhusu programu iweke muunganisho wa VPN.\n\nProgramu hii inaweza kufuatilia shughuli za kifaa na mtandao wako, ikiwa ni pamoja na barua pepe, programu na tovuti."</string>
- <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Wasifu wako wa kazini unasimamiwa na <xliff:g id="ORGANIZATION">%1$s</xliff:g>. \n\nMsimamizi wako ana uwezo wa kufuatilia shughuli ya mtandao wako ikiwa ni pamoja na barua pepe, programu, na tovuti. \n\nKwa maelezo zaidi, wasiliana na msimamizi wako.\n\nUmeunganishwa pia kwenye VPN, ambayo inaweza kufuatilia shughuli za mtandao wako."</string>
+ <!-- no translation found for monitoring_description_vpn_profile_owned (2958019119161161530) -->
+ <skip />
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Umeunganishwa kwenye <xliff:g id="APPLICATION">%1$s</xliff:g>, ambayo inaweza kufuatilia shughuli za mtandao wako, ikiwa ni pamoja na barua pepe, programu na tovuti."</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"Umeunganishwa kwenye <xliff:g id="APPLICATION">%1$s</xliff:g>, ambayo inaweza kufuatilia shughuli za mtandao wako, ikiwa ni pamoja na barua pepe, programu na tovuti."</string>
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Umeunganishwa kwenye <xliff:g id="APPLICATION">%1$s</xliff:g>, ambayo inaweza kufuatilia shughuli za mtandao wako, ikiwa ni pamoja na barua pepe, programu na tovuti."</string>
- <string name="monitoring_description_app_work" msgid="1754325860918060897">"Wasifu wako wa kazini unasimamiwa na <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Wasifu huu umeunganishwa kwenye <xliff:g id="APPLICATION">%2$s</xliff:g>, ambayo inaweza kufuatilia shughuli za mtandao wako, ikiwa ni pamoja na barua pepe, programu, na tovuti. \n\nKwa maelezo zaidi, wasiliana na msimamizi wako."</string>
+ <!-- no translation found for monitoring_description_app_work (7777228449969022305) -->
+ <skip />
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Wasifu wako wa kazini unasimamiwa na <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Wasifu huu umeunganishwa kwenye <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, ambayo inaweza kufuatilia mtandao wako wa kazini, ikiwa ni pamoja na barua pepe, programu na tovuti. \n\n Wewe pia umeunganishwa kwenye <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, ambayo inaweza kufuatilia shughuli za mtandao wako kibinafsi."</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Kifaa kitaendelea kuwa katika hali ya kufungwa hadi utakapokifungua mwenyewe"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"Pata arifa kwa haraka"</string>
diff --git a/packages/SystemUI/res/values-ta/strings.xml b/packages/SystemUI/res/values-ta/strings.xml
index 7ef6872..34daf43 100644
--- a/packages/SystemUI/res/values-ta/strings.xml
+++ b/packages/SystemUI/res/values-ta/strings.xml
@@ -321,6 +321,12 @@
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> எச்சரிக்கை"</string>
<string name="quick_settings_work_mode_label" msgid="6244915274350490429">"பணிப் பயன்முறை"</string>
<string name="quick_settings_night_display_label" msgid="3577098011487644395">"இரவு ஒளி"</string>
+ <!-- no translation found for quick_settings_nfc_label (9012153754816969325) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_off (6883274004315134333) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_on (6680317193676884311) -->
+ <skip />
<string name="recents_empty_message" msgid="808480104164008572">"சமீபத்திய பணிகள் இல்லை"</string>
<string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"எல்லாவற்றையும் அழித்துவிட்டீர்கள்"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"பயன்பாட்டு தகவல்"</string>
@@ -334,6 +340,16 @@
<string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"கிடைமட்டமாகப் பிரி"</string>
<string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"செங்குத்தாகப் பிரி"</string>
<string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"தனிவிருப்பத்தில் பிரி"</string>
+ <!-- no translation found for recents_accessibility_dismissed (2354459747918667050) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_open (1651449827614876864) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_top (9056056469282256287) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_left (8987144699630620019) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_right (275069779299592867) -->
+ <skip />
<string-array name="recents_blacklist_array">
</string-array>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"சார்ஜ் செய்யப்பட்டது"</string>
@@ -414,20 +430,24 @@
<string name="disconnect_vpn" msgid="1324915059568548655">"VPNஐத் துண்டி"</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"உங்கள் சாதனத்தை நிர்வகிப்பது: <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
<string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"உங்கள் சாதனத்தை நிர்வகிக்க, <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> பயன்பாட்டை <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> பயன்படுத்தும்."</string>
- <string name="monitoring_description_do_body" msgid="6764108354701060766">"உங்கள் நிர்வாகியால் அமைப்புகள், நிறுவன அணுகல், பயன்பாடுகள், சாதனத்துடன் தொடர்புடைய தரவு, சாதன இருப்பிடத் தகவல் ஆகியவற்றைக் கண்காணிக்கவும் நிர்வகிக்கவும் முடியும்."</string>
+ <!-- no translation found for monitoring_description_do_body (3639594537660975895) -->
+ <skip />
<string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
<string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"மேலும் அறிக"</string>
<string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"<xliff:g id="VPN_APP">%1$s</xliff:g> உடன் இணைக்கப்பட்டுள்ளீர்கள். இந்தப் பயன்பாட்டால் மின்னஞ்சல்கள், பயன்பாடுகள், இணையதளங்கள் உட்பட உங்கள் நெட்வொர்க் செயல்பாட்டைக் கண்காணிக்க முடியும்."</string>
<string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
<string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"VPN அமைப்புகளைத் திற"</string>
- <string name="monitoring_description_network_logging" msgid="3901006351911787915">"உங்கள் நிர்வாகி நெட்வொர்க் பதிவெடுத்தலை இயக்கியுள்ளார், இது சாதனத்தில் ட்ராஃபிக்கைக் கண்காணிக்கும்.\n\nமேலும் தகவலுக்கு, உங்கள் நிர்வாகியைத் தொடர்புகொள்ளவும்."</string>
+ <!-- no translation found for monitoring_description_network_logging (7223505523384076027) -->
+ <skip />
<string name="monitoring_description_vpn" msgid="4445150119515393526">"VPN இணைப்பை அமைக்க, பயன்பாட்டிற்கு அனுமதி வழங்கியுள்ளீர்கள்.\n\nஇந்தப் பயன்பாட்டால் மின்னஞ்சல்கள், பயன்பாடுகள் மற்றும் இணையதளங்கள் உட்பட, உங்கள் சாதனத்தையும் நெட்வொர்க் செயல்பாட்டையும் கண்காணிக்க முடியும்."</string>
- <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"உங்கள் பணி சுயவிவரத்தை நிர்வகிப்பது: <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nமின்னஞ்சல்கள், பயன்பாடுகள் மற்றும் இணையதளங்கள் உட்பட உங்கள் நெட்வொர்க் செயல்பாட்டை நிர்வாகியால் கண்காணிக்க முடியும்.\n\nகூடுதல் தகவலுக்கு, நிர்வாகியைத் தொடர்புகொள்ளவும்.\n\nஉங்கள் நெட்வொர்க் செயல்பாட்டைக் கண்காணிக்கக்கூடிய VPN இலும் இணைக்கப்பட்டுள்ளீர்கள்."</string>
+ <!-- no translation found for monitoring_description_vpn_profile_owned (2958019119161161530) -->
+ <skip />
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"<xliff:g id="APPLICATION">%1$s</xliff:g> உடன் இணைக்கப்பட்டுள்ளீர்கள். இந்தப் பயன்பாட்டால், மின்னஞ்சல்கள், பயன்பாடுகள் மற்றும் இணையதளங்கள் உட்பட உங்கள் நெட்வொர்க் செயல்பாட்டைக் கண்காணிக்க முடியும்."</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"<xliff:g id="APPLICATION">%1$s</xliff:g> உடன் இணைக்கப்பட்டுள்ளீர்கள். இந்தப் பயன்பாட்டால், மின்னஞ்சல்கள், பயன்பாடுகள் மற்றும் இணையதளங்கள் உட்பட உங்கள் தனிப்பட்ட நெட்வொர்க் செயல்பாட்டைக் கண்காணிக்க முடியும்."</string>
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"<xliff:g id="APPLICATION">%1$s</xliff:g> உடன் இணைக்கப்பட்டுள்ளீர்கள். இந்தப் பயன்பாட்டால் மின்னஞ்சல்கள், பயன்பாடுகள், இணையதளங்கள் உட்பட உங்கள் தனிப்பட்ட நெட்வொர்க் செயல்பாட்டைக் கண்காணிக்க முடியும்."</string>
- <string name="monitoring_description_app_work" msgid="1754325860918060897">"உங்கள் பணி சுயவிவரத்தை <xliff:g id="ORGANIZATION">%1$s</xliff:g> நிர்வகிக்கிறது. <xliff:g id="APPLICATION">%2$s</xliff:g> உடன் இணைக்கப்பட்டதால், மின்னஞ்சல்கள், பயன்பாடுகள் மற்றும் இணையதளங்கள் உட்பட உங்கள் பணியிட நெட்வொர்க் செயல்பாட்டை அதனால் கண்காணிக்க முடியும்.\n\nகூடுதல் தகவலுக்கு, நிர்வாகியைத் தொடர்புகொள்ளவும்."</string>
+ <!-- no translation found for monitoring_description_app_work (7777228449969022305) -->
+ <skip />
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"உங்கள் பணி சுயவிவரத்தை <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_disabled" msgid="7412534203633528135">"நீங்கள் கைமுறையாகத் திறக்கும் வரை, சாதனம் பூட்டப்பட்டிருக்கும்"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"விரைவாக அறிவிப்புகளைப் பெறுதல்"</string>
diff --git a/packages/SystemUI/res/values-te/strings.xml b/packages/SystemUI/res/values-te/strings.xml
index f55d95e..681bac2 100644
--- a/packages/SystemUI/res/values-te/strings.xml
+++ b/packages/SystemUI/res/values-te/strings.xml
@@ -321,6 +321,12 @@
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> హెచ్చరిక"</string>
<string name="quick_settings_work_mode_label" msgid="6244915274350490429">"పని మోడ్"</string>
<string name="quick_settings_night_display_label" msgid="3577098011487644395">"రాత్రి కాంతి"</string>
+ <!-- no translation found for quick_settings_nfc_label (9012153754816969325) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_off (6883274004315134333) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_on (6680317193676884311) -->
+ <skip />
<string name="recents_empty_message" msgid="808480104164008572">"ఇటీవలి అంశాలు ఏవీ లేవు"</string>
<string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"మీరు అన్నింటినీ తీసివేసారు"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"అనువర్తన సమాచారం"</string>
@@ -334,6 +340,16 @@
<string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"సమతలంగా విభజించు"</string>
<string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"లంబంగా విభజించు"</string>
<string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"అనుకూలంగా విభజించు"</string>
+ <!-- no translation found for recents_accessibility_dismissed (2354459747918667050) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_open (1651449827614876864) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_top (9056056469282256287) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_left (8987144699630620019) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_right (275069779299592867) -->
+ <skip />
<string-array name="recents_blacklist_array">
</string-array>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"ఛార్జ్ చేయబడింది"</string>
@@ -414,20 +430,24 @@
<string name="disconnect_vpn" msgid="1324915059568548655">"VPNను డిస్కనెక్ట్ చేయి"</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"మీ పరికరం <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g> ద్వారా నిర్వహించబడుతోంది."</string>
<string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> మీ పరికరాన్ని నిర్వహించడానికి <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g>ని ఉపయోగిస్తుంది."</string>
- <string name="monitoring_description_do_body" msgid="6764108354701060766">"మీ నిర్వాహకులు సెట్టింగ్లు, కార్పొరేట్ ప్రాప్యత, అనువర్తనాలు, మీ పరికరం అనుబంధిత డేటా మరియు స్థాన సమాచారం పర్యవేక్షించగలరు మరియు నిర్వహించగలరు."</string>
+ <!-- no translation found for monitoring_description_do_body (3639594537660975895) -->
+ <skip />
<string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
<string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"మరింత తెలుసుకోండి"</string>
<string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"మీరు <xliff:g id="VPN_APP">%1$s</xliff:g>కి కనెక్ట్ చేయబడ్డారు, ఇది ఇమెయిల్లు, అనువర్తనాలు మరియు వెబ్సైట్లతో సహా మీ వ్యక్తిగత నెట్వర్క్ కార్యాచరణను పర్యవేక్షించగలదు."</string>
<string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
<string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"VPN సెట్టింగ్లను తెరవండి"</string>
- <string name="monitoring_description_network_logging" msgid="3901006351911787915">"మీ నిర్వాహకులు మీ పరికరంలో ట్రాఫిక్ను పర్యవేక్షించే నెట్వర్క్ లాగింగ్ను ఆన్ చేసారు.\n\nమరింత సమాచారం కోసం మీ నిర్వాహకులను సంప్రదించండి."</string>
+ <!-- no translation found for monitoring_description_network_logging (7223505523384076027) -->
+ <skip />
<string name="monitoring_description_vpn" msgid="4445150119515393526">"మీరు VPN కనెక్షన్ సెటప్ చేయడానికి ఒక అనువర్తనానికి అనుమతి ఇచ్చారు.\n\nఈ అనువర్తనం ఇమెయిల్లు, అనువర్తనాలు మరియు వెబ్సైట్లతో సహా మీ పరికరం మరియు నెట్వర్క్ కార్యాచరణను పర్యవేక్షించగలదు."</string>
- <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"మీ కార్యాలయ ప్రొఫైల్ను <xliff:g id="ORGANIZATION">%1$s</xliff:g> నిర్వహిస్తోంది.\n\nమీ నిర్వాహకుడు ఇమెయిల్లు, అనువర్తనాలు మరియు వెబ్సైట్లతో సహా మీ నెట్వర్క్ కార్యాచరణను పర్యవేక్షించగలరు.\n\nమరింత సమాచారం కోసం, మీ నిర్వాహకుడిని సంప్రదించండి.\n\nమీరు VPNకి కూడా కనెక్ట్ చేయబడ్డారు, ఇది మీ నెట్వర్క్ కార్యాచరణను పర్యవేక్షించగలదు."</string>
+ <!-- no translation found for monitoring_description_vpn_profile_owned (2958019119161161530) -->
+ <skip />
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"మీరు <xliff:g id="APPLICATION">%1$s</xliff:g>కి కనెక్ట్ చేయబడ్డారు, ఇది ఇమెయిల్లు, అనువర్తనాలు మరియు వెబ్సైట్లతో సహా మీ నెట్వర్క్ కార్యాచరణను పర్యవేక్షించగలదు."</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"మీరు <xliff:g id="APPLICATION">%1$s</xliff:g>కి కనెక్ట్ చేయబడ్డారు, ఇది ఇమెయిల్లు, అనువర్తనాలు మరియు వెబ్సైట్లతో సహా మీ వ్యక్తిగత నెట్వర్క్ కార్యాచరణను పర్యవేక్షించగలదు."</string>
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"మీరు <xliff:g id="APPLICATION">%1$s</xliff:g>కి కనెక్ట్ చేయబడ్డారు, ఇది ఇమెయిల్లు, అనువర్తనాలు మరియు వెబ్సైట్లతో సహా మీ వ్యక్తిగత నెట్వర్క్ కార్యాచరణను పర్యవేక్షించగలదు."</string>
- <string name="monitoring_description_app_work" msgid="1754325860918060897">"మీ కార్యాలయ ప్రొఫైల్ను <xliff:g id="ORGANIZATION">%1$s</xliff:g> నిర్వహిస్తోంది. అలాగే, మీ కార్యాలయ ప్రొఫైల్ <xliff:g id="APPLICATION">%2$s</xliff:g>కి కనెక్ట్ చేయబడింది, ఇది ఇమెయిల్లు, అనువర్తనాలు మరియు వెబ్సైట్లతో సహా మీ కార్యాలయ నెట్వర్క్ కార్యాచరణను పర్యవేక్షించగలదు.\n\nమరింత సమాచారం కోసం, మీ నిర్వాహకుడిని సంప్రదించండి."</string>
+ <!-- no translation found for monitoring_description_app_work (7777228449969022305) -->
+ <skip />
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"మీ కార్యాలయ ప్రొఫైల్ను <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_disabled" msgid="7412534203633528135">"మీరు మాన్యువల్గా అన్లాక్ చేస్తే మినహా పరికరం లాక్ చేయబడి ఉంటుంది"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"నోటిఫికేషన్లను వేగంగా పొందండి"</string>
diff --git a/packages/SystemUI/res/values-th/strings.xml b/packages/SystemUI/res/values-th/strings.xml
index 0e18876..230c258 100644
--- a/packages/SystemUI/res/values-th/strings.xml
+++ b/packages/SystemUI/res/values-th/strings.xml
@@ -321,6 +321,12 @@
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"คำเตือน <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
<string name="quick_settings_work_mode_label" msgid="6244915274350490429">"โหมดการทำงาน"</string>
<string name="quick_settings_night_display_label" msgid="3577098011487644395">"แสงตอนกลางคืน"</string>
+ <!-- no translation found for quick_settings_nfc_label (9012153754816969325) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_off (6883274004315134333) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_on (6680317193676884311) -->
+ <skip />
<string name="recents_empty_message" msgid="808480104164008572">"ไม่มีรายการล่าสุด"</string>
<string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"คุณได้ล้างทุกอย่างแล้ว"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"ข้อมูลแอปพลิเคชัน"</string>
@@ -334,6 +340,16 @@
<string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"แยกในแนวนอน"</string>
<string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"แยกในแนวตั้ง"</string>
<string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"แยกแบบกำหนดเอง"</string>
+ <!-- no translation found for recents_accessibility_dismissed (2354459747918667050) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_open (1651449827614876864) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_top (9056056469282256287) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_left (8987144699630620019) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_right (275069779299592867) -->
+ <skip />
<string-array name="recents_blacklist_array">
</string-array>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"ชาร์จแล้ว"</string>
@@ -414,20 +430,24 @@
<string name="disconnect_vpn" msgid="1324915059568548655">"ยกเลิกการเชื่อมต่อ VPN"</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"อุปกรณ์ของคุณได้รับการจัดการโดย <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>"</string>
<string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> ใช้ <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> เพื่อจัดการอุปกรณ์"</string>
- <string name="monitoring_description_do_body" msgid="6764108354701060766">"ผู้ดูแลระบบของคุณสามารถตรวจสอบและจัดการการตั้งค่า การเข้าถึงของบริษัท แอป และข้อมูลที่เชื่อมโยงกับอุปกรณ์ และข้อมูลตำแหน่งของอุปกรณ์ด้วย"</string>
+ <!-- no translation found for monitoring_description_do_body (3639594537660975895) -->
+ <skip />
<string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
<string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"เรียนรู้เพิ่มเติม"</string>
<string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"คุณเชื่อมต่อกับ <xliff:g id="VPN_APP">%1$s</xliff:g> ซึ่งสามารถตรวจสอบกิจกรรมในเครือข่ายของคุณ รวมถึงอีเมล แอป และเว็บไซต์ได้"</string>
<string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
<string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"เปิดการตั้งค่า VPN"</string>
- <string name="monitoring_description_network_logging" msgid="3901006351911787915">"ผู้ดูแลระบบของคุณเปิดการทำบันทึกเครือข่าย ซึ่งจะติดตามดูการรับส่งข้อมูลบนอุปกรณ์ \n\nหากต้องการข้อมูลเพิ่มเติม ให้ติดต่อผู้ดูแลระบบของคุณ"</string>
+ <!-- no translation found for monitoring_description_network_logging (7223505523384076027) -->
+ <skip />
<string name="monitoring_description_vpn" msgid="4445150119515393526">"คุณได้ให้สิทธิ์แอปในการตั้งค่าการเชื่อมต่อ VPN\n\nแอปนี้จะสามารถตรวจสอบอุปกรณ์และกิจกรรมในเครือข่าย รวมถึงอีเมล แอป และเว็บไซต์ได้"</string>
- <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"โปรไฟล์งานได้รับการจัดการโดย <xliff:g id="ORGANIZATION">%1$s</xliff:g>\n\nผู้ดูแลระบบของคุณสามารถตรวจสอบกิจกรรมในเครือข่ายรวมถึงอีเมล แอป และเว็บไซต์ได้\n\nสำหรับข้อมูลเพิ่มเติม โปรดติดต่อผู้ดูแลระบบ\n\nนอกจากนี้คุณยังมีการเชื่อมต่อ VPN ซึ่งสามารถตรวจสอบกิจกรรมในเครือข่ายของคุณ"</string>
+ <!-- no translation found for monitoring_description_vpn_profile_owned (2958019119161161530) -->
+ <skip />
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"คุณเชื่อมต่อกับ <xliff:g id="APPLICATION">%1$s</xliff:g> ซึ่งสามารถตรวจสอบกิจกรรมในเครือข่ายของคุณ รวมถึงอีเมล แอป และเว็บไซต์ได้"</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"คุณเชื่อมต่อกับ <xliff:g id="APPLICATION">%1$s</xliff:g> ซึ่งสามารถตรวจสอบกิจกรรมในเครือข่ายส่วนตัวของคุณ รวมถึงอีเมล แอป และเว็บไซต์ได้"</string>
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"คุณเชื่อมต่อกับ <xliff:g id="APPLICATION">%1$s</xliff:g> ซึ่งสามารถตรวจสอบกิจกรรมในเครือข่ายส่วนตัวของคุณ รวมถึงอีเมล แอป และเว็บไซต์ได้"</string>
- <string name="monitoring_description_app_work" msgid="1754325860918060897">"โปรไฟล์งานได้รับการจัดการโดย <xliff:g id="ORGANIZATION">%1$s</xliff:g> โดยมีการเชื่อมต่อกับ <xliff:g id="APPLICATION">%2$s</xliff:g> ซึ่งสามารถตรวจสอบกิจกรรมในเครือข่าย รวมถึงอีเมล แอป และเว็บไซต์ได้\n\nสำหรับข้อมูลเพิ่มเติม โปรดติดต่อผู้ดูแลระบบ"</string>
+ <!-- no translation found for monitoring_description_app_work (7777228449969022305) -->
+ <skip />
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"โปรไฟล์งานได้รับการจัดการโดย <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_disabled" msgid="7412534203633528135">"อุปกรณ์จะล็อกจนกว่าคุณจะปลดล็อกด้วยตนเอง"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"รับการแจ้งเตือนเร็วขึ้น"</string>
diff --git a/packages/SystemUI/res/values-tl/strings.xml b/packages/SystemUI/res/values-tl/strings.xml
index 0e01e9c..7bd443c 100644
--- a/packages/SystemUI/res/values-tl/strings.xml
+++ b/packages/SystemUI/res/values-tl/strings.xml
@@ -321,6 +321,12 @@
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Babala sa <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
<string name="quick_settings_work_mode_label" msgid="6244915274350490429">"Work mode"</string>
<string name="quick_settings_night_display_label" msgid="3577098011487644395">"Night Light"</string>
+ <!-- no translation found for quick_settings_nfc_label (9012153754816969325) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_off (6883274004315134333) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_on (6680317193676884311) -->
+ <skip />
<string name="recents_empty_message" msgid="808480104164008572">"Walang mga kamakailang item"</string>
<string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Na-clear mo ang lahat"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"Impormasyon ng Application"</string>
@@ -334,6 +340,16 @@
<string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Split Horizontal"</string>
<string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Split Vertical"</string>
<string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Split Custom"</string>
+ <!-- no translation found for recents_accessibility_dismissed (2354459747918667050) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_open (1651449827614876864) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_top (9056056469282256287) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_left (8987144699630620019) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_right (275069779299592867) -->
+ <skip />
<string-array name="recents_blacklist_array">
</string-array>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"Nasingil na"</string>
@@ -414,20 +430,24 @@
<string name="disconnect_vpn" msgid="1324915059568548655">"Idiskonekta ang VPN"</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Pinamamahalaan ng <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g> ang iyong device."</string>
<string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"Ginagamit ng <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> ang <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> upang pamahalaan ang iyong device."</string>
- <string name="monitoring_description_do_body" msgid="6764108354701060766">"Masusubaybayan at mapapamahalaan ng admin mo ang mga setting, pangkorporasyong access, app, data sa device at impormasyon ng lokasyon ng device mo."</string>
+ <!-- no translation found for monitoring_description_do_body (3639594537660975895) -->
+ <skip />
<string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
<string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Matuto pa"</string>
<string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Kumonekta ka sa <xliff:g id="VPN_APP">%1$s</xliff:g>, na maaaring sumubaybay sa iyong aktibidad sa network, kasama ang mga email, app at website."</string>
<string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
<string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Buksan ang Mga Setting ng VPN"</string>
- <string name="monitoring_description_network_logging" msgid="3901006351911787915">"Na-on ng iyong admin ang pag-log sa network, na sumusubaybay sa trapiko sa device mo.\n\nPara sa higit pang impormasyon, makipag-ugnayan sa iyong admin."</string>
+ <!-- no translation found for monitoring_description_network_logging (7223505523384076027) -->
+ <skip />
<string name="monitoring_description_vpn" msgid="4445150119515393526">"Nagbigay ka ng pahintulot sa app upang mag-set up ng VPN na koneksyon.\n\nMaaaring subaybayan ng app na ito ang iyong aktibidad sa device at network, kabilang ang mga email, app at website."</string>
- <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Pinapamahalaan ang iyong profile ng <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nMay kakayahan ang iyong administrator sa pagsubaybay ng iyong aktibidad sa network kabilang ang mga email, app at website.\n\nPara sa higit pang impormasyon, makipag-ugnayan sa iyong administrator.\n\nNakakonekta ka rin sa isang VPN, na maaaring sumubaybay sa iyong aktibidad sa network."</string>
+ <!-- no translation found for monitoring_description_vpn_profile_owned (2958019119161161530) -->
+ <skip />
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Nakakonekta ka sa <xliff:g id="APPLICATION">%1$s</xliff:g>, na maaaring sumubaybay sa iyong aktibidad sa network kabilang ang mga email, app at website."</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"Nakakonekta ka sa <xliff:g id="APPLICATION">%1$s</xliff:g>, na maaaring sumubaybay sa iyong personal na aktibidad sa network, kabilang ang mga email, app at website."</string>
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Nakakonekta ka sa <xliff:g id="APPLICATION">%1$s</xliff:g>, na maaaring sumubaybay sa aktibidad sa iyong personal na network, kabilang ang mga email, app at website."</string>
- <string name="monitoring_description_app_work" msgid="1754325860918060897">"Ang iyong profile sa trabaho ay pinapamahalaan ng <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Nakakonekta ito sa <xliff:g id="APPLICATION">%2$s</xliff:g>, na maaaring sumubaybay sa iyong aktibidad sa network, kabilang ang mga email, app at website.\n\nPara sa higit pang impormasyon, makipag-ugnayan sa iyong administrator."</string>
+ <!-- no translation found for monitoring_description_app_work (7777228449969022305) -->
+ <skip />
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Ang iyong profile sa trabaho ay pinapamahalaan ng <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Nakakonekta ito sa <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, na maaaring sumubaybay sa iyong aktibidad sa network, kabilang ang mga email, app at website.\n\nNakakonekta ka rin sa <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, na maaaring sumubaybay sa iyong personal na aktibidad sa network."</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Mananatiling naka-lock ang device hanggang sa manu-mano mong i-unlock"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"Kunin ang notification nang mas mabilis"</string>
diff --git a/packages/SystemUI/res/values-tr/strings.xml b/packages/SystemUI/res/values-tr/strings.xml
index 9987f94..f6b42c9 100644
--- a/packages/SystemUI/res/values-tr/strings.xml
+++ b/packages/SystemUI/res/values-tr/strings.xml
@@ -321,6 +321,12 @@
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> uyarısı"</string>
<string name="quick_settings_work_mode_label" msgid="6244915274350490429">"Çalışma modu"</string>
<string name="quick_settings_night_display_label" msgid="3577098011487644395">"Gece Işığı"</string>
+ <!-- no translation found for quick_settings_nfc_label (9012153754816969325) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_off (6883274004315134333) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_on (6680317193676884311) -->
+ <skip />
<string name="recents_empty_message" msgid="808480104164008572">"Yeni öğe yok"</string>
<string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Her şeyi sildiniz"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"Uygulama Bilgileri"</string>
@@ -334,6 +340,16 @@
<string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Yatay Ayırma"</string>
<string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Dikey Ayırma"</string>
<string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Özel Ayırma"</string>
+ <!-- no translation found for recents_accessibility_dismissed (2354459747918667050) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_open (1651449827614876864) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_top (9056056469282256287) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_left (8987144699630620019) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_right (275069779299592867) -->
+ <skip />
<string-array name="recents_blacklist_array">
</string-array>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"Ödeme alındı"</string>
@@ -414,20 +430,24 @@
<string name="disconnect_vpn" msgid="1324915059568548655">"VPN bağlantısını kes"</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Cihazınız <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g> tarafından yönetiliyor."</string>
<string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>, cihazınızı yönetmek için <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> kullanıyor."</string>
- <string name="monitoring_description_do_body" msgid="6764108354701060766">"Yöneticiniz ayarları, kurumsal erişimi, uygulamaları, cihazınızla ilişkilendirilen verileri ve cihazınızın konum bilgilerini takip edip yönetebilir."</string>
+ <!-- no translation found for monitoring_description_do_body (3639594537660975895) -->
+ <skip />
<string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
<string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Daha fazla bilgi"</string>
<string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"E-postalarınız, uygulamalarınız ve web siteleriniz de dahil olmak üzere ağ etkinliğinizi takip edebilen <xliff:g id="VPN_APP">%1$s</xliff:g> ağına bağlısınız."</string>
<string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
<string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"VPN Ayarlarını aç"</string>
- <string name="monitoring_description_network_logging" msgid="3901006351911787915">"Yöneticiniz,cihazınızdaki trafiği izleyen ağ günlük kaydını açtı.\n\nDaha fazla bilgi için yöneticinizle iletişim kurun."</string>
+ <!-- no translation found for monitoring_description_network_logging (7223505523384076027) -->
+ <skip />
<string name="monitoring_description_vpn" msgid="4445150119515393526">"VPN bağlantısı kurması için bir uygulamaya izin verdiniz.\n\nBu uygulama, cihazınızın yanı sıra e-postalarınız, uygulamalarınız ve web siteleriniz dahil olmak üzere ağ etkinliğinizi izleyebilir."</string>
- <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Cihazınız <xliff:g id="ORGANIZATION">%1$s</xliff:g> tarafından yönetiliyor.\n\nYöneticiniz; e-postalarınız, uygulamalarınız ve web siteleriniz dahil olmak üzere ağ etkinliğinizi izleyebilir.\n\nDaha fazla bilgi edinmek için yöneticinizle iletişim kurun.\n\nAyrıca ağ etkinliğinizi izleyebilen bir VPN\'ye bağlısınız."</string>
+ <!-- no translation found for monitoring_description_vpn_profile_owned (2958019119161161530) -->
+ <skip />
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"E-postalarınız, uygulamalarınız ve web siteleriniz dahil olmak üzere ağ etkinliğinizi izleyebilen <xliff:g id="APPLICATION">%1$s</xliff:g> uygulamasına bağlısınız."</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"E-postalarınız, uygulamalarınız ve web siteleriniz dahil olmak üzere kişisel ağ etkinliğinizi izleyebilen <xliff:g id="APPLICATION">%1$s</xliff:g> uygulamasına bağlısınız."</string>
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"E-postalarınız, uygulamalarınız ve web siteleriniz dahil olmak üzere kişisel ağ etkinliğinizi izleyebilen <xliff:g id="APPLICATION">%1$s</xliff:g> uygulamasına bağlısınız."</string>
- <string name="monitoring_description_app_work" msgid="1754325860918060897">"İş profiliniz <xliff:g id="ORGANIZATION">%1$s</xliff:g> tarafından yönetiliyor. E-postalarınız, uygulamalarınız ve web siteleriniz dahil olmak üzere ağ etkinliğinizi izleyebilen <xliff:g id="APPLICATION">%2$s</xliff:g> uygulamasına bağlı.\n\nDaha fazla bilgi için yöneticinizle iletişim kurun."</string>
+ <!-- no translation found for monitoring_description_app_work (7777228449969022305) -->
+ <skip />
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"İş profiliniz <xliff:g id="ORGANIZATION">%1$s</xliff:g> tarafından yönetiliyor. E-postalarınız, uygulamalarınız ve web siteleriniz dahil olmak üzere ağ etkinliğinizi izleyebilen <xliff:g id="APPLICATION_WORK">%2$s</xliff:g> uygulamasına bağlı.\n\n Ayrıca kişisel ağ etkinliğinizi izleyebilen <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g> uygulamasına bağlısınız."</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Cihazınızın kilidini manuel olarak açmadıkça cihaz kilitli kalacak"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"Bildirimleri daha hızlı alın"</string>
diff --git a/packages/SystemUI/res/values-uk/strings.xml b/packages/SystemUI/res/values-uk/strings.xml
index 57b8d18..5d58046 100644
--- a/packages/SystemUI/res/values-uk/strings.xml
+++ b/packages/SystemUI/res/values-uk/strings.xml
@@ -327,6 +327,12 @@
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Застереження: <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
<string name="quick_settings_work_mode_label" msgid="6244915274350490429">"Робочий режим"</string>
<string name="quick_settings_night_display_label" msgid="3577098011487644395">"Нічний режим"</string>
+ <!-- no translation found for quick_settings_nfc_label (9012153754816969325) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_off (6883274004315134333) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_on (6680317193676884311) -->
+ <skip />
<string name="recents_empty_message" msgid="808480104164008572">"Немає нещодавніх завдань"</string>
<string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Ви очистили все"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"Інформація про додаток"</string>
@@ -340,6 +346,16 @@
<string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Розділити горизонтально"</string>
<string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Розділити вертикально"</string>
<string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Розділити (власний варіант)"</string>
+ <!-- no translation found for recents_accessibility_dismissed (2354459747918667050) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_open (1651449827614876864) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_top (9056056469282256287) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_left (8987144699630620019) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_right (275069779299592867) -->
+ <skip />
<string-array name="recents_blacklist_array">
</string-array>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"Заряджено"</string>
@@ -420,20 +436,24 @@
<string name="disconnect_vpn" msgid="1324915059568548655">"Від’єднатися від мережі VPN"</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Вашим пристроєм керує додаток <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
<string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"Компанія <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> керує вашим пристроєм за допомогою додатка <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g>."</string>
- <string name="monitoring_description_do_body" msgid="6764108354701060766">"Адміністратор може відстежувати й контролювати налаштування, корпоративний доступ, додатки, дані на пристрої та дані про місцезнаходження пристрою."</string>
+ <!-- no translation found for monitoring_description_do_body (3639594537660975895) -->
+ <skip />
<string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
<string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Докладніше"</string>
<string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Під’єднано додаток <xliff:g id="VPN_APP">%1$s</xliff:g>, який може відстежувати вашу активність у мережі, як-от доступ до електронної пошти, додатків і веб-сайтів."</string>
<string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
<string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Відкрити налаштування мережі VPN"</string>
- <string name="monitoring_description_network_logging" msgid="3901006351911787915">"Ваш адміністратор увімкнув реєстрацію в мережі, під час якої на вашому пристрої відстежується трафік.\n\nЩоб дізнатися більше, зв’яжіться зі своїм адміністратором."</string>
+ <!-- no translation found for monitoring_description_network_logging (7223505523384076027) -->
+ <skip />
<string name="monitoring_description_vpn" msgid="4445150119515393526">"Ви дозволили додатку під’єднуватися до мережі VPN.\n\nЦей додаток може відстежувати вашу активність на пристрої та в мережі, зокрема в електронній пошті, додатках і на веб-сайтах."</string>
- <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Вашим пристроєм керує організація <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nАдміністратор може відстежувати вашу активність у мережі, зокрема в електронній пошті, додатках і на веб-сайтах.\n\nЗв’яжіться з адміністратором, щоб дізнатися більше.\n\nПристрій під’єднано до мережі VPN, у якій ваша активність може відстежуватись."</string>
+ <!-- no translation found for monitoring_description_vpn_profile_owned (2958019119161161530) -->
+ <skip />
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Ваш профіль під’єднано до додатка <xliff:g id="APPLICATION">%1$s</xliff:g>, який може відстежувати вашу активність у мережі, зокрема в електронній пошті, додатках і на веб-сайтах."</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"Ваш профіль під’єднано до додатка <xliff:g id="APPLICATION">%1$s</xliff:g>, який може відстежувати вашу особисту активність у мережі, зокрема в електронній пошті, додатках і на веб-сайтах."</string>
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Ваш профіль під’єднано до додатка <xliff:g id="APPLICATION">%1$s</xliff:g>, який може відстежувати вашу особисту активність у мережі, зокрема доступ до електронної пошти, додатків і веб-сайтів."</string>
- <string name="monitoring_description_app_work" msgid="1754325860918060897">"Вашим робочим профілем керує <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Профіль під’єднано до додатка <xliff:g id="APPLICATION">%2$s</xliff:g>, який може відстежувати вашу робочу активність у мережі, зокрема в електронній пошті, додатках і на веб-сайтах.\n\nЗв’яжіться з адміністратором, щоб дізнатися більше."</string>
+ <!-- no translation found for monitoring_description_app_work (7777228449969022305) -->
+ <skip />
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Вашим робочим профілем керує <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_disabled" msgid="7412534203633528135">"Пристрій залишатиметься заблокованим, доки ви не розблокуєте його вручну"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"Швидше отримуйте сповіщення"</string>
diff --git a/packages/SystemUI/res/values-ur/strings.xml b/packages/SystemUI/res/values-ur/strings.xml
index 50170b8..53c67e7 100644
--- a/packages/SystemUI/res/values-ur/strings.xml
+++ b/packages/SystemUI/res/values-ur/strings.xml
@@ -321,6 +321,12 @@
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> وارننگ"</string>
<string name="quick_settings_work_mode_label" msgid="6244915274350490429">"کام موڈ"</string>
<string name="quick_settings_night_display_label" msgid="3577098011487644395">"نائٹ لائٹ"</string>
+ <!-- no translation found for quick_settings_nfc_label (9012153754816969325) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_off (6883274004315134333) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_on (6680317193676884311) -->
+ <skip />
<string name="recents_empty_message" msgid="808480104164008572">"کوئی حالیہ آئٹم نہیں"</string>
<string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"آپ نے سب کچھ صاف کر دیا ہے"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"ایپلیکیشن کی معلومات"</string>
@@ -334,6 +340,16 @@
<string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"بلحاظ افقی الگ کریں"</string>
<string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"بلحاظ عمودی الگ کریں"</string>
<string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"بلحاظ حسب ضرورت الگ کریں"</string>
+ <!-- no translation found for recents_accessibility_dismissed (2354459747918667050) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_open (1651449827614876864) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_top (9056056469282256287) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_left (8987144699630620019) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_right (275069779299592867) -->
+ <skip />
<string-array name="recents_blacklist_array">
</string-array>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"چارج ہوگئی"</string>
@@ -414,20 +430,24 @@
<string name="disconnect_vpn" msgid="1324915059568548655">"VPN کو غیر منسلک کریں"</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"آپ کا آلہ <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g> کے زیر انتظام ہے۔"</string>
<string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> آپ کے آلہ کے نظم کیلئے <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> استعمال کرتا ہے۔"</string>
- <string name="monitoring_description_do_body" msgid="6764108354701060766">"آپ کا منتظم ترتیبات، کارپوریٹ رسائی، ایپس، آپ کے آلہ سے وابستہ ڈیٹا اور آپ کے آلہ کے مقام کی معلومات کو مانیٹر اور ان کا نظم کر سکتا ہے۔"</string>
+ <!-- no translation found for monitoring_description_do_body (3639594537660975895) -->
+ <skip />
<string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
<string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"مزید جانیں"</string>
<string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"آپ <xliff:g id="VPN_APP">%1$s</xliff:g> سے منسلک ہیں جو ای میلز، ایپس اور ویب سائٹس سمیت آپ کے نیٹ ورک کی سرگرمی مانیٹر کر سکتی ہے۔"</string>
<string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
<string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"VPN کی ترتیبات کھولیں"</string>
- <string name="monitoring_description_network_logging" msgid="3901006351911787915">"آپ کے ایڈمن نے نیٹ ورک لاگنگ آن کر دی ہے، جو آپ کے آلہ پر ٹریفک کو مانیٹر کرتی ہے۔\n\nمزید معلومات کیلئے اپنے ایڈمن سے رابطہ کریں۔"</string>
+ <!-- no translation found for monitoring_description_network_logging (7223505523384076027) -->
+ <skip />
<string name="monitoring_description_vpn" msgid="4445150119515393526">"آپ نے ایک ایپ کو VPN کنکشن ترتیب دینے کی اجازت دی ہے۔\n\nیہ ایپ ای میلز، ایپس اور ویب سائٹس سمیت آپ کے آلہ اور نیٹ ورک کی سرگرمی مانیٹر کر سکتی ہے۔"</string>
- <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"آپ کا دفتری پروفائل <xliff:g id="ORGANIZATION">%1$s</xliff:g> کے زیر انتظام ہے۔\n\nآپ کا منتظم ای میلز، ایپس اور ویب سائٹس سیمت آپ کے نیٹ ورک کی سرگرمی مانیٹر کر سکتا ہے۔\n\nمزید معلومات کیلئے اپنے منتظم سے رابطہ کریں۔\n\nآپ ایک VPN سے بھی منسلک ہیں، جو آپ کے نیٹ ورک کی سرگرمی مانیٹر کر سکتا ہے۔"</string>
+ <!-- no translation found for monitoring_description_vpn_profile_owned (2958019119161161530) -->
+ <skip />
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"آپ <xliff:g id="APPLICATION">%1$s</xliff:g> سے منسلک ہیں، جو ای میلز، ایپس اور ویب سائٹس سمیت آپ کے نیٹ ورک کی سرگرمی مانیٹر کر سکتی ہے۔"</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"آپ <xliff:g id="APPLICATION">%1$s</xliff:g> سے منسلک ہیں، جو آپ کے نجی نیٹ ورک کی سرگرمی سمیت ای میلز، ایپس اور ویب سائٹس مانیٹر کر سکتی ہے۔"</string>
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"آپ <xliff:g id="APPLICATION">%1$s</xliff:g> سے منسلک ہیں، جو ای میلز، ایپس اور ویب سائٹس سمیت آپ کے نجی نیٹ ورک کی سرگرمی مانیٹر کر سکتی ہے۔"</string>
- <string name="monitoring_description_app_work" msgid="1754325860918060897">"آپ کا دفتری پروفائل <xliff:g id="ORGANIZATION">%1$s</xliff:g> کے زیر انتظام ہے۔ یہ <xliff:g id="APPLICATION">%2$s</xliff:g> سے منسلک ہے، جو ای میلز، ایپس اور ویب سائٹس سمیت آپ کے نیٹ ورک کی سرگرمی مانیٹر کر سکتی ہے۔\n\nمزید معلومات کیلئے اپنے منتظم سے رابطہ کریں۔"</string>
+ <!-- no translation found for monitoring_description_app_work (7777228449969022305) -->
+ <skip />
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"آپ کا دفتری پروفائل <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_disabled" msgid="7412534203633528135">"آلہ اس وقت تک مقفل رہے گا جب تک آپ دستی طور پر اسے غیر مقفل نہ کریں"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"تیزی سے اطلاعات حاصل کریں"</string>
diff --git a/packages/SystemUI/res/values-uz/strings.xml b/packages/SystemUI/res/values-uz/strings.xml
index fba46753..9ea82d6 100644
--- a/packages/SystemUI/res/values-uz/strings.xml
+++ b/packages/SystemUI/res/values-uz/strings.xml
@@ -323,6 +323,12 @@
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Ogohlantirish: <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
<string name="quick_settings_work_mode_label" msgid="6244915274350490429">"Ish rejimi"</string>
<string name="quick_settings_night_display_label" msgid="3577098011487644395">"Tungi rejim"</string>
+ <!-- no translation found for quick_settings_nfc_label (9012153754816969325) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_off (6883274004315134333) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_on (6680317193676884311) -->
+ <skip />
<string name="recents_empty_message" msgid="808480104164008572">"Hozircha hech narsa yo‘q"</string>
<string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Hammasi o‘chirildi"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"Ilova haqida ma’lumot"</string>
@@ -336,6 +342,16 @@
<string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Gorizontal yo‘nalishda bo‘lish"</string>
<string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Vertikal yo‘nalishda bo‘lish"</string>
<string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Boshqa usulda bo‘lish"</string>
+ <!-- no translation found for recents_accessibility_dismissed (2354459747918667050) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_open (1651449827614876864) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_top (9056056469282256287) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_left (8987144699630620019) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_right (275069779299592867) -->
+ <skip />
<string-array name="recents_blacklist_array">
</string-array>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"Batareya quvvati to‘ldi"</string>
@@ -416,20 +432,24 @@
<string name="disconnect_vpn" msgid="1324915059568548655">"VPN ulanishini uzish"</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Qurilmangiz <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g> tomonidan boshqariladi."</string>
<string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> qurilmangizni boshqarish uchun <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> ilovasidan foydalanadi."</string>
- <string name="monitoring_description_do_body" msgid="6764108354701060766">"Administratoringiz qurilmangiz bilan bog‘liq sozlamalar, korporativ kirish huquqi, ilova va ma’lumotlarni hamda qurilmangizning joylashuv axborotini kuzatishi va boshqarishi mumkin."</string>
+ <!-- no translation found for monitoring_description_do_body (3639594537660975895) -->
+ <skip />
<string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
<string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Batafsil"</string>
<string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"<xliff:g id="VPN_APP">%1$s</xliff:g> ilovasi ishga tushirilgan. U internetdagi harakatlaringiz, jumladan, e-pochta, ilova va veb-saytlardagi xatti-harakatlaringizni kuzatishi mumkin."</string>
<string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
<string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"VPN sozlamalarini ochish"</string>
- <string name="monitoring_description_network_logging" msgid="3901006351911787915">"Administrator qurilmangizdagi trafikni nazorat qiluvchi tarmoq jurnalini yoqdi.\n\nBatafsil ma’lumot olish uchun administratoringizga murojaat qiling."</string>
+ <!-- no translation found for monitoring_description_network_logging (7223505523384076027) -->
+ <skip />
<string name="monitoring_description_vpn" msgid="4445150119515393526">"Siz ilovaga VPN tarmog‘iga ulanishga ruxsat bergansiz.\n\nUshbu ilova qurilmangiz va internetdagi harakatlaringizni, jumladan, e-pochta, ilovalar va veb-saytlardagi xatti-harakatlaringizni kuzatishi mumkin."</string>
- <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Sizning ishchi profilingiz <xliff:g id="ORGANIZATION">%1$s</xliff:g> tomonidan boshqariladi.\n\nAdministrator internetdagi harakatlaringizni, jumladan, e-pochta, ilova va xavfsiz veb-saytlar bilan ishlashingizni kuzatishi mumkin.\n\nBatafsil ma’lumot olish uchun administrator bilan bog‘laning.\n\nShuningdek, siz VPN tarmog‘iga ham ulangansiz. U internetdagi harakatlaringizni kuzatishi mumkin."</string>
+ <!-- no translation found for monitoring_description_vpn_profile_owned (2958019119161161530) -->
+ <skip />
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"<xliff:g id="APPLICATION">%1$s</xliff:g> ilovasi ishga tushirilgan. U internetdagi harakatlaringiz, jumladan, e-pochta, ilova va veb-saytlardagi xatti-harakatlaringizni kuzatishi mumkin."</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"<xliff:g id="APPLICATION">%1$s</xliff:g> ilovasi ishga tushirilgan. U internetdagi harakatlaringiz, jumladan, e-pochta, ilova va veb-saytlardagi xatti-harakatlaringizni kuzatishi mumkin."</string>
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"<xliff:g id="APPLICATION">%1$s</xliff:g> ilovasi ishga tushirilgan. U internetdagi harakatlaringiz, jumladan, e-pochta, ilova va veb-saytlardagi xatti-harakatlaringizni kuzatishi mumkin."</string>
- <string name="monitoring_description_app_work" msgid="1754325860918060897">"Sizning ishchi profilingiz <xliff:g id="ORGANIZATION">%1$s</xliff:g> tomonidan boshqariladi. <xliff:g id="APPLICATION">%2$s</xliff:g> ilovasi ish tarmog‘idagi harakatlaringizni, jumladan, e-pochta, ilova va veb-saytlardagi xatti-harakatlaringizni kuzatishi mumkin.\n\nBatafsil ma’lumot olish uchun administrator bilan bog‘laning."</string>
+ <!-- no translation found for monitoring_description_app_work (7777228449969022305) -->
+ <skip />
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Sizning ishchi profilingiz <xliff:g id="ORGANIZATION">%1$s</xliff:g> tomonidan boshqariladi. <xliff:g id="APPLICATION_WORK">%2$s</xliff:g> ilovasi ish tarmog‘idagi harakatlaringizni, jumladan, e-pochta, ilova va veb-saytlardagi xatti-harakatlaringizni kuzatishi mumkin.\n\nShuningdek, <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g> ilovasi ham shaxsiy tarmoqdagi harakatlaringizni kuzatishi mumkin."</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Qurilma qo‘lda qulfdan chiqarilmaguncha qulflangan holatda qoladi"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"Bildirishnomalarni tezroq oling"</string>
diff --git a/packages/SystemUI/res/values-vi/strings.xml b/packages/SystemUI/res/values-vi/strings.xml
index 1363d8a..6817871 100644
--- a/packages/SystemUI/res/values-vi/strings.xml
+++ b/packages/SystemUI/res/values-vi/strings.xml
@@ -321,6 +321,12 @@
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Cảnh báo <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
<string name="quick_settings_work_mode_label" msgid="6244915274350490429">"Chế độ làm việc"</string>
<string name="quick_settings_night_display_label" msgid="3577098011487644395">"Đèn đọc sách"</string>
+ <!-- no translation found for quick_settings_nfc_label (9012153754816969325) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_off (6883274004315134333) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_on (6680317193676884311) -->
+ <skip />
<string name="recents_empty_message" msgid="808480104164008572">"Không có mục gần đây nào"</string>
<string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Bạn đã xóa mọi nội dung"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"Thông tin ứng dụng"</string>
@@ -334,6 +340,16 @@
<string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Phân tách ngang"</string>
<string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Phân tách dọc"</string>
<string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Tùy chỉnh phân tách"</string>
+ <!-- no translation found for recents_accessibility_dismissed (2354459747918667050) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_open (1651449827614876864) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_top (9056056469282256287) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_left (8987144699630620019) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_right (275069779299592867) -->
+ <skip />
<string-array name="recents_blacklist_array">
</string-array>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"Đã sạc đầy"</string>
@@ -414,20 +430,24 @@
<string name="disconnect_vpn" msgid="1324915059568548655">"Ngắt kết nối VPN"</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Thiết bị của bạn do <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g> quản lý."</string>
<string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> sử dụng <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> để quản lý thiết bị của bạn."</string>
- <string name="monitoring_description_do_body" msgid="6764108354701060766">"Quản trị viên có thể giám sát & q.lý cài đặt, quyền truy cập d.liệu công ty, ứng dụng, d.liệu được liên kết với thiết bị & thông tin vị trí thiết bị của bạn."</string>
+ <!-- no translation found for monitoring_description_do_body (3639594537660975895) -->
+ <skip />
<string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
<string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Tìm hiểu thêm"</string>
<string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Bạn đang kết nối với <xliff:g id="VPN_APP">%1$s</xliff:g>. Ứng dụng này có thể giám sát hoạt động mạng của bạn, bao gồm email, ứng dụng và trang web."</string>
<string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
<string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Mở cài đặt VPN"</string>
- <string name="monitoring_description_network_logging" msgid="3901006351911787915">"Quản trị viên đã bật tính năng ghi nhật ký mạng. Tính năng này giám sát lưu lượng truy cập trên thiết bị của bạn.\n\nĐể biết thêm thông tin, hãy liên hệ với quản trị viên."</string>
+ <!-- no translation found for monitoring_description_network_logging (7223505523384076027) -->
+ <skip />
<string name="monitoring_description_vpn" msgid="4445150119515393526">"Bạn đã cấp cho ứng dụng quyền thiết lập kết nối VPN.\n\nỨng dụng này có thể giám sát hoạt động mạng và thiết bị của bạn, bao gồm email, ứng dụng và trang web."</string>
- <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Hồ sơ Android Work của bạn được quản lý bởi <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nQuản trị viên có thể giám sát hoạt động mạng của bạn bao gồm email, ứng dụng và trang web.\n\nĐể biết thêm thông tin, hãy liên hệ với quản trị viên của bạn.\n\nBạn cũng được kết nối với VPN, có thể giám sát hoạt động mạng của bạn."</string>
+ <!-- no translation found for monitoring_description_vpn_profile_owned (2958019119161161530) -->
+ <skip />
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Bạn đang kết nối với <xliff:g id="APPLICATION">%1$s</xliff:g>. Ứng dụng này có thể giám sát hoạt động mạng của bạn bao gồm email, ứng dụng và trang web."</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"Bạn đang kết nối với <xliff:g id="APPLICATION">%1$s</xliff:g>. Ứng dụng này có thể giám sát hoạt động mạng cá nhân của bạn bao gồm email, ứng dụng và trang web."</string>
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Bạn đang kết nối với <xliff:g id="APPLICATION">%1$s</xliff:g>. Ứng dụng này có thể giám sát hoạt động mạng cá nhân của bạn bao gồm email, ứng dụng và trang web."</string>
- <string name="monitoring_description_app_work" msgid="1754325860918060897">"Hồ sơ công việc của bạn được quản lý bởi <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Hồ sơ được kết nối với <xliff:g id="APPLICATION">%2$s</xliff:g>, ứng dụng này có thể giám sát hoạt động mạng cơ quan của bạn, bao gồm email, ứng dụng và trang web.\n\nĐể biết thêm thông tin, hãy liên hệ với quản trị viên của bạn."</string>
+ <!-- no translation found for monitoring_description_app_work (7777228449969022305) -->
+ <skip />
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Hồ sơ công việc của bạn được quản lý bởi <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Hồ sơ được kết nối với <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, ứng dụng này có thể giám sát hoạt động mạng cơ quan của bạn, bao gồm email, ứng dụng và trang web.\n\nBạn cũng được kết nối với <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, có thể giám sát hoạt động mạng cá nhân của bạn."</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Thiết bị sẽ vẫn bị khóa cho tới khi bạn mở khóa theo cách thủ công"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"Nhận thông báo nhanh hơn"</string>
diff --git a/packages/SystemUI/res/values-zh-rCN/strings.xml b/packages/SystemUI/res/values-zh-rCN/strings.xml
index 91a4734..f22fc3d 100644
--- a/packages/SystemUI/res/values-zh-rCN/strings.xml
+++ b/packages/SystemUI/res/values-zh-rCN/strings.xml
@@ -321,6 +321,12 @@
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g>警告"</string>
<string name="quick_settings_work_mode_label" msgid="6244915274350490429">"工作模式"</string>
<string name="quick_settings_night_display_label" msgid="3577098011487644395">"夜间模式"</string>
+ <!-- no translation found for quick_settings_nfc_label (9012153754816969325) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_off (6883274004315134333) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_on (6680317193676884311) -->
+ <skip />
<string name="recents_empty_message" msgid="808480104164008572">"近期没有任何内容"</string>
<string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"您已清除所有内容"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"应用信息"</string>
@@ -334,6 +340,16 @@
<string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"水平分割"</string>
<string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"垂直分割"</string>
<string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"自定义分割"</string>
+ <!-- no translation found for recents_accessibility_dismissed (2354459747918667050) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_open (1651449827614876864) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_top (9056056469282256287) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_left (8987144699630620019) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_right (275069779299592867) -->
+ <skip />
<string-array name="recents_blacklist_array">
</string-array>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"已充满"</string>
@@ -414,20 +430,24 @@
<string name="disconnect_vpn" msgid="1324915059568548655">"断开VPN连接"</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"您的设备由<xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>管理。"</string>
<string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>会使用<xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g>管理您的设备。"</string>
- <string name="monitoring_description_do_body" msgid="6764108354701060766">"您的管理员能够监控和管理与您的设备相关的设置、企业权限、应用、数据以及您设备的位置信息。"</string>
+ <!-- no translation found for monitoring_description_do_body (3639594537660975895) -->
+ <skip />
<string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
<string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"了解详情"</string>
<string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"您已连接到<xliff:g id="VPN_APP">%1$s</xliff:g>,该应用可以监控您的网络活动,包括收发电子邮件、使用应用和浏览网站。"</string>
<string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
<string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"打开 VPN 设置"</string>
- <string name="monitoring_description_network_logging" msgid="3901006351911787915">"您的管理员已开启网络日志功能,该功能会监控您设备上的流量。\n\n要了解详情,请与您的管理员联系。"</string>
+ <!-- no translation found for monitoring_description_network_logging (7223505523384076027) -->
+ <skip />
<string name="monitoring_description_vpn" msgid="4445150119515393526">"您已授权应用设置 VPN 连接。\n\n该应用可以监控您的设备和网络活动,包括收发电子邮件、使用应用和浏览网站。"</string>
- <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"您的工作资料由以下单位管理:<xliff:g id="ORGANIZATION">%1$s</xliff:g>。\n\n您单位的管理员可以监控您的网络活动,包括收发电子邮件、使用应用和浏览网站。\n\n若要了解详情,请与您单位的管理员联系。\n\n此外,您还连接到了 VPN,此 VPN 也可以监控您的网络活动。"</string>
+ <!-- no translation found for monitoring_description_vpn_profile_owned (2958019119161161530) -->
+ <skip />
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"您已连接到<xliff:g id="APPLICATION">%1$s</xliff:g>,该应用可以监控您的网络活动,包括收发电子邮件、使用应用和浏览网站。"</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"您已连接到<xliff:g id="APPLICATION">%1$s</xliff:g>,该应用可以监控您的个人网络活动,包括收发电子邮件、使用应用和浏览网站。"</string>
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"您已连接到<xliff:g id="APPLICATION">%1$s</xliff:g>,该应用可以监控您的个人网络活动,包括收发电子邮件、使用应用和浏览网站。"</string>
- <string name="monitoring_description_app_work" msgid="1754325860918060897">"您的工作资料由以下单位管理:<xliff:g id="ORGANIZATION">%1$s</xliff:g>。您已连接到<xliff:g id="APPLICATION">%2$s</xliff:g>,该应用可以监控您的工作网络活动,包括收发电子邮件、使用应用和浏览网站。\n\n若要了解详情,请与您单位的管理员联系。"</string>
+ <!-- no translation found for monitoring_description_app_work (7777228449969022305) -->
+ <skip />
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"您的工作资料由以下单位管理:<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_disabled" msgid="7412534203633528135">"在您手动解锁之前,设备会保持锁定状态"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"更快捷地查看通知"</string>
diff --git a/packages/SystemUI/res/values-zh-rHK/strings.xml b/packages/SystemUI/res/values-zh-rHK/strings.xml
index 0b62aea..9e74d41 100644
--- a/packages/SystemUI/res/values-zh-rHK/strings.xml
+++ b/packages/SystemUI/res/values-zh-rHK/strings.xml
@@ -323,6 +323,12 @@
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> 警告"</string>
<string name="quick_settings_work_mode_label" msgid="6244915274350490429">"工作模式"</string>
<string name="quick_settings_night_display_label" msgid="3577098011487644395">"夜燈模式"</string>
+ <!-- no translation found for quick_settings_nfc_label (9012153754816969325) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_off (6883274004315134333) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_on (6680317193676884311) -->
+ <skip />
<string name="recents_empty_message" msgid="808480104164008572">"沒有最近項目"</string>
<string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"您已清除所有項目"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"應用程式資料"</string>
@@ -336,6 +342,16 @@
<string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"水平分割"</string>
<string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"垂直分割"</string>
<string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"自訂分割"</string>
+ <!-- no translation found for recents_accessibility_dismissed (2354459747918667050) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_open (1651449827614876864) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_top (9056056469282256287) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_left (8987144699630620019) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_right (275069779299592867) -->
+ <skip />
<string-array name="recents_blacklist_array">
</string-array>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"已完成充電"</string>
@@ -416,20 +432,24 @@
<string name="disconnect_vpn" msgid="1324915059568548655">"中斷 VPN 連線"</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"您的裝置由「<xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>」管理。"</string>
<string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>使用「<xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g>」管理您的裝置。"</string>
- <string name="monitoring_description_do_body" msgid="6764108354701060766">"您的管理員可以監控及管理您裝置的設定、企業存取、應用程式、資料及位置資訊。"</string>
+ <!-- no translation found for monitoring_description_do_body (3639594537660975895) -->
+ <skip />
<string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
<string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"瞭解詳情"</string>
<string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"您已連接至「<xliff:g id="VPN_APP">%1$s</xliff:g>」,此應用程式可以監控您的網絡活動,包括電郵、應用程式及網站。"</string>
<string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
<string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"開啟 VPN 設定"</string>
- <string name="monitoring_description_network_logging" msgid="3901006351911787915">"您的管理員已開啟網絡記錄功能,以監控您裝置上的流量。\n\n如需瞭解詳情,請聯絡您的管理員。"</string>
+ <!-- no translation found for monitoring_description_network_logging (7223505523384076027) -->
+ <skip />
<string name="monitoring_description_vpn" msgid="4445150119515393526">"您已授權應用程式設定 VPN 連線。\n\n這個應用程式能夠監控您的裝置和網絡活動,包括電郵、應用程式和網站。"</string>
- <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"您的裝置由 <xliff:g id="ORGANIZATION">%1$s</xliff:g> 管理。\n\n您的管理員可以監控您的網絡活動,包括電郵、應用程式及網站。\n\n如需瞭解更多資訊,請聯絡管理員。\n\n由於您的裝置連至 VPN,因此 VPN 服務供應商也可監控您的網絡活動。"</string>
+ <!-- no translation found for monitoring_description_vpn_profile_owned (2958019119161161530) -->
+ <skip />
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"您已連結至<xliff:g id="APPLICATION">%1$s</xliff:g> ,它能夠監控您的網絡活動,包括電郵、應用程式和網站。"</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"您已連結至<xliff:g id="APPLICATION">%1$s</xliff:g>,它能夠監控您的個人網絡活動,包括電郵、應用程式和網站。"</string>
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"您已連接至「<xliff:g id="APPLICATION">%1$s</xliff:g>」,此應用程式可以監控您的個人網絡活動,包括電郵、應用程式及網站。"</string>
- <string name="monitoring_description_app_work" msgid="1754325860918060897">"您的工作設定檔由<xliff:g id="ORGANIZATION">%1$s</xliff:g>管理。它已連結至<xliff:g id="APPLICATION">%2$s</xliff:g>,能夠監控您的工作網絡活動,包括電郵、應用程式和網站。\n\n如需進一步資訊,請聯絡您的管理員。"</string>
+ <!-- no translation found for monitoring_description_app_work (7777228449969022305) -->
+ <skip />
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"您的工作設定檔由<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_disabled" msgid="7412534203633528135">"裝置將保持上鎖,直到您手動解鎖"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"更快取得通知"</string>
diff --git a/packages/SystemUI/res/values-zh-rTW/strings.xml b/packages/SystemUI/res/values-zh-rTW/strings.xml
index 905506e..1d52de3 100644
--- a/packages/SystemUI/res/values-zh-rTW/strings.xml
+++ b/packages/SystemUI/res/values-zh-rTW/strings.xml
@@ -321,6 +321,12 @@
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> 警告"</string>
<string name="quick_settings_work_mode_label" msgid="6244915274350490429">"工作模式"</string>
<string name="quick_settings_night_display_label" msgid="3577098011487644395">"夜燈"</string>
+ <!-- no translation found for quick_settings_nfc_label (9012153754816969325) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_off (6883274004315134333) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_on (6680317193676884311) -->
+ <skip />
<string name="recents_empty_message" msgid="808480104164008572">"最近沒有任何項目"</string>
<string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"您已清除所有工作"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"應用程式資訊"</string>
@@ -334,6 +340,16 @@
<string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"水平分割"</string>
<string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"垂直分割"</string>
<string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"自訂分割"</string>
+ <!-- no translation found for recents_accessibility_dismissed (2354459747918667050) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_open (1651449827614876864) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_top (9056056469282256287) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_left (8987144699630620019) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_right (275069779299592867) -->
+ <skip />
<string-array name="recents_blacklist_array">
</string-array>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"已充飽"</string>
@@ -414,20 +430,24 @@
<string name="disconnect_vpn" msgid="1324915059568548655">"中斷 VPN 連線"</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"你的裝置是由「<xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>」所管理。"</string>
<string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> 使用「<xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g>」管理你的裝置。"</string>
- <string name="monitoring_description_do_body" msgid="6764108354701060766">"你的管理員可以監控及管理與你的裝置相關聯的設定、公司系統權限、應用程式和資料,以及裝置的位置資訊。"</string>
+ <!-- no translation found for monitoring_description_do_body (3639594537660975895) -->
+ <skip />
<string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
<string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"瞭解詳情"</string>
<string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"由於你已連結至「<xliff:g id="VPN_APP">%1$s</xliff:g>」,你的網路活動 (包括收發電子郵件、使用應用程式及瀏覽網站) 可能會受到這個應用程式監控。"</string>
<string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
<string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"開啟 VPN 設定"</string>
- <string name="monitoring_description_network_logging" msgid="3901006351911787915">"你的管理員已啟用網路紀錄功能,可監控你裝置上的流量。\n\n如需詳細資訊,請與你的管理員聯絡。"</string>
+ <!-- no translation found for monitoring_description_network_logging (7223505523384076027) -->
+ <skip />
<string name="monitoring_description_vpn" msgid="4445150119515393526">"您已授權一個應用程式設定 VPN 連線。\n\n這個應用程式可以監控您的裝置和網路活動,包括收發電子郵件、使用應用程式和瀏覽網站。"</string>
- <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"您的 Work 設定檔由下列機構管理:<xliff:g id="ORGANIZATION">%1$s</xliff:g>。\n\n您的管理員可以監控您的網路活動,包括收發電子郵件、使用應用程式及瀏覽網站。\n\n如需詳細資訊,請洽您的管理員。\n\n同時,由於您的裝置已連線至 VPN,您的網路活動也會受到 VPN 監控。"</string>
+ <!-- no translation found for monitoring_description_vpn_profile_owned (2958019119161161530) -->
+ <skip />
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"由於您已連線至 <xliff:g id="APPLICATION">%1$s</xliff:g>,您的網路活動也會受到這個應用程式監控,包括收發電子郵件、使用應用程式和瀏覽網站。"</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"由於您已連線至 <xliff:g id="APPLICATION">%1$s</xliff:g>,您的個人網路活動也會受到這個應用程式監控,包括收發電子郵件、使用應用程式和瀏覽網站。"</string>
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"由於你已連結至「<xliff:g id="APPLICATION">%1$s</xliff:g>」,你的個人網路活動 (包括收發電子郵件、使用應用程式及瀏覽網站) 可能會受到這個應用程式監控。"</string>
- <string name="monitoring_description_app_work" msgid="1754325860918060897">"您的 Work 設定檔是由下列機構管理:<xliff:g id="ORGANIZATION">%1$s</xliff:g>。由於設定檔已連線至 <xliff:g id="APPLICATION">%2$s</xliff:g>,您的工作網路活動也會受到這個應用程式監控,包括收發電子郵件、使用應用程式和瀏覽網站。\n\n詳情請洽您的管理員。"</string>
+ <!-- no translation found for monitoring_description_app_work (7777228449969022305) -->
+ <skip />
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"您的 Work 設定檔是由下列機構管理:<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_disabled" msgid="7412534203633528135">"在您手動解鎖前,裝置將保持鎖定狀態"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"更快取得通知"</string>
diff --git a/packages/SystemUI/res/values-zu/strings.xml b/packages/SystemUI/res/values-zu/strings.xml
index 6592bd0..0723e7e 100644
--- a/packages/SystemUI/res/values-zu/strings.xml
+++ b/packages/SystemUI/res/values-zu/strings.xml
@@ -321,6 +321,12 @@
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> isexwayiso"</string>
<string name="quick_settings_work_mode_label" msgid="6244915274350490429">"Imodi yomsebenzi"</string>
<string name="quick_settings_night_display_label" msgid="3577098011487644395">"Ukukhanya kwasebusuku"</string>
+ <!-- no translation found for quick_settings_nfc_label (9012153754816969325) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_off (6883274004315134333) -->
+ <skip />
+ <!-- no translation found for quick_settings_nfc_on (6680317193676884311) -->
+ <skip />
<string name="recents_empty_message" msgid="808480104164008572">"Azikho izinto zakamuva"</string>
<string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Usule yonke into"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"Ulwazi lohlelo lokusebenza"</string>
@@ -334,6 +340,16 @@
<string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Hlukanisa okuvundlile"</string>
<string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Hlukanisa okumile"</string>
<string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Hlukanisa kwezifiso"</string>
+ <!-- no translation found for recents_accessibility_dismissed (2354459747918667050) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_open (1651449827614876864) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_top (9056056469282256287) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_left (8987144699630620019) -->
+ <skip />
+ <!-- no translation found for recents_accessibility_split_screen_right (275069779299592867) -->
+ <skip />
<string-array name="recents_blacklist_array">
</string-array>
<string name="expanded_header_battery_charged" msgid="5945855970267657951">"Kushajiwe"</string>
@@ -414,20 +430,24 @@
<string name="disconnect_vpn" msgid="1324915059568548655">"Nqamula i-VPN"</string>
<string name="monitoring_description_do_header_generic" msgid="96588491028288691">"Idivayisi yakho iphethwe yi-<xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string>
<string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"I-<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> isebenzisa i-<xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> ukuze iphathe idivayisi yakho."</string>
- <string name="monitoring_description_do_body" msgid="6764108354701060766">"Umlawuli wakho angaqaphela aphinde aphathe izilungiselelo, ukufinyelela kwezinkampani, izinhlelo zokusebenza, idatha ehlotshaniswa nedivayisi yakho, nolwazi lwendawo yedivayisi yakho."</string>
+ <!-- no translation found for monitoring_description_do_body (3639594537660975895) -->
+ <skip />
<string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string>
<string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Funda kabanzi"</string>
<string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Uxhumeke ku-<xliff:g id="VPN_APP">%1$s</xliff:g>, engaqapha umsebenzi wenethiwekhi yakho, ofaka ama-imeyili, izinhlelo zokusebenza, namawebhusayithi."</string>
<string name="monitoring_description_vpn_settings_separator" msgid="1933186756733474388">" "</string>
<string name="monitoring_description_vpn_settings" msgid="8869300202410505143">"Vula izilungiselelo ze-VPN"</string>
- <string name="monitoring_description_network_logging" msgid="3901006351911787915">"Umlawuli wakho uvule ukungena kwenethiwekhi, okuhlola ithrafikhi kudivayisi yakho.\n\nNgolwazi olubanzi xhumana nomlawuli wakho."</string>
+ <!-- no translation found for monitoring_description_network_logging (7223505523384076027) -->
+ <skip />
<string name="monitoring_description_vpn" msgid="4445150119515393526">"Unikeze uhlelo lokusebenza imvume yokusetha ukuxhumana kwe-VPN.\n\nLolu hlelo lokusebenza lungahlola idivayisi yakho nomsebenzi wenethiwekhi, ofaka ama-imeyili, izinhlelo zokusebenza, namawebhusayithi."</string>
- <string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"Iphrofayela yakho yomsebenzi iphethwe yi-<xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nUmqondisi wakho unamandla wokuqaphela umsebenzi wenethiwekhi yakho ofaka ama-imeyili, izinhlelo zokusebenza, namawebhusayithi.\n\nUkuze uthole olunye ulwazi, xhumana nomqondisi wakho.\n\nFuthi uxhumeke ku-VPN, engaqaphela umsebenzi wenethiwekhi yakho."</string>
+ <!-- no translation found for monitoring_description_vpn_profile_owned (2958019119161161530) -->
+ <skip />
<string name="legacy_vpn_name" msgid="6604123105765737830">"I-VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Uxhumeke ku-<xliff:g id="APPLICATION">%1$s</xliff:g>, engahlola umsebenzi wakho wenethiwekhi ofaka ama-imeyili, izinhlelo zokusebenza, namawebhusayithi."</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"Uxhumeke ku-<xliff:g id="APPLICATION">%1$s</xliff:g>, engahlola umsebenzi wenethiwekhi yakho yomuntu siqu, ofaka ama-imeyili, izinhlelo zokusebenza, namawebhusayithi."</string>
<string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Uxhumeke ku-<xliff:g id="APPLICATION">%1$s</xliff:g>, engaqapha umsebenzi wakho womuntu siqu wenethiwekhi, ofaka ama-imeyili, izinhlelo zokusebenza, namawebhusayithi."</string>
- <string name="monitoring_description_app_work" msgid="1754325860918060897">"Iphrofayela yakho yomsebenzi iphethwe yi-<xliff:g id="ORGANIZATION">%1$s</xliff:g>. Ixhumeke ku-<xliff:g id="APPLICATION">%2$s</xliff:g>, engahlola umsebenzi wenethiwekhi yakho yokusebenza, ofaka ama-imeyili, izinhlelo zokusebenza, namawebhusayithi.\n\nUkuze uthole olunye ulwazi, xhumana nomqondisi wakho."</string>
+ <!-- no translation found for monitoring_description_app_work (7777228449969022305) -->
+ <skip />
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Iphrofayela yakho yomsebenzi iphethwe yi-<xliff:g id="ORGANIZATION">%1$s</xliff:g>. Ixhumeke ku-<xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, engahlola umsebenzi wenethiwekhi yakho yomsebenzi, ofaka ama-imeyili, izinhlelo zokusebenza namawebhusayithi.\n\nFuthi uxhumeke ku-<xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, engahlola umsebenzi wenethiwekhi yakho yomuntu siqu."</string>
<string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Idivayisi izohlala ikhiyekile uze uyivule ngokwenza"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"Thola izaziso ngokushesha"</string>
diff --git a/packages/SystemUI/res/values/attrs.xml b/packages/SystemUI/res/values/attrs.xml
index a229866..7fb513c 100644
--- a/packages/SystemUI/res/values/attrs.xml
+++ b/packages/SystemUI/res/values/attrs.xml
@@ -40,8 +40,9 @@
<attr name="decayTime" format="integer" />
<attr name="orientation" />
</declare-styleable>
+ <attr name="frameColor" format="color" />
<declare-styleable name="BatteryMeterView">
- <attr name="frameColor" format="color" />
+ <attr name="frameColor" />
</declare-styleable>
<declare-styleable name="Clock">
<attr name="amPmStyle" format="enum">
@@ -60,7 +61,7 @@
<attr name="framePadding" format="dimension" />
<!-- {@deprecated Use a statelist in frameColor instead.} -->
<attr name="activeFrameColor" format="color" />
- <attr name="frameColor" format="color" />
+ <attr name="frameColor" />
<attr name="badgeDiameter" format="dimension" />
<attr name="badgeMargin" format="dimension" />
</declare-styleable>
diff --git a/packages/SystemUI/res/values/config.xml b/packages/SystemUI/res/values/config.xml
index 50ef392..ac86439 100644
--- a/packages/SystemUI/res/values/config.xml
+++ b/packages/SystemUI/res/values/config.xml
@@ -297,4 +297,11 @@
If < 0, uses the value from HardwarePropertiesManager#getDeviceTemperatures. -->
<integer name="config_warningTemperature">-1</integer>
+ <!-- Accessibility actions -->
+ <item type="id" name="action_split_task_to_left" />
+ <item type="id" name="action_split_task_to_right" />
+ <item type="id" name="action_split_task_to_top" />
+ <item type="id" name="action_open" />
+ <item type="id" name="action_dimiss" />
+
</resources>
diff --git a/packages/SystemUI/res/values/dimens.xml b/packages/SystemUI/res/values/dimens.xml
index 6ffdbcb..79529a7 100644
--- a/packages/SystemUI/res/values/dimens.xml
+++ b/packages/SystemUI/res/values/dimens.xml
@@ -164,7 +164,7 @@
<dimen name="close_handle_underlap">32dp</dimen>
<!-- Height of the status bar header bar -->
- <dimen name="status_bar_header_height">104dp</dimen>
+ <dimen name="status_bar_header_height">126dp</dimen>
<!-- Height of the status bar header bar when expanded -->
<dimen name="status_bar_header_height_expanded">116dp</dimen>
@@ -204,8 +204,8 @@
<!-- The size of the gesture span needed to activate the "pull" notification expansion -->
<dimen name="pull_span_min">25dp</dimen>
- <dimen name="qs_tile_height">88dp</dimen>
- <dimen name="qs_tile_margin">16dp</dimen>
+ <dimen name="qs_tile_height">80dp</dimen>
+ <dimen name="qs_tile_margin">36dp</dimen>
<dimen name="qs_tile_margin_top">16dp</dimen>
<dimen name="qs_quick_tile_size">48dp</dimen>
<dimen name="qs_quick_tile_padding">12dp</dimen>
@@ -421,7 +421,7 @@
<dimen name="qs_time_collapsed_size">14sp</dimen>
<!-- The font size of the time when expanded in QS -->
- <dimen name="qs_time_expanded_size">20sp</dimen>
+ <dimen name="qs_time_expanded_size">14sp</dimen>
<!-- The font size of the "emergency calls only" label in QS -->
<dimen name="qs_emergency_calls_only_text_size">12sp</dimen>
diff --git a/packages/SystemUI/res/values/dimens_grid.xml b/packages/SystemUI/res/values/dimens_grid.xml
index 0b9836ff..5858443 100644
--- a/packages/SystemUI/res/values/dimens_grid.xml
+++ b/packages/SystemUI/res/values/dimens_grid.xml
@@ -22,5 +22,6 @@
<dimen name="recents_grid_task_view_header_height">44dp</dimen>
<dimen name="recents_grid_task_view_header_button_padding">8dp</dimen>
<dimen name="recents_grid_task_view_focused_frame_thickness">8dp</dimen>
+ <dimen name="recents_grid_task_view_rounded_corners_radius">8dp</dimen>
</resources>
diff --git a/packages/SystemUI/res/values/strings.xml b/packages/SystemUI/res/values/strings.xml
index a17430a..422431e 100644
--- a/packages/SystemUI/res/values/strings.xml
+++ b/packages/SystemUI/res/values/strings.xml
@@ -794,6 +794,16 @@
<string name="recents_multistack_add_stack_dialog_split_vertical">Split Vertical</string>
<!-- Recents: MultiStack add stack split custom radio button. [CHAR LIMIT=NONE] -->
<string name="recents_multistack_add_stack_dialog_split_custom">Split Custom</string>
+ <!-- Recents: Accessibility dismiss label -->
+ <string name="recents_accessibility_dismissed">Dismiss</string>
+ <!-- Recents: Accessibility open label -->
+ <string name="recents_accessibility_open">Open</string>
+ <!-- Recents: Accessibility split to the top -->
+ <string name="recents_accessibility_split_screen_top">Split screen to the top</string>
+ <!-- Recents: Accessibility split to the left -->
+ <string name="recents_accessibility_split_screen_left">Split screen to the left</string>
+ <!-- Recents: Accessibility split to the right -->
+ <string name="recents_accessibility_split_screen_right">Split screen to the right</string>
<!-- Fully qualified activity class names to be blacklisted in Recents, add package names into overlay as needed -->
<string-array name="recents_blacklist_array">
@@ -1022,10 +1032,10 @@
<string name="monitoring_title">Network monitoring</string>
<!-- STOPSHIP Monitoring strings still need to be finalized and approved -->
- <!-- Monitoring dialog subtitle for the section describing VPN [CHAR LIMIT=TODO]-->
+ <!-- Monitoring dialog subtitle for the section describing VPN [CHAR LIMIT=35]-->
<string name="monitoring_subtitle_vpn">VPN</string>
- <!-- Monitoring dialog subtitle for the section describing network logging [CHAR LIMIT=TODO]-->
+ <!-- Monitoring dialog subtitle for the section describing network logging [CHAR LIMIT=35]-->
<string name="monitoring_subtitle_network_logging">Network Logging</string>
<!-- Monitoring dialog disable vpn button [CHAR LIMIT=30] -->
@@ -1041,7 +1051,7 @@
<string name="monitoring_description_do_header_with_name"><xliff:g id="organization_name" example="Foo, Inc.">%1$s</xliff:g> uses <xliff:g id="device_owner_app" example="Google Mobile Management">%2$s</xliff:g> to manage your device.</string>
<!-- Monitoring dialog: Part of text body explaining what a Device Owner app can do [CHAR LIMIT=130] -->
- <string name="monitoring_description_do_body">Your administrator can monitor and manage settings, corporate access, apps, data associated with your device, and your device\'s location information.</string>
+ <string name="monitoring_description_do_body">Your admin can monitor and manage settings, corporate access, apps, data associated with your device, and your device\'s location information.</string>
<!-- Monitoring dialog: Space that separates the body text and the "learn more" link that follows it. [CHAR LIMIT=5] -->
<string name="monitoring_description_do_learn_more_separator">" "</string>
@@ -1055,18 +1065,18 @@
<!-- Monitoring dialog: Space that separates the VPN body text and the "Open VPN Settings" link that follows it. [CHAR LIMIT=5] -->
<string name="monitoring_description_vpn_settings_separator">" "</string>
- <!-- Monitoring dialog: Link to open the VPN settings page [CHAR LIMIT=TODO] -->
+ <!-- Monitoring dialog: Link to open the VPN settings page [CHAR LIMIT=60] -->
<string name="monitoring_description_vpn_settings">Open VPN Settings</string>
- <!-- Monitoring dialog: Network logging text [CHAR LIMIT=TODO] -->
- <string name="monitoring_description_network_logging">Your admin has turned on network logging, which monitors traffic on your device.\n\nFor more information contact your admin.</string>
+ <!-- Monitoring dialog: Network logging text [CHAR LIMIT=400] -->
+ <string name="monitoring_description_network_logging">Your admin has turned on network logging, which monitors traffic on your device.\n\nFor more information, contact your admin.</string>
<!-- Monitoring dialog VPN text [CHAR LIMIT=400] -->
<string name="monitoring_description_vpn">You gave an app permission to set up a VPN connection.\n\nThis app can monitor your device and network activity, including emails, apps, and websites.</string>
<!-- Monitoring dialog VPN with profile owner text [CHAR LIMIT=400] -->
- <string name="monitoring_description_vpn_profile_owned">Your work profile is managed by <xliff:g id="organization">%1$s</xliff:g>.\n\nYour administrator is capable of monitoring your network activity including emails, apps, and websites.\n\nFor more information, contact your administrator.\n\nYou\'re also connected to a VPN, which can monitor your network activity.</string>
+ <string name="monitoring_description_vpn_profile_owned">Your work profile is managed by <xliff:g id="organization">%1$s</xliff:g>.\n\nYour admin is capable of monitoring your network activity including emails, apps, and websites.\n\nFor more information, contact your admin.\n\nYou\'re also connected to a VPN, which can monitor your network activity.</string>
<!-- Name for a generic legacy VPN connection [CHAR LIMIT=20] -->
<string name="legacy_vpn_name">VPN</string>
@@ -1081,7 +1091,7 @@
<string name="branded_monitoring_description_app_personal">You\'re connected to <xliff:g id="application">%1$s</xliff:g>, which can monitor your personal network activity, including emails, apps, and websites.</string>
<!-- Monitoring dialog text for single app (inside work profile) [CHAR LIMIT=400] -->
- <string name="monitoring_description_app_work">Your work profile is managed by <xliff:g id="organization">%1$s</xliff:g>. It is connected to <xliff:g id="application">%2$s</xliff:g>, which can monitor your work network activity, including emails, apps, and websites.\n\nFor more information, contact your administrator.</string>
+ <string name="monitoring_description_app_work">Your work profile is managed by <xliff:g id="organization">%1$s</xliff:g>. It is connected to <xliff:g id="application">%2$s</xliff:g>, which can monitor your work network activity, including emails, apps, and websites.\n\nFor more information, contact your admin.</string>
<!-- Monitoring dialog text for multiple apps (in personal and work profiles) [CHAR LIMIT=400] -->
<string name="monitoring_description_app_personal_work">Your work profile is managed by <xliff:g id="organization">%1$s</xliff:g>. It is connected to <xliff:g id="application_work">%2$s</xliff:g>, which can monitor your work network activity, including emails, apps, and websites.\n\nYou\'re also connected to <xliff:g id="application_personal">%3$s</xliff:g>, which can monitor your personal network activity.</string>
diff --git a/packages/SystemUI/res/values/styles.xml b/packages/SystemUI/res/values/styles.xml
index a9c858c..6535a81 100644
--- a/packages/SystemUI/res/values/styles.xml
+++ b/packages/SystemUI/res/values/styles.xml
@@ -93,37 +93,34 @@
<item name="android:textColor">#FF808080</item>
</style>
- <style name="TextAppearance.StatusBar.TextButton"
- parent="@*android:style/TextAppearance.StatusBar">
- <item name="android:textAppearance">?android:attr/textAppearance</item>
- <item name="android:textStyle">normal</item>
- <item name="android:textColor">#FFFFFFFF</item>
- </style>
-
<style name="TextAppearance.StatusBar.Clock" parent="@*android:style/TextAppearance.StatusBar.Icon">
<item name="android:textSize">@dimen/status_bar_clock_size</item>
<item name="android:fontFamily">sans-serif-medium</item>
<item name="android:textColor">@color/status_bar_clock_color</item>
</style>
- <style name="TextAppearance.StatusBar.Expanded" parent="@*android:style/TextAppearance.StatusBar" />
+ <style name="TextAppearance.StatusBar.Expanded" parent="@*android:style/TextAppearance.StatusBar">
+ <item name="android:textColor">?android:attr/textColorTertiary</item>
+ </style>
<style name="TextAppearance.StatusBar.Expanded.Clock">
<item name="android:textSize">@dimen/qs_time_expanded_size</item>
- <item name="android:fontFamily">sans-serif-medium</item>
+ <item name="android:fontFamily">sans-serif-condensed</item>
<item name="android:textColor">?android:attr/textColorPrimary</item>
+ <item name="android:textStyle">normal</item>
</style>
<style name="TextAppearance.StatusBar.Expanded.Date">
<item name="android:textSize">@dimen/qs_date_collapsed_size</item>
<item name="android:textStyle">normal</item>
<item name="android:textColor">?android:attr/textColorSecondary</item>
+ <item name="android:fontFamily">sans-serif-condensed</item>
</style>
<style name="TextAppearance.StatusBar.Expanded.AboveDateTime">
<item name="android:textSize">@dimen/qs_emergency_calls_only_text_size</item>
<item name="android:textStyle">normal</item>
- <item name="android:textColor">?android:attr/textColorSecondary</item>
+ <item name="android:textColor">?android:attr/textColorTertiary</item>
</style>
<style name="TextAppearance.StatusBar.Expanded.EmergencyCallsOnly"
@@ -135,7 +132,7 @@
<style name="TextAppearance.StatusBar.Expanded.UserSwitcher">
<item name="android:textSize">16sp</item>
<item name="android:textStyle">normal</item>
- <item name="android:textColor">@color/qs_user_detail_name</item>
+ <item name="android:textColor">?android:attr/textColorSecondary</item>
</style>
<style name="TextAppearance.StatusBar.Expanded.UserSwitcher.UserName" />
@@ -172,7 +169,7 @@
<style name="TextAppearance.QS.DetailButton">
<item name="android:textSize">@dimen/qs_detail_button_text_size</item>
- <item name="android:textColor">@color/qs_detail_button</item>
+ <item name="android:textColor">?android:attr/textColorSecondary</item>
<item name="android:textAllCaps">true</item>
<item name="android:fontFamily">sans-serif-medium</item>
<item name="android:gravity">center</item>
@@ -184,7 +181,7 @@
<style name="TextAppearance.QS.DetailEmpty">
<item name="android:textSize">@dimen/qs_detail_empty_text_size</item>
- <item name="android:textColor">@color/qs_subhead</item>
+ <item name="android:textColor">?android:attr/textColorPrimary</item>
</style>
<style name="TextAppearance.QS.Subhead">
diff --git a/packages/SystemUI/src/com/android/systemui/BatteryMeterDrawable.java b/packages/SystemUI/src/com/android/systemui/BatteryMeterDrawable.java
index 07ef5e0..5a6afca 100755
--- a/packages/SystemUI/src/com/android/systemui/BatteryMeterDrawable.java
+++ b/packages/SystemUI/src/com/android/systemui/BatteryMeterDrawable.java
@@ -292,12 +292,16 @@
}
int backgroundColor = getBackgroundColor(darkIntensity);
int fillColor = getFillColor(darkIntensity);
+ setColors(fillColor, backgroundColor);
+ mOldDarkIntensity = darkIntensity;
+ }
+
+ public void setColors(int fillColor, int backgroundColor) {
mIconTint = fillColor;
mFramePaint.setColor(backgroundColor);
mBoltPaint.setColor(fillColor);
mChargeColor = fillColor;
invalidateSelf();
- mOldDarkIntensity = darkIntensity;
}
private int getBackgroundColor(float darkIntensity) {
diff --git a/packages/SystemUI/src/com/android/systemui/BatteryMeterView.java b/packages/SystemUI/src/com/android/systemui/BatteryMeterView.java
index ef1c25d..030250a 100644
--- a/packages/SystemUI/src/com/android/systemui/BatteryMeterView.java
+++ b/packages/SystemUI/src/com/android/systemui/BatteryMeterView.java
@@ -72,8 +72,6 @@
@Override
public void onAttachedToWindow() {
super.onAttachedToWindow();
- mBatteryController.addCallback(this);
- mDrawable.startListening();
TunerService.get(getContext()).addTunable(this, StatusBarIconController.ICON_BLACKLIST);
}
@@ -100,9 +98,15 @@
public void setBatteryController(BatteryController mBatteryController) {
this.mBatteryController = mBatteryController;
mDrawable.setBatteryController(mBatteryController);
+ mBatteryController.addCallback(this);
+ mDrawable.startListening();
}
public void setDarkIntensity(float f) {
mDrawable.setDarkIntensity(f);
}
+
+ public void setRawColors(int fgColor, int bgColor) {
+ mDrawable.setColors(fgColor, bgColor);
+ }
}
diff --git a/packages/SystemUI/src/com/android/systemui/SystemUIService.java b/packages/SystemUI/src/com/android/systemui/SystemUIService.java
index 05e5f6b..11e0f28 100644
--- a/packages/SystemUI/src/com/android/systemui/SystemUIService.java
+++ b/packages/SystemUI/src/com/android/systemui/SystemUIService.java
@@ -18,7 +18,9 @@
import android.app.Service;
import android.content.Intent;
+import android.os.Build;
import android.os.IBinder;
+import android.os.SystemProperties;
import java.io.FileDescriptor;
import java.io.PrintWriter;
@@ -29,6 +31,11 @@
public void onCreate() {
super.onCreate();
((SystemUIApplication) getApplication()).startServicesIfNeeded();
+
+ // For debugging RescueParty
+ if (Build.IS_DEBUGGABLE && SystemProperties.getBoolean("debug.crash_sysui", false)) {
+ throw new RuntimeException();
+ }
}
@Override
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/WorkLockActivity.java b/packages/SystemUI/src/com/android/systemui/keyguard/WorkLockActivity.java
index 63d1cc2..c7514a9 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/WorkLockActivity.java
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/WorkLockActivity.java
@@ -91,10 +91,6 @@
// Draw captions overlaid on the content view, so the whole window is one solid color.
setOverlayWithDecorCaptionEnabled(true);
- // Match task description to the task stack we are replacing so it's still recognizably the
- // original task stack with the same icon and title text.
- setTaskDescription(new TaskDescription(null, null, color));
-
// Blank out the activity. When it is on-screen it will look like a Recents thumbnail with
// redaction switched on.
final View blankView = new View(this);
@@ -127,6 +123,11 @@
return;
}
+ @Override
+ public void setTaskDescription(TaskDescription taskDescription) {
+ // Use the previous activity's task description.
+ }
+
private final BroadcastReceiver mLockEventReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
diff --git a/packages/SystemUI/src/com/android/systemui/media/NotificationPlayer.java b/packages/SystemUI/src/com/android/systemui/media/NotificationPlayer.java
index 728d558..9788903 100644
--- a/packages/SystemUI/src/com/android/systemui/media/NotificationPlayer.java
+++ b/packages/SystemUI/src/com/android/systemui/media/NotificationPlayer.java
@@ -22,6 +22,7 @@
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.media.MediaPlayer.OnErrorListener;
+import android.media.PlayerBase;
import android.net.Uri;
import android.os.Looper;
import android.os.PowerManager;
@@ -81,6 +82,12 @@
(AudioManager) mCmd.context.getSystemService(Context.AUDIO_SERVICE);
try {
MediaPlayer player = new MediaPlayer();
+ if (mCmd.attributes == null) {
+ mCmd.attributes = new AudioAttributes.Builder()
+ .setUsage(AudioAttributes.USAGE_NOTIFICATION)
+ .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
+ .build();
+ }
player.setAudioAttributes(mCmd.attributes);
player.setDataSource(mCmd.context, mCmd.uri);
player.setLooping(mCmd.looping);
@@ -92,13 +99,11 @@
if (mAudioManagerWithAudioFocus == null) {
if (mDebug) Log.d(mTag, "requesting AudioFocus");
if (mCmd.looping) {
- audioManager.requestAudioFocus(null,
- AudioAttributes.toLegacyStreamType(mCmd.attributes),
- AudioManager.AUDIOFOCUS_GAIN);
+ audioManager.requestAudioFocus(null, mCmd.attributes,
+ AudioManager.AUDIOFOCUS_GAIN, 0);
} else {
- audioManager.requestAudioFocus(null,
- AudioAttributes.toLegacyStreamType(mCmd.attributes),
- AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK);
+ audioManager.requestAudioFocus(null, mCmd.attributes,
+ AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK, 0);
}
mAudioManagerWithAudioFocus = audioManager;
} else {
@@ -296,6 +301,7 @@
*/
@Deprecated
public void play(Context context, Uri uri, boolean looping, int stream) {
+ PlayerBase.deprecateStreamTypeForPlayback(stream, "NotificationPlayer", "play");
Command cmd = new Command();
cmd.requestTime = SystemClock.uptimeMillis();
cmd.code = PLAY;
diff --git a/packages/SystemUI/src/com/android/systemui/qs/PageIndicator.java b/packages/SystemUI/src/com/android/systemui/qs/PageIndicator.java
index 26da551..b22ea4c 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/PageIndicator.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/PageIndicator.java
@@ -1,9 +1,12 @@
package com.android.systemui.qs;
import android.content.Context;
+import android.content.res.ColorStateList;
+import android.content.res.TypedArray;
import android.graphics.drawable.AnimatedVectorDrawable;
import android.util.AttributeSet;
import android.util.Log;
+import android.util.TypedValue;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
@@ -49,9 +52,14 @@
while (numPages < getChildCount()) {
removeViewAt(getChildCount() - 1);
}
+ TypedArray array = getContext().obtainStyledAttributes(
+ new int[]{android.R.attr.colorForeground});
+ int color = array.getColor(0, 0);
+ array.recycle();
while (numPages > getChildCount()) {
ImageView v = new ImageView(mContext);
v.setImageResource(R.drawable.minor_a_b);
+ v.setImageTintList(ColorStateList.valueOf(color));
addView(v, new LayoutParams(mPageIndicatorWidth, mPageIndicatorHeight));
}
// Refresh state.
@@ -196,7 +204,7 @@
for (int i = 0; i < N; i++) {
getChildAt(i).measure(widthChildSpec, heightChildSpec);
}
- int width = (mPageIndicatorWidth - mPageDotWidth) * N + mPageDotWidth;
+ int width = (mPageIndicatorWidth - mPageDotWidth) * (N - 1) + mPageDotWidth;
setMeasuredDimension(width, mPageIndicatorHeight);
}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/PagedTileLayout.java b/packages/SystemUI/src/com/android/systemui/qs/PagedTileLayout.java
index 1c242e9..a231e79 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/PagedTileLayout.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/PagedTileLayout.java
@@ -29,7 +29,6 @@
private PageIndicator mPageIndicator;
private int mNumPages;
- private View mDecorGroup;
private PageListener mPageListener;
private int mPosition;
@@ -145,14 +144,14 @@
@Override
protected void onFinishInflate() {
super.onFinishInflate();
- mPageIndicator = (PageIndicator) findViewById(R.id.page_indicator);
- mDecorGroup = findViewById(R.id.page_decor);
- ((LayoutParams) mDecorGroup.getLayoutParams()).isDecor = true;
-
- mPages.add((TilePage) LayoutInflater.from(mContext)
+ mPages.add((TilePage) LayoutInflater.from(getContext())
.inflate(R.layout.qs_paged_page, this, false));
}
+ public void setPageIndicator(PageIndicator indicator) {
+ mPageIndicator = indicator;
+ }
+
@Override
public int getOffsetTop(TileRecord tile) {
final ViewGroup parent = (ViewGroup) tile.tileView.getParent();
@@ -196,7 +195,7 @@
if (++index == mPages.size()) {
if (DEBUG) Log.d(TAG, "Adding page for "
+ tile.tile.getClass().getSimpleName());
- mPages.add((TilePage) LayoutInflater.from(mContext)
+ mPages.add((TilePage) LayoutInflater.from(getContext())
.inflate(R.layout.qs_paged_page, this, false));
}
}
@@ -211,7 +210,7 @@
}
if (DEBUG) Log.d(TAG, "Size: " + mNumPages);
mPageIndicator.setNumPages(mNumPages);
- mDecorGroup.setVisibility(mNumPages > 1 ? View.VISIBLE : View.GONE);
+ mPageIndicator.setVisibility(mNumPages > 1 ? View.VISIBLE : View.GONE);
setAdapter(mAdapter);
mAdapter.notifyDataSetChanged();
setCurrentItem(0, false);
@@ -243,8 +242,7 @@
maxHeight = height;
}
}
- setMeasuredDimension(getMeasuredWidth(), maxHeight
- + (mDecorGroup.getVisibility() != View.GONE ? mDecorGroup.getMeasuredHeight() : 0));
+ setMeasuredDimension(getMeasuredWidth(), maxHeight);
}
private final Runnable mDistribute = new Runnable() {
@@ -265,7 +263,7 @@
public TilePage(Context context, AttributeSet attrs) {
super(context, attrs);
updateResources();
- setContentDescription(mContext.getString(R.string.accessibility_desc_quick_settings));
+ setContentDescription(getContext().getString(R.string.accessibility_desc_quick_settings));
}
@Override
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSAnimator.java b/packages/SystemUI/src/com/android/systemui/qs/QSAnimator.java
index fdefcf9..409943d 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/QSAnimator.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/QSAnimator.java
@@ -194,6 +194,7 @@
translationYBuilder.addFloat(label, "translationY", -yDiff, 0);
mTopFiveQs.add(tileIcon);
+ mTopFiveQs.add(tileView.getBgCicle());
mAllViews.add(tileIcon);
mAllViews.add(quickTileView);
} else if (mFullRows && isIconInAnimatedRow(count)) {
@@ -223,9 +224,10 @@
// Make brightness appear static position and alpha in through second half.
View brightness = mQsPanel.getBrightnessView();
if (brightness != null) {
- firstPageBuilder.addFloat(brightness, "translationY", mQsPanel.getHeight(), 0);
+// firstPageBuilder.addFloat(brightness, "translationY", mQsPanel.getHeight(), 0);
mBrightnessAnimator = new TouchAnimator.Builder()
.addFloat(brightness, "alpha", 0, 1)
+ .addFloat(mQsPanel.getPageIndicator(), "alpha", 0, 1)
.setStartDelay(.5f)
.build();
mAllViews.add(brightness);
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSContainerImpl.java b/packages/SystemUI/src/com/android/systemui/qs/QSContainerImpl.java
index f4da5ec..91b4d0d 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/QSContainerImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/QSContainerImpl.java
@@ -18,18 +18,12 @@
import android.content.Context;
import android.graphics.Point;
-import android.graphics.Rect;
import android.util.AttributeSet;
import android.view.View;
-import android.view.ViewGroup;
import android.widget.FrameLayout;
import com.android.systemui.R;
-import com.android.systemui.plugins.qs.QS.HeightListener;
import com.android.systemui.qs.customize.QSCustomizer;
-import com.android.systemui.statusbar.phone.NotificationsQuickSettingsContainer;
-import com.android.systemui.statusbar.phone.QSTileHost;
-import com.android.systemui.statusbar.phone.QuickStatusBarHeader;
/**
* Wrapper view with background which contains {@link QSPanel} and {@link BaseStatusBarHeader}
@@ -95,7 +89,7 @@
updateBottom();
}
- void updateBottom() {
+ public void updateBottom() {
int height = calculateContainerHeight();
setBottom(getTop() + height);
mQSDetail.setBottom(getTop() + height);
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSIconView.java b/packages/SystemUI/src/com/android/systemui/qs/QSIconView.java
index 9c4a149..f28a0e7 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/QSIconView.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/QSIconView.java
@@ -16,14 +16,20 @@
package com.android.systemui.qs;
+import static com.android.systemui.qs.QSTile.getColorForState;
+
+import android.animation.ValueAnimator;
import android.content.Context;
+import android.content.res.ColorStateList;
import android.content.res.Resources;
+import android.graphics.Color;
import android.graphics.drawable.Animatable;
import android.graphics.drawable.Drawable;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.ImageView.ScaleType;
+
import com.android.systemui.R;
import java.util.Objects;
@@ -34,6 +40,8 @@
protected final int mIconSizePx;
protected final int mTilePaddingBelowIconPx;
private boolean mAnimationEnabled = true;
+ private int mState = -1;
+ private int mTint;
public QSIconView(Context context) {
super(context);
@@ -65,7 +73,6 @@
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
final int w = getMeasuredWidth();
- final int h = getMeasuredHeight();
int top = 0;
final int iconLeft = (w - mIcon.getMeasuredWidth()) / 2;
layout(mIcon, iconLeft, top);
@@ -100,8 +107,43 @@
} else {
iv.clearColorFilter();
}
+ if (state.state != mState) {
+ int color = getColorForState(getContext(), state.state);
+ mState = state.state;
+ if (iv.isShown()) {
+ animateGrayScale(mTint, color, iv);
+ mTint = color;
+ } else {
+ setTint(iv, color);
+ mTint = color;
+ }
+ }
}
+ public static void animateGrayScale(int fromColor, int toColor, ImageView iv) {
+ final float fromAlpha = Color.alpha(fromColor);
+ final float toAlpha = Color.alpha(toColor);
+ final float fromChannel = Color.red(fromColor);
+ final float toChannel = Color.red(toColor);
+
+ ValueAnimator anim = ValueAnimator.ofFloat(0, 1);
+ anim.setDuration(350);
+
+ anim.addUpdateListener(animation -> {
+ float fraction = animation.getAnimatedFraction();
+ int alpha = (int) (fromAlpha + (toAlpha - fromAlpha) * fraction);
+ int channel = (int) (fromChannel + (toChannel - fromChannel) * fraction);
+
+ setTint(iv, Color.argb(alpha, channel, channel, channel));
+ });
+ anim.start();
+ }
+
+ public static void setTint(ImageView iv, int color) {
+ iv.setImageTintList(ColorStateList.valueOf(color));
+ }
+
+
protected int getIconMeasureMode() {
return MeasureSpec.EXACTLY;
}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java b/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java
index 9feaa0a..2de32cc 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java
@@ -54,6 +54,7 @@
protected final ArrayList<TileRecord> mRecords = new ArrayList<TileRecord>();
protected final View mBrightnessView;
private final H mHandler = new H();
+ private final View mPageIndicator;
private int mPanelPaddingBottom;
private int mBrightnessPaddingTop;
@@ -84,21 +85,31 @@
setOrientation(VERTICAL);
- mBrightnessView = LayoutInflater.from(context).inflate(
- R.layout.quick_settings_brightness_dialog, this, false);
- addView(mBrightnessView);
-
setupTileLayout();
mFooter = new QSFooter(this, context);
addView(mFooter.getView());
+ mPageIndicator = LayoutInflater.from(context).inflate(
+ R.layout.qs_page_indicator, this, false);
+ addView(mPageIndicator);
+ if (mTileLayout instanceof PagedTileLayout) {
+ ((PagedTileLayout) mTileLayout).setPageIndicator((PageIndicator) mPageIndicator);
+ }
+
updateResources();
+ mBrightnessView = LayoutInflater.from(context).inflate(
+ R.layout.quick_settings_brightness_dialog, this, false);
+ addView(mBrightnessView);
+
mBrightnessController = new BrightnessController(getContext(),
(ImageView) findViewById(R.id.brightness_icon),
(ToggleSliderView) findViewById(R.id.brightness_slider));
+ }
+ public View getPageIndicator() {
+ return mPageIndicator;
}
protected void setupTileLayout() {
@@ -359,20 +370,10 @@
};
r.tile.addCallback(callback);
r.callback = callback;
- final View.OnClickListener click = new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- onTileClick(r.tile);
- }
- };
- final View.OnLongClickListener longClick = new View.OnLongClickListener() {
- @Override
- public boolean onLongClick(View v) {
- r.tile.longClick();
- return true;
- }
- };
- r.tileView.init(click, longClick);
+ r.tileView.init(v -> r.tile.click(), v -> r.tile.secondaryClick(), v -> {
+ r.tile.longClick();
+ return true;
+ });
r.tile.refreshState();
mRecords.add(r);
@@ -402,10 +403,6 @@
});
}
- protected void onTileClick(QSTile<?> tile) {
- tile.click();
- }
-
public void closeDetail() {
if (mCustomizePanel != null && mCustomizePanel.isShown()) {
// Treat this as a detail panel for now, to make things easy.
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSTile.java b/packages/SystemUI/src/com/android/systemui/qs/QSTile.java
index f73241c..dad37b0 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/QSTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/QSTile.java
@@ -24,6 +24,7 @@
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
+import android.service.quicksettings.Tile;
import android.util.ArraySet;
import android.util.Log;
import android.util.SparseArray;
@@ -52,8 +53,12 @@
import java.util.Collection;
import java.util.Objects;
+import com.android.settingslib.Utils;
+
import static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
+import com.android.systemui.R;
+
/**
* Base quick-settings tile, extend this to create a new tile.
*
@@ -79,7 +84,9 @@
private String mTileSpec;
public abstract TState newTileState();
+
abstract protected void handleClick();
+
abstract protected void handleUpdateState(TState state, Object arg);
/**
@@ -134,7 +141,9 @@
return null; // optional
}
- protected DetailAdapter createDetailAdapter() { throw new UnsupportedOperationException(); }
+ protected DetailAdapter createDetailAdapter() {
+ throw new UnsupportedOperationException();
+ }
/**
* Is a startup check whether this device currently supports this tile.
@@ -319,6 +328,21 @@
public abstract CharSequence getTileLabel();
+ public static int getColorForState(Context context, int state) {
+ switch (state) {
+ case Tile.STATE_UNAVAILABLE:
+ return Utils.getDisabled(context,
+ Utils.getColorAttr(context, android.R.attr.textColorTertiary));
+ case Tile.STATE_INACTIVE:
+ return Utils.getColorAttr(context, android.R.attr.textColorSecondary);
+ case Tile.STATE_ACTIVE:
+ return Utils.getColorAttr(context, android.R.attr.colorPrimary);
+ default:
+ Log.e("QSTile", "Invalid state " + state);
+ return 0;
+ }
+ }
+
protected final class H extends Handler {
private static final int ADD_CALLBACK = 1;
private static final int CLICK = 2;
@@ -546,6 +570,7 @@
public static class State {
public Icon icon;
+ public int state = Tile.STATE_ACTIVE;
public CharSequence label;
public CharSequence contentDescription;
public CharSequence dualLabelContentDescription;
@@ -572,6 +597,7 @@
|| !Objects.equals(other.expandedAccessibilityClassName,
expandedAccessibilityClassName)
|| !Objects.equals(other.disabledByPolicy, disabledByPolicy)
+ || !Objects.equals(other.state, state)
|| !Objects.equals(other.enforcedAdmin, enforcedAdmin);
other.icon = icon;
other.label = label;
@@ -582,6 +608,7 @@
other.expandedAccessibilityClassName = expandedAccessibilityClassName;
other.autoMirrorDrawable = autoMirrorDrawable;
other.disabledByPolicy = disabledByPolicy;
+ other.state = state;
if (enforcedAdmin == null) {
other.enforcedAdmin = null;
} else if (other.enforcedAdmin == null) {
@@ -609,6 +636,7 @@
sb.append(",autoMirrorDrawable=").append(autoMirrorDrawable);
sb.append(",disabledByPolicy=").append(disabledByPolicy);
sb.append(",enforcedAdmin=").append(enforcedAdmin);
+ sb.append(",state=").append(state);
return sb.append(']');
}
}
@@ -648,7 +676,6 @@
public boolean connected;
public boolean activityIn;
public boolean activityOut;
- public int overlayIconId;
public boolean filter;
public boolean isOverlayIconWide;
@@ -657,12 +684,10 @@
final SignalState o = (SignalState) other;
final boolean changed = o.connected != connected || o.activityIn != activityIn
|| o.activityOut != activityOut
- || o.overlayIconId != overlayIconId
|| o.isOverlayIconWide != isOverlayIconWide;
o.connected = connected;
o.activityIn = activityIn;
o.activityOut = activityOut;
- o.overlayIconId = overlayIconId;
o.filter = filter;
o.isOverlayIconWide = isOverlayIconWide;
return super.copyTo(other) || changed;
@@ -674,7 +699,6 @@
rt.insert(rt.length() - 1, ",connected=" + connected);
rt.insert(rt.length() - 1, ",activityIn=" + activityIn);
rt.insert(rt.length() - 1, ",activityOut=" + activityOut);
- rt.insert(rt.length() - 1, ",overlayIconId=" + overlayIconId);
rt.insert(rt.length() - 1, ",filter=" + filter);
rt.insert(rt.length() - 1, ",wideOverlayIcon=" + isOverlayIconWide);
return rt;
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSTileBaseView.java b/packages/SystemUI/src/com/android/systemui/qs/QSTileBaseView.java
index 2b7fcc5..a177cc3 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/QSTileBaseView.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/QSTileBaseView.java
@@ -15,31 +15,49 @@
*/
package com.android.systemui.qs;
+import android.animation.ValueAnimator;
import android.content.Context;
+import android.content.res.ColorStateList;
import android.content.res.TypedArray;
+import android.graphics.Color;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.RippleDrawable;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
+import android.service.quicksettings.Tile;
import android.text.TextUtils;
+import android.util.Log;
+import android.view.Gravity;
import android.view.View;
+import android.view.ViewGroup;
import android.view.accessibility.AccessibilityEvent;
import android.view.accessibility.AccessibilityNodeInfo;
+import android.widget.FrameLayout;
+import android.widget.ImageView;
+import android.widget.ImageView.ScaleType;
import android.widget.LinearLayout;
import android.widget.Switch;
+import com.android.settingslib.Utils;
+
import com.android.systemui.R;
public class QSTileBaseView extends LinearLayout {
+ private static final String TAG = "QSTileBaseView";
private final H mHandler = new H();
+ private final ImageView mBg;
protected QSIconView mIcon;
protected RippleDrawable mRipple;
private Drawable mTileBackground;
private String mAccessibilityClass;
private boolean mTileState;
private boolean mCollapsedView;
+ private final int mColorActive;
+ private final int mColorInactive;
+ private final int mColorDisabled;
+ private int mCircleColor;
public QSTileBaseView(Context context, QSIconView icon) {
this(context, icon, false);
@@ -47,8 +65,26 @@
public QSTileBaseView(Context context, QSIconView icon, boolean collapsedView) {
super(context);
+ // Default to Quick Tile padding, and QSTileView will specify its own padding.
+ int padding = context.getResources().getDimensionPixelSize(R.dimen.qs_quick_tile_padding);
+
+ FrameLayout frame = new FrameLayout(context);
+ frame.setForegroundGravity(Gravity.CENTER);
+ int size = context.getResources().getDimensionPixelSize(R.dimen.qs_quick_tile_size);
+ addView(frame, new LayoutParams(size, size));
+ mBg = new ImageView(getContext());
+ mBg.setScaleType(ScaleType.FIT_CENTER);
+ mBg.setImageResource(R.drawable.ic_qs_circle);
+ frame.addView(mBg);
mIcon = icon;
- addView(mIcon);
+ FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(
+ ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
+ params.setMargins(0, padding, 0, padding);
+ frame.addView(mIcon, params);
+ mColorActive = Utils.getColorAttr(context, android.R.attr.textColorPrimary);
+ mColorDisabled = Utils.getDisabled(context,
+ Utils.getColorAttr(context, android.R.attr.textColorTertiary));
+ mColorInactive = Utils.getColorAttr(context, android.R.attr.textColorSecondary);
mTileBackground = newTileBackground();
if (mTileBackground instanceof RippleDrawable) {
@@ -57,18 +93,20 @@
setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_YES);
setBackground(mTileBackground);
- // Default to Quick Tile padding, and QSTileView will specify its own padding.
- int padding = context.getResources().getDimensionPixelSize(R.dimen.qs_quick_tile_padding);
- setPadding(0, padding, 0, padding);
+ setPadding(0, 0, 0, 0);
setClipChildren(false);
setClipToPadding(false);
mCollapsedView = collapsedView;
setFocusable(true);
}
+ public View getBgCicle() {
+ return mBg;
+ }
+
protected Drawable newTileBackground() {
- final int[] attrs = new int[] { android.R.attr.selectableItemBackgroundBorderless };
- final TypedArray ta = mContext.obtainStyledAttributes(attrs);
+ final int[] attrs = new int[]{android.R.attr.selectableItemBackgroundBorderless};
+ final TypedArray ta = getContext().obtainStyledAttributes(attrs);
final Drawable d = ta.getDrawable(0);
ta.recycle();
return d;
@@ -85,11 +123,12 @@
// center the touch feedback on the center of the icon, and dial it down a bit
final int cx = width / 2;
final int cy = height / 2;
- final int rad = (int)(mIcon.getHeight() * .85f);
+ final int rad = (int) (mIcon.getHeight() * .85f);
mRipple.setHotspotBounds(cx - rad, cy - rad, cx + rad, cy + rad);
}
- public void init(OnClickListener click, OnLongClickListener longClick) {
+ public void init(OnClickListener click, OnClickListener secondaryClick,
+ OnLongClickListener longClick) {
setClickable(true);
setOnClickListener(click);
setOnLongClickListener(longClick);
@@ -128,6 +167,16 @@
}
protected void handleStateChanged(QSTile.State state) {
+ int circleColor = getCircleColor(state.state);
+ if (circleColor != mCircleColor) {
+ if (mBg.isShown()) {
+ QSIconView.animateGrayScale(mCircleColor, circleColor, mBg);
+ } else {
+ QSIconView.setTint(mBg, circleColor);
+ }
+ mCircleColor = circleColor;
+ }
+
mIcon.setIcon(state);
if (mCollapsedView && !TextUtils.isEmpty(state.minimalContentDescription)) {
setContentDescription(state.minimalContentDescription);
@@ -144,6 +193,19 @@
}
}
+ private int getCircleColor(int state) {
+ switch (state) {
+ case Tile.STATE_ACTIVE:
+ return mColorActive;
+ case Tile.STATE_INACTIVE:
+ case Tile.STATE_UNAVAILABLE:
+ return mColorDisabled;
+ default:
+ Log.e(TAG, "Invalid state " + state);
+ return 0;
+ }
+ }
+
public QSIconView getIcon() {
return mIcon;
}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSTileView.java b/packages/SystemUI/src/com/android/systemui/qs/QSTileView.java
index e59873a..7126f3c 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/QSTileView.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/QSTileView.java
@@ -16,27 +16,34 @@
package com.android.systemui.qs;
+import static com.android.systemui.qs.QSTile.getColorForState;
+
import android.content.Context;
import android.content.res.Configuration;
-import android.content.res.Resources;
-import android.util.MathUtils;
+import android.service.quicksettings.Tile;
+import android.text.SpannableStringBuilder;
+import android.text.style.ForegroundColorSpan;
import android.view.Gravity;
import android.view.LayoutInflater;
+import android.view.MotionEvent;
import android.view.View;
+import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import com.android.systemui.FontSizeUtils;
import com.android.systemui.R;
+
import libcore.util.Objects;
/** View that represents a standard quick settings tile. **/
public class QSTileView extends QSTileBaseView {
- private final int mTileSpacingPx;
- private int mTilePaddingTopPx;
protected TextView mLabel;
private ImageView mPadLock;
+ private int mState;
+ private OnClickListener mClick;
+ private OnClickListener mSecondaryClick;
public QSTileView(Context context, QSIconView icon) {
this(context, icon, false);
@@ -45,13 +52,10 @@
public QSTileView(Context context, QSIconView icon, boolean collapsedView) {
super(context, icon, collapsedView);
- final Resources res = context.getResources();
- mTileSpacingPx = res.getDimensionPixelSize(R.dimen.qs_tile_spacing);
-
setClipChildren(false);
+ setClipToPadding(false);
setClickable(true);
- updateTopPadding();
setId(View.generateViewId());
createLabel();
setOrientation(VERTICAL);
@@ -62,27 +66,17 @@
return mLabel;
}
- protected void updateTopPadding() {
- Resources res = getResources();
- int padding = res.getDimensionPixelSize(R.dimen.qs_tile_padding_top);
- int largePadding = res.getDimensionPixelSize(R.dimen.qs_tile_padding_top_large_text);
- float largeFactor = (MathUtils.constrain(getResources().getConfiguration().fontScale,
- 1.0f, FontSizeUtils.LARGE_TEXT_SCALE) - 1f) / (FontSizeUtils.LARGE_TEXT_SCALE - 1f);
- mTilePaddingTopPx = Math.round((1 - largeFactor) * padding + largeFactor * largePadding);
- setPadding(mTileSpacingPx, mTilePaddingTopPx + mTileSpacingPx, mTileSpacingPx,
- mTileSpacingPx);
- requestLayout();
- }
-
@Override
protected void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
- updateTopPadding();
FontSizeUtils.updateFontSize(mLabel, R.dimen.qs_tile_text_size);
}
protected void createLabel() {
- View view = LayoutInflater.from(mContext).inflate(R.layout.qs_tile_label, null);
+ ViewGroup view = (ViewGroup) LayoutInflater.from(getContext())
+ .inflate(R.layout.qs_tile_label, null);
+ view.setClipChildren(false);
+ view.setClipToPadding(false);
mLabel = (TextView) view.findViewById(R.id.tile_label);
mPadLock = (ImageView) view.findViewById(R.id.restricted_padlock);
addView(view);
@@ -91,10 +85,32 @@
@Override
protected void handleStateChanged(QSTile.State state) {
super.handleStateChanged(state);
- if (!Objects.equal(mLabel.getText(), state.label)) {
+ if (!Objects.equal(mLabel.getText(), state.label) || mState != state.state) {
+ if (state.state == Tile.STATE_UNAVAILABLE) {
+ int color = getColorForState(getContext(), state.state);
+ state.label = new SpannableStringBuilder().append(state.label,
+ new ForegroundColorSpan(color),
+ SpannableStringBuilder.SPAN_INCLUSIVE_INCLUSIVE);
+ }
+ mState = state.state;
mLabel.setText(state.label);
}
mLabel.setEnabled(!state.disabledByPolicy);
mPadLock.setVisibility(state.disabledByPolicy ? View.VISIBLE : View.GONE);
}
+
+ @Override
+ public void init(OnClickListener click, OnClickListener secondaryClick, OnLongClickListener longClick) {
+ mClick = click;
+ mSecondaryClick = secondaryClick;
+ super.init(click, secondaryClick, longClick);
+ }
+
+ @Override
+ public boolean onTouchEvent(MotionEvent event) {
+ if (event.getActionMasked() == MotionEvent.ACTION_UP) {
+ setOnClickListener(event.getY() < (getMeasuredHeight() / 2) ? mClick : mSecondaryClick);
+ }
+ return super.onTouchEvent(event);
+ }
}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QuickQSPanel.java b/packages/SystemUI/src/com/android/systemui/qs/QuickQSPanel.java
index de3e19c..16b351e 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/QuickQSPanel.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/QuickQSPanel.java
@@ -56,7 +56,7 @@
}
mTileLayout = new HeaderTileLayout(context);
mTileLayout.setListening(mListening);
- addView((View) mTileLayout, 1 /* Between brightness and footer */);
+ addView((View) mTileLayout, 0 /* Between brightness and footer */);
}
@Override
@@ -113,11 +113,6 @@
}
@Override
- protected void onTileClick(QSTile<?> tile) {
- tile.secondaryClick();
- }
-
- @Override
public void onTuningChanged(String key, String newValue) {
// No tunings for you.
if (key.equals(QS_SHOW_BRIGHTNESS)) {
diff --git a/packages/SystemUI/src/com/android/systemui/qs/SignalTileView.java b/packages/SystemUI/src/com/android/systemui/qs/SignalTileView.java
index b2bfa06..8555e31 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/SignalTileView.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/SignalTileView.java
@@ -33,7 +33,6 @@
private FrameLayout mIconFrame;
private ImageView mSignal;
- private ImageView mOverlay;
private ImageView mIn;
private ImageView mOut;
@@ -62,8 +61,6 @@
mIconFrame = new FrameLayout(mContext);
mSignal = new ImageView(mContext);
mIconFrame.addView(mSignal);
- mOverlay = new ImageView(mContext);
- mIconFrame.addView(mOverlay, LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
return mIconFrame;
}
@@ -109,17 +106,6 @@
public void setIcon(QSTile.State state) {
final SignalState s = (SignalState) state;
setIcon(mSignal, s);
- if (s.overlayIconId > 0) {
- mOverlay.setVisibility(VISIBLE);
- mOverlay.setImageResource(s.overlayIconId);
- } else {
- mOverlay.setVisibility(GONE);
- }
- if (s.overlayIconId > 0 && s.isOverlayIconWide) {
- mSignal.setPaddingRelative(mWideOverlayIconStartPadding, 0, 0, 0);
- } else {
- mSignal.setPaddingRelative(0, 0, 0, 0);
- }
Drawable drawable = mSignal.getDrawable();
if (state.autoMirrorDrawable && drawable != null) {
drawable.setAutoMirrored(true);
diff --git a/packages/SystemUI/src/com/android/systemui/qs/external/CustomTile.java b/packages/SystemUI/src/com/android/systemui/qs/external/CustomTile.java
index 9e3889b..cff4846 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/external/CustomTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/external/CustomTile.java
@@ -15,15 +15,10 @@
*/
package com.android.systemui.qs.external;
-import static android.view.Display.DEFAULT_DISPLAY;
-import static android.view.WindowManager.LayoutParams.TYPE_QS_DIALOG;
-
import android.app.ActivityManager;
import android.content.ComponentName;
-import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
-import android.content.pm.PackageManager.NameNotFoundException;
import android.content.pm.ResolveInfo;
import android.content.pm.ServiceInfo;
import android.graphics.drawable.Drawable;
@@ -39,14 +34,19 @@
import android.text.style.ForegroundColorSpan;
import android.util.Log;
import android.view.IWindowManager;
+import android.view.WindowManager;
import android.view.WindowManagerGlobal;
import com.android.internal.logging.MetricsLogger;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
+import com.android.systemui.R;
import com.android.systemui.qs.QSTile;
import com.android.systemui.qs.external.TileLifecycleManager.TileChangeListener;
import com.android.systemui.statusbar.phone.QSTileHost;
import libcore.util.Objects;
+import static android.view.Display.DEFAULT_DISPLAY;
+import static android.view.WindowManager.LayoutParams.TYPE_QS_DIALOG;
+
public class CustomTile extends QSTile<QSTile.State> implements TileChangeListener {
public static final String PREFIX = "custom(";
@@ -63,7 +63,6 @@
private final IQSTileService mService;
private final TileServiceManager mServiceManager;
private final int mUser;
- private Context mAppContext;
private android.graphics.drawable.Icon mDefaultIcon;
private boolean mListening;
@@ -81,10 +80,6 @@
mService = mServiceManager.getTileService();
mServiceManager.setTileChangeListener(this);
mUser = ActivityManager.getCurrentUser();
- try {
- mAppContext = mContext.createPackageContext(mComponent.getPackageName(), 0);
- } catch (NameNotFoundException e) {
- }
}
private void setTileIcon() {
@@ -287,27 +282,17 @@
if (mServiceManager.hasPendingBind()) {
tileState = Tile.STATE_UNAVAILABLE;
}
+ state.state = tileState;
Drawable drawable;
- boolean mHasRes = false;
- android.graphics.drawable.Icon icon = mTile.getIcon();
try {
- drawable = icon.loadDrawable(mAppContext);
- mHasRes = icon.getType() == android.graphics.drawable.Icon.TYPE_RESOURCE;
+ drawable = mTile.getIcon().loadDrawable(mContext);
} catch (Exception e) {
Log.w(TAG, "Invalid icon, forcing into unavailable state");
tileState = Tile.STATE_UNAVAILABLE;
- drawable = mDefaultIcon.loadDrawable(mAppContext);
+ drawable = mDefaultIcon.loadDrawable(mContext);
}
- final int color = TileColorPicker.getInstance(mContext).getColor(tileState);
- drawable.setTint(color);
- state.icon = mHasRes ? new DrawableIconWithRes(drawable, icon.getResId())
- : new DrawableIcon(drawable);
+ state.icon = new DrawableIcon(drawable);
state.label = mTile.getLabel();
- if (tileState == Tile.STATE_UNAVAILABLE) {
- state.label = new SpannableStringBuilder().append(state.label,
- new ForegroundColorSpan(color),
- SpannableStringBuilder.SPAN_INCLUSIVE_INCLUSIVE);
- }
if (mTile.getContentDescription() != null) {
state.contentDescription = mTile.getContentDescription();
} else {
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/AirplaneModeTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/AirplaneModeTile.java
index e57cd58..e8f90ac 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/AirplaneModeTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/AirplaneModeTile.java
@@ -23,6 +23,7 @@
import android.net.ConnectivityManager;
import android.provider.Settings;
import android.provider.Settings.Global;
+import android.service.quicksettings.Tile;
import android.widget.Switch;
import com.android.internal.logging.MetricsLogger;
@@ -92,6 +93,7 @@
} else {
state.icon = mDisable;
}
+ state.state = airplaneMode ? Tile.STATE_ACTIVE : Tile.STATE_INACTIVE;
state.contentDescription = state.label;
state.minimalAccessibilityClassName = state.expandedAccessibilityClassName
= Switch.class.getName();
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/BatteryTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/BatteryTile.java
index 833375e..a82f550 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/BatteryTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/BatteryTile.java
@@ -19,10 +19,7 @@
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
-import android.graphics.PorterDuff.Mode;
-import android.graphics.PorterDuffColorFilter;
import android.graphics.drawable.Drawable;
-import android.os.Handler;
import android.service.quicksettings.Tile;
import android.text.SpannableStringBuilder;
import android.text.Spanned;
@@ -44,7 +41,6 @@
import com.android.systemui.R;
import com.android.systemui.plugins.qs.QS.DetailAdapter;
import com.android.systemui.qs.QSTile;
-import com.android.systemui.qs.external.TileColorPicker;
import com.android.systemui.statusbar.phone.PhoneStatusBar;
import com.android.systemui.statusbar.policy.BatteryController;
@@ -105,6 +101,11 @@
@Override
protected void handleClick() {
+ mBatteryController.setPowerSaveMode(!mPowerSave);
+ }
+
+ @Override
+ protected void handleSecondaryClick() {
showDetail(true);
}
@@ -118,26 +119,10 @@
int level = (arg != null) ? (Integer) arg : mLevel;
String percentage = NumberFormat.getPercentInstance().format((double) level / 100.0);
- state.icon = new Icon() {
- @Override
- public Drawable getDrawable(Context context) {
- BatteryMeterDrawable drawable =
- new BatteryMeterDrawable(context,
- context.getColor(R.color.batterymeter_frame_color));
- drawable.onBatteryLevelChanged(mLevel, mPluggedIn, mCharging);
- drawable.onPowerSaveChanged(mPowerSave);
- final int color = TileColorPicker.getInstance(context).getColor(Tile.STATE_ACTIVE);
- drawable.setColorFilter(new PorterDuffColorFilter(color, Mode.SRC_IN));
- return drawable;
- }
-
- @Override
- public int getPadding() {
- return mHost.getContext().getResources().getDimensionPixelSize(
- R.dimen.qs_battery_padding);
- }
- };
- state.label = percentage;
+ state.state = mCharging ? Tile.STATE_UNAVAILABLE
+ : mPowerSave ? Tile.STATE_ACTIVE : Tile.STATE_INACTIVE;
+ state.icon = ResourceIcon.get(R.drawable.ic_qs_battery_saver);
+ state.label = mContext.getString(R.string.battery_detail_switch_title);
state.contentDescription = mContext.getString(R.string.accessibility_quick_settings_battery,
percentage) + "," +
(mPowerSave ? mContext.getString(R.string.battery_saver_notification_title)
@@ -153,7 +138,7 @@
mLevel = level;
mPluggedIn = pluggedIn;
mCharging = charging;
- refreshState((Integer) level);
+ refreshState(level);
if (mDetailShown) {
mBatteryDetail.postBindView();
}
@@ -213,11 +198,6 @@
mDrawable.onBatteryLevelChanged(100, false, false);
mDrawable.onPowerSaveChanged(true);
mDrawable.disableShowPercent();
-
- final int color = TileColorPicker.getInstance(mCurrentView.getContext())
- .getColor(Tile.STATE_ACTIVE);
- mDrawable.setColorFilter(new PorterDuffColorFilter(color, Mode.SRC_IN));
-
((ImageView) mCurrentView.findViewById(android.R.id.icon)).setImageDrawable(mDrawable);
Checkable checkbox = (Checkable) mCurrentView.findViewById(android.R.id.toggle);
checkbox.setChecked(mPowerSave);
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/BluetoothTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/BluetoothTile.java
index f83b279..15f3c90 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/BluetoothTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/BluetoothTile.java
@@ -22,6 +22,7 @@
import android.content.Context;
import android.content.Intent;
import android.provider.Settings;
+import android.service.quicksettings.Tile;
import android.text.TextUtils;
import android.view.View;
import android.view.ViewGroup;
@@ -74,7 +75,7 @@
}
@Override
- protected void handleSecondaryClick() {
+ protected void handleClick() {
// Secondary clicks are header clicks, just toggle.
final boolean isEnabled = (Boolean)mState.value;
MetricsLogger.action(mContext, getMetricsCategory(), !isEnabled);
@@ -87,7 +88,7 @@
}
@Override
- protected void handleClick() {
+ protected void handleSecondaryClick() {
if (!mController.canConfigBluetooth()) {
mHost.startActivityDismissingKeyguard(new Intent(Settings.ACTION_BLUETOOTH_SETTINGS));
return;
@@ -140,11 +141,13 @@
if (TextUtils.isEmpty(state.label)) {
state.label = mContext.getString(R.string.quick_settings_bluetooth_label);
}
+ state.state = Tile.STATE_ACTIVE;
} else {
state.icon = ResourceIcon.get(R.drawable.ic_qs_bluetooth_off);
state.label = mContext.getString(R.string.quick_settings_bluetooth_label);
state.contentDescription = mContext.getString(
R.string.accessibility_quick_settings_bluetooth_off);
+ state.state = Tile.STATE_INACTIVE;
}
CharSequence bluetoothName = state.label;
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/CastTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/CastTile.java
index 8afa91e..d61e2f2 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/CastTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/CastTile.java
@@ -19,6 +19,7 @@
import android.content.Context;
import android.content.Intent;
import android.provider.Settings;
+import android.service.quicksettings.Tile;
import android.util.Log;
import android.view.View;
import android.view.View.OnAttachStateChangeListener;
@@ -93,6 +94,11 @@
}
@Override
+ protected void handleSecondaryClick() {
+ handleClick();
+ }
+
+ @Override
protected void handleClick() {
if (mKeyguard.isSecure() && !mKeyguard.canSkipBouncer()) {
mHost.startRunnableDismissingKeyguard(new Runnable() {
@@ -135,6 +141,7 @@
if (!state.value && connecting) {
state.label = mContext.getString(R.string.quick_settings_connecting);
}
+ state.state = state.value ? Tile.STATE_ACTIVE : Tile.STATE_INACTIVE;
state.icon = ResourceIcon.get(state.value ? R.drawable.ic_qs_cast_on
: R.drawable.ic_qs_cast_off);
mDetailAdapter.updateItems(devices);
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/CellularTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/CellularTile.java
index 1406c9f..5f7c803 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/CellularTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/CellularTile.java
@@ -20,6 +20,7 @@
import android.content.Context;
import android.content.Intent;
import android.content.res.Resources;
+import android.service.quicksettings.Tile;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -86,6 +87,11 @@
@Override
protected void handleClick() {
+ mDataController.setMobileDataEnabled(!mDataController.isMobileDataEnabled());
+ }
+
+ @Override
+ protected void handleSecondaryClick() {
MetricsLogger.action(mContext, getMetricsCategory());
if (mDataController.isMobileDataSupported()) {
showDetail(true);
@@ -111,10 +117,13 @@
: !cb.enabled || cb.airplaneModeEnabled ? R.drawable.ic_qs_signal_disabled
: cb.mobileSignalIconId > 0 ? cb.mobileSignalIconId
: R.drawable.ic_qs_signal_no_signal;
- state.icon = ResourceIcon.get(iconId);
+ if (cb.dataTypeIconId != 0) {
+ state.icon = ResourceIcon.get(cb.dataTypeIconId);
+ } else {
+ state.icon = ResourceIcon.get(iconId);
+ }
state.isOverlayIconWide = cb.isDataTypeIconWide;
state.autoMirrorDrawable = !cb.noSim;
- state.overlayIconId = cb.enabled && (cb.dataTypeIconId > 0) ? cb.dataTypeIconId : 0;
state.filter = iconId != R.drawable.ic_qs_no_sim;
state.activityIn = cb.enabled && cb.activityIn;
state.activityOut = cb.enabled && cb.activityOut;
@@ -148,6 +157,7 @@
= Button.class.getName();
state.value = mDataController.isMobileDataSupported()
&& mDataController.isMobileDataEnabled();
+ state.state = state.value ? Tile.STATE_ACTIVE : Tile.STATE_INACTIVE;
}
@Override
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/ColorInversionTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/ColorInversionTile.java
index 77f063d..0a8afb0 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/ColorInversionTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/ColorInversionTile.java
@@ -19,6 +19,7 @@
import android.content.Intent;
import android.provider.Settings;
import android.provider.Settings.Secure;
+import android.service.quicksettings.Tile;
import android.widget.Switch;
import com.android.internal.logging.MetricsLogger;
@@ -95,6 +96,7 @@
final int value = arg instanceof Integer ? (Integer) arg : mSetting.getValue();
final boolean enabled = value != 0;
state.value = enabled;
+ state.state = state.value ? Tile.STATE_ACTIVE : Tile.STATE_INACTIVE;
state.label = mContext.getString(R.string.quick_settings_inversion_label);
state.icon = enabled ? mEnable : mDisable;
state.minimalAccessibilityClassName = state.expandedAccessibilityClassName
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/DataSaverTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/DataSaverTile.java
index 65432dc..aadc8e7 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/DataSaverTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/DataSaverTile.java
@@ -16,6 +16,7 @@
import android.content.DialogInterface;
import android.content.Intent;
+import android.service.quicksettings.Tile;
import android.widget.Switch;
import com.android.internal.logging.MetricsLogger;
@@ -96,6 +97,7 @@
protected void handleUpdateState(BooleanState state, Object arg) {
state.value = arg instanceof Boolean ? (Boolean) arg
: mDataSaverController.isDataSaverEnabled();
+ state.state = state.value ? Tile.STATE_ACTIVE : Tile.STATE_INACTIVE;
state.label = mContext.getString(R.string.data_saver);
state.contentDescription = state.label;
state.icon = ResourceIcon.get(state.value ? R.drawable.ic_data_saver
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/DndTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/DndTile.java
index 198375d..a25b7ea 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/DndTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/DndTile.java
@@ -25,6 +25,7 @@
import android.os.UserManager;
import android.provider.Settings;
import android.provider.Settings.Global;
+import android.service.quicksettings.Tile;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnAttachStateChangeListener;
@@ -121,7 +122,17 @@
}
@Override
- public void handleClick() {
+ protected void handleClick() {
+ if (mState.value) {
+ mController.setZen(Global.ZEN_MODE_OFF, null, TAG);
+ } else {
+ int zen = Prefs.getInt(mContext, Prefs.Key.DND_FAVORITE_ZEN, Global.ZEN_MODE_ALARMS);
+ mController.setZen(zen, null, TAG);
+ }
+ }
+
+ @Override
+ protected void handleSecondaryClick() {
if (mController.isVolumeRestricted()) {
// Collapse the panels, so the user can see the toast.
mHost.collapsePanels();
@@ -131,13 +142,9 @@
return;
}
MetricsLogger.action(mContext, getMetricsCategory(), !mState.value);
- if (mState.value) {
- mController.setZen(Global.ZEN_MODE_OFF, null, TAG);
- } else {
- showDetail(true);
- int zen = Prefs.getInt(mContext, Prefs.Key.DND_FAVORITE_ZEN, Global.ZEN_MODE_ALARMS);
- mController.setZen(zen, null, TAG);
- }
+ showDetail(true);
+ int zen = Prefs.getInt(mContext, Prefs.Key.DND_FAVORITE_ZEN, Global.ZEN_MODE_ALARMS);
+ mController.setZen(zen, null, TAG);
}
@Override
@@ -151,6 +158,7 @@
final boolean newValue = zen != Global.ZEN_MODE_OFF;
final boolean valueChanged = state.value != newValue;
state.value = newValue;
+ state.state = state.value ? Tile.STATE_ACTIVE : Tile.STATE_INACTIVE;
checkIfRestrictionEnforcedByAdminOnly(state, UserManager.DISALLOW_ADJUST_VOLUME);
switch (zen) {
case Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS:
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/FlashlightTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/FlashlightTile.java
index 416c7ce..4bbc458 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/FlashlightTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/FlashlightTile.java
@@ -29,7 +29,6 @@
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.systemui.R;
import com.android.systemui.qs.QSTile;
-import com.android.systemui.qs.external.TileColorPicker;
import com.android.systemui.statusbar.policy.FlashlightController;
/** Quick settings tile: Control flashlight **/
@@ -47,11 +46,13 @@
public FlashlightTile(Host host) {
super(host);
mFlashlightController = host.getFlashlightController();
+ mFlashlightController.addCallback(this);
}
@Override
protected void handleDestroy() {
super.handleDestroy();
+ mFlashlightController.removeCallback(this);
}
@Override
@@ -107,17 +108,12 @@
protected void handleUpdateState(BooleanState state, Object arg) {
state.label = mHost.getContext().getString(R.string.quick_settings_flashlight_label);
if (!mFlashlightController.isAvailable()) {
- Drawable icon = mHost.getContext().getDrawable(R.drawable.ic_signal_flashlight_disable)
+ Drawable icon = mHost.getContext().getDrawable(R.drawable.ic_signal_flashlight_enable)
.mutate();
- final int disabledColor = TileColorPicker.getInstance(mContext)
- .getColor(Tile.STATE_UNAVAILABLE);
- icon.setTint(disabledColor);
state.icon = new DrawableIcon(icon);
- state.label = new SpannableStringBuilder().append(state.label,
- new ForegroundColorSpan(disabledColor),
- SpannableStringBuilder.SPAN_INCLUSIVE_INCLUSIVE);
state.contentDescription = mContext.getString(
R.string.accessibility_quick_settings_flashlight_unavailable);
+ state.state = Tile.STATE_UNAVAILABLE;
return;
}
if (arg instanceof Boolean) {
@@ -134,6 +130,7 @@
state.contentDescription = mContext.getString(R.string.quick_settings_flashlight_label);
state.minimalAccessibilityClassName = state.expandedAccessibilityClassName
= Switch.class.getName();
+ state.state = state.value ? Tile.STATE_ACTIVE : Tile.STATE_INACTIVE;
}
@Override
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/HotspotTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/HotspotTile.java
index 99485bb..9d495ce 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/HotspotTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/HotspotTile.java
@@ -32,7 +32,6 @@
import com.android.systemui.R;
import com.android.systemui.qs.GlobalSetting;
import com.android.systemui.qs.QSTile;
-import com.android.systemui.qs.external.TileColorPicker;
import com.android.systemui.statusbar.policy.HotspotController;
/** Quick settings tile: Hotspot **/
@@ -126,11 +125,6 @@
boolean wasAirplane = state.isAirplaneMode;
state.isAirplaneMode = mAirplaneMode.getValue() != 0;
if (state.isAirplaneMode) {
- final int disabledColor = TileColorPicker.getInstance(mContext)
- .getColor(Tile.STATE_UNAVAILABLE);
- state.label = new SpannableStringBuilder().append(state.label,
- new ForegroundColorSpan(disabledColor),
- SpannableStringBuilder.SPAN_INCLUSIVE_INCLUSIVE);
state.icon = mUnavailable;
} else if (wasAirplane) {
state.icon = mDisableNoAnimation;
@@ -138,6 +132,8 @@
state.minimalAccessibilityClassName = state.expandedAccessibilityClassName
= Switch.class.getName();
state.contentDescription = state.label;
+ state.state = state.isAirplaneMode ? Tile.STATE_UNAVAILABLE
+ : state.value ? Tile.STATE_ACTIVE : Tile.STATE_INACTIVE;
}
@Override
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/LocationTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/LocationTile.java
index 8a9a696..002e2a6 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/LocationTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/LocationTile.java
@@ -20,6 +20,7 @@
import android.os.UserManager;
import android.provider.Settings;
+import android.service.quicksettings.Tile;
import android.widget.Switch;
import com.android.internal.logging.MetricsLogger;
@@ -115,6 +116,7 @@
state.contentDescription = mContext.getString(
R.string.accessibility_quick_settings_location_off);
}
+ state.state = state.value ? Tile.STATE_ACTIVE : Tile.STATE_INACTIVE;
state.minimalAccessibilityClassName = state.expandedAccessibilityClassName
= Switch.class.getName();
}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/NightDisplayTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/NightDisplayTile.java
index 10fde30..b8ba28d8 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/NightDisplayTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/NightDisplayTile.java
@@ -19,6 +19,7 @@
import android.app.ActivityManager;
import android.content.Intent;
import android.provider.Settings;
+import android.service.quicksettings.Tile;
import android.widget.Switch;
import com.android.internal.app.NightDisplayController;
@@ -81,6 +82,7 @@
: R.drawable.ic_qs_night_display_off);
state.minimalAccessibilityClassName = state.expandedAccessibilityClassName =
Switch.class.getName();
+ state.state = state.value ? Tile.STATE_ACTIVE : Tile.STATE_INACTIVE;
}
@Override
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/RotationLockTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/RotationLockTile.java
index cec5f15..9be67da 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/RotationLockTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/RotationLockTile.java
@@ -21,6 +21,7 @@
import android.content.res.Configuration;
import android.provider.Settings;
+import android.service.quicksettings.Tile;
import android.widget.Switch;
import com.android.internal.logging.MetricsLogger;
@@ -106,6 +107,7 @@
state.contentDescription = getAccessibilityString(rotationLocked);
state.minimalAccessibilityClassName = state.expandedAccessibilityClassName
= Switch.class.getName();
+ state.state = state.value ? Tile.STATE_ACTIVE : Tile.STATE_INACTIVE;
}
public static boolean isCurrentOrientationLockPortrait(RotationLockController controller,
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/WifiTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/WifiTile.java
index 3876c88..7d99041 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/WifiTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/WifiTile.java
@@ -21,6 +21,7 @@
import android.content.pm.PackageManager;
import android.content.res.Resources;
import android.provider.Settings;
+import android.service.quicksettings.Tile;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
@@ -104,7 +105,7 @@
}
@Override
- protected void handleSecondaryClick() {
+ protected void handleClick() {
// Secondary clicks are header clicks, just toggle.
mState.copyTo(mStateBeforeClick);
MetricsLogger.action(mContext, getMetricsCategory(), !mState.value);
@@ -112,7 +113,7 @@
}
@Override
- protected void handleClick() {
+ protected void handleSecondaryClick() {
if (!mWifiController.canConfigWifi()) {
mHost.startActivityDismissingKeyguard(new Intent(Settings.ACTION_WIFI_SETTINGS));
return;
@@ -191,6 +192,7 @@
state.dualLabelContentDescription = wifiName;
state.expandedAccessibilityClassName = Button.class.getName();
state.minimalAccessibilityClassName = Switch.class.getName();
+ state.state = state.value ? Tile.STATE_ACTIVE : Tile.STATE_INACTIVE;
}
@Override
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/WorkModeTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/WorkModeTile.java
index ce7fbd3..207deff 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/WorkModeTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/WorkModeTile.java
@@ -18,6 +18,7 @@
import android.content.Intent;
import android.provider.Settings;
+import android.service.quicksettings.Tile;
import android.widget.Switch;
import com.android.internal.logging.MetricsLogger;
@@ -108,6 +109,7 @@
}
state.minimalAccessibilityClassName = state.expandedAccessibilityClassName
= Switch.class.getName();
+ state.state = state.value ? Tile.STATE_ACTIVE : Tile.STATE_INACTIVE;
}
@Override
diff --git a/packages/SystemUI/src/com/android/systemui/recents/RecentsConfiguration.java b/packages/SystemUI/src/com/android/systemui/recents/RecentsConfiguration.java
index 711f0c6..ff8d4bf 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/RecentsConfiguration.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/RecentsConfiguration.java
@@ -17,12 +17,33 @@
package com.android.systemui.recents;
import android.content.Context;
+import android.content.res.Configuration;
import android.content.res.Resources;
import android.graphics.Rect;
import android.os.SystemProperties;
import com.android.systemui.R;
import com.android.systemui.recents.misc.SystemServicesProxy;
+import com.android.systemui.recents.model.TaskStack;
+
+/**
+ * Represents the dock regions for each orientation.
+ */
+class DockRegion {
+ public static TaskStack.DockState[] PHONE_LANDSCAPE = {
+ // We only allow docking to the left in landscape for now on small devices
+ TaskStack.DockState.LEFT
+ };
+ public static TaskStack.DockState[] PHONE_PORTRAIT = {
+ // We only allow docking to the top for now on small devices
+ TaskStack.DockState.TOP
+ };
+ public static TaskStack.DockState[] TABLET_LANDSCAPE = {
+ TaskStack.DockState.LEFT,
+ TaskStack.DockState.RIGHT
+ };
+ public static TaskStack.DockState[] TABLET_PORTRAIT = PHONE_PORTRAIT;
+}
/**
* Application resources that can be retrieved from the application context and are not specifically
@@ -63,12 +84,14 @@
// Recents will layout task views in a grid mode when there's enough space in the screen.
public boolean isGridEnabled;
+ private final Context mAppContext;
+
public RecentsConfiguration(Context context) {
// Load only resources that can not change after the first load either through developer
// settings or via multi window
SystemServicesProxy ssp = Recents.getSystemServices();
- Context appContext = context.getApplicationContext();
- Resources res = appContext.getResources();
+ mAppContext = context.getApplicationContext();
+ Resources res = mAppContext.getResources();
fakeShadows = res.getBoolean(R.bool.config_recents_fake_shadows);
svelteLevel = res.getInteger(R.integer.recents_svelte_level);
isGridEnabled = SystemProperties.getBoolean("ro.recents.grid", false);
@@ -86,4 +109,20 @@
public RecentsActivityLaunchState getLaunchState() {
return mLaunchState;
}
+
+ /**
+ * Returns the preferred dock states for the current orientation.
+ * @return a list of dock states for device and its orientation
+ */
+ public TaskStack.DockState[] getDockStatesForCurrentOrientation() {
+ boolean isLandscape = mAppContext.getResources().getConfiguration().orientation ==
+ Configuration.ORIENTATION_LANDSCAPE;
+ RecentsConfiguration config = Recents.getConfiguration();
+ if (config.isLargeScreen) {
+ return isLandscape ? DockRegion.TABLET_LANDSCAPE : DockRegion.TABLET_PORTRAIT;
+ } else {
+ return isLandscape ? DockRegion.PHONE_LANDSCAPE : DockRegion.PHONE_PORTRAIT;
+ }
+ }
+
}
diff --git a/packages/SystemUI/src/com/android/systemui/recents/events/ui/dragndrop/DragStartEvent.java b/packages/SystemUI/src/com/android/systemui/recents/events/ui/dragndrop/DragStartEvent.java
index b368bd3..e57fa2d 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/events/ui/dragndrop/DragStartEvent.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/events/ui/dragndrop/DragStartEvent.java
@@ -30,10 +30,17 @@
public final Task task;
public final TaskView taskView;
public final Point tlOffset;
+ public final boolean isUserTouchInitiated;
public DragStartEvent(Task task, TaskView taskView, Point tlOffset) {
+ this(task, taskView, tlOffset, true);
+ }
+
+ public DragStartEvent(Task task, TaskView taskView, Point tlOffset,
+ boolean isUserTouchInitiated) {
this.task = task;
this.taskView = taskView;
this.tlOffset = tlOffset;
+ this.isUserTouchInitiated = isUserTouchInitiated;
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/FakeShadowDrawable.java b/packages/SystemUI/src/com/android/systemui/recents/views/FakeShadowDrawable.java
index d64a676..79a774f 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/views/FakeShadowDrawable.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/views/FakeShadowDrawable.java
@@ -30,6 +30,7 @@
import android.util.Log;
import com.android.systemui.R;
+import com.android.systemui.recents.Recents;
import com.android.systemui.recents.RecentsConfiguration;
/**
@@ -90,8 +91,10 @@
mCornerShadowPaint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.DITHER_FLAG);
mCornerShadowPaint.setStyle(Paint.Style.FILL);
mCornerShadowPaint.setDither(true);
- mCornerRadius = resources.getDimensionPixelSize(
- R.dimen.recents_task_view_rounded_corners_radius);
+ mCornerRadius = Recents.getConfiguration().isGridEnabled ?
+ resources.getDimensionPixelSize(
+ R.dimen.recents_grid_task_view_rounded_corners_radius) :
+ resources.getDimensionPixelSize(R.dimen.recents_task_view_rounded_corners_radius);
mCardBounds = new RectF();
mEdgeShadowPaint = new Paint(mCornerShadowPaint);
}
diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/RecentsView.java b/packages/SystemUI/src/com/android/systemui/recents/views/RecentsView.java
index ee79330..8f9c457 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/views/RecentsView.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/views/RecentsView.java
@@ -454,7 +454,7 @@
}
public final void onBusEvent(DragStartEvent event) {
- updateVisibleDockRegions(mTouchHandler.getDockStatesForCurrentOrientation(),
+ updateVisibleDockRegions(Recents.getConfiguration().getDockStatesForCurrentOrientation(),
true /* isDefaultDockState */, TaskStack.DockState.NONE.viewState.dockAreaAlpha,
TaskStack.DockState.NONE.viewState.hintTextAlpha,
true /* animateAlpha */, false /* animateBounds */);
@@ -471,7 +471,8 @@
public final void onBusEvent(DragDropTargetChangedEvent event) {
if (event.dropTarget == null || !(event.dropTarget instanceof TaskStack.DockState)) {
- updateVisibleDockRegions(mTouchHandler.getDockStatesForCurrentOrientation(),
+ updateVisibleDockRegions(
+ Recents.getConfiguration().getDockStatesForCurrentOrientation(),
true /* isDefaultDockState */, TaskStack.DockState.NONE.viewState.dockAreaAlpha,
TaskStack.DockState.NONE.viewState.hintTextAlpha,
true /* animateAlpha */, true /* animateBounds */);
diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/RecentsViewTouchHandler.java b/packages/SystemUI/src/com/android/systemui/recents/views/RecentsViewTouchHandler.java
index d3ec984..db0c95e 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/views/RecentsViewTouchHandler.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/views/RecentsViewTouchHandler.java
@@ -28,7 +28,6 @@
import com.android.internal.policy.DividerSnapAlgorithm;
import com.android.systemui.recents.Recents;
-import com.android.systemui.recents.RecentsConfiguration;
import com.android.systemui.recents.events.EventBus;
import com.android.systemui.recents.events.activity.ConfigurationChangedEvent;
import com.android.systemui.recents.events.activity.HideRecentsEvent;
@@ -45,25 +44,6 @@
import java.util.ArrayList;
/**
- * Represents the dock regions for each orientation.
- */
-class DockRegion {
- public static TaskStack.DockState[] PHONE_LANDSCAPE = {
- // We only allow docking to the left in landscape for now on small devices
- TaskStack.DockState.LEFT
- };
- public static TaskStack.DockState[] PHONE_PORTRAIT = {
- // We only allow docking to the top for now on small devices
- TaskStack.DockState.TOP
- };
- public static TaskStack.DockState[] TABLET_LANDSCAPE = {
- TaskStack.DockState.LEFT,
- TaskStack.DockState.RIGHT
- };
- public static TaskStack.DockState[] TABLET_PORTRAIT = PHONE_PORTRAIT;
-}
-
-/**
* Handles touch events for a RecentsView.
*/
public class RecentsViewTouchHandler {
@@ -111,20 +91,6 @@
}
/**
- * Returns the preferred dock states for the current orientation.
- */
- public TaskStack.DockState[] getDockStatesForCurrentOrientation() {
- boolean isLandscape = mRv.getResources().getConfiguration().orientation ==
- Configuration.ORIENTATION_LANDSCAPE;
- RecentsConfiguration config = Recents.getConfiguration();
- if (config.isLargeScreen) {
- return isLandscape ? DockRegion.TABLET_LANDSCAPE : DockRegion.TABLET_PORTRAIT;
- } else {
- return isLandscape ? DockRegion.PHONE_LANDSCAPE : DockRegion.PHONE_PORTRAIT;
- }
- }
-
- /**
* Returns the set of visible dock states for this current drag.
*/
public ArrayList<TaskStack.DockState> getVisibleDockStates() {
@@ -162,10 +128,14 @@
mRv.getLocationInWindow(recentsViewLocation);
mTaskViewOffset.set(mTaskView.getLeft() - recentsViewLocation[0] + event.tlOffset.x,
mTaskView.getTop() - recentsViewLocation[1] + event.tlOffset.y);
- float x = mDownPos.x - mTaskViewOffset.x;
- float y = mDownPos.y - mTaskViewOffset.y;
- mTaskView.setTranslationX(x);
- mTaskView.setTranslationY(y);
+
+ // Change space coordinates relative to the view to RecentsView when user initiates a touch
+ if (event.isUserTouchInitiated) {
+ float x = mDownPos.x - mTaskViewOffset.x;
+ float y = mDownPos.y - mTaskViewOffset.y;
+ mTaskView.setTranslationX(x);
+ mTaskView.setTranslationY(y);
+ }
mVisibleDockStates.clear();
if (ActivityManager.supportsMultiWindow() && !ssp.hasDockedTask()
@@ -176,7 +146,8 @@
EventBus.getDefault().send(new ShowIncompatibleAppOverlayEvent());
} else {
// Add the dock state drop targets (these take priority)
- TaskStack.DockState[] dockStates = getDockStatesForCurrentOrientation();
+ TaskStack.DockState[] dockStates = Recents.getConfiguration()
+ .getDockStatesForCurrentOrientation();
for (TaskStack.DockState dockState : dockStates) {
registerDropTargetForCurrentDrag(dockState);
dockState.update(mRv.getContext());
diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackView.java b/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackView.java
index 3f28d9d..8ae7a83 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackView.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackView.java
@@ -266,8 +266,9 @@
mStackScroller = new TaskStackViewScroller(context, this, mLayoutAlgorithm);
mTouchHandler = new TaskStackViewTouchHandler(context, this, mStackScroller);
mAnimationHelper = new TaskStackAnimationHelper(context, this);
- mTaskCornerRadiusPx = res.getDimensionPixelSize(
- R.dimen.recents_task_view_rounded_corners_radius);
+ mTaskCornerRadiusPx = Recents.getConfiguration().isGridEnabled ?
+ res.getDimensionPixelSize(R.dimen.recents_grid_task_view_rounded_corners_radius) :
+ res.getDimensionPixelSize(R.dimen.recents_task_view_rounded_corners_radius);
mDividerSize = ssp.getDockedDividerSize(context);
mDisplayOrientation = Utilities.getAppConfiguration(mContext).orientation;
mDisplayRect = ssp.getDisplayRect();
diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/TaskView.java b/packages/SystemUI/src/com/android/systemui/recents/views/TaskView.java
index e41a718..e941c3b 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/views/TaskView.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/views/TaskView.java
@@ -183,6 +183,7 @@
}
setOutlineProvider(mViewBounds);
setOnLongClickListener(this);
+ setAccessibilityDelegate(new TaskViewAccessibilityDelegate(this));
}
/** Set callback */
@@ -257,6 +258,11 @@
}
@Override
+ public void addChildrenForAccessibility(ArrayList<View> outChildren) {
+ // Prevent any children from being focusable during talkback
+ }
+
+ @Override
public boolean hasOverlappingRendering() {
return false;
}
diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/TaskViewAccessibilityDelegate.java b/packages/SystemUI/src/com/android/systemui/recents/views/TaskViewAccessibilityDelegate.java
new file mode 100644
index 0000000..759daf1
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/recents/views/TaskViewAccessibilityDelegate.java
@@ -0,0 +1,111 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+
+package com.android.systemui.recents.views;
+
+import android.app.ActivityManager;
+import android.content.Context;
+import android.content.res.Configuration;
+import android.graphics.Point;
+import android.os.Bundle;
+import android.util.SparseArray;
+import android.view.View;
+import android.view.accessibility.AccessibilityNodeInfo;
+import android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction;
+
+import com.android.systemui.R;
+import com.android.systemui.recents.Recents;
+import com.android.systemui.recents.events.EventBus;
+import com.android.systemui.recents.events.ui.dragndrop.DragEndEvent;
+import com.android.systemui.recents.events.ui.dragndrop.DragStartEvent;
+import com.android.systemui.recents.misc.Utilities;
+import com.android.systemui.recents.model.TaskStack;
+
+public class TaskViewAccessibilityDelegate extends View.AccessibilityDelegate {
+ private static final String TAG = "TaskViewAccessibilityDelegate";
+
+ private final TaskView mTaskView;
+
+ protected static final int OPEN = R.id.action_open;
+ protected static final int DIMISS = R.id.action_dimiss;
+ protected static final int SPLIT_TASK_TOP = R.id.action_split_task_to_top;
+ protected static final int SPLIT_TASK_LEFT = R.id.action_split_task_to_left;
+ protected static final int SPLIT_TASK_RIGHT = R.id.action_split_task_to_right;
+
+ protected final SparseArray<AccessibilityAction> mActions = new SparseArray<>();
+
+ public TaskViewAccessibilityDelegate(TaskView taskView) {
+ mTaskView = taskView;
+ Context context = taskView.getContext();
+ mActions.put(OPEN, new AccessibilityAction(OPEN,
+ context.getString(R.string.recents_accessibility_open)));
+ mActions.put(DIMISS, new AccessibilityAction(DIMISS,
+ context.getString(R.string.recents_accessibility_dismissed)));
+ mActions.put(SPLIT_TASK_TOP, new AccessibilityAction(SPLIT_TASK_TOP,
+ context.getString(R.string.recents_accessibility_split_screen_top)));
+ mActions.put(SPLIT_TASK_LEFT, new AccessibilityAction(SPLIT_TASK_LEFT,
+ context.getString(R.string.recents_accessibility_split_screen_left)));
+ mActions.put(SPLIT_TASK_RIGHT, new AccessibilityAction(SPLIT_TASK_RIGHT,
+ context.getString(R.string.recents_accessibility_split_screen_right)));
+ }
+
+ @Override
+ public void onInitializeAccessibilityNodeInfo(View host, AccessibilityNodeInfo info) {
+ super.onInitializeAccessibilityNodeInfo(host, info);
+ info.addAction(mActions.get(OPEN));
+ info.addAction(mActions.get(DIMISS));
+ if (ActivityManager.supportsSplitScreenMultiWindow()
+ && !Recents.getSystemServices().hasDockedTask()) {
+ TaskStack.DockState[] dockStates = Recents.getConfiguration()
+ .getDockStatesForCurrentOrientation();
+ for (TaskStack.DockState dockState: dockStates) {
+ if (dockState == TaskStack.DockState.TOP) {
+ info.addAction(mActions.get(SPLIT_TASK_TOP));
+ } else if (dockState == TaskStack.DockState.LEFT) {
+ info.addAction(mActions.get(SPLIT_TASK_LEFT));
+ } else if (dockState == TaskStack.DockState.RIGHT) {
+ info.addAction(mActions.get(SPLIT_TASK_RIGHT));
+ }
+ }
+ }
+ }
+
+ @Override
+ public boolean performAccessibilityAction(View host, int action, Bundle args) {
+ if (action == OPEN) {
+ mTaskView.onClick(host);
+ } else if (action == DIMISS) {
+ mTaskView.dismissTask();
+ } else if (action == SPLIT_TASK_TOP) {
+ simulateDragIntoMultiwindow(TaskStack.DockState.TOP);
+ } else if (action == SPLIT_TASK_LEFT) {
+ simulateDragIntoMultiwindow(TaskStack.DockState.LEFT);
+ } else if (action == SPLIT_TASK_RIGHT) {
+ simulateDragIntoMultiwindow(TaskStack.DockState.RIGHT);
+ } else {
+ return super.performAccessibilityAction(host, action, args);
+ }
+ return true;
+ }
+
+ /** Simulate a user drag event to split the screen to the respected side */
+ private void simulateDragIntoMultiwindow(TaskStack.DockState dockState) {
+ int orientation = Utilities.getAppConfiguration(mTaskView.getContext()).orientation;
+ EventBus.getDefault().send(new DragStartEvent(mTaskView.getTask(), mTaskView,
+ new Point(0,0), false /* isUserTouchInitiated */));
+ EventBus.getDefault().send(new DragEndEvent(mTaskView.getTask(), mTaskView, dockState));
+ }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/TaskViewHeader.java b/packages/SystemUI/src/com/android/systemui/recents/views/TaskViewHeader.java
index c0cc83f..0777163 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/views/TaskViewHeader.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/views/TaskViewHeader.java
@@ -201,7 +201,9 @@
Resources res = context.getResources();
mLightDismissDrawable = context.getDrawable(R.drawable.recents_dismiss_light);
mDarkDismissDrawable = context.getDrawable(R.drawable.recents_dismiss_dark);
- mCornerRadius = res.getDimensionPixelSize(R.dimen.recents_task_view_rounded_corners_radius);
+ mCornerRadius = Recents.getConfiguration().isGridEnabled ?
+ res.getDimensionPixelSize(R.dimen.recents_grid_task_view_rounded_corners_radius) :
+ res.getDimensionPixelSize(R.dimen.recents_task_view_rounded_corners_radius);
mHighlightHeight = res.getDimensionPixelSize(R.dimen.recents_task_view_highlight);
mTaskBarViewLightTextColor = context.getColor(R.color.recents_task_bar_light_text_color);
mTaskBarViewDarkTextColor = context.getColor(R.color.recents_task_bar_dark_text_color);
diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/TaskViewThumbnail.java b/packages/SystemUI/src/com/android/systemui/recents/views/TaskViewThumbnail.java
index bae5daa..792679b 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/views/TaskViewThumbnail.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/views/TaskViewThumbnail.java
@@ -60,11 +60,11 @@
// Drawing
@ViewDebug.ExportedProperty(category="recents")
- private Rect mTaskViewRect = new Rect();
+ protected Rect mTaskViewRect = new Rect();
@ViewDebug.ExportedProperty(category="recents")
- private Rect mThumbnailRect = new Rect();
+ protected Rect mThumbnailRect = new Rect();
@ViewDebug.ExportedProperty(category="recents")
- private float mThumbnailScale;
+ protected float mThumbnailScale;
private float mFullscreenThumbnailScale;
/** The height, in pixels, of the task view's title bar. */
private int mTitleBarHeight;
@@ -72,14 +72,14 @@
private boolean mOverlayHeaderOnThumbnailActionBar = true;
private ThumbnailData mThumbnailData;
- private int mCornerRadius;
+ protected int mCornerRadius;
@ViewDebug.ExportedProperty(category="recents")
private float mDimAlpha;
private Matrix mMatrix = new Matrix();
- private Paint mDrawPaint = new Paint();
+ protected Paint mDrawPaint = new Paint();
private Paint mLockedPaint = new Paint();
- private Paint mBgFillPaint = new Paint();
- private BitmapShader mBitmapShader;
+ protected Paint mBgFillPaint = new Paint();
+ protected BitmapShader mBitmapShader;
private LightingColorFilter mLightingColorFilter = new LightingColorFilter(0xffffffff, 0);
// Clip the top of the thumbnail against the opaque header bar that overlaps this view
diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/grid/GridTaskViewThumbnail.java b/packages/SystemUI/src/com/android/systemui/recents/views/grid/GridTaskViewThumbnail.java
new file mode 100644
index 0000000..2c3e42b
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/recents/views/grid/GridTaskViewThumbnail.java
@@ -0,0 +1,185 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.recents.views.grid;
+
+import android.content.Context;
+import android.graphics.Canvas;
+import android.graphics.Path;
+import android.util.AttributeSet;
+
+import com.android.systemui.R;
+import com.android.systemui.recents.views.TaskViewThumbnail;
+
+public class GridTaskViewThumbnail extends TaskViewThumbnail {
+
+ private Path mThumbnailOutline;
+ private Path mRestBackgroundOutline;
+ private Path mFullBackgroundOutline;
+ // True if either this view's size or thumbnail scale has changed and mThumbnailOutline should
+ // be updated.
+ private boolean mUpdateThumbnailOutline = true;
+
+ public GridTaskViewThumbnail(Context context) {
+ this(context, null);
+ }
+
+ public GridTaskViewThumbnail(Context context, AttributeSet attrs) {
+ this(context, attrs, 0);
+ }
+
+ public GridTaskViewThumbnail(Context context, AttributeSet attrs, int defStyleAttr) {
+ this(context, attrs, defStyleAttr, 0);
+ }
+
+ public GridTaskViewThumbnail(Context context, AttributeSet attrs, int defStyleAttr,
+ int defStyleRes) {
+ super(context, attrs, defStyleAttr, defStyleRes);
+ mCornerRadius = getResources().getDimensionPixelSize(
+ R.dimen.recents_grid_task_view_rounded_corners_radius);
+ }
+
+ /**
+ * Called when the task view frame changes, allowing us to move the contents of the header
+ * to match the frame changes.
+ */
+ public void onTaskViewSizeChanged(int width, int height) {
+ mUpdateThumbnailOutline = true;
+ super.onTaskViewSizeChanged(width, height);
+ }
+
+ /**
+ * Updates the scale of the bitmap relative to this view.
+ */
+ public void updateThumbnailMatrix() {
+ mUpdateThumbnailOutline = true;
+ super.updateThumbnailMatrix();
+ }
+
+ private void updateThumbnailOutline() {
+ final int titleHeight = getResources().getDimensionPixelSize(
+ R.dimen.recents_grid_task_view_header_height);
+ final int viewWidth = mTaskViewRect.width();
+ final int viewHeight = mTaskViewRect.height() - titleHeight;
+ final int thumbnailWidth = Math.min(viewWidth,
+ (int) (mThumbnailRect.width() * mThumbnailScale));
+ final int thumbnailHeight = Math.min(viewHeight,
+ (int) (mThumbnailRect.height() * mThumbnailScale));
+ // Draw the thumbnail, we only round the bottom corners:
+ //
+ // outerLeft outerRight
+ // <-----------------------> mRestBackgroundOutline
+ // _________________________ (thumbnailWidth < viewWidth)
+ // |_______________________| outerTop A ____ B
+ // | | ↑ | |
+ // | | | | |
+ // | | | | |
+ // | | | | | C
+ // \_______________________/ ↓ |__/
+ // mCornerRadius outerBottom E D
+ //
+ // mRestBackgroundOutline (thumbnailHeight < viewHeight)
+ // A _________________________ B
+ // | | C
+ // F \_______________________/
+ // E D
+ final int outerLeft = 0;
+ final int outerTop = 0;
+ final int outerRight = outerLeft + thumbnailWidth;
+ final int outerBottom = outerTop + thumbnailHeight;
+ mThumbnailOutline = new Path();
+ mThumbnailOutline.moveTo(outerLeft, outerTop);
+ mThumbnailOutline.lineTo(outerRight, outerTop);
+ mThumbnailOutline.lineTo(outerRight, outerBottom - mCornerRadius);
+ mThumbnailOutline.arcTo(outerRight - 2 * mCornerRadius, outerBottom - 2 * mCornerRadius,
+ outerRight, outerBottom, 0, 90, false);
+ mThumbnailOutline.lineTo(outerLeft + mCornerRadius, outerBottom);
+ mThumbnailOutline.arcTo(outerLeft, outerBottom - 2 * mCornerRadius,
+ outerLeft + 2 * mCornerRadius, outerBottom, 90, 90, false);
+ mThumbnailOutline.lineTo(outerLeft, outerTop);
+ mThumbnailOutline.close();
+
+ if (mBitmapShader != null && thumbnailWidth > 0 && thumbnailHeight > 0) {
+ if (thumbnailWidth < viewWidth) {
+ final int l = Math.max(0, outerRight - mCornerRadius);
+ final int r = outerRight;
+ final int t = outerTop;
+ final int b = outerBottom;
+ mRestBackgroundOutline = new Path();
+ mRestBackgroundOutline.moveTo(l, t); // A
+ mRestBackgroundOutline.lineTo(r, t); // B
+ mRestBackgroundOutline.lineTo(r, b - mCornerRadius); // C
+ mRestBackgroundOutline.arcTo(r - 2 * mCornerRadius, b - 2 * mCornerRadius, r, b,
+ 0, 90, false); // D
+ mRestBackgroundOutline.lineTo(l, b); // E
+ mRestBackgroundOutline.lineTo(l, t); // A
+ mRestBackgroundOutline.close();
+
+ }
+ if (thumbnailHeight < viewHeight) {
+ final int l = outerLeft;
+ final int r = outerRight;
+ final int t = Math.max(0, thumbnailHeight - mCornerRadius);
+ final int b = outerBottom;
+ mRestBackgroundOutline = new Path();
+ mRestBackgroundOutline.moveTo(l, t); // A
+ mRestBackgroundOutline.lineTo(r, t); // B
+ mRestBackgroundOutline.lineTo(r, b - mCornerRadius); // C
+ mRestBackgroundOutline.arcTo(r - 2 * mCornerRadius, b - 2 * mCornerRadius, r, b,
+ 0, 90, false); // D
+ mRestBackgroundOutline.lineTo(l + mCornerRadius, b); // E
+ mRestBackgroundOutline.arcTo(l, b - 2 * mCornerRadius, l + 2 * mCornerRadius, b,
+ 90, 90, false); // F
+ mRestBackgroundOutline.lineTo(l, t); // A
+ mRestBackgroundOutline.close();
+
+ }
+ } else {
+ mFullBackgroundOutline = mThumbnailOutline;
+ }
+ }
+
+ @Override
+ protected void onDraw(Canvas canvas) {
+ final int titleHeight = getResources().getDimensionPixelSize(
+ R.dimen.recents_grid_task_view_header_height);
+ final int viewWidth = mTaskViewRect.width();
+ final int viewHeight = mTaskViewRect.height() - titleHeight;
+ final int thumbnailWidth = Math.min(viewWidth,
+ (int) (mThumbnailRect.width() * mThumbnailScale));
+ final int thumbnailHeight = Math.min(viewHeight,
+ (int) (mThumbnailRect.height() * mThumbnailScale));
+
+ if (mUpdateThumbnailOutline) {
+ updateThumbnailOutline();
+ mUpdateThumbnailOutline = false;
+ }
+ if (mBitmapShader != null && thumbnailWidth > 0 && thumbnailHeight > 0) {
+ // Draw the background, there will be some small overdraw with the thumbnail
+ if (thumbnailWidth < viewWidth) {
+ // Portrait thumbnail on a landscape task view
+ canvas.drawPath(mRestBackgroundOutline, mBgFillPaint);
+ }
+ if (thumbnailHeight < viewHeight) {
+ // Landscape thumbnail on a portrait task view
+ canvas.drawPath(mRestBackgroundOutline, mBgFillPaint);
+ }
+ canvas.drawPath(mThumbnailOutline, mDrawPaint);
+ } else {
+ canvas.drawPath(mFullBackgroundOutline, mBgFillPaint);
+ }
+ }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/grid/TaskGridLayoutAlgorithm.java b/packages/SystemUI/src/com/android/systemui/recents/views/grid/TaskGridLayoutAlgorithm.java
index 78c26dd..02d1cc1 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/views/grid/TaskGridLayoutAlgorithm.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/views/grid/TaskGridLayoutAlgorithm.java
@@ -105,11 +105,13 @@
if (maxTaskHeight >= maxTaskWidth / mAppAspectRatio + mTitleBarHeight) {
// Width bound.
taskWidth = maxTaskWidth;
- taskHeight = (int) (maxTaskWidth / mAppAspectRatio + mTitleBarHeight);
+ // Here we should round the height to the nearest integer.
+ taskHeight = (int) (maxTaskWidth / mAppAspectRatio + mTitleBarHeight + 0.5);
} else {
// Height bound.
taskHeight = maxTaskHeight;
- taskWidth = (int) ((taskHeight - mTitleBarHeight) * mAppAspectRatio);
+ // Here we should round the width to the nearest integer.
+ taskWidth = (int) ((taskHeight - mTitleBarHeight) * mAppAspectRatio + 0.5);
}
size.set(0, 0, taskWidth, taskHeight);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/SignalClusterView.java b/packages/SystemUI/src/com/android/systemui/statusbar/SignalClusterView.java
index 68d5cd4..d77e9ed 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/SignalClusterView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/SignalClusterView.java
@@ -159,6 +159,7 @@
public void setNetworkController(NetworkControllerImpl nc) {
if (DEBUG) Log.d(TAG, "NetworkController=" + nc);
mNC = nc;
+ mNC.addCallback(this);
}
public void setSecurityController(SecurityController sc) {
@@ -214,7 +215,9 @@
super.onAttachedToWindow();
for (PhoneState state : mPhoneStates) {
- mMobileSignalGroup.addView(state.mMobileGroup);
+ if (state.mMobileGroup.getParent() == null) {
+ mMobileSignalGroup.addView(state.mMobileGroup);
+ }
}
int endPadding = mMobileSignalGroup.getChildCount() > 0 ? mMobileSignalGroupEndPadding : 0;
@@ -224,7 +227,6 @@
apply();
applyIconTint();
- mNC.addCallback(this);
}
@Override
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
index d708261..001edb3 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
@@ -849,6 +849,7 @@
mDozeServiceHost.firePowerSaveChanged(isPowerSave);
}
}
+
@Override
public void onBatteryLevelChanged(int level, boolean pluggedIn, boolean charging) {
// noop
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickStatusBarHeader.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickStatusBarHeader.java
index 08a91bb..2fa961d 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickStatusBarHeader.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickStatusBarHeader.java
@@ -21,9 +21,13 @@
import android.content.Context;
import android.content.Intent;
import android.content.res.Configuration;
+import android.graphics.Color;
+import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.RippleDrawable;
+import android.icu.text.NumberFormat;
import android.os.UserManager;
+import android.support.annotation.VisibleForTesting;
import android.util.AttributeSet;
import android.view.View;
import android.view.View.OnClickListener;
@@ -32,21 +36,25 @@
import android.widget.TextView;
import android.widget.Toast;
-import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.logging.MetricsLogger;
import com.android.internal.logging.nano.MetricsProto;
import com.android.keyguard.KeyguardStatusView;
+import com.android.settingslib.Utils;
+import com.android.systemui.BatteryMeterView;
import com.android.systemui.FontSizeUtils;
import com.android.systemui.R;
import com.android.systemui.plugins.qs.QS.ActivityStarter;
import com.android.systemui.plugins.qs.QS.BaseStatusBarHeader;
-import com.android.systemui.qs.QSPanel;
import com.android.systemui.plugins.qs.QS.Callback;
+import com.android.systemui.qs.QSPanel;
import com.android.systemui.qs.QuickQSPanel;
import com.android.systemui.qs.TouchAnimator;
import com.android.systemui.qs.TouchAnimator.Builder;
+import com.android.systemui.statusbar.SignalClusterView;
import com.android.systemui.statusbar.policy.BatteryController;
+import com.android.systemui.statusbar.policy.BatteryController.BatteryStateChangeCallback;
import com.android.systemui.statusbar.policy.NetworkController.EmergencyListener;
+import com.android.systemui.statusbar.policy.NetworkControllerImpl;
import com.android.systemui.statusbar.policy.NextAlarmController;
import com.android.systemui.statusbar.policy.NextAlarmController.NextAlarmChangeCallback;
import com.android.systemui.statusbar.policy.UserInfoController;
@@ -54,7 +62,8 @@
import com.android.systemui.tuner.TunerService;
public class QuickStatusBarHeader extends BaseStatusBarHeader implements
- NextAlarmChangeCallback, OnClickListener, OnUserInfoChangedListener, EmergencyListener {
+ NextAlarmChangeCallback, OnClickListener, OnUserInfoChangedListener, EmergencyListener,
+ BatteryStateChangeCallback {
private static final String TAG = "QuickStatusBarHeader";
@@ -67,14 +76,14 @@
private TextView mAlarmStatus;
private View mAlarmStatusCollapsed;
+ private ViewGroup mDateTimeGroup;
+ private ViewGroup mDateTimeAlarmGroup;
private QSPanel mQsPanel;
private boolean mExpanded;
private boolean mAlarmShowing;
- private ViewGroup mDateTimeGroup;
- private ViewGroup mDateTimeAlarmGroup;
private TextView mEmergencyOnly;
protected ExpandableIndicator mExpandIndicator;
@@ -95,6 +104,7 @@
protected View mEdit;
private boolean mShowFullAlarm;
private float mDateTimeTranslation;
+ private TextView mBatteryLevel;
public QuickStatusBarHeader(Context context, AttributeSet attrs) {
super(context, attrs);
@@ -130,6 +140,8 @@
mAlarmStatus = (TextView) findViewById(R.id.alarm_status);
mAlarmStatus.setOnClickListener(this);
+ mBatteryLevel = (TextView) findViewById(R.id.battery_level);
+
mMultiUserSwitch = (MultiUserSwitch) findViewById(R.id.multi_user_switch);
mMultiUserAvatar = (ImageView) mMultiUserSwitch.findViewById(R.id.multi_user_avatar);
@@ -236,13 +248,11 @@
mExpandIndicator.setExpanded(headerExpansionFraction > EXPAND_INDICATOR_THRESHOLD);
}
- @Override
@VisibleForTesting
public void onDetachedFromWindow() {
setListening(false);
mHost.getUserInfoController().removeCallback(this);
mHost.getNetworkController().removeEmergencyListener(this);
- mHost.getUserInfoController().removeCallback(this);
super.onDetachedFromWindow();
}
@@ -325,6 +335,19 @@
if (isAPhone) {
mHost.getNetworkController().addEmergencyListener(this);
}
+
+ // Set the light/dark theming on the header status UI to match the current theme.
+ SignalClusterView cluster = (SignalClusterView) findViewById(R.id.signal_cluster);
+ cluster.setNetworkController((NetworkControllerImpl) host.getNetworkController());
+ cluster.setSecurityController(host.getSecurityController());
+ int colorForeground = Utils.getColorAttr(getContext(), android.R.attr.colorForeground);
+ float intensity = colorForeground / (float) Color.WHITE;
+ cluster.setIconTint(colorForeground, intensity,
+ new Rect(0, 0, 0, 0));
+ BatteryMeterView battery = (BatteryMeterView) findViewById(R.id.battery);
+ battery.setBatteryController(host.getBatteryController());
+ int colorSecondary = Utils.getColorAttr(getContext(), android.R.attr.textColorSecondary);
+ battery.setRawColors(colorForeground, colorSecondary);
}
@Override
@@ -367,7 +390,7 @@
}
public void setBatteryController(BatteryController batteryController) {
- // Don't care
+ batteryController.addCallback(this);
}
public void setUserInfoController(UserInfoController userInfoController) {
@@ -391,6 +414,17 @@
}
@Override
+ public void onBatteryLevelChanged(int level, boolean pluggedIn, boolean charging) {
+ String percentage = NumberFormat.getPercentInstance().format((double) level / 100.0);
+ mBatteryLevel.setText(percentage);
+ }
+
+ @Override
+ public void onPowerSaveChanged(boolean isPowerSave) {
+ // Don't care.
+ }
+
+ @Override
public void onUserInfoChanged(String name, Drawable picture, String userAccount) {
mMultiUserAvatar.setImageDrawable(picture);
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/TelephonyIcons.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/TelephonyIcons.java
index ed8c7ff..b59cf68 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/TelephonyIcons.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/TelephonyIcons.java
@@ -224,7 +224,7 @@
static final int ICON_CARRIER_NETWORK_CHANGE =
R.drawable.stat_sys_signal_carrier_network_change_animation;
- static final int ICON_DATA_DISABLED = R.drawable.stat_sys_data_disabled;
+ static final int ICON_DATA_DISABLED = R.drawable.ic_qs_data_disabled;
static final int QS_ICON_LTE = R.drawable.ic_qs_signal_lte;
static final int QS_ICON_3G = R.drawable.ic_qs_signal_3g;
diff --git a/proto/src/metrics_constants.proto b/proto/src/metrics_constants.proto
index 62ea9e3..88bc99f 100644
--- a/proto/src/metrics_constants.proto
+++ b/proto/src/metrics_constants.proto
@@ -3303,6 +3303,14 @@
RESERVED_FOR_LOGBUILDER_TIMESTAMP = 805;
RESERVED_FOR_LOGBUILDER_PACKAGENAME = 806;
+ // ACTION: "Force stop" action on an app
+ ACTION_APP_FORCE_STOP = 807;
+
+ // OPEN: Settings > Apps > Gear > Special Access > Install other apps
+ // CATEGORY: SETTINGS
+ // OS: 8.0
+ MANAGE_EXTERNAL_SOURCES = 808;
+
// ---- End O Constants, all O constants go above this line ----
// Add new aosp constants above this line.
diff --git a/proto/src/task_snapshot.proto b/proto/src/task_snapshot.proto
new file mode 100644
index 0000000..c9d5c27
--- /dev/null
+++ b/proto/src/task_snapshot.proto
@@ -0,0 +1,30 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+ syntax = "proto3";
+
+ package com.android.server.wm;
+
+ option java_package = "com.android.server.wm";
+ option java_outer_classname = "WindowManagerProtos";
+
+ message TaskSnapshotProto {
+ int32 orientation = 1;
+ int32 inset_left = 2;
+ int32 inset_top = 3;
+ int32 inset_right = 4;
+ int32 inset_bottom = 5;
+ }
\ No newline at end of file
diff --git a/services/backup/java/com/android/server/backup/BackupManagerService.java b/services/backup/java/com/android/server/backup/BackupManagerService.java
index 31ecb75..7e82586 100644
--- a/services/backup/java/com/android/server/backup/BackupManagerService.java
+++ b/services/backup/java/com/android/server/backup/BackupManagerService.java
@@ -577,15 +577,18 @@
public ArrayList<String> fullPackages;
public IBackupObserver observer;
public boolean userInitiated;
+ public boolean nonIncrementalBackup;
BackupParams(IBackupTransport transport, String dirName, ArrayList<String> kvPackages,
- ArrayList<String> fullPackages, IBackupObserver observer, boolean userInitiated) {
+ ArrayList<String> fullPackages, IBackupObserver observer, boolean userInitiated,
+ boolean nonIncrementalBackup) {
this.transport = transport;
this.dirName = dirName;
this.kvPackages = kvPackages;
this.fullPackages = fullPackages;
this.observer = observer;
this.userInitiated = userInitiated;
+ this.nonIncrementalBackup = nonIncrementalBackup;
}
}
@@ -794,7 +797,7 @@
try {
String dirName = transport.transportDirName();
PerformBackupTask pbt = new PerformBackupTask(transport, dirName,
- queue, oldJournal, null, null, false);
+ queue, oldJournal, null, null, false, false /* nonIncremental */);
Message pbtMessage = obtainMessage(MSG_BACKUP_RESTORE_STEP, pbt);
sendMessage(pbtMessage);
} catch (Exception e) {
@@ -1033,7 +1036,8 @@
mWakelock.acquire();
PerformBackupTask pbt = new PerformBackupTask(params.transport, params.dirName,
- kvQueue, null, params.observer, params.fullPackages, true);
+ kvQueue, null, params.observer, params.fullPackages, true,
+ params.nonIncrementalBackup);
Message pbtMessage = obtainMessage(MSG_BACKUP_RESTORE_STEP, pbt);
sendMessage(pbtMessage);
break;
@@ -2492,7 +2496,7 @@
return token;
}
- public int requestBackup(String[] packages, IBackupObserver observer) {
+ public int requestBackup(String[] packages, IBackupObserver observer, int flags) {
mContext.enforceCallingPermission(android.Manifest.permission.BACKUP, "requestBackup");
if (packages == null || packages.length < 1) {
@@ -2510,6 +2514,10 @@
ArrayList<String> fullBackupList = new ArrayList<>();
ArrayList<String> kvBackupList = new ArrayList<>();
for (String packageName : packages) {
+ if (PACKAGE_MANAGER_SENTINEL.equals(packageName)) {
+ kvBackupList.add(packageName);
+ continue;
+ }
try {
PackageInfo packageInfo = mPackageManager.getPackageInfo(packageName,
PackageManager.GET_SIGNATURES);
@@ -2543,9 +2551,12 @@
sendBackupFinished(observer, BackupManager.ERROR_TRANSPORT_ABORTED);
return BackupManager.ERROR_TRANSPORT_ABORTED;
}
+
+ boolean nonIncrementalBackup = (flags & BackupManager.FLAG_NON_INCREMENTAL_BACKUP) != 0;
+
Message msg = mBackupHandler.obtainMessage(MSG_REQUEST_BACKUP);
msg.obj = new BackupParams(transport, dirName, kvBackupList, fullBackupList, observer,
- true);
+ true, nonIncrementalBackup);
mBackupHandler.sendMessage(msg);
return BackupManager.SUCCESS;
}
@@ -2673,17 +2684,20 @@
ParcelFileDescriptor mNewState;
int mStatus;
boolean mFinished;
- boolean mUserInitiated;
+ final boolean mUserInitiated;
+ final boolean mNonIncremental;
public PerformBackupTask(IBackupTransport transport, String dirName,
ArrayList<BackupRequest> queue, File journal, IBackupObserver observer,
- ArrayList<String> pendingFullBackups, boolean userInitiated) {
+ ArrayList<String> pendingFullBackups, boolean userInitiated,
+ boolean nonIncremental) {
mTransport = transport;
mOriginalQueue = queue;
mJournal = journal;
mObserver = observer;
mPendingFullBackups = pendingFullBackups;
mUserInitiated = userInitiated;
+ mNonIncremental = nonIncremental;
mStateDir = new File(mBaseStateDir, dirName);
@@ -2748,6 +2762,10 @@
// the way.
mQueue = (ArrayList<BackupRequest>) mOriginalQueue.clone();
+ // When the transport is forcing non-incremental key/value payloads, we send the
+ // metadata only if it explicitly asks for it.
+ boolean skipPm = mNonIncremental;
+
// The app metadata pseudopackage might also be represented in the
// backup queue if apps have been added/removed since the last time
// we performed a backup. Drop it from the working queue now that
@@ -2758,6 +2776,7 @@
Slog.i(TAG, "Metadata in queue; eliding");
}
mQueue.remove(i);
+ skipPm = false;
break;
}
}
@@ -2785,22 +2804,27 @@
}
}
- // The package manager doesn't have a proper <application> etc, but since
- // it's running here in the system process we can just set up its agent
- // directly and use a synthetic BackupRequest. We always run this pass
- // because it's cheap and this way we guarantee that we don't get out of
- // step even if we're selecting among various transports at run time.
- if (mStatus == BackupTransport.TRANSPORT_OK) {
- PackageManagerBackupAgent pmAgent = new PackageManagerBackupAgent(
- mPackageManager);
- mStatus = invokeAgentForBackup(PACKAGE_MANAGER_SENTINEL,
- IBackupAgent.Stub.asInterface(pmAgent.onBind()), mTransport);
- addBackupTrace("PMBA invoke: " + mStatus);
+ if (skipPm) {
+ Slog.d(TAG, "Skipping backup of package metadata.");
+ executeNextState(BackupState.RUNNING_QUEUE);
+ } else {
+ // The package manager doesn't have a proper <application> etc, but since
+ // it's running here in the system process we can just set up its agent
+ // directly and use a synthetic BackupRequest. We always run this pass
+ // because it's cheap and this way we guarantee that we don't get out of
+ // step even if we're selecting among various transports at run time.
+ if (mStatus == BackupTransport.TRANSPORT_OK) {
+ PackageManagerBackupAgent pmAgent = new PackageManagerBackupAgent(
+ mPackageManager);
+ mStatus = invokeAgentForBackup(PACKAGE_MANAGER_SENTINEL,
+ IBackupAgent.Stub.asInterface(pmAgent.onBind()), mTransport);
+ addBackupTrace("PMBA invoke: " + mStatus);
- // Because the PMBA is a local instance, it has already executed its
- // backup callback and returned. Blow away the lingering (spurious)
- // pending timeout message for it.
- mBackupHandler.removeMessages(MSG_TIMEOUT);
+ // Because the PMBA is a local instance, it has already executed its
+ // backup callback and returned. Blow away the lingering (spurious)
+ // pending timeout message for it.
+ mBackupHandler.removeMessages(MSG_TIMEOUT);
+ }
}
if (mStatus == BackupTransport.TRANSPORT_NOT_INITIALIZED) {
@@ -3066,6 +3090,7 @@
if (DEBUG) Slog.d(TAG, "invokeAgentForBackup on " + packageName);
addBackupTrace("invoking " + packageName);
+ File blankStateName = new File(mStateDir, "blank_state");
mSavedStateName = new File(mStateDir, packageName);
mBackupDataName = new File(mDataDir, packageName + ".data");
mNewStateName = new File(mStateDir, packageName + ".new");
@@ -3088,9 +3113,10 @@
}
// In a full backup, we pass a null ParcelFileDescriptor as
- // the saved-state "file". This is by definition an incremental,
- // so we build a saved state file to pass.
- mSavedState = ParcelFileDescriptor.open(mSavedStateName,
+ // the saved-state "file". For key/value backups we pass the old state if
+ // an incremental backup is required, and a blank state otherwise.
+ mSavedState = ParcelFileDescriptor.open(
+ mNonIncremental ? blankStateName : mSavedStateName,
ParcelFileDescriptor.MODE_READ_ONLY |
ParcelFileDescriptor.MODE_CREATE); // Make an empty file if necessary
@@ -3120,6 +3146,10 @@
e.toString());
agentErrorCleanup();
return BackupTransport.AGENT_ERROR;
+ } finally {
+ if (mNonIncremental) {
+ blankStateName.delete();
+ }
}
// At this point the agent is off and running. The next thing to happen will
diff --git a/services/backup/java/com/android/server/backup/Trampoline.java b/services/backup/java/com/android/server/backup/Trampoline.java
index 312b878..d677f5e 100644
--- a/services/backup/java/com/android/server/backup/Trampoline.java
+++ b/services/backup/java/com/android/server/backup/Trampoline.java
@@ -338,9 +338,10 @@
}
@Override
- public int requestBackup(String[] packages, IBackupObserver observer) throws RemoteException {
+ public int requestBackup(String[] packages, IBackupObserver observer, int flags)
+ throws RemoteException {
BackupManagerService svc = mService;
- return (svc != null) ? svc.requestBackup(packages, observer) : null;
+ return (svc != null) ? svc.requestBackup(packages, observer, flags) : null;
}
@Override
diff --git a/services/core/java/com/android/server/AppOpsService.java b/services/core/java/com/android/server/AppOpsService.java
index 570843e..1f62945 100644
--- a/services/core/java/com/android/server/AppOpsService.java
+++ b/services/core/java/com/android/server/AppOpsService.java
@@ -881,11 +881,9 @@
}
code = AppOpsManager.opToSwitch(code);
UidState uidState = getUidStateLocked(uid, false);
- if (uidState != null && uidState.opModes != null) {
- final int uidMode = uidState.opModes.get(code);
- if (uidMode != AppOpsManager.MODE_ALLOWED) {
- return uidMode;
- }
+ if (uidState != null && uidState.opModes != null
+ && uidState.opModes.indexOfKey(code) >= 0) {
+ return uidState.opModes.get(code);
}
Op op = getOpLocked(code, uid, resolvedPackageName, false);
if (op == null) {
@@ -2126,6 +2124,7 @@
UidState uidState = mUidStates.valueAt(i);
pw.print(" Uid "); UserHandle.formatUid(pw, uidState.uid); pw.println(":");
+ needSep = true;
SparseIntArray opModes = uidState.opModes;
if (opModes != null) {
@@ -2166,6 +2165,55 @@
}
}
}
+ if (needSep) {
+ pw.println();
+ }
+
+ final int userRestrictionCount = mOpUserRestrictions.size();
+ for (int i = 0; i < userRestrictionCount; i++) {
+ IBinder token = mOpUserRestrictions.keyAt(i);
+ ClientRestrictionState restrictionState = mOpUserRestrictions.valueAt(i);
+ pw.println(" User restrictions for token " + token + ":");
+
+ final int restrictionCount = restrictionState.perUserRestrictions != null
+ ? restrictionState.perUserRestrictions.size() : 0;
+ if (restrictionCount > 0) {
+ pw.println(" Restricted ops:");
+ for (int j = 0; j < restrictionCount; j++) {
+ int userId = restrictionState.perUserRestrictions.keyAt(j);
+ boolean[] restrictedOps = restrictionState.perUserRestrictions.valueAt(j);
+ if (restrictedOps == null) {
+ continue;
+ }
+ StringBuilder restrictedOpsValue = new StringBuilder();
+ restrictedOpsValue.append("[");
+ final int restrictedOpCount = restrictedOps.length;
+ for (int k = 0; k < restrictedOpCount; k++) {
+ if (restrictedOps[k]) {
+ if (restrictedOpsValue.length() > 1) {
+ restrictedOpsValue.append(", ");
+ }
+ restrictedOpsValue.append(AppOpsManager.opToName(k));
+ }
+ }
+ restrictedOpsValue.append("]");
+ pw.print(" "); pw.print("user: "); pw.print(userId);
+ pw.print(" restricted ops: "); pw.println(restrictedOpsValue);
+ }
+ }
+
+ final int excludedPackageCount = restrictionState.perUserExcludedPackages != null
+ ? restrictionState.perUserExcludedPackages.size() : 0;
+ if (excludedPackageCount > 0) {
+ pw.println(" Excluded packages:");
+ for (int j = 0; j < excludedPackageCount; j++) {
+ int userId = restrictionState.perUserExcludedPackages.keyAt(j);
+ String[] packageNames = restrictionState.perUserExcludedPackages.valueAt(j);
+ pw.print(" "); pw.print("user: "); pw.print(userId);
+ pw.print(" packages: "); pw.println(Arrays.toString(packageNames));
+ }
+ }
+ }
}
}
diff --git a/services/core/java/com/android/server/ConnectivityService.java b/services/core/java/com/android/server/ConnectivityService.java
index 0a088e9..381fe89 100644
--- a/services/core/java/com/android/server/ConnectivityService.java
+++ b/services/core/java/com/android/server/ConnectivityService.java
@@ -3121,10 +3121,7 @@
Settings.Global.TETHER_SUPPORTED, defaultVal) != 0)
&& !mUserManager.hasUserRestriction(UserManager.DISALLOW_CONFIG_TETHERING);
return tetherEnabledInSettings && mUserManager.isAdminUser() &&
- ((mTethering.getTetherableUsbRegexs().length != 0 ||
- mTethering.getTetherableWifiRegexs().length != 0 ||
- mTethering.getTetherableBluetoothRegexs().length != 0) &&
- mTethering.getUpstreamIfaceTypes().length != 0);
+ mTethering.hasTetherableConfiguration();
}
@Override
diff --git a/services/core/java/com/android/server/DeviceIdleController.java b/services/core/java/com/android/server/DeviceIdleController.java
index 9f63e30..97edb15 100644
--- a/services/core/java/com/android/server/DeviceIdleController.java
+++ b/services/core/java/com/android/server/DeviceIdleController.java
@@ -18,6 +18,7 @@
import android.Manifest;
import android.app.ActivityManager;
+import android.app.ActivityManagerInternal;
import android.app.AlarmManager;
import android.content.BroadcastReceiver;
import android.content.ContentResolver;
@@ -114,6 +115,7 @@
private AlarmManager mAlarmManager;
private IBatteryStats mBatteryStats;
+ private ActivityManagerInternal mLocalActivityManager;
private PowerManagerInternal mLocalPowerManager;
private PowerManager mPowerManager;
private ConnectivityService mConnectivityService;
@@ -1272,6 +1274,11 @@
DeviceIdleController.this.setAlarmsActive(active);
}
+ /** Is the app on any of the power save whitelists, whether system or user? */
+ public boolean isAppOnWhitelist(int appid) {
+ return DeviceIdleController.this.isAppOnWhitelistInternal(appid);
+ }
+
/**
* Returns the array of app ids whitelisted by user. Take care not to
* modify this, as it is a reference to the original copy. But the reference
@@ -1289,6 +1296,12 @@
mHandler = new MyHandler(BackgroundThread.getHandler().getLooper());
}
+ boolean isAppOnWhitelistInternal(int appid) {
+ synchronized (this) {
+ return Arrays.binarySearch(mPowerSaveWhitelistAllAppIdArray, appid) >= 0;
+ }
+ }
+
int[] getPowerSaveWhitelistUserAppIds() {
synchronized (this) {
return mPowerSaveWhitelistUserAppIdArray;
@@ -1362,6 +1375,7 @@
synchronized (this) {
mAlarmManager = (AlarmManager) getContext().getSystemService(Context.ALARM_SERVICE);
mBatteryStats = BatteryStatsService.getService();
+ mLocalActivityManager = getLocalService(ActivityManagerInternal.class);
mLocalPowerManager = getLocalService(PowerManagerInternal.class);
mPowerManager = getContext().getSystemService(PowerManager.class);
mActiveIdleWakeLock = mPowerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,
@@ -1431,6 +1445,7 @@
filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
getContext().registerReceiver(mReceiver, filter);
+ mLocalActivityManager.setDeviceIdleWhitelist(mPowerSaveWhitelistAllAppIdArray);
mLocalPowerManager.setDeviceIdleWhitelist(mPowerSaveWhitelistAllAppIdArray);
mLocalAlarmManager.setDeviceIdleUserWhitelist(mPowerSaveWhitelistUserAppIdArray);
mDisplayManager.registerDisplayListener(mDisplayListener, null);
@@ -1652,7 +1667,7 @@
} catch (RemoteException e) {
}
postTempActiveTimeoutMessage(appId, duration);
- updateTempWhitelistAppIdsLocked();
+ updateTempWhitelistAppIdsLocked(appId, true);
if (mNetworkPolicyTempWhitelistCallback != null) {
if (!sync) {
mHandler.post(mNetworkPolicyTempWhitelistCallback);
@@ -1698,7 +1713,7 @@
if (DEBUG) {
Slog.d(TAG, "Removing UID " + uid + " from temp whitelist");
}
- updateTempWhitelistAppIdsLocked();
+ updateTempWhitelistAppIdsLocked(uid, false);
if (mNetworkPolicyTempWhitelistCallback != null) {
mHandler.post(mNetworkPolicyTempWhitelistCallback);
}
@@ -2318,6 +2333,13 @@
mPowerSaveWhitelistUserApps, mPowerSaveWhitelistAllAppIds);
mPowerSaveWhitelistUserAppIdArray = buildAppIdArray(null,
mPowerSaveWhitelistUserApps, mPowerSaveWhitelistUserAppIds);
+ if (mLocalActivityManager != null) {
+ if (DEBUG) {
+ Slog.d(TAG, "Setting activity manager whitelist to "
+ + Arrays.toString(mPowerSaveWhitelistAllAppIdArray));
+ }
+ mLocalActivityManager.setDeviceIdleWhitelist(mPowerSaveWhitelistAllAppIdArray);
+ }
if (mLocalPowerManager != null) {
if (DEBUG) {
Slog.d(TAG, "Setting wakelock whitelist to "
@@ -2334,7 +2356,7 @@
}
}
- private void updateTempWhitelistAppIdsLocked() {
+ private void updateTempWhitelistAppIdsLocked(int appId, boolean adding) {
final int size = mTempWhitelistAppIdEndTimes.size();
if (mTempWhitelistAppIdArray.length != size) {
mTempWhitelistAppIdArray = new int[size];
@@ -2342,6 +2364,14 @@
for (int i = 0; i < size; i++) {
mTempWhitelistAppIdArray[i] = mTempWhitelistAppIdEndTimes.keyAt(i);
}
+ if (mLocalActivityManager != null) {
+ if (DEBUG) {
+ Slog.d(TAG, "Setting activity manager temp whitelist to "
+ + Arrays.toString(mTempWhitelistAppIdArray));
+ }
+ mLocalActivityManager.updateDeviceIdleTempWhitelist(mTempWhitelistAppIdArray, appId,
+ adding);
+ }
if (mLocalPowerManager != null) {
if (DEBUG) {
Slog.d(TAG, "Setting wakelock temp whitelist to "
@@ -2512,8 +2542,9 @@
pw.println(" Add (prefix with +) or remove (prefix with -) packages.");
pw.println(" tempwhitelist");
pw.println(" Print packages that are temporarily whitelisted.");
- pw.println(" tempwhitelist [-u] [package ..]");
- pw.println(" Temporarily place packages in whitelist for 10 seconds.");
+ pw.println(" tempwhitelist [-u USER] [-d DURATION] [package ..]");
+ pw.println(" Temporarily place packages in whitelist for DURATION milliseconds.");
+ pw.println(" If no DURATION is specified, 10 seconds is used");
}
class Shell extends ShellCommand {
@@ -2796,6 +2827,7 @@
}
}
} else if ("tempwhitelist".equals(cmd)) {
+ long duration = 10000;
String opt;
while ((opt=shell.getNextOption()) != null) {
if ("-u".equals(opt)) {
@@ -2805,12 +2837,19 @@
return -1;
}
shell.userId = Integer.parseInt(opt);
+ } else if ("-d".equals(opt)) {
+ opt = shell.getNextArg();
+ if (opt == null) {
+ pw.println("-d requires a duration");
+ return -1;
+ }
+ duration = Long.parseLong(opt);
}
}
String arg = shell.getNextArg();
if (arg != null) {
try {
- addPowerSaveTempWhitelistAppChecked(arg, 10000L, shell.userId, "shell");
+ addPowerSaveTempWhitelistAppChecked(arg, duration, shell.userId, "shell");
} catch (RemoteException re) {
pw.println("Failed: " + re);
}
diff --git a/services/core/java/com/android/server/EventLogTags.logtags b/services/core/java/com/android/server/EventLogTags.logtags
index d42fe11..4559254 100644
--- a/services/core/java/com/android/server/EventLogTags.logtags
+++ b/services/core/java/com/android/server/EventLogTags.logtags
@@ -99,6 +99,13 @@
2810 watchdog_vmstat (runtime|2|3),(pgfree|1|1),(pgactivate|1|1),(pgdeactivate|1|1),(pgfault|1|1),(pgmajfault|1|1)
2811 watchdog_requested_reboot (NoWait|1|1),(ScheduleInterval|1|3),(RecheckInterval|1|3),(StartTime|1|3),(Window|1|3),(MinScreenOff|1|3),(MinNextAlarm|1|3)
+# ---------------------------
+# RescueParty.java
+# ---------------------------
+2900 rescue_note (uid|1),(count|1),(window|2)
+2901 rescue_level (level|1),(trigger_uid|1)
+2902 rescue_success (level|1)
+2903 rescue_failure (level|1),(msg|3)
# ---------------------------
# BackupManagerService.java
diff --git a/services/core/java/com/android/server/RescueParty.java b/services/core/java/com/android/server/RescueParty.java
new file mode 100644
index 0000000..bb8401f
--- /dev/null
+++ b/services/core/java/com/android/server/RescueParty.java
@@ -0,0 +1,299 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server;
+
+import android.content.ContentResolver;
+import android.content.Context;
+import android.content.pm.UserInfo;
+import android.os.RecoverySystem;
+import android.os.SystemClock;
+import android.os.SystemProperties;
+import android.os.UserHandle;
+import android.os.UserManager;
+import android.provider.Settings;
+import android.text.format.DateUtils;
+import android.util.ExceptionUtils;
+import android.util.MathUtils;
+import android.util.Slog;
+import android.util.SparseArray;
+
+import com.android.internal.util.ArrayUtils;
+
+/**
+ * Utilities to help rescue the system from crash loops. Callers are expected to
+ * report boot events and persistent app crashes, and if they happen frequently
+ * enough this class will slowly escalate through several rescue operations
+ * before finally rebooting and prompting the user if they want to wipe data as
+ * a last resort.
+ *
+ * @hide
+ */
+public class RescueParty {
+ private static final String TAG = "RescueParty";
+
+ private static final String PROP_RESCUE_LEVEL = "sys.rescue_level";
+ private static final String PROP_RESCUE_BOOT_COUNT = "sys.rescue_boot_count";
+ private static final String PROP_RESCUE_BOOT_START = "sys.rescue_boot_start";
+
+ private static final int LEVEL_NONE = 0;
+ private static final int LEVEL_RESET_SETTINGS_UNTRUSTED_DEFAULTS = 1;
+ private static final int LEVEL_RESET_SETTINGS_UNTRUSTED_CHANGES = 2;
+ private static final int LEVEL_RESET_SETTINGS_TRUSTED_DEFAULTS = 3;
+ private static final int LEVEL_FACTORY_RESET = 4;
+
+ /** Threshold for boot loops */
+ private static final Threshold sBoot = new BootThreshold();
+ /** Threshold for app crash loops */
+ private static SparseArray<Threshold> sApps = new SparseArray<>();
+
+ /**
+ * Take note of a boot event. If we notice too many of these events
+ * happening in rapid succession, we'll send out a rescue party.
+ */
+ public static void noteBoot(Context context) {
+ if (sBoot.incrementAndTest()) {
+ sBoot.reset();
+ incrementRescueLevel(sBoot.uid);
+ executeRescueLevel(context);
+ }
+ }
+
+ /**
+ * Take note of a persistent app crash. If we notice too many of these
+ * events happening in rapid succession, we'll send out a rescue party.
+ */
+ public static void notePersistentAppCrash(Context context, int uid) {
+ Threshold t = sApps.get(uid);
+ if (t == null) {
+ t = new AppThreshold(uid);
+ sApps.put(uid, t);
+ }
+ if (t.incrementAndTest()) {
+ t.reset();
+ incrementRescueLevel(t.uid);
+ executeRescueLevel(context);
+ }
+ }
+
+ /**
+ * Check if we're currently attempting to reboot for a factory reset.
+ */
+ public static boolean isAttemptingFactoryReset() {
+ return SystemProperties.getInt(PROP_RESCUE_LEVEL, LEVEL_NONE) == LEVEL_FACTORY_RESET;
+ }
+
+ /**
+ * Escalate to the next rescue level. After incrementing the level you'll
+ * probably want to call {@link #executeRescueLevel(Context)}.
+ */
+ private static void incrementRescueLevel(int triggerUid) {
+ final int level = MathUtils.constrain(
+ SystemProperties.getInt(PROP_RESCUE_LEVEL, LEVEL_NONE) + 1,
+ LEVEL_NONE, LEVEL_FACTORY_RESET);
+ SystemProperties.set(PROP_RESCUE_LEVEL, Integer.toString(level));
+
+ EventLogTags.writeRescueLevel(level, triggerUid);
+ Slog.w(TAG, "Incremented rescue level to " + levelToString(level));
+ }
+
+ /**
+ * Called when {@code SettingsProvider} has been published, which is a good
+ * opportunity to reset any settings depending on our rescue level.
+ */
+ public static void onSettingsProviderPublished(Context context) {
+ executeRescueLevel(context);
+ }
+
+ private static void executeRescueLevel(Context context) {
+ final int level = SystemProperties.getInt(PROP_RESCUE_LEVEL, LEVEL_NONE);
+ if (level == LEVEL_NONE) return;
+
+ Slog.w(TAG, "Attempting rescue level " + levelToString(level));
+ try {
+ executeRescueLevelInternal(context, level);
+ EventLogTags.writeRescueSuccess(level);
+ Slog.d(TAG, "Finished rescue level " + levelToString(level));
+ } catch (Throwable t) {
+ EventLogTags.writeRescueFailure(level, ExceptionUtils.getCompleteMessage(t));
+ Slog.e(TAG, "Failed rescue level " + levelToString(level), t);
+ }
+ }
+
+ private static void executeRescueLevelInternal(Context context, int level) throws Exception {
+ switch (level) {
+ case LEVEL_RESET_SETTINGS_UNTRUSTED_DEFAULTS:
+ resetAllSettings(context, Settings.RESET_MODE_UNTRUSTED_DEFAULTS);
+ break;
+ case LEVEL_RESET_SETTINGS_UNTRUSTED_CHANGES:
+ resetAllSettings(context, Settings.RESET_MODE_UNTRUSTED_CHANGES);
+ break;
+ case LEVEL_RESET_SETTINGS_TRUSTED_DEFAULTS:
+ resetAllSettings(context, Settings.RESET_MODE_TRUSTED_DEFAULTS);
+ break;
+ case LEVEL_FACTORY_RESET:
+ RecoverySystem.rebootPromptAndWipeUserData(context, TAG);
+ break;
+ }
+ }
+
+ private static void resetAllSettings(Context context, int mode) throws Exception {
+ // Try our best to reset all settings possible, and once finished
+ // rethrow any exception that we encountered
+ Exception res = null;
+ final ContentResolver resolver = context.getContentResolver();
+ try {
+ Settings.Global.resetToDefaultsAsUser(resolver, null, mode, UserHandle.USER_SYSTEM);
+ } catch (Exception e) {
+ res = new RuntimeException("Failed to reset global settings", e);
+ }
+ for (int userId : getAllUserIds(context)) {
+ try {
+ Settings.Secure.resetToDefaultsAsUser(resolver, null, mode, userId);
+ } catch (Exception e) {
+ res = new RuntimeException("Failed to reset secure settings for " + userId, e);
+ }
+ }
+ if (res != null) {
+ throw res;
+ }
+ }
+
+ /**
+ * Threshold that can be triggered if a number of events occur within a
+ * window of time.
+ */
+ private abstract static class Threshold {
+ public abstract int getCount();
+ public abstract void setCount(int count);
+ public abstract long getStart();
+ public abstract void setStart(long start);
+
+ private final int uid;
+ private final int triggerCount;
+ private final long triggerWindow;
+
+ public Threshold(int uid, int triggerCount, long triggerWindow) {
+ this.uid = uid;
+ this.triggerCount = triggerCount;
+ this.triggerWindow = triggerWindow;
+ }
+
+ public void reset() {
+ setCount(0);
+ setStart(0);
+ }
+
+ /**
+ * @return if this threshold has been triggered
+ */
+ public boolean incrementAndTest() {
+ final long now = SystemClock.elapsedRealtime();
+ final long window = now - getStart();
+ if (window > triggerWindow) {
+ setCount(1);
+ setStart(now);
+ return false;
+ } else {
+ int count = getCount() + 1;
+ setCount(count);
+ EventLogTags.writeRescueNote(uid, count, window);
+ Slog.w(TAG, "Noticed " + count + " events for UID " + uid + " in last "
+ + (window / 1000) + " sec");
+ return (count >= triggerCount);
+ }
+ }
+ }
+
+ /**
+ * Specialization of {@link Threshold} for monitoring boot events. It stores
+ * counters in system properties for robustness.
+ */
+ private static class BootThreshold extends Threshold {
+ public BootThreshold() {
+ // We're interested in 5 events in any 300 second period; this
+ // window is super relaxed because booting can take a long time if
+ // forced to dexopt things.
+ super(android.os.Process.ROOT_UID, 5, 300 * DateUtils.SECOND_IN_MILLIS);
+ }
+
+ @Override
+ public int getCount() {
+ return SystemProperties.getInt(PROP_RESCUE_BOOT_COUNT, 0);
+ }
+
+ @Override
+ public void setCount(int count) {
+ SystemProperties.set(PROP_RESCUE_BOOT_COUNT, Integer.toString(count));
+ }
+
+ @Override
+ public long getStart() {
+ return SystemProperties.getLong(PROP_RESCUE_BOOT_START, 0);
+ }
+
+ @Override
+ public void setStart(long start) {
+ SystemProperties.set(PROP_RESCUE_BOOT_START, Long.toString(start));
+ }
+ }
+
+ /**
+ * Specialization of {@link Threshold} for monitoring app crashes. It stores
+ * counters in memory.
+ */
+ private static class AppThreshold extends Threshold {
+ private int count;
+ private long start;
+
+ public AppThreshold(int uid) {
+ // We're interested in 5 events in any 30 second period; apps crash
+ // pretty quickly so we can keep a tight leash on them.
+ super(uid, 5, 30 * DateUtils.SECOND_IN_MILLIS);
+ }
+
+ @Override public int getCount() { return count; }
+ @Override public void setCount(int count) { this.count = count; }
+ @Override public long getStart() { return start; }
+ @Override public void setStart(long start) { this.start = start; }
+ }
+
+ private static int[] getAllUserIds(Context context) {
+ int[] userIds = { UserHandle.USER_SYSTEM };
+ try {
+ final UserManager um = context.getSystemService(UserManager.class);
+ for (UserInfo user : um.getUsers()) {
+ if (user.id != UserHandle.USER_SYSTEM) {
+ userIds = ArrayUtils.appendInt(userIds, user.id);
+ }
+ }
+ } catch (Throwable t) {
+ Slog.w(TAG, "Trouble discovering users", t);
+ }
+ return userIds;
+ }
+
+ private static String levelToString(int level) {
+ switch (level) {
+ case LEVEL_NONE: return "NONE";
+ case LEVEL_RESET_SETTINGS_UNTRUSTED_DEFAULTS: return "RESET_SETTINGS_UNTRUSTED_DEFAULTS";
+ case LEVEL_RESET_SETTINGS_UNTRUSTED_CHANGES: return "RESET_SETTINGS_UNTRUSTED_CHANGES";
+ case LEVEL_RESET_SETTINGS_TRUSTED_DEFAULTS: return "RESET_SETTINGS_TRUSTED_DEFAULTS";
+ case LEVEL_FACTORY_RESET: return "FACTORY_RESET";
+ default: return Integer.toString(level);
+ }
+ }
+}
diff --git a/services/core/java/com/android/server/StorageManagerService.java b/services/core/java/com/android/server/StorageManagerService.java
index f9b9d6f..94acd75 100644
--- a/services/core/java/com/android/server/StorageManagerService.java
+++ b/services/core/java/com/android/server/StorageManagerService.java
@@ -2991,38 +2991,6 @@
}
}
- @Override
- public ParcelFileDescriptor mountAppFuse(final String name) throws RemoteException {
- try {
- final int uid = Binder.getCallingUid();
- final int pid = Binder.getCallingPid();
- final NativeDaemonEvent event =
- mConnector.execute("appfuse", "mount", uid, pid, name);
- if (event.getFileDescriptors() == null) {
- throw new RemoteException("AppFuse FD from vold is null.");
- }
- return ParcelFileDescriptor.fromFd(
- event.getFileDescriptors()[0],
- mHandler,
- new ParcelFileDescriptor.OnCloseListener() {
- @Override
- public void onClose(IOException e) {
- try {
- final NativeDaemonEvent event = mConnector.execute(
- "appfuse", "unmount", uid, pid, name);
- } catch (NativeDaemonConnectorException unmountException) {
- Log.e(TAG, "Failed to unmount appfuse.");
- }
- }
- });
- } catch (NativeDaemonConnectorException e) {
- throw e.rethrowAsParcelableException();
- } catch (IOException e) {
- throw new RemoteException(e.getMessage());
- }
- }
-
-
class CloseableHolder<T extends AutoCloseable> implements AutoCloseable {
@Nullable T mCloseable;
diff --git a/services/core/java/com/android/server/TelephonyRegistry.java b/services/core/java/com/android/server/TelephonyRegistry.java
index 62f4f19..0834eb8 100644
--- a/services/core/java/com/android/server/TelephonyRegistry.java
+++ b/services/core/java/com/android/server/TelephonyRegistry.java
@@ -1360,6 +1360,7 @@
}
Intent intent = new Intent(TelephonyIntents.ACTION_SERVICE_STATE_CHANGED);
+ intent.addFlags(Intent.FLAG_RECEIVER_INCLUDE_BACKGROUND);
Bundle data = new Bundle();
state.fillInNotifierBundle(data);
intent.putExtras(data);
diff --git a/services/core/java/com/android/server/am/ActiveServices.java b/services/core/java/com/android/server/am/ActiveServices.java
index 7661127..4b89b40 100644
--- a/services/core/java/com/android/server/am/ActiveServices.java
+++ b/services/core/java/com/android/server/am/ActiveServices.java
@@ -305,6 +305,7 @@
}
ComponentName startServiceLocked(IApplicationThread caller, Intent service, String resolvedType,
+ int id, Notification notification,
int callingPid, int callingUid, String callingPackage, final int userId)
throws TransactionTooLargeException {
if (DEBUG_DELAYED_STARTS) Slog.v(TAG_SERVICE, "startService: " + service
@@ -324,7 +325,6 @@
callerFg = true;
}
-
ServiceLookupResult res =
retrieveServiceLocked(service, resolvedType, callingPackage,
callingPid, callingUid, userId, true, callerFg, false);
@@ -343,10 +343,11 @@
return null;
}
- if (!r.startRequested) {
+ // Non-null notification means this is a start directly into the foreground
+ if (!r.startRequested && notification == null) {
final long token = Binder.clearCallingIdentity();
try {
- // Before going further -- if this app is not allowed to run in the
+ // Before going further -- if this app is not allowed to start services in the
// background, then at this point we aren't going to let it period.
final int allowed = mAm.checkAllowBackgroundLocked(
r.appInfo.uid, r.packageName, callingPid, false);
@@ -355,7 +356,14 @@
+ service + " to " + r.name.flattenToShortString()
+ " from pid=" + callingPid + " uid=" + callingUid
+ " pkg=" + callingPackage);
- return null;
+ if (allowed == ActivityManager.APP_START_MODE_DELAYED) {
+ // In this case we are silently disabling the app, to disrupt as
+ // little as possible existing apps.
+ return null;
+ }
+ // This app knows it is in the new model where this operation is not
+ // allowed, so tell it what has happened.
+ return new ComponentName("?", "app is in background");
}
} finally {
Binder.restoreCallingIdentity(token);
@@ -450,7 +458,11 @@
}
}
- return startServiceInnerLocked(smap, service, r, callerFg, addToStarting);
+ ComponentName cmp = startServiceInnerLocked(smap, service, r, callerFg, addToStarting);
+ if (notification != null) {
+ setServiceForegroundInnerLocked(r, callingUid, notification, 0);
+ }
+ return cmp;
}
private boolean requestStartTargetPermissionsReviewIfNeededLocked(ServiceRecord r,
@@ -595,9 +607,8 @@
for (int i=services.mServicesByName.size()-1; i>=0; i--) {
ServiceRecord service = services.mServicesByName.valueAt(i);
if (service.appInfo.uid == uid && service.startRequested) {
- if (service.appInfo.isEphemeralApp() ||
- mAm.mAppOpsService.noteOperation(AppOpsManager.OP_RUN_IN_BACKGROUND,
- uid, service.packageName) != AppOpsManager.MODE_ALLOWED) {
+ if (mAm.checkAllowBackgroundLocked(service.appInfo.uid, service.packageName,
+ -1, false) != ActivityManager.APP_START_MODE_NORMAL) {
if (stopping == null) {
stopping = new ArrayList<>();
stopping.add(service);
@@ -696,50 +707,55 @@
try {
ServiceRecord r = findServiceLocked(className, token, userId);
if (r != null) {
- if (id != 0) {
- if (notification == null) {
- throw new IllegalArgumentException("null notification");
- }
- if (r.foregroundId != id) {
- cancelForegroudNotificationLocked(r);
- r.foregroundId = id;
- }
- notification.flags |= Notification.FLAG_FOREGROUND_SERVICE;
- r.foregroundNoti = notification;
- r.isForeground = true;
- r.postNotification();
- if (r.app != null) {
- updateServiceForegroundLocked(r.app, true);
- }
- getServiceMapLocked(r.userId).ensureNotStartingBackgroundLocked(r);
- mAm.notifyPackageUse(r.serviceInfo.packageName,
- PackageManager.NOTIFY_PACKAGE_USE_FOREGROUND_SERVICE);
- } else {
- if (r.isForeground) {
- r.isForeground = false;
- if (r.app != null) {
- mAm.updateLruProcessLocked(r.app, false, null);
- updateServiceForegroundLocked(r.app, true);
- }
- }
- if ((flags & Service.STOP_FOREGROUND_REMOVE) != 0) {
- cancelForegroudNotificationLocked(r);
- r.foregroundId = 0;
- r.foregroundNoti = null;
- } else if (r.appInfo.targetSdkVersion >= Build.VERSION_CODES.LOLLIPOP) {
- r.stripForegroundServiceFlagFromNotification();
- if ((flags & Service.STOP_FOREGROUND_DETACH) != 0) {
- r.foregroundId = 0;
- r.foregroundNoti = null;
- }
- }
- }
+ setServiceForegroundInnerLocked(r, userId, notification, flags);
}
} finally {
Binder.restoreCallingIdentity(origId);
}
}
+ private void setServiceForegroundInnerLocked(ServiceRecord r, int id,
+ Notification notification, int flags) {
+ if (id != 0) {
+ if (notification == null) {
+ throw new IllegalArgumentException("null notification");
+ }
+ if (r.foregroundId != id) {
+ cancelForegroudNotificationLocked(r);
+ r.foregroundId = id;
+ }
+ notification.flags |= Notification.FLAG_FOREGROUND_SERVICE;
+ r.foregroundNoti = notification;
+ r.isForeground = true;
+ r.postNotification();
+ if (r.app != null) {
+ updateServiceForegroundLocked(r.app, true);
+ }
+ getServiceMapLocked(r.userId).ensureNotStartingBackgroundLocked(r);
+ mAm.notifyPackageUse(r.serviceInfo.packageName,
+ PackageManager.NOTIFY_PACKAGE_USE_FOREGROUND_SERVICE);
+ } else {
+ if (r.isForeground) {
+ r.isForeground = false;
+ if (r.app != null) {
+ mAm.updateLruProcessLocked(r.app, false, null);
+ updateServiceForegroundLocked(r.app, true);
+ }
+ }
+ if ((flags & Service.STOP_FOREGROUND_REMOVE) != 0) {
+ cancelForegroudNotificationLocked(r);
+ r.foregroundId = 0;
+ r.foregroundNoti = null;
+ } else if (r.appInfo.targetSdkVersion >= Build.VERSION_CODES.LOLLIPOP) {
+ r.stripForegroundServiceFlagFromNotification();
+ if ((flags & Service.STOP_FOREGROUND_DETACH) != 0) {
+ r.foregroundId = 0;
+ r.foregroundNoti = null;
+ }
+ }
+ }
+ }
+
private void cancelForegroudNotificationLocked(ServiceRecord r) {
if (r.foregroundId != 0) {
// First check to see if this app has any other active foreground services
@@ -1444,6 +1460,8 @@
// If service is not currently running, can't yet bind.
return false;
}
+ if (DEBUG_SERVICE) Slog.d(TAG_SERVICE, "requestBind " + i + ": requested=" + i.requested
+ + " rebind=" + rebind);
if ((!i.requested || rebind) && i.apps.size() > 0) {
try {
bumpServiceExecutingLocked(r, execInFg, "bind");
@@ -1907,6 +1925,7 @@
mAm.grantUriPermissionUncheckedFromIntentLocked(si.neededGrants,
si.getUriPermissionsLocked());
}
+ // TODO b/34123112; Insert ephemeral grant here
bumpServiceExecutingLocked(r, execInFg, "start");
if (!oomAdjusted) {
oomAdjusted = true;
@@ -2014,6 +2033,7 @@
bumpServiceExecutingLocked(r, false, "bring down unbind");
mAm.updateOomAdjLocked(r.app);
ibr.hasBound = false;
+ ibr.requested = false;
r.app.thread.scheduleUnbindService(r,
ibr.intent.getIntent());
} catch (Exception e) {
diff --git a/services/core/java/com/android/server/am/ActivityManagerDebugConfig.java b/services/core/java/com/android/server/am/ActivityManagerDebugConfig.java
index 43bb5ee..88e0d03 100644
--- a/services/core/java/com/android/server/am/ActivityManagerDebugConfig.java
+++ b/services/core/java/com/android/server/am/ActivityManagerDebugConfig.java
@@ -48,6 +48,7 @@
static final boolean DEBUG_ADD_REMOVE = DEBUG_ALL_ACTIVITIES || false;
static final boolean DEBUG_ANR = false;
static final boolean DEBUG_APP = DEBUG_ALL_ACTIVITIES || false;
+ static final boolean DEBUG_BACKGROUND_CHECK = DEBUG_ALL || false;
static final boolean DEBUG_BACKUP = DEBUG_ALL || false;
static final boolean DEBUG_BROADCAST = DEBUG_ALL || false;
static final boolean DEBUG_BROADCAST_BACKGROUND = DEBUG_BROADCAST || false;
diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java
index 2a324eb..f99dfed 100644
--- a/services/core/java/com/android/server/am/ActivityManagerService.java
+++ b/services/core/java/com/android/server/am/ActivityManagerService.java
@@ -62,6 +62,7 @@
import static com.android.internal.util.XmlUtils.writeLongAttribute;
import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_ALL;
import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_ANR;
+import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_BACKGROUND_CHECK;
import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_BACKUP;
import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_BROADCAST;
import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_BROADCAST_BACKGROUND;
@@ -119,6 +120,7 @@
import static com.android.server.am.ActivityManagerDebugConfig.TAG_AM;
import static com.android.server.am.ActivityManagerDebugConfig.TAG_WITH_CLASS_NAME;
import static com.android.server.am.ActivityStackSupervisor.ActivityContainer.FORCE_NEW_TASK_FLAGS;
+import static com.android.server.am.ActivityStackSupervisor.CREATE_IF_NEEDED;
import static com.android.server.am.ActivityStackSupervisor.DEFER_RESUME;
import static com.android.server.am.ActivityStackSupervisor.FORCE_FOCUS;
import static com.android.server.am.ActivityStackSupervisor.ON_TOP;
@@ -151,7 +153,6 @@
import android.app.ActivityManager.TaskSnapshot;
import android.app.ActivityManager.TaskThumbnailInfo;
import android.app.ActivityManagerInternal;
-import android.app.ActivityManagerInternal.PictureInPictureArguments;
import android.app.ActivityManagerInternal.SleepToken;
import android.app.ActivityOptions;
import android.app.ActivityThread;
@@ -182,6 +183,7 @@
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
+import android.app.PictureInPictureArgs;
import android.app.ProfilerInfo;
import android.app.RemoteAction;
import android.app.WaitResult;
@@ -229,7 +231,6 @@
import android.content.res.Resources;
import android.database.ContentObserver;
import android.graphics.Bitmap;
-import android.graphics.GraphicBuffer;
import android.graphics.Point;
import android.graphics.Rect;
import android.location.LocationManager;
@@ -310,7 +311,6 @@
import com.google.android.collect.Lists;
import com.google.android.collect.Maps;
-
import com.android.internal.R;
import com.android.internal.annotations.GuardedBy;
import com.android.internal.app.AssistUtils;
@@ -340,7 +340,9 @@
import com.android.server.IntentResolver;
import com.android.server.LocalServices;
import com.android.server.LockGuard;
+import com.android.server.RescueParty;
import com.android.server.ServiceThread;
+import com.android.server.SystemConfig;
import com.android.server.SystemService;
import com.android.server.SystemServiceManager;
import com.android.server.Watchdog;
@@ -384,10 +386,10 @@
import java.util.concurrent.atomic.AtomicLong;
import dalvik.system.VMRuntime;
+
import libcore.io.IoUtils;
import libcore.util.EmptyArray;
-import static com.android.server.am.ActivityStackSupervisor.CREATE_IF_NEEDED;
public class ActivityManagerService extends IActivityManager.Stub
implements Watchdog.Monitor, BatteryStatsImpl.BatteryCallback {
@@ -758,6 +760,23 @@
ProcessRecord mHeavyWeightProcess = null;
/**
+ * Are we enforcing background restrictions?
+ */
+ final boolean mEnforceBackgroundCheck;
+
+ /**
+ * Non-persistent app uid whitelist for background restrictions
+ */
+ int[] mBackgroundUidWhitelist = new int[] {
+ Process.BLUETOOTH_UID
+ };
+
+ /**
+ * Broadcast actions that will always be deliverable to unlaunched/background apps
+ */
+ final ArraySet<String> mBackgroundLaunchBroadcasts;
+
+ /**
* All of the processes we currently have running organized by pid.
* The keys are the pid running the application.
*
@@ -1135,6 +1154,16 @@
DeviceIdleController.LocalService mLocalDeviceIdleController;
/**
+ * Set of app ids that are whitelisted for device idle and thus background check.
+ */
+ int[] mDeviceIdleWhitelist = new int[0];
+
+ /**
+ * Set of app ids that are temporarily allowed to escape bg check due to high-pri message
+ */
+ int[] mDeviceIdleTempWhitelist = new int[0];
+
+ /**
* Information about and control over application operations
*/
final AppOpsService mAppOpsService;
@@ -2590,6 +2619,19 @@
mPermissionReviewRequired = mContext.getResources().getBoolean(
com.android.internal.R.bool.config_permissionReviewRequired);
+ mEnforceBackgroundCheck = SystemProperties.getBoolean("debug.bgcheck", false);
+ mBackgroundLaunchBroadcasts = SystemConfig.getInstance().getAllowImplicitBroadcasts();
+ if (DEBUG_BACKGROUND_CHECK) {
+ Slog.d(TAG, "Enforcing O+ bg restrictions: " + mEnforceBackgroundCheck);
+ StringBuilder sb = new StringBuilder(200);
+ sb.append(" ");
+ for (String a : mBackgroundLaunchBroadcasts) {
+ sb.append(' '); sb.append(a);
+ }
+ Slog.d(TAG, "Background implicit broadcasts:");
+ Slog.d(TAG, sb.toString());
+ }
+
mHandlerThread = new ServiceThread(TAG,
android.os.Process.THREAD_PRIORITY_FOREGROUND, false /*allowIo*/);
mHandlerThread.start();
@@ -4190,7 +4232,7 @@
validateUid = mValidateUids.get(item.uid);
if (validateUid == null && change != UidRecord.CHANGE_GONE
&& change != UidRecord.CHANGE_GONE_IDLE) {
- validateUid = new UidRecord(item.uid);
+ validateUid = new UidRecord(item.uid, false);
mValidateUids.put(item.uid, validateUid);
}
}
@@ -5504,6 +5546,7 @@
final Intent intent = new Intent(Intent.ACTION_PACKAGE_DATA_CLEARED,
Uri.fromParts("package", packageName, null));
+ intent.addFlags(Intent.FLAG_RECEIVER_INCLUDE_BACKGROUND);
intent.putExtra(Intent.EXTRA_UID, pkgUidF);
intent.putExtra(Intent.EXTRA_USER_HANDLE, UserHandle.getUserId(pkgUidF));
broadcastIntentInPackage("android", Process.SYSTEM_UID, intent,
@@ -5524,11 +5567,9 @@
removeUriPermissionsForPackageLocked(packageName, userId, true);
}
- // Remove all zen rules created by this package; revoke it's zen access.
+ // Reset notification settings.
INotificationManager inm = NotificationManager.getService();
- inm.removeAutomaticZenRules(packageName);
- inm.setNotificationPolicyAccessGranted(packageName, false);
-
+ inm.clearData(packageName, pkgUidF);
} catch (RemoteException e) {
}
} finally {
@@ -6279,10 +6320,13 @@
}
UidRecord uidRec = mActiveUids.get(proc.uid);
if (uidRec == null) {
- uidRec = new UidRecord(proc.uid);
+ uidRec = new UidRecord(proc.uid, proc.persistent);
// This is the first appearance of the uid, report it now!
if (DEBUG_UID_OBSERVERS) Slog.i(TAG_UID_OBSERVERS,
"Creating new process uid: " + uidRec);
+ if (Arrays.binarySearch(mDeviceIdleTempWhitelist, UserHandle.getAppId(proc.uid)) >= 0) {
+ uidRec.setWhitelist = uidRec.curWhitelist = true;
+ }
mActiveUids.put(proc.uid, uidRec);
noteUidProcessState(uidRec.uid, uidRec.curProcState);
enqueueUidChangeLocked(uidRec, -1, UidRecord.CHANGE_ACTIVE);
@@ -7556,45 +7600,31 @@
}
@Override
- public void enterPictureInPictureMode(IBinder token) {
- enterPictureInPictureMode(token, DEFAULT_DISPLAY, -1f /* aspectRatio */,
- false /* checkAspectRatio */);
- }
-
- @Override
- public void enterPictureInPictureModeWithAspectRatio(IBinder token, float aspectRatio) {
- enterPictureInPictureMode(token, DEFAULT_DISPLAY, aspectRatio, true /* checkAspectRatio */);
- }
-
- @Override
- public void enterPictureInPictureModeOnMoveToBackground(IBinder token,
- boolean enterPictureInPictureOnMoveToBg) {
+ public boolean enterPictureInPictureMode(IBinder token, final PictureInPictureArgs args) {
final long origId = Binder.clearCallingIdentity();
try {
synchronized(this) {
- final ActivityRecord r = ensureValidPictureInPictureActivityLocked(
- "enterPictureInPictureModeOnMoveToBackground", token, -1f /* aspectRatio */,
- false /* checkAspectRatio */, false /* checkActivityVisibility */);
+ final ActivityRecord r = ensureValidPictureInPictureActivityArgsLocked(
+ "enterPictureInPictureMode", token, args);
- r.supportsPipOnMoveToBackground = enterPictureInPictureOnMoveToBg;
- }
- } finally {
- Binder.restoreCallingIdentity(origId);
- }
- }
+ // Activity supports picture-in-picture, now check that we can enter PiP at this
+ // point, if it is
+ if (!r.checkEnterPictureInPictureState("enterPictureInPictureMode")) {
+ return false;
+ }
- private void enterPictureInPictureMode(IBinder token, int displayId, float aspectRatio,
- boolean checkAspectRatio) {
- final long origId = Binder.clearCallingIdentity();
- try {
- synchronized(this) {
- final ActivityRecord r = ensureValidPictureInPictureActivityLocked(
- "enterPictureInPictureMode", token, aspectRatio, checkAspectRatio,
- true /* checkActivityVisibility */);
final Runnable enterPipRunnable = () -> {
- r.pictureInPictureArgs.aspectRatio = aspectRatio;
- enterPictureInPictureModeLocked(r, displayId, r.pictureInPictureArgs,
- true /* moveHomeStackToFront */, "enterPictureInPictureMode");
+ // Only update the saved args from the args that are set
+ r.pictureInPictureArgs.copyOnlySet(args);
+ final float aspectRatio = r.pictureInPictureArgs.getAspectRatio();
+ final List<RemoteAction> actions = r.pictureInPictureArgs.getActions();
+ final Rect bounds = isValidPictureInPictureAspectRatio(aspectRatio)
+ ? mWindowManager.getPictureInPictureBounds(DEFAULT_DISPLAY,
+ aspectRatio)
+ : mWindowManager.getPictureInPictureDefaultBounds(DEFAULT_DISPLAY);
+ mStackSupervisor.moveActivityToPinnedStackLocked(r, "enterPictureInPictureMode",
+ bounds, true /* moveHomeStackToFront */);
+ mWindowManager.setPictureInPictureActions(actions);
};
if (isKeyguardLocked()) {
@@ -7625,35 +7655,7 @@
// Enter picture in picture immediately otherwise
enterPipRunnable.run();
}
- }
- } finally {
- Binder.restoreCallingIdentity(origId);
- }
- }
-
- void enterPictureInPictureModeLocked(ActivityRecord r, int displayId,
- PictureInPictureArguments pipArgs, boolean moveHomeStackToFront, String reason) {
- final Rect bounds = isValidPictureInPictureAspectRatio(pipArgs.aspectRatio)
- ? mWindowManager.getPictureInPictureBounds(displayId, pipArgs.aspectRatio)
- : mWindowManager.getPictureInPictureDefaultBounds(displayId);
- mStackSupervisor.moveActivityToPinnedStackLocked(r, reason, bounds, moveHomeStackToFront);
- mWindowManager.setPictureInPictureActions(pipArgs.userActions);
- }
-
- @Override
- public void setPictureInPictureAspectRatio(IBinder token, float aspectRatio) {
- final long origId = Binder.clearCallingIdentity();
- try {
- synchronized(this) {
- final ActivityRecord r = ensureValidPictureInPictureActivityLocked(
- "setPictureInPictureAspectRatio", token, aspectRatio,
- true /* checkAspectRatio */, false /* checkActivityVisibility */);
-
- r.pictureInPictureArgs.aspectRatio = aspectRatio;
- if (r.getStack().getStackId() == PINNED_STACK_ID) {
- // If the activity is already in picture-in-picture, update the pinned stack now
- mWindowManager.setPictureInPictureAspectRatio(aspectRatio);
- }
+ return true;
}
} finally {
Binder.restoreCallingIdentity(origId);
@@ -7661,26 +7663,21 @@
}
@Override
- public void setPictureInPictureActions(IBinder token, ParceledListSlice actionsList) {
+ public void setPictureInPictureArgs(IBinder token, final PictureInPictureArgs args) {
final long origId = Binder.clearCallingIdentity();
try {
synchronized(this) {
- final ActivityRecord r = ensureValidPictureInPictureActivityLocked(
- "setPictureInPictureActions", token, -1 /* aspectRatio */,
- false /* checkAspectRatio */, false /* checkActivityVisibility */);
+ final ActivityRecord r = ensureValidPictureInPictureActivityArgsLocked(
+ "setPictureInPictureArgs", token, args);
- final List<RemoteAction> actions = actionsList.getList();
- if (actions.size() > ActivityManager.getMaxNumPictureInPictureActions()) {
- throw new IllegalArgumentException("setPictureInPictureActions: Invalid number"
- + " of picture-in-picture actions. Only a maximum of "
- + ActivityManager.getMaxNumPictureInPictureActions()
- + " actions allowed");
- }
-
- r.pictureInPictureArgs.userActions = actions;
+ // Only update the saved args from the args that are set
+ r.pictureInPictureArgs.copyOnlySet(args);
if (r.getStack().getStackId() == PINNED_STACK_ID) {
// If the activity is already in picture-in-picture, update the pinned stack now
- mWindowManager.setPictureInPictureActions(actions);
+ mWindowManager.setPictureInPictureAspectRatio(
+ r.pictureInPictureArgs.getAspectRatio());
+ mWindowManager.setPictureInPictureActions(
+ r.pictureInPictureArgs.getActions());
}
}
} finally {
@@ -7696,14 +7693,10 @@
* Checks the state of the system and the activity associated with the given {@param token} to
* verify that picture-in-picture is supported for that activity.
*
- * @param checkAspectRatio whether or not to check {@param aspectRatio} is within a valid range
- * @param checkActivityVisibility whether or not to enforce that the activity is currently
- * visible
- *
* @return the activity record for the given {@param token} if all the checks pass.
*/
- private ActivityRecord ensureValidPictureInPictureActivityLocked(String caller, IBinder token,
- float aspectRatio, boolean checkAspectRatio, boolean checkActivityVisibility) {
+ private ActivityRecord ensureValidPictureInPictureActivityArgsLocked(String caller,
+ IBinder token, PictureInPictureArgs args) {
if (!mSupportsPictureInPicture) {
throw new IllegalStateException(caller
+ ": Device doesn't support picture-in-picture mode.");
@@ -7715,10 +7708,9 @@
+ ": Can't find activity for token=" + token);
}
- if (!r.canEnterPictureInPicture(checkActivityVisibility)) {
- throw new IllegalArgumentException(caller
- + ": Current activity does not support picture-in-picture or is not "
- + "visible r=" + r);
+ if (!r.supportsPictureInPicture()) {
+ throw new IllegalStateException(caller
+ + ": Current activity does not support picture-in-picture.");
}
if (r.getStack().isHomeStack()) {
@@ -7726,12 +7718,20 @@
+ ": Activities on the home stack not supported");
}
- if (checkAspectRatio && !isValidPictureInPictureAspectRatio(aspectRatio)) {
+ if (args.hasSetAspectRatio()
+ && !isValidPictureInPictureAspectRatio(args.getAspectRatio())) {
throw new IllegalArgumentException(String.format(caller
+ ": Aspect ratio is too extreme (must be between %f and %f).",
mMinPipAspectRatio, mMaxPipAspectRatio));
}
+ if (args.hasSetActions()
+ && args.getActions().size() > ActivityManager.getMaxNumPictureInPictureActions()) {
+ throw new IllegalArgumentException(String.format(caller + ": Invalid number of"
+ + "picture-in-picture actions. Only a maximum of %d actions allowed",
+ ActivityManager.getMaxNumPictureInPictureActions()));
+ }
+
return r;
}
@@ -8026,9 +8026,97 @@
}
}
+ // Unified app-op and target sdk check
+ int appRestrictedInBackgroundLocked(int uid, String packageName) {
+ if (packageName == null) {
+ packageName = mPackageManagerInt.getNameForUid(uid);
+ if (packageName == null) {
+ Slog.w(TAG, "No package known for uid " + uid);
+ return ActivityManager.APP_START_MODE_NORMAL;
+ }
+ }
+
+ // !!! TODO: cache the package/versionCode lookups to fast path this
+ ApplicationInfo app = getPackageManagerInternalLocked().getApplicationInfo(packageName,
+ UserHandle.getUserId(uid));
+ if (app != null) {
+ // Apps that target O+ are always subject to background check
+ if (mEnforceBackgroundCheck && app.targetSdkVersion >= Build.VERSION_CODES.O) {
+ if (DEBUG_BACKGROUND_CHECK) {
+ Slog.i(TAG, "App " + uid + "/" + packageName + " targets O+, restricted");
+ }
+ return ActivityManager.APP_START_MODE_DELAYED_RIGID;
+ }
+ // ...and legacy apps get an AppOp check
+ int appop = mAppOpsService.noteOperation(AppOpsManager.OP_RUN_IN_BACKGROUND,
+ uid, packageName);
+ if (DEBUG_BACKGROUND_CHECK) {
+ Slog.i(TAG, "Legacy app " + uid + "/" + packageName + " bg appop " + appop);
+ }
+ switch (appop) {
+ case AppOpsManager.MODE_ALLOWED:
+ return ActivityManager.APP_START_MODE_NORMAL;
+ case AppOpsManager.MODE_IGNORED:
+ return ActivityManager.APP_START_MODE_DELAYED;
+ default:
+ return ActivityManager.APP_START_MODE_DELAYED_RIGID;
+ }
+ } else {
+ Slog.w(TAG, "Unknown app " + packageName + " / " + uid);
+ }
+ return ActivityManager.APP_START_MODE_NORMAL;
+ }
+
+ // Service launch is available to apps with run-in-background exemptions but
+ // some other background operations are not. If we're doing a check
+ // of service-launch policy, allow those callers to proceed unrestricted.
+ int appServicesRestrictedInBackgroundLocked(int uid, String packageName) {
+ if (packageName == null) {
+ packageName = mPackageManagerInt.getNameForUid(uid);
+ if (packageName == null) {
+ Slog.w(TAG, "No package known for uid " + uid);
+ return ActivityManager.APP_START_MODE_NORMAL;
+ }
+ }
+
+ // Persistent app? NB: expects that persistent uids are always active.
+ final UidRecord uidRec = mActiveUids.get(uid);
+ if (uidRec != null && uidRec.persistent) {
+ if (DEBUG_BACKGROUND_CHECK) {
+ Slog.i(TAG, "App " + uid + "/" + packageName
+ + " is persistent; not restricted in background");
+ }
+ return ActivityManager.APP_START_MODE_NORMAL;
+ }
+
+ // Non-persistent but background whitelisted?
+ if (uidOnBackgroundWhitelist(uid)) {
+ if (DEBUG_BACKGROUND_CHECK) {
+ Slog.i(TAG, "App " + uid + "/" + packageName
+ + " on background whitelist; not restricted in background");
+ }
+ return ActivityManager.APP_START_MODE_NORMAL;
+ }
+
+ // Is this app on the battery whitelist?
+ if (isOnDeviceIdleWhitelistLocked(uid)) {
+ if (DEBUG_BACKGROUND_CHECK) {
+ Slog.i(TAG, "App " + uid + "/" + packageName
+ + " on idle whitelist; not restricted in background");
+ }
+ return ActivityManager.APP_START_MODE_NORMAL;
+ }
+
+ // None of the service-policy criteria apply, so we apply the common criteria
+ return appRestrictedInBackgroundLocked(uid, packageName);
+ }
+
int checkAllowBackgroundLocked(int uid, String packageName, int callingPid,
boolean alwaysRestrict) {
UidRecord uidRec = mActiveUids.get(uid);
+ if (DEBUG_BACKGROUND_CHECK) Slog.d(TAG, "checkAllowBackground: uid=" + uid + " pkg="
+ + packageName + " rec=" + uidRec + " always=" + alwaysRestrict + " idle="
+ + (uidRec != null ? uidRec.idle : false));
if (uidRec == null || alwaysRestrict || uidRec.idle) {
boolean ephemeral;
if (uidRec == null) {
@@ -8042,6 +8130,7 @@
// We are hard-core about ephemeral apps not running in the background.
return ActivityManager.APP_START_MODE_DISABLED;
} else {
+ /** Don't want to allow this exception in the final background check impl?
if (callingPid >= 0) {
ProcessRecord proc;
synchronized (mPidsSelfLocked) {
@@ -8054,15 +8143,26 @@
return ActivityManager.APP_START_MODE_NORMAL;
}
}
- if (mAppOpsService.noteOperation(AppOpsManager.OP_RUN_IN_BACKGROUND, uid,
- packageName) != AppOpsManager.MODE_ALLOWED) {
- return ActivityManager.APP_START_MODE_DELAYED;
- }
+ */
+
+ final int startMode = (alwaysRestrict)
+ ? appRestrictedInBackgroundLocked(uid, packageName)
+ : appServicesRestrictedInBackgroundLocked(uid, packageName);
+ if (DEBUG_BACKGROUND_CHECK) Slog.d(TAG, "checkAllowBackground: uid=" + uid
+ + " pkg=" + packageName + " startMode=" + startMode
+ + " onwhitelist=" + isOnDeviceIdleWhitelistLocked(uid));
+ return startMode;
}
}
return ActivityManager.APP_START_MODE_NORMAL;
}
+ boolean isOnDeviceIdleWhitelistLocked(int uid) {
+ final int appId = UserHandle.getAppId(uid);
+ return Arrays.binarySearch(mDeviceIdleWhitelist, appId) >= 0
+ || Arrays.binarySearch(mDeviceIdleTempWhitelist, appId) >= 0;
+ }
+
private ProviderInfo getProviderInfoLocked(String authority, int userHandle, int pmFlags) {
ProviderInfo pi = null;
ContentProviderRecord cpr = mProviderMap.getProviderByName(authority, userHandle);
@@ -8079,6 +8179,12 @@
return pi;
}
+ void grantEphemeralAccessLocked(int userId, Intent intent,
+ int targetAppId, int ephemeralAppId) {
+ getPackageManagerInternalLocked().
+ grantEphemeralAccess(userId, intent, targetAppId, ephemeralAppId);
+ }
+
private UriPermission findUriPermissionLocked(int targetUid, GrantUri grantUri) {
final ArrayMap<GrantUri, UriPermission> targetUris = mGrantedUriPermissions.get(targetUid);
if (targetUris != null) {
@@ -11461,6 +11567,10 @@
mCoreSettingsObserver = new CoreSettingsObserver(this);
mFontScaleSettingObserver = new FontScaleSettingObserver();
+ // Now that the settings provider is published we can consider sending
+ // in a rescue party.
+ RescueParty.onSettingsProviderPublished(mContext);
+
//mUsageStatsService.monitorPackages();
}
@@ -11651,6 +11761,16 @@
return r;
}
+ private boolean uidOnBackgroundWhitelist(final int uid) {
+ final int N = mBackgroundUidWhitelist.length;
+ for (int i = 0; i < N; i++) {
+ if (uid == mBackgroundUidWhitelist[i]) {
+ return true;
+ }
+ }
+ return false;
+ }
+
final ProcessRecord addAppLocked(ApplicationInfo info, boolean isolated,
String abiOverride) {
ProcessRecord app;
@@ -14977,6 +15097,8 @@
}
}
}
+ pw.println(" mDeviceIdleWhitelist=" + Arrays.toString(mDeviceIdleWhitelist));
+ pw.println(" mDeviceIdleTempWhitelist=" + Arrays.toString(mDeviceIdleTempWhitelist));
}
if (dumpPackage == null) {
pw.println(" mWakefulness="
@@ -17284,7 +17406,8 @@
@Override
public ComponentName startService(IApplicationThread caller, Intent service,
- String resolvedType, String callingPackage, int userId)
+ String resolvedType, int id, Notification notification,
+ String callingPackage, int userId)
throws TransactionTooLargeException {
enforceNotIsolatedCaller("startService");
// Refuse possible leaked file descriptors
@@ -17303,7 +17426,8 @@
final int callingUid = Binder.getCallingUid();
final long origId = Binder.clearCallingIdentity();
ComponentName res = mServices.startServiceLocked(caller, service,
- resolvedType, callingPid, callingUid, callingPackage, userId);
+ resolvedType, id, notification,
+ callingPid, callingUid, callingPackage, userId);
Binder.restoreCallingIdentity(origId);
return res;
}
@@ -17317,7 +17441,7 @@
"startServiceInPackage: " + service + " type=" + resolvedType);
final long origId = Binder.clearCallingIdentity();
ComponentName res = mServices.startServiceLocked(null, service,
- resolvedType, -1, uid, callingPackage, userId);
+ resolvedType, 0, null, -1, uid, callingPackage, userId);
Binder.restoreCallingIdentity(origId);
return res;
}
@@ -18176,6 +18300,13 @@
}
if (action != null) {
+ if (mBackgroundLaunchBroadcasts.contains(action)) {
+ if (DEBUG_BACKGROUND_CHECK) {
+ Slog.i(TAG, "Broadcast action " + action + " forcing include-background");
+ }
+ intent.addFlags(Intent.FLAG_RECEIVER_INCLUDE_BACKGROUND);
+ }
+
switch (action) {
case Intent.ACTION_UID_REMOVED:
case Intent.ACTION_PACKAGE_REMOVED:
@@ -19300,7 +19431,8 @@
UserHandle.USER_ALL);
if ((changes & ActivityInfo.CONFIG_LOCALE) != 0) {
intent = new Intent(Intent.ACTION_LOCALE_CHANGED);
- intent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND);
+ intent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND
+ | Intent.FLAG_RECEIVER_INCLUDE_BACKGROUND);
if (initLocale || !mProcessesReady) {
intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY);
}
@@ -21623,12 +21755,18 @@
for (int i=mActiveUids.size()-1; i>=0; i--) {
final UidRecord uidRec = mActiveUids.valueAt(i);
int uidChange = UidRecord.CHANGE_PROCSTATE;
- if (uidRec.setProcState != uidRec.curProcState) {
+ if (uidRec.setProcState != uidRec.curProcState
+ || uidRec.setWhitelist != uidRec.curWhitelist) {
if (DEBUG_UID_OBSERVERS) Slog.i(TAG_UID_OBSERVERS,
"Changes in " + uidRec + ": proc state from " + uidRec.setProcState
- + " to " + uidRec.curProcState);
- if (ActivityManager.isProcStateBackground(uidRec.curProcState)) {
- if (!ActivityManager.isProcStateBackground(uidRec.setProcState)) {
+ + " to " + uidRec.curProcState + ", whitelist from " + uidRec.setWhitelist
+ + " to " + uidRec.curWhitelist);
+ if (ActivityManager.isProcStateBackground(uidRec.curProcState)
+ && !uidRec.curWhitelist) {
+ // UID is now in the background (and not on the temp whitelist). Was it
+ // previously in the foreground (or on the temp whitelist)?
+ if (!ActivityManager.isProcStateBackground(uidRec.setProcState)
+ || uidRec.setWhitelist) {
uidRec.lastBackgroundTime = nowElapsed;
if (!mHandler.hasMessages(IDLE_UIDS_MSG)) {
// Note: the background settle time is in elapsed realtime, while
@@ -21646,6 +21784,7 @@
uidRec.lastBackgroundTime = 0;
}
uidRec.setProcState = uidRec.curProcState;
+ uidRec.setWhitelist = uidRec.curWhitelist;
enqueueUidChangeLocked(uidRec, -1, uidChange);
noteUidProcessState(uidRec.uid, uidRec.curProcState);
}
@@ -21789,6 +21928,20 @@
enqueueUidChangeLocked(uidRec, uid, UidRecord.CHANGE_IDLE);
}
+ final void setAppIdTempWhitelistStateLocked(int appId, boolean onWhitelist) {
+ boolean changed = false;
+ for (int i=mActiveUids.size()-1; i>=0; i--) {
+ final UidRecord uidRec = mActiveUids.valueAt(i);
+ if (UserHandle.getAppId(uidRec.uid) == appId && uidRec.curWhitelist != onWhitelist) {
+ uidRec.curWhitelist = onWhitelist;
+ changed = true;
+ }
+ }
+ if (changed) {
+ updateOomAdjLocked();
+ }
+ }
+
final void trimApplications() {
synchronized (this) {
int i;
@@ -22494,6 +22647,21 @@
}
@Override
+ public void setDeviceIdleWhitelist(int[] appids) {
+ synchronized (ActivityManagerService.this) {
+ mDeviceIdleWhitelist = appids;
+ }
+ }
+
+ @Override
+ public void updateDeviceIdleTempWhitelist(int[] appids, int changingAppId, boolean adding) {
+ synchronized (ActivityManagerService.this) {
+ mDeviceIdleTempWhitelist = appids;
+ setAppIdTempWhitelistStateLocked(changingAppId, adding);
+ }
+ }
+
+ @Override
public void updatePersistentConfigurationForUser(@NonNull Configuration values,
int userId) {
Preconditions.checkNotNull(values, "Configuration must not be null");
diff --git a/services/core/java/com/android/server/am/ActivityManagerShellCommand.java b/services/core/java/com/android/server/am/ActivityManagerShellCommand.java
index ed31130..202868a 100644
--- a/services/core/java/com/android/server/am/ActivityManagerShellCommand.java
+++ b/services/core/java/com/android/server/am/ActivityManagerShellCommand.java
@@ -171,7 +171,7 @@
return runKill(pw);
case "kill-all":
return runKillAll(pw);
- case "make-idle":
+ case "make-uid-idle":
return runMakeIdle(pw);
case "monitor":
return runMonitor(pw);
@@ -492,7 +492,7 @@
pw.println("Starting service: " + intent);
pw.flush();
ComponentName cn = mInterface.startService(null, intent, intent.getType(),
- SHELL_PACKAGE_NAME, mUserId);
+ -1, null, SHELL_PACKAGE_NAME, mUserId);
if (cn == null) {
err.println("Error: Not found; no service started.");
return -1;
@@ -502,6 +502,9 @@
} else if (cn.getPackageName().equals("!!")) {
err.println("Error: " + cn.getClassName());
return -1;
+ } else if (cn.getPackageName().equals("?")) {
+ err.println("Error: " + cn.getClassName());
+ return -1;
}
return 0;
}
@@ -2481,6 +2484,9 @@
pw.println(" Kill all processes associated with the given application.");
pw.println(" kill-all");
pw.println(" Kill all processes that are safe to kill (cached, etc).");
+ pw.println(" make-uid-idle [--user <USER_ID> | all | current] <PACKAGE>");
+ pw.println(" If the given application's uid is in the background and waiting to");
+ pw.println(" become idle (not allowing background services), do that now.");
pw.println(" monitor [--gdb <port>]");
pw.println(" Start monitoring for crashes or ANRs.");
pw.println(" --gdb: start gdbserv on the given port at crash/ANR");
diff --git a/services/core/java/com/android/server/am/ActivityRecord.java b/services/core/java/com/android/server/am/ActivityRecord.java
index a2fb9f9..a968e0b 100644
--- a/services/core/java/com/android/server/am/ActivityRecord.java
+++ b/services/core/java/com/android/server/am/ActivityRecord.java
@@ -63,9 +63,9 @@
import android.annotation.NonNull;
import android.app.ActivityManager.TaskDescription;
-import android.app.ActivityManagerInternal.PictureInPictureArguments;
import android.app.ActivityOptions;
import android.app.PendingIntent;
+import android.app.PictureInPictureArgs;
import android.app.ResultInfo;
import android.content.ComponentName;
import android.content.Intent;
@@ -149,6 +149,7 @@
AppWindowContainerController mWindowContainerController;
final ActivityInfo info; // all about me
final ApplicationInfo appInfo; // information about activity's app
+ final int launchedFromPid; // always the pid who started the activity.
final int launchedFromUid; // always the uid who started the activity.
final String launchedFromPackage; // always the package who started the activity.
final int userId; // Which user is this running for?
@@ -229,13 +230,10 @@
boolean frozenBeforeDestroy;// has been frozen but not yet destroyed.
boolean immersive; // immersive mode (don't interrupt if possible)
boolean forceNewConfig; // force re-create with new config next time
- boolean supportsPipOnMoveToBackground; // Supports automatically entering picture-in-picture
- // when this activity is hidden. This flag is requested by the activity.
- private boolean enterPipOnMoveToBackground; // Flag to enter picture in picture when this
- // activity is made invisible. This flag is set specifically when another task is being
- // launched or moved to the front which may cause this activity to try and enter PiP
- // when it is next made invisible.
- PictureInPictureArguments pictureInPictureArgs = new PictureInPictureArguments(); // The PiP
+ boolean supportsPictureInPictureWhilePausing; // This flag is set by the system to indicate
+ // that the activity can enter picture in picture while pausing (ie. only when another
+ // task is brought to front or started)
+ PictureInPictureArgs pictureInPictureArgs = new PictureInPictureArgs(); // The PiP
// arguments used when deferring the entering of picture-in-picture.
int launchCount; // count of launches since last state
long lastLaunchTime; // time of last launch of this activity
@@ -453,12 +451,8 @@
if (info != null) {
pw.println(prefix + "resizeMode=" + ActivityInfo.resizeModeToString(info.resizeMode));
}
- if (supportsPipOnMoveToBackground) {
- pw.println(prefix + "supportsPipOnMoveToBackground=1");
- pw.println(prefix + "enterPipOnMoveToBackground=" +
- (enterPipOnMoveToBackground ? 1 : 0));
- pictureInPictureArgs.dump(pw, prefix);
- }
+ pw.println(prefix + "supportsPictureInPictureWhilePausing: "
+ + supportsPictureInPictureWhilePausing);
}
private boolean crossesHorizontalSizeThreshold(int firstDp, int secondDp) {
@@ -595,7 +589,7 @@
return ResolverActivity.class.getName().equals(realActivity.getClassName());
}
- ActivityRecord(ActivityManagerService _service, ProcessRecord _caller,
+ ActivityRecord(ActivityManagerService _service, ProcessRecord _caller, int _launchedFromPid,
int _launchedFromUid, String _launchedFromPackage, Intent _intent, String _resolvedType,
ActivityInfo aInfo, Configuration _configuration,
ActivityRecord _resultTo, String _resultWho, int _reqCode,
@@ -605,6 +599,7 @@
service = _service;
appToken = new Token(this);
info = aInfo;
+ launchedFromPid = _launchedFromPid;
launchedFromUid = _launchedFromUid;
launchedFromPackage = _launchedFromPackage;
userId = UserHandle.getUserId(aInfo.applicationInfo.uid);
@@ -819,23 +814,6 @@
}
/**
- * If this activity has requested that it auto-enter picture-in-picture and we can actually do
- * this, then mark it to enter picture in picture at that point.
- */
- void setEnterPipOnMoveToBackground(boolean enterPipOnInvisible) {
- if (supportsPipOnMoveToBackground) {
- enterPipOnMoveToBackground = enterPipOnInvisible;
- }
- }
-
- /**
- * @return whether to enter PiP when this activity is made invisible.
- */
- public boolean shouldEnterPictureInPictureOnInvisible() {
- return enterPipOnMoveToBackground;
- }
-
- /**
* @return Stack value from current task, null if there is no task.
*/
ActivityStack getStack() {
@@ -918,24 +896,34 @@
}
/**
- * @return whether this activity is currently allowed to enter PIP, if
- * {@param checkActivityVisibility} is set, then the current activity visibility is taken into
- * account.
+ * @return whether this activity is currently allowed to enter PIP, throwing an exception if
+ * the activity is not currently visible.
*/
- boolean canEnterPictureInPicture(boolean checkActivityVisibility) {
- if (!checkActivityVisibility) {
- return supportsPictureInPicture();
+ boolean checkEnterPictureInPictureState(String caller) {
+ boolean isKeyguardLocked = service.isKeyguardLocked();
+ boolean hasPinnedStack = mStackSupervisor.getStack(PINNED_STACK_ID) != null;
+ switch (state) {
+ case RESUMED:
+ // When visible, allow entering PiP if not on the lockscreen. If there is another
+ // PiP activity, the logic to handle that comes later in enterPictureInPictureMode()
+ return !isKeyguardLocked;
+ case PAUSING:
+ case PAUSED:
+ // When pausing, only allow enter PiP if not on the lockscreen and there is not
+ // already an existing PiP activity
+ return !isKeyguardLocked && !hasPinnedStack && supportsPictureInPictureWhilePausing;
+ case STOPPING:
+ // When stopping in a valid state, then only allow enter PiP as in the pause state.
+ // Otherwise, fall through to throw an exception if the caller is trying to enter
+ // PiP in an invalid stopping state.
+ if (supportsPictureInPictureWhilePausing) {
+ return !isKeyguardLocked && !hasPinnedStack;
+ }
+ default:
+ throw new IllegalStateException(caller
+ + ": Current activity is not visible (state=" + state.name() + ") "
+ + "r=" + this);
}
-
- if (supportsPictureInPicture()) {
- switch (state) {
- case RESUMED:
- case PAUSING:
- case PAUSED:
- return true;
- }
- }
- return false;
}
boolean canGoInDockedStack() {
@@ -2206,9 +2194,11 @@
throw new XmlPullParserException("restoreActivity resolver error. Intent=" + intent +
" resolvedType=" + resolvedType);
}
- final ActivityRecord r = new ActivityRecord(service, /*caller*/null, launchedFromUid,
- launchedFromPackage, intent, resolvedType, aInfo, service.getConfiguration(),
- null, null, 0, componentSpecified, false, stackSupervisor, null, null, null);
+ final ActivityRecord r = new ActivityRecord(service, null /* caller */,
+ 0 /* launchedFromPid */, launchedFromUid, launchedFromPackage, intent, resolvedType,
+ aInfo, service.getConfiguration(), null /* resultTo */, null /* resultWho */,
+ 0 /* reqCode */, componentSpecified, false /* rootVoiceInteraction */,
+ stackSupervisor, null /* container */, null /* options */, null /* sourceRecord */);
r.persistentState = persistentState;
r.taskDescription = taskDescription;
diff --git a/services/core/java/com/android/server/am/ActivityStack.java b/services/core/java/com/android/server/am/ActivityStack.java
index 4df0cb1..d7b3728e 100644
--- a/services/core/java/com/android/server/am/ActivityStack.java
+++ b/services/core/java/com/android/server/am/ActivityStack.java
@@ -105,6 +105,7 @@
import android.service.voice.IVoiceInteractionSession;
import android.util.ArraySet;
import android.util.EventLog;
+import android.util.IntArray;
import android.util.Log;
import android.util.Slog;
import android.util.SparseArray;
@@ -195,6 +196,12 @@
return mActivityContainer.mActivityDisplay;
}
+ @Override
+ void onParentChanged() {
+ super.onParentChanged();
+ mStackSupervisor.updateUIDsPresentOnDisplay();
+ }
+
enum ActivityState {
INITIALIZING,
RESUMED,
@@ -680,6 +687,27 @@
return null;
}
+ boolean isInStackLocked(TaskRecord task) {
+ return mTaskHistory.contains(task);
+ }
+
+ /** Checks if there are tasks with specific UID in the stack. */
+ boolean isUidPresent(int uid) {
+ for (TaskRecord task : mTaskHistory) {
+ if (task.effectiveUid == uid) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /** Get all UIDs that are present in the stack. */
+ void getPresentUIDs(IntArray presentUIDs) {
+ for (TaskRecord task : mTaskHistory) {
+ presentUIDs.add(task.effectiveUid);
+ }
+ }
+
final boolean updateLRUListLocked(ActivityRecord r) {
final boolean hadit = mLRUActivities.remove(r);
mLRUActivities.add(r);
@@ -1698,9 +1726,7 @@
+ stackInvisible + " behindFullscreenActivity="
+ behindFullscreenActivity + " mLaunchTaskBehind="
+ r.mLaunchTaskBehind);
- if (!enterPictureInPictureOnActivityInvisible(r)) {
- makeInvisible(r, visibleBehind);
- }
+ makeInvisible(r, visibleBehind);
}
}
if (mStackId == FREEFORM_WORKSPACE_STACK_ID) {
@@ -1859,35 +1885,6 @@
return false;
}
- /**
- * Attempts to enter picture-in-picture if the activity that is being made invisible supports
- * it. If not, then
- *
- * @return whether or not picture-in-picture mode was entered.
- */
- private boolean enterPictureInPictureOnActivityInvisible(ActivityRecord r) {
- final boolean hasPinnedStack =
- mStackSupervisor.getStack(PINNED_STACK_ID) != null;
- final boolean isKeyguardLocked = mService.isKeyguardLocked();
- if (DEBUG_VISIBILITY) Slog.v(TAG_VISIBILITY, " enterPictureInPictureOnInvisible="
- + r.shouldEnterPictureInPictureOnInvisible()
- + " hasPinnedStack=" + hasPinnedStack
- + " isKeyguardLocked=" + isKeyguardLocked);
- if (!hasPinnedStack && !isKeyguardLocked && r.visible &&
- r.shouldEnterPictureInPictureOnInvisible()) {
- r.setEnterPipOnMoveToBackground(false);
-
- // Enter picture in picture, but don't move the home stack to the front
- // since it will affect the focused stack's visibility and occlude
- // starting activities
- mService.enterPictureInPictureModeLocked(r, r.getDisplayId(),
- r.pictureInPictureArgs, false /* moveHomeStackToFront */,
- "ensureActivitiesVisibleLocked");
- return true;
- }
- return false;
- }
-
private void makeInvisible(ActivityRecord r, ActivityRecord visibleBehind) {
if (!r.visible) {
if (DEBUG_VISIBILITY) Slog.v(TAG_VISIBILITY, "Already invisible: " + r);
@@ -1906,6 +1903,10 @@
"Scheduling invisibility: " + r);
r.app.thread.scheduleWindowVisibility(r.appToken, false);
}
+
+ // Reset the flag indicating that an app can enter picture-in-picture once the
+ // activity is hidden
+ r.supportsPictureInPictureWhilePausing = false;
break;
case INITIALIZING:
@@ -2187,15 +2188,16 @@
mStackSupervisor.setLaunchSource(next.info.applicationInfo.uid);
- // We need to start pausing the current activity so the top one can be resumed...
- final boolean dontWaitForPause = (next.info.flags & FLAG_RESUME_WHILE_PAUSING) != 0;
- boolean pausing = mStackSupervisor.pauseBackStacks(userLeaving, next, dontWaitForPause);
+ // If the flag RESUME_WHILE_PAUSING is set, then continue to schedule the previous activity
+ // to be paused, while at the same time resuming the new resume activity
+ final boolean resumeWhilePausing = (next.info.flags & FLAG_RESUME_WHILE_PAUSING) != 0;
+ boolean pausing = mStackSupervisor.pauseBackStacks(userLeaving, next, false);
if (mResumedActivity != null) {
if (DEBUG_STATES) Slog.d(TAG_STATES,
"resumeTopActivityLocked: Pausing " + mResumedActivity);
- pausing |= startPausingLocked(userLeaving, false, next, dontWaitForPause);
+ pausing |= startPausingLocked(userLeaving, false, next, false);
}
- if (pausing) {
+ if (pausing && !resumeWhilePausing) {
if (DEBUG_SWITCH || DEBUG_STATES) Slog.v(TAG_STATES,
"resumeTopActivityLocked: Skip resume: need to start pausing");
// At this point we want to put the upcoming activity's process
@@ -2696,10 +2698,10 @@
if (r.mLaunchTaskBehind) {
transit = TRANSIT_TASK_OPEN_BEHIND;
} else {
- // If a new task is being launched, then mark the existing top activity to
- // enter picture-in-picture if it supports auto-entering PiP
+ // If a new task is being launched, then mark the existing top activity as
+ // supporting picture-in-picture while pausing
if (focusedTopActivity != null) {
- focusedTopActivity.setEnterPipOnMoveToBackground(true);
+ focusedTopActivity.supportsPictureInPictureWhilePausing = true;
}
transit = TRANSIT_TASK_OPEN;
}
@@ -4245,10 +4247,10 @@
} else {
updateTransitLocked(TRANSIT_TASK_TO_FRONT, options);
}
- // If a new task is moved to the front, then mark the existing top activity to enter
- // picture-in-picture if it supports auto-entering PiP
+ // If a new task is moved to the front, then mark the existing top activity as supporting
+ // picture-in-picture while paused
if (focusedTopActivity != null) {
- focusedTopActivity.setEnterPipOnMoveToBackground(true);
+ focusedTopActivity.supportsPictureInPictureWhilePausing = true;
}
mStackSupervisor.resumeFocusedStackTopActivityLocked();
@@ -4904,13 +4906,13 @@
final boolean toTop = position >= mTaskHistory.size();
final ActivityStack prevStack = preAddTask(task, reason, toTop);
+ mTaskHistory.add(position, task);
task.setStack(this);
if (toTop) {
updateTaskReturnToForTopInsertion(task);
}
- mTaskHistory.add(position, task);
updateTaskMovement(task, toTop);
postAddTask(task, prevStack);
@@ -4927,8 +4929,8 @@
final ActivityRecord topRunningActivity = task.topRunningActivityLocked();
final boolean wasResumed = topRunningActivity == task.getStack().mResumedActivity;
- task.setStack(this);
insertTaskAtPosition(task, index);
+ task.setStack(this);
postAddTask(task, null /* prevStack */);
if (wasResumed) {
@@ -4966,8 +4968,8 @@
}
}
- void moveToFrontAndResumeStateIfNeeded(
- ActivityRecord r, boolean moveToFront, boolean setResume, String reason) {
+ void moveToFrontAndResumeStateIfNeeded(ActivityRecord r, boolean moveToFront, boolean setResume,
+ boolean setPause, String reason) {
if (!moveToFront) {
return;
}
@@ -4978,6 +4980,10 @@
if (setResume) {
mResumedActivity = r;
}
+ // If the activity was previously pausing, then ensure we transfer that as well
+ if (setPause) {
+ mPausingActivity = r;
+ }
// Move the stack in which we are placing the activity to the front. The call will also
// make sure the activity focus is set.
moveToFront(reason);
@@ -4998,6 +5004,7 @@
final boolean wasFocused = mStackSupervisor.isFocusedStack(prevStack)
&& (mStackSupervisor.topRunningActivityLocked() == r);
final boolean wasResumed = wasFocused && (prevStack.mResumedActivity == r);
+ final boolean wasPaused = prevStack.mPausingActivity == r;
final TaskRecord task = createTaskRecord(
mStackSupervisor.getNextTaskIdForUserLocked(r.userId),
@@ -5005,10 +5012,14 @@
r.setTask(task, null);
task.addActivityToTop(r);
mStackSupervisor.scheduleReportPictureInPictureModeChangedIfNeeded(task, prevStack);
- moveToFrontAndResumeStateIfNeeded(r, wasFocused, wasResumed, "moveActivityToStack");
+ moveToFrontAndResumeStateIfNeeded(r, wasFocused, wasResumed, wasPaused,
+ "moveActivityToStack");
if (wasResumed) {
prevStack.mResumedActivity = null;
}
+ if (wasPaused) {
+ prevStack.mPausingActivity = null;
+ }
}
public int getStackId() {
diff --git a/services/core/java/com/android/server/am/ActivityStackSupervisor.java b/services/core/java/com/android/server/am/ActivityStackSupervisor.java
index 4fe8939..14899b4 100644
--- a/services/core/java/com/android/server/am/ActivityStackSupervisor.java
+++ b/services/core/java/com/android/server/am/ActivityStackSupervisor.java
@@ -125,6 +125,7 @@
import android.hardware.display.DisplayManager;
import android.hardware.display.DisplayManager.DisplayListener;
import android.hardware.display.DisplayManagerGlobal;
+import android.hardware.display.DisplayManagerInternal;
import android.hardware.display.VirtualDisplay;
import android.hardware.input.InputManager;
import android.hardware.input.InputManagerInternal;
@@ -154,6 +155,7 @@
import android.util.ArraySet;
import android.util.DisplayMetrics;
import android.util.EventLog;
+import android.util.IntArray;
import android.util.Slog;
import android.util.SparseArray;
import android.util.SparseIntArray;
@@ -380,7 +382,10 @@
/** Mapping from displayId to display current state */
private final SparseArray<ActivityDisplay> mActivityDisplays = new SparseArray<>();
- InputManagerInternal mInputManagerInternal;
+ private final SparseArray<IntArray> mDisplayAccessUIDs = new SparseArray<>();
+
+ private DisplayManagerInternal mDisplayManagerInternal;
+ private InputManagerInternal mInputManagerInternal;
/** The chain of tasks in lockTask mode. The current frontmost task is at the top, and tasks
* may be finished until there is only one entry left. If this is empty the system is not
@@ -580,6 +585,7 @@
mDisplayManager =
(DisplayManager)mService.mContext.getSystemService(Context.DISPLAY_SERVICE);
mDisplayManager.registerDisplayListener(this, null);
+ mDisplayManagerInternal = LocalServices.getService(DisplayManagerInternal.class);
Display[] displays = mDisplayManager.getDisplays();
for (int displayNdx = displays.length - 1; displayNdx >= 0; --displayNdx) {
@@ -1452,7 +1458,7 @@
ActivityRecord resultRecord, ActivityStack resultStack, ActivityOptions options) {
final int startAnyPerm = mService.checkPermission(START_ANY_ACTIVITY, callingPid,
callingUid);
- if (startAnyPerm == PERMISSION_GRANTED) {
+ if (startAnyPerm == PERMISSION_GRANTED) {
return true;
}
final int componentRestriction = getComponentRestrictionForCallingPackage(
@@ -1519,25 +1525,76 @@
// Check if someone tries to launch an activity on a private display with a different
// owner.
final int launchDisplayId = options.getLaunchDisplayId();
- if (launchDisplayId != INVALID_DISPLAY) {
- final ActivityDisplay activityDisplay = mActivityDisplays.get(launchDisplayId);
- if (activityDisplay != null
- && (activityDisplay.mDisplay.getFlags() & FLAG_PRIVATE) != 0) {
- if (activityDisplay.mDisplay.getOwnerUid() != callingUid) {
- final String msg = "Permission Denial: starting " + intent.toString()
- + " from " + callerApp + " (pid=" + callingPid
- + ", uid=" + callingUid + ") with launchDisplayId="
- + launchDisplayId;
- Slog.w(TAG, msg);
- throw new SecurityException(msg);
- }
- }
+ if (launchDisplayId != INVALID_DISPLAY
+ && !isCallerAllowedToLaunchOnDisplay(callingPid, callingUid, launchDisplayId)) {
+ final String msg = "Permission Denial: starting " + intent.toString()
+ + " from " + callerApp + " (pid=" + callingPid
+ + ", uid=" + callingUid + ") with launchDisplayId="
+ + launchDisplayId;
+ Slog.w(TAG, msg);
+ throw new SecurityException(msg);
}
}
return true;
}
+ /** Check if caller is allowed to launch activities on specified display. */
+ boolean isCallerAllowedToLaunchOnDisplay(int callingPid, int callingUid, int launchDisplayId) {
+ if (DEBUG_TASKS) Slog.d(TAG, "Launch on display check: displayId=" + launchDisplayId
+ + " callingPid=" + callingPid + " callingUid=" + callingUid);
+
+ final ActivityDisplay activityDisplay = mActivityDisplays.get(launchDisplayId);
+ if (activityDisplay == null) {
+ Slog.w(TAG, "Launch on display check: display not found");
+ return false;
+ }
+
+ if (!activityDisplay.isPrivate()) {
+ // Anyone can launch on a public display.
+ if (DEBUG_TASKS) Slog.d(TAG, "Launch on display check:"
+ + " allow launch on public display");
+ return true;
+ }
+
+ // Check if the caller is the owner of the display.
+ if (activityDisplay.mDisplay.getOwnerUid() == callingUid) {
+ if (DEBUG_TASKS) Slog.d(TAG, "Launch on display check:"
+ + " allow launch for owner of the display");
+ return true;
+ }
+
+ // Check if caller is present on display
+ if (activityDisplay.isUidPresent(callingUid)) {
+ if (DEBUG_TASKS) Slog.d(TAG, "Launch on display check:"
+ + " allow launch for caller present on the display");
+ return true;
+ }
+
+ // Check if the caller can launch anything.
+ final int startAnyPerm = mService.checkPermission(START_ANY_ACTIVITY, callingPid,
+ callingUid);
+ if (startAnyPerm == PERMISSION_GRANTED) {
+ if (DEBUG_TASKS) Slog.d(TAG, "Launch on display check:"
+ + " allow launch any on display");
+ return true;
+ }
+
+ Slog.w(TAG, "Launch on display check: denied");
+ return false;
+ }
+
+ /** Update lists of UIDs that are present on displays and have access to them. */
+ void updateUIDsPresentOnDisplay() {
+ mDisplayAccessUIDs.clear();
+ for (int displayNdx = mActivityDisplays.size() - 1; displayNdx >= 0; --displayNdx) {
+ final ActivityDisplay activityDisplay = mActivityDisplays.valueAt(displayNdx);
+ mDisplayAccessUIDs.append(activityDisplay.mDisplayId, activityDisplay.getPresentUIDs());
+ }
+ // Store updated lists in DisplayManager. Callers from outside of AM should get them there.
+ mDisplayManagerInternal.setDisplayAccessUIDs(mDisplayAccessUIDs);
+ }
+
UserInfo getUserInfo(int userId) {
final long identity = Binder.clearCallingIdentity();
try {
@@ -2617,6 +2674,7 @@
final ActivityStack prevStack = task.getStack();
final boolean wasFocused = isFocusedStack(prevStack) && (topRunningActivityLocked() == r);
final boolean wasResumed = prevStack.mResumedActivity == r;
+ final boolean wasPaused = prevStack.mPausingActivity == r;
// In some cases the focused stack isn't the front stack. E.g. pinned stack.
// Whenever we are moving the top activity from the front stack we want to make sure to move
// the stack to the front.
@@ -2641,10 +2699,19 @@
task.mTemporarilyUnresizable = false;
task.reparent(stack.mStackId, toTop ? MAX_VALUE : 0, reason);
+ // Reset the resumed activity on the previous stack
+ if (wasResumed) {
+ prevStack.mResumedActivity = null;
+ }
+ // Reset the paused activity on the previous stack
+ if (wasPaused) {
+ prevStack.mPausingActivity = null;
+ }
+
// If the task had focus before (or we're requested to move focus),
// move focus to the new stack by moving the stack to the front.
- stack.moveToFrontAndResumeStateIfNeeded(
- r, forceFocus || wasFocused || wasFront, wasResumed, reason);
+ stack.moveToFrontAndResumeStateIfNeeded(r, forceFocus || wasFocused || wasFront, wasResumed,
+ wasPaused, reason);
return stack;
}
@@ -2795,8 +2862,12 @@
if (task.mActivities.size() == 1) {
// There is only one activity in the task. So, we can just move the task over to
- // the stack without re-parenting the activity in a different task.
- if (moveHomeStackToFront && task.getTaskToReturnTo() == HOME_ACTIVITY_TYPE) {
+ // the stack without re-parenting the activity in a different task. We don't
+ // move the home stack forward if we are currently entering picture-in-picture
+ // while pausing because that changes the focused stack and may prevent the new
+ // starting activity from resuming.
+ if (moveHomeStackToFront && task.getTaskToReturnTo() == HOME_ACTIVITY_TYPE
+ && !r.supportsPictureInPictureWhilePausing) {
// Move the home stack forward if the task we just moved to the pinned stack
// was launched from home so home should be visible behind it.
moveHomeStackToFront(reason);
@@ -2808,6 +2879,10 @@
// reveal/leave the other activities in their original task
stack.moveActivityToStack(r);
}
+
+ // Reset the state that indicates it can enter PiP while pausing after we've moved it
+ // to the pinned stack
+ r.supportsPictureInPictureWhilePausing = false;
} finally {
mWindowManager.continueSurfaceLayout();
}
@@ -4568,6 +4643,9 @@
ActivityRecord mVisibleBehindActivity;
+ /** Array of all UIDs that are present on the display. */
+ private IntArray mDisplayAccessUIDs = new IntArray();
+
ActivityDisplay() {
}
@@ -4630,6 +4708,28 @@
protected ConfigurationContainer getParent() {
return ActivityStackSupervisor.this;
}
+
+ boolean isPrivate() {
+ return (mDisplay.getFlags() & FLAG_PRIVATE) != 0;
+ }
+
+ boolean isUidPresent(int uid) {
+ for (ActivityStack stack : mStacks) {
+ if (stack.isUidPresent(uid)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /** Update and get all UIDs that are present on the display and have access to it. */
+ private IntArray getPresentUIDs() {
+ mDisplayAccessUIDs.clear();
+ for (ActivityStack stack : mStacks) {
+ stack.getPresentUIDs(mDisplayAccessUIDs);
+ }
+ return mDisplayAccessUIDs;
+ }
}
class VirtualActivityDisplay extends ActivityDisplay {
diff --git a/services/core/java/com/android/server/am/ActivityStarter.java b/services/core/java/com/android/server/am/ActivityStarter.java
index 3f71d12..26d2ee2 100644
--- a/services/core/java/com/android/server/am/ActivityStarter.java
+++ b/services/core/java/com/android/server/am/ActivityStarter.java
@@ -476,10 +476,10 @@
aInfo = mSupervisor.resolveActivity(intent, rInfo, startFlags, null /*profilerInfo*/);
}
- ActivityRecord r = new ActivityRecord(mService, callerApp, callingUid, callingPackage,
- intent, resolvedType, aInfo, mService.getGlobalConfiguration(), resultRecord,
- resultWho, requestCode, componentSpecified, voiceSession != null, mSupervisor,
- container, options, sourceRecord);
+ ActivityRecord r = new ActivityRecord(mService, callerApp, callingPid, callingUid,
+ callingPackage, intent, resolvedType, aInfo, mService.getGlobalConfiguration(),
+ resultRecord, resultWho, requestCode, componentSpecified, voiceSession != null,
+ mSupervisor, container, options, sourceRecord);
if (outActivity != null) {
outActivity[0] = r;
}
@@ -1131,7 +1131,8 @@
mService.grantUriPermissionFromIntentLocked(mCallingUid, mStartActivity.packageName,
mIntent, mStartActivity.getUriPermissionsLocked(), mStartActivity.userId);
-
+ mService.grantEphemeralAccessLocked(mStartActivity.userId, mIntent,
+ mStartActivity.appInfo.uid, UserHandle.getAppId(mCallingUid));
if (mSourceRecord != null && mSourceRecord.isRecentsActivity()) {
mStartActivity.task.setTaskToReturnTo(RECENTS_ACTIVITY_TYPE);
}
@@ -1899,16 +1900,14 @@
final ActivityStack currentStack = task != null ? task.getStack() : null;
if (currentStack != null) {
- if (currentStack.isOnHomeDisplay()) {
- if (mSupervisor.mFocusedStack != currentStack) {
- if (DEBUG_FOCUS || DEBUG_STACK) Slog.d(TAG_FOCUS,
- "computeStackFocus: Setting " + "focused stack to r=" + r
- + " task=" + task);
- } else {
- if (DEBUG_FOCUS || DEBUG_STACK) Slog.d(TAG_FOCUS,
- "computeStackFocus: Focused stack already="
- + mSupervisor.mFocusedStack);
- }
+ if (mSupervisor.mFocusedStack != currentStack) {
+ if (DEBUG_FOCUS || DEBUG_STACK) Slog.d(TAG_FOCUS,
+ "computeStackFocus: Setting " + "focused stack to r=" + r
+ + " task=" + task);
+ } else {
+ if (DEBUG_FOCUS || DEBUG_STACK) Slog.d(TAG_FOCUS,
+ "computeStackFocus: Focused stack already="
+ + mSupervisor.mFocusedStack);
}
return currentStack;
}
@@ -1925,13 +1924,7 @@
// Same also applies to dynamic stacks, as they behave similar to fullscreen stack.
// If the freeform or docked stack has focus, and the activity to be launched is resizeable,
// we can also put it in the focused stack.
- final int focusedStackId = mSupervisor.mFocusedStack.mStackId;
- final boolean canUseFocusedStack = focusedStackId == FULLSCREEN_WORKSPACE_STACK_ID
- || (focusedStackId == DOCKED_STACK_ID && r.canGoInDockedStack())
- || (focusedStackId == FREEFORM_WORKSPACE_STACK_ID && r.isResizeableOrForced())
- || isDynamicStack(focusedStackId);
- if (canUseFocusedStack && (!newTask
- || mSupervisor.mFocusedStack.mActivityContainer.isEligibleForNewTasks())) {
+ if (canLaunchIntoFocusedStack(r, newTask)) {
if (DEBUG_FOCUS || DEBUG_STACK) Slog.d(TAG_FOCUS,
"computeStackFocus: Have a focused stack=" + mSupervisor.mFocusedStack);
return mSupervisor.mFocusedStack;
@@ -1958,6 +1951,36 @@
return stack;
}
+ /** Check if provided activity record can launch in currently focused stack. */
+ private boolean canLaunchIntoFocusedStack(ActivityRecord r, boolean newTask) {
+ // The fullscreen stack can contain any task regardless of if the task is resizeable
+ // or not. So, we let the task go in the fullscreen task if it is the focus stack.
+ // Same also applies to dynamic stacks, as they behave similar to fullscreen stack.
+ // If the freeform or docked stack has focus, and the activity to be launched is resizeable,
+ // we can also put it in the focused stack.
+ final ActivityStack focusedStack = mSupervisor.mFocusedStack;
+ final int focusedStackId = mSupervisor.mFocusedStack.mStackId;
+ final boolean canUseFocusedStack;
+ switch (focusedStackId) {
+ case FULLSCREEN_WORKSPACE_STACK_ID:
+ canUseFocusedStack = true;
+ break;
+ case DOCKED_STACK_ID:
+ canUseFocusedStack = r.canGoInDockedStack();
+ break;
+ case FREEFORM_WORKSPACE_STACK_ID:
+ canUseFocusedStack = r.isResizeableOrForced();
+ break;
+ default:
+ canUseFocusedStack = isDynamicStack(focusedStackId)
+ && mSupervisor.isCallerAllowedToLaunchOnDisplay(r.launchedFromPid,
+ r.launchedFromUid, focusedStack.mDisplayId);
+ }
+
+ return canUseFocusedStack
+ && (!newTask || focusedStack.mActivityContainer.isEligibleForNewTasks());
+ }
+
private ActivityStack getLaunchStack(ActivityRecord r, int launchFlags, TaskRecord task,
ActivityOptions aOptions) {
diff --git a/services/core/java/com/android/server/am/AppErrors.java b/services/core/java/com/android/server/am/AppErrors.java
index 029b5dd..739a8c4 100644
--- a/services/core/java/com/android/server/am/AppErrors.java
+++ b/services/core/java/com/android/server/am/AppErrors.java
@@ -20,6 +20,7 @@
import com.android.internal.logging.MetricsLogger;
import com.android.internal.logging.nano.MetricsProto;
import com.android.internal.os.ProcessCpuTracker;
+import com.android.server.RescueParty;
import com.android.server.Watchdog;
import android.app.ActivityManager;
@@ -323,6 +324,12 @@
longMsg = shortMsg;
}
+ // If a persistent app is stuck in a crash loop, the device isn't very
+ // usable, so we want to consider sending out a rescue party.
+ if (r != null && r.persistent) {
+ RescueParty.notePersistentAppCrash(mContext, r.uid);
+ }
+
AppErrorResult result = new AppErrorResult();
TaskRecord task;
synchronized (mService) {
diff --git a/services/core/java/com/android/server/am/BroadcastQueue.java b/services/core/java/com/android/server/am/BroadcastQueue.java
index 8104a43..61e555b 100644
--- a/services/core/java/com/android/server/am/BroadcastQueue.java
+++ b/services/core/java/com/android/server/am/BroadcastQueue.java
@@ -1157,8 +1157,7 @@
if (!skip) {
final int allowed = mService.checkAllowBackgroundLocked(
- info.activityInfo.applicationInfo.uid, info.activityInfo.packageName, -1,
- true);
+ info.activityInfo.applicationInfo.uid, info.activityInfo.packageName, -1, true);
if (allowed != ActivityManager.APP_START_MODE_NORMAL) {
// We won't allow this receiver to be launched if the app has been
// completely disabled from launches, or it was not explicitly sent
diff --git a/services/core/java/com/android/server/am/TaskPersister.java b/services/core/java/com/android/server/am/TaskPersister.java
index 7a62f2c..9dde39e 100644
--- a/services/core/java/com/android/server/am/TaskPersister.java
+++ b/services/core/java/com/android/server/am/TaskPersister.java
@@ -651,6 +651,8 @@
"omitting from persistentTaskIds task=" + task);
}
}
+ mService.mWindowManager.removeObsoleteTaskFiles(persistentTaskIds,
+ mRecentTasks.usersWithRecentsLoadedLocked());
}
removeObsoleteFiles(persistentTaskIds);
}
diff --git a/services/core/java/com/android/server/am/TaskRecord.java b/services/core/java/com/android/server/am/TaskRecord.java
index a72a958..e550ac88 100644
--- a/services/core/java/com/android/server/am/TaskRecord.java
+++ b/services/core/java/com/android/server/am/TaskRecord.java
@@ -741,8 +741,14 @@
return mStack;
}
- /** Must be used for setting parent stack because it performs configuration updates. */
+ /**
+ * Must be used for setting parent stack because it performs configuration updates.
+ * Must be called after adding task as a child to the stack.
+ */
void setStack(ActivityStack stack) {
+ if (stack != null && !stack.isInStackLocked(this)) {
+ throw new IllegalStateException("Task must be added as a Stack child first.");
+ }
mStack = stack;
onParentChanged();
}
@@ -769,6 +775,12 @@
return mStack;
}
+ @Override
+ void onParentChanged() {
+ super.onParentChanged();
+ mService.mStackSupervisor.updateUIDsPresentOnDisplay();
+ }
+
// Close up recents linked list.
void closeRecentsChain() {
if (mPrevAffiliate != null) {
@@ -788,6 +800,9 @@
inRecents = false;
mService.notifyTaskPersisterLocked(this, false);
}
+
+ // TODO: Use window container controller once tasks are better synced between AM and WM
+ mService.mWindowManager.notifyTaskRemovedFromRecents(taskId, userId);
}
void setTaskToAffiliateWith(TaskRecord taskToAffiliateWith) {
diff --git a/services/core/java/com/android/server/am/UidRecord.java b/services/core/java/com/android/server/am/UidRecord.java
index d1a15bd..64e3417 100644
--- a/services/core/java/com/android/server/am/UidRecord.java
+++ b/services/core/java/com/android/server/am/UidRecord.java
@@ -26,10 +26,13 @@
*/
public final class UidRecord {
final int uid;
+ final boolean persistent;
int curProcState;
int setProcState = ActivityManager.PROCESS_STATE_NONEXISTENT;
long lastBackgroundTime;
boolean ephemeral;
+ boolean curWhitelist;
+ boolean setWhitelist;
boolean idle;
int numProcs;
@@ -49,8 +52,9 @@
ChangeItem pendingChange;
- public UidRecord(int _uid) {
+ public UidRecord(int _uid, boolean _persist) {
uid = _uid;
+ persistent = _persist;
reset();
}
@@ -69,6 +73,9 @@
if (ephemeral) {
sb.append(" ephemeral");
}
+ if (curWhitelist) {
+ sb.append(" whitelist");
+ }
if (lastBackgroundTime > 0) {
sb.append(" bg:");
TimeUtils.formatDuration(SystemClock.elapsedRealtime()-lastBackgroundTime, sb);
diff --git a/services/core/java/com/android/server/am/UserController.java b/services/core/java/com/android/server/am/UserController.java
index f516e99..5bf92d7 100644
--- a/services/core/java/com/android/server/am/UserController.java
+++ b/services/core/java/com/android/server/am/UserController.java
@@ -419,7 +419,8 @@
if (userId != UserHandle.USER_SYSTEM) {
Slog.d(TAG, "Initializing user #" + userId);
Intent intent = new Intent(Intent.ACTION_USER_INITIALIZE);
- intent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND);
+ intent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND
+ | Intent.FLAG_RECEIVER_INCLUDE_BACKGROUND);
mInjector.broadcastIntentLocked(intent, null,
new IIntentReceiver.Stub() {
@Override
diff --git a/services/core/java/com/android/server/connectivity/NetworkDiagnostics.java b/services/core/java/com/android/server/connectivity/NetworkDiagnostics.java
index 5f9efe7..85d1d1e 100644
--- a/services/core/java/com/android/server/connectivity/NetworkDiagnostics.java
+++ b/services/core/java/com/android/server/connectivity/NetworkDiagnostics.java
@@ -23,6 +23,7 @@
import android.net.Network;
import android.net.NetworkUtils;
import android.net.RouteInfo;
+import android.net.TrafficStats;
import android.os.SystemClock;
import android.system.ErrnoException;
import android.system.Os;
@@ -381,7 +382,12 @@
protected void setupSocket(
int sockType, int protocol, long writeTimeout, long readTimeout, int dstPort)
throws ErrnoException, IOException {
- mFileDescriptor = Os.socket(mAddressFamily, sockType, protocol);
+ final int oldTag = TrafficStats.getAndSetThreadStatsTag(TrafficStats.TAG_SYSTEM_PROBE);
+ try {
+ mFileDescriptor = Os.socket(mAddressFamily, sockType, protocol);
+ } finally {
+ TrafficStats.setThreadStatsTag(oldTag);
+ }
// Setting SNDTIMEO is purely for defensive purposes.
Os.setsockoptTimeval(mFileDescriptor,
SOL_SOCKET, SO_SNDTIMEO, StructTimeval.fromMillis(writeTimeout));
diff --git a/services/core/java/com/android/server/connectivity/NetworkMonitor.java b/services/core/java/com/android/server/connectivity/NetworkMonitor.java
index c40780e..fbda901 100644
--- a/services/core/java/com/android/server/connectivity/NetworkMonitor.java
+++ b/services/core/java/com/android/server/connectivity/NetworkMonitor.java
@@ -779,6 +779,7 @@
int httpResponseCode = 599;
String redirectUrl = null;
final Stopwatch probeTimer = new Stopwatch().start();
+ final int oldTag = TrafficStats.getAndSetThreadStatsTag(TrafficStats.TAG_SYSTEM_PROBE);
try {
urlConnection = (HttpURLConnection) mNetworkAgentInfo.network.openConnection(url);
urlConnection.setInstanceFollowRedirects(probeType == ValidationProbeEvent.PROBE_PAC);
@@ -839,6 +840,7 @@
if (urlConnection != null) {
urlConnection.disconnect();
}
+ TrafficStats.setThreadStatsTag(oldTag);
}
logValidationProbe(probeTimer.stop(), probeType, httpResponseCode);
return new CaptivePortalProbeResult(httpResponseCode, redirectUrl, url.toString());
diff --git a/services/core/java/com/android/server/connectivity/PacManager.java b/services/core/java/com/android/server/connectivity/PacManager.java
index 58c76ec..34826b6 100644
--- a/services/core/java/com/android/server/connectivity/PacManager.java
+++ b/services/core/java/com/android/server/connectivity/PacManager.java
@@ -25,6 +25,7 @@
import android.content.IntentFilter;
import android.content.ServiceConnection;
import android.net.ProxyInfo;
+import android.net.TrafficStats;
import android.net.Uri;
import android.os.Handler;
import android.os.HandlerThread;
@@ -103,11 +104,15 @@
String file;
synchronized (mProxyLock) {
if (Uri.EMPTY.equals(mPacUrl)) return;
+ final int oldTag = TrafficStats
+ .getAndSetThreadStatsTag(TrafficStats.TAG_SYSTEM_PAC);
try {
file = get(mPacUrl);
} catch (IOException ioe) {
file = null;
Log.w(TAG, "Failed to load PAC file: " + ioe);
+ } finally {
+ TrafficStats.setThreadStatsTag(oldTag);
}
}
if (file != null) {
diff --git a/services/core/java/com/android/server/connectivity/Tethering.java b/services/core/java/com/android/server/connectivity/Tethering.java
index 0c80166..b82dd60 100644
--- a/services/core/java/com/android/server/connectivity/Tethering.java
+++ b/services/core/java/com/android/server/connectivity/Tethering.java
@@ -16,6 +16,11 @@
package com.android.server.connectivity;
+import static android.hardware.usb.UsbManager.USB_CONNECTED;
+import static android.hardware.usb.UsbManager.USB_FUNCTION_RNDIS;
+import static android.net.wifi.WifiManager.EXTRA_WIFI_AP_STATE;
+import static android.net.wifi.WifiManager.WIFI_AP_STATE_DISABLED;
+
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
@@ -108,11 +113,7 @@
private static final SparseArray<String> sMagicDecoderRing =
MessageUtils.findMessageNames(messageClasses);
- // TODO - remove both of these - should be part of interface inspection/selection stuff
- private String[] mTetherableUsbRegexs;
- private String[] mTetherableWifiRegexs;
- private String[] mTetherableBluetoothRegexs;
- private Collection<Integer> mUpstreamIfaceTypes;
+ private volatile TetheringConfiguration mConfig;
// used to synchronize public access to members
private final Object mPublicSync;
@@ -121,10 +122,6 @@
private static final Integer HIPRI_TYPE = new Integer(ConnectivityManager.TYPE_MOBILE_HIPRI);
private static final Integer DUN_TYPE = new Integer(ConnectivityManager.TYPE_MOBILE_DUN);
- // if we have to connect to mobile, what APN type should we use? Calculated by examining the
- // upstream type list and the DUN_REQUIRED secure-setting
- private int mPreferredUpstreamMobileApn = ConnectivityManager.TYPE_NONE;
-
private final INetworkManagementService mNMService;
private final INetworkStatsService mStatsService;
private final INetworkPolicyManager mPolicyManager;
@@ -150,24 +147,6 @@
private static final ComponentName TETHER_SERVICE = ComponentName.unflattenFromString(Resources
.getSystem().getString(com.android.internal.R.string.config_wifi_tether_enable));
- // USB is 192.168.42.1 and 255.255.255.0
- // Wifi is 192.168.43.1 and 255.255.255.0
- // BT is limited to max default of 5 connections. 192.168.44.1 to 192.168.48.1
- // with 255.255.255.0
- // P2P is 192.168.49.1 and 255.255.255.0
-
- private String[] mDhcpRange;
- private static final String[] DHCP_DEFAULT_RANGE = {
- "192.168.42.2", "192.168.42.254", "192.168.43.2", "192.168.43.254",
- "192.168.44.2", "192.168.44.254", "192.168.45.2", "192.168.45.254",
- "192.168.46.2", "192.168.46.254", "192.168.47.2", "192.168.47.254",
- "192.168.48.2", "192.168.48.254", "192.168.49.2", "192.168.49.254",
- };
-
- private String[] mDefaultDnsServers;
- private static final String DNS_DEFAULT_SERVER1 = "8.8.8.8";
- private static final String DNS_DEFAULT_SERVER2 = "8.8.4.4";
-
private final StateMachine mTetherMasterSM;
private final UpstreamNetworkMonitor mUpstreamNetworkMonitor;
private String mCurrentUpstreamIface;
@@ -208,27 +187,16 @@
filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
filter.addAction(WifiManager.WIFI_AP_STATE_CHANGED_ACTION);
filter.addAction(Intent.ACTION_CONFIGURATION_CHANGED);
- mContext.registerReceiver(mStateReceiver, filter);
+ mContext.registerReceiver(mStateReceiver, filter, null, mTetherMasterSM.getHandler());
filter = new IntentFilter();
filter.addAction(Intent.ACTION_MEDIA_SHARED);
filter.addAction(Intent.ACTION_MEDIA_UNSHARED);
filter.addDataScheme("file");
- mContext.registerReceiver(mStateReceiver, filter);
-
- mDhcpRange = context.getResources().getStringArray(
- com.android.internal.R.array.config_tether_dhcp_range);
- if ((mDhcpRange.length == 0) || (mDhcpRange.length % 2 ==1)) {
- mDhcpRange = DHCP_DEFAULT_RANGE;
- }
+ mContext.registerReceiver(mStateReceiver, filter, null, mTetherMasterSM.getHandler());
// load device config info
updateConfiguration();
-
- // TODO - remove and rely on real notifications of the current iface
- mDefaultDnsServers = new String[2];
- mDefaultDnsServers[0] = DNS_DEFAULT_SERVER1;
- mDefaultDnsServers[1] = DNS_DEFAULT_SERVER2;
}
// We can't do this once in the Tethering() constructor and cache the value, because the
@@ -237,30 +205,8 @@
return (ConnectivityManager) mContext.getSystemService(Context.CONNECTIVITY_SERVICE);
}
- void updateConfiguration() {
- String[] tetherableUsbRegexs = mContext.getResources().getStringArray(
- com.android.internal.R.array.config_tether_usb_regexs);
- String[] tetherableWifiRegexs = mContext.getResources().getStringArray(
- com.android.internal.R.array.config_tether_wifi_regexs);
- String[] tetherableBluetoothRegexs = mContext.getResources().getStringArray(
- com.android.internal.R.array.config_tether_bluetooth_regexs);
-
- int ifaceTypes[] = mContext.getResources().getIntArray(
- com.android.internal.R.array.config_tether_upstream_types);
- Collection<Integer> upstreamIfaceTypes = new ArrayList<>();
- for (int i : ifaceTypes) {
- upstreamIfaceTypes.add(new Integer(i));
- }
-
- synchronized (mPublicSync) {
- mTetherableUsbRegexs = tetherableUsbRegexs;
- mTetherableWifiRegexs = tetherableWifiRegexs;
- mTetherableBluetoothRegexs = tetherableBluetoothRegexs;
- mUpstreamIfaceTypes = upstreamIfaceTypes;
- }
-
- // check if the upstream type list needs to be modified due to secure-settings
- checkDunRequired();
+ private void updateConfiguration() {
+ mConfig = new TetheringConfiguration(mContext);
}
@Override
@@ -300,39 +246,14 @@
interfaceStatusChanged(iface, up);
}
- private boolean isUsb(String iface) {
- synchronized (mPublicSync) {
- for (String regex : mTetherableUsbRegexs) {
- if (iface.matches(regex)) return true;
- }
- return false;
- }
- }
-
- private boolean isWifi(String iface) {
- synchronized (mPublicSync) {
- for (String regex : mTetherableWifiRegexs) {
- if (iface.matches(regex)) return true;
- }
- return false;
- }
- }
-
- private boolean isBluetooth(String iface) {
- synchronized (mPublicSync) {
- for (String regex : mTetherableBluetoothRegexs) {
- if (iface.matches(regex)) return true;
- }
- return false;
- }
- }
-
private int ifaceNameToType(String iface) {
- if (isWifi(iface)) {
+ final TetheringConfiguration cfg = mConfig;
+
+ if (cfg.isWifi(iface)) {
return ConnectivityManager.TETHERING_WIFI;
- } else if (isUsb(iface)) {
+ } else if (cfg.isUsb(iface)) {
return ConnectivityManager.TETHERING_USB;
- } else if (isBluetooth(iface)) {
+ } else if (cfg.isBluetooth(iface)) {
return ConnectivityManager.TETHERING_BLUETOOTH;
}
return ConnectivityManager.TETHERING_INVALID;
@@ -662,6 +583,8 @@
boolean usbTethered = false;
boolean bluetoothTethered = false;
+ final TetheringConfiguration cfg = mConfig;
+
synchronized (mPublicSync) {
for (int i = 0; i < mTetherStates.size(); i++) {
TetherState tetherState = mTetherStates.valueAt(i);
@@ -671,11 +594,11 @@
} else if (tetherState.mLastState == IControlsTethering.STATE_AVAILABLE) {
availableList.add(iface);
} else if (tetherState.mLastState == IControlsTethering.STATE_TETHERED) {
- if (isUsb(iface)) {
+ if (cfg.isUsb(iface)) {
usbTethered = true;
- } else if (isWifi(iface)) {
+ } else if (cfg.isWifi(iface)) {
wifiTethered = true;
- } else if (isBluetooth(iface)) {
+ } else if (cfg.isBluetooth(iface)) {
bluetoothTethered = true;
}
activeList.add(iface);
@@ -779,69 +702,84 @@
private class StateReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context content, Intent intent) {
- String action = intent.getAction();
- if (action == null) { return; }
+ final String action = intent.getAction();
+ if (action == null) return;
+
if (action.equals(UsbManager.ACTION_USB_STATE)) {
- synchronized (Tethering.this.mPublicSync) {
- boolean usbConnected = intent.getBooleanExtra(UsbManager.USB_CONNECTED, false);
- mRndisEnabled = intent.getBooleanExtra(UsbManager.USB_FUNCTION_RNDIS, false);
- // start tethering if we have a request pending
- if (usbConnected && mRndisEnabled && mUsbTetherRequested) {
- tetherMatchingInterfaces(true, ConnectivityManager.TETHERING_USB);
- }
- mUsbTetherRequested = false;
- }
+ handleUsbAction(intent);
} else if (action.equals(ConnectivityManager.CONNECTIVITY_ACTION)) {
- NetworkInfo networkInfo = (NetworkInfo)intent.getParcelableExtra(
- ConnectivityManager.EXTRA_NETWORK_INFO);
- if (networkInfo != null &&
- networkInfo.getDetailedState() != NetworkInfo.DetailedState.FAILED) {
- if (VDBG) Log.d(TAG, "Tethering got CONNECTIVITY_ACTION");
- mTetherMasterSM.sendMessage(TetherMasterSM.CMD_UPSTREAM_CHANGED);
- }
+ handleConnectivityAction(intent);
} else if (action.equals(WifiManager.WIFI_AP_STATE_CHANGED_ACTION)) {
- synchronized (Tethering.this.mPublicSync) {
- int curState = intent.getIntExtra(WifiManager.EXTRA_WIFI_AP_STATE,
- WifiManager.WIFI_AP_STATE_DISABLED);
- switch (curState) {
- case WifiManager.WIFI_AP_STATE_ENABLING:
- // We can see this state on the way to both enabled and failure states.
- break;
- case WifiManager.WIFI_AP_STATE_ENABLED:
- // When the AP comes up and we've been requested to tether it, do so.
- if (mWifiTetherRequested) {
- tetherMatchingInterfaces(true, ConnectivityManager.TETHERING_WIFI);
- }
- break;
- case WifiManager.WIFI_AP_STATE_DISABLED:
- case WifiManager.WIFI_AP_STATE_DISABLING:
- case WifiManager.WIFI_AP_STATE_FAILED:
- default:
- if (DBG) {
- Log.d(TAG, "Canceling WiFi tethering request - AP_STATE=" +
- curState);
- }
- // Tell appropriate interface state machines that they should tear
- // themselves down.
- for (int i = 0; i < mTetherStates.size(); i++) {
- TetherInterfaceStateMachine tism =
- mTetherStates.valueAt(i).mStateMachine;
- if (tism.interfaceType() == ConnectivityManager.TETHERING_WIFI) {
- tism.sendMessage(
- TetherInterfaceStateMachine.CMD_TETHER_UNREQUESTED);
- break; // There should be at most one of these.
- }
- }
- // Regardless of whether we requested this transition, the AP has gone
- // down. Don't try to tether again unless we're requested to do so.
- mWifiTetherRequested = false;
- break;
- }
- }
+ handleWifiApAction(intent);
} else if (action.equals(Intent.ACTION_CONFIGURATION_CHANGED)) {
updateConfiguration();
}
}
+
+ private void handleConnectivityAction(Intent intent) {
+ final NetworkInfo networkInfo = (NetworkInfo)intent.getParcelableExtra(
+ ConnectivityManager.EXTRA_NETWORK_INFO);
+ if (networkInfo == null ||
+ networkInfo.getDetailedState() == NetworkInfo.DetailedState.FAILED) {
+ return;
+ }
+
+ if (VDBG) Log.d(TAG, "Tethering got CONNECTIVITY_ACTION: " + networkInfo.toString());
+ mTetherMasterSM.sendMessage(TetherMasterSM.CMD_UPSTREAM_CHANGED);
+ }
+
+ private void handleUsbAction(Intent intent) {
+ final boolean usbConnected = intent.getBooleanExtra(USB_CONNECTED, false);
+ final boolean rndisEnabled = intent.getBooleanExtra(USB_FUNCTION_RNDIS, false);
+ synchronized (Tethering.this.mPublicSync) {
+ mRndisEnabled = rndisEnabled;
+ // start tethering if we have a request pending
+ if (usbConnected && mRndisEnabled && mUsbTetherRequested) {
+ tetherMatchingInterfaces(true, ConnectivityManager.TETHERING_USB);
+ }
+ mUsbTetherRequested = false;
+ }
+ }
+
+ private void handleWifiApAction(Intent intent) {
+ final int curState = intent.getIntExtra(EXTRA_WIFI_AP_STATE, WIFI_AP_STATE_DISABLED);
+ synchronized (Tethering.this.mPublicSync) {
+ switch (curState) {
+ case WifiManager.WIFI_AP_STATE_ENABLING:
+ // We can see this state on the way to both enabled and failure states.
+ break;
+ case WifiManager.WIFI_AP_STATE_ENABLED:
+ // When the AP comes up and we've been requested to tether it, do so.
+ if (mWifiTetherRequested) {
+ tetherMatchingInterfaces(true, ConnectivityManager.TETHERING_WIFI);
+ }
+ break;
+ case WifiManager.WIFI_AP_STATE_DISABLED:
+ case WifiManager.WIFI_AP_STATE_DISABLING:
+ case WifiManager.WIFI_AP_STATE_FAILED:
+ default:
+ if (DBG) {
+ Log.d(TAG, "Canceling WiFi tethering request - AP_STATE=" +
+ curState);
+ }
+ // Tell appropriate interface state machines that they should tear
+ // themselves down.
+ for (int i = 0; i < mTetherStates.size(); i++) {
+ TetherInterfaceStateMachine tism =
+ mTetherStates.valueAt(i).mStateMachine;
+ if (tism.interfaceType() == ConnectivityManager.TETHERING_WIFI) {
+ tism.sendMessage(
+ TetherInterfaceStateMachine.CMD_TETHER_UNREQUESTED);
+ break; // There should be at most one of these.
+ }
+ }
+ // Regardless of whether we requested this transition, the AP has gone
+ // down. Don't try to tether again unless we're requested to do so.
+ mWifiTetherRequested = false;
+ break;
+ }
+ }
+ }
}
private void tetherMatchingInterfaces(boolean enable, int interfaceType) {
@@ -875,26 +813,38 @@
}
}
- // TODO - return copies so people can't tamper
+ public TetheringConfiguration getTetheringConfiguration() {
+ return mConfig;
+ }
+
+ public boolean hasTetherableConfiguration() {
+ final TetheringConfiguration cfg = mConfig;
+ final boolean hasDownstreamConfiguration =
+ (cfg.tetherableUsbRegexs.length != 0) ||
+ (cfg.tetherableWifiRegexs.length != 0) ||
+ (cfg.tetherableBluetoothRegexs.length != 0);
+ final boolean hasUpstreamConfiguration = !cfg.preferredUpstreamIfaceTypes.isEmpty();
+
+ return hasDownstreamConfiguration && hasUpstreamConfiguration;
+ }
+
+ // TODO - update callers to use getTetheringConfiguration(),
+ // which has only final members.
public String[] getTetherableUsbRegexs() {
- return mTetherableUsbRegexs;
+ return copy(mConfig.tetherableUsbRegexs);
}
public String[] getTetherableWifiRegexs() {
- return mTetherableWifiRegexs;
+ return copy(mConfig.tetherableWifiRegexs);
}
public String[] getTetherableBluetoothRegexs() {
- return mTetherableBluetoothRegexs;
+ return copy(mConfig.tetherableBluetoothRegexs);
}
public int setUsbTethering(boolean enable) {
if (VDBG) Log.d(TAG, "setUsbTethering(" + enable + ")");
UsbManager usbManager = mContext.getSystemService(UsbManager.class);
- if (usbManager == null) {
- return enable ? ConnectivityManager.TETHER_ERROR_MASTER_ERROR
- : ConnectivityManager.TETHER_ERROR_NO_ERROR;
- }
synchronized (mPublicSync) {
if (enable) {
@@ -925,61 +875,6 @@
return ConnectivityManager.TETHER_ERROR_NO_ERROR;
}
- public int[] getUpstreamIfaceTypes() {
- int values[];
- synchronized (mPublicSync) {
- updateConfiguration(); // TODO - remove?
- values = new int[mUpstreamIfaceTypes.size()];
- Iterator<Integer> iterator = mUpstreamIfaceTypes.iterator();
- for (int i=0; i < mUpstreamIfaceTypes.size(); i++) {
- values[i] = iterator.next();
- }
- }
- return values;
- }
-
- private void checkDunRequired() {
- int secureSetting = 2;
- TelephonyManager tm = mContext.getSystemService(TelephonyManager.class);
- if (tm != null) {
- secureSetting = tm.getTetherApnRequired();
- }
- synchronized (mPublicSync) {
- // 2 = not set, 0 = DUN not required, 1 = DUN required
- if (secureSetting != 2) {
- int requiredApn = (secureSetting == 1 ?
- ConnectivityManager.TYPE_MOBILE_DUN :
- ConnectivityManager.TYPE_MOBILE_HIPRI);
- if (requiredApn == ConnectivityManager.TYPE_MOBILE_DUN) {
- while (mUpstreamIfaceTypes.contains(MOBILE_TYPE)) {
- mUpstreamIfaceTypes.remove(MOBILE_TYPE);
- }
- while (mUpstreamIfaceTypes.contains(HIPRI_TYPE)) {
- mUpstreamIfaceTypes.remove(HIPRI_TYPE);
- }
- if (mUpstreamIfaceTypes.contains(DUN_TYPE) == false) {
- mUpstreamIfaceTypes.add(DUN_TYPE);
- }
- } else {
- while (mUpstreamIfaceTypes.contains(DUN_TYPE)) {
- mUpstreamIfaceTypes.remove(DUN_TYPE);
- }
- if (mUpstreamIfaceTypes.contains(MOBILE_TYPE) == false) {
- mUpstreamIfaceTypes.add(MOBILE_TYPE);
- }
- if (mUpstreamIfaceTypes.contains(HIPRI_TYPE) == false) {
- mUpstreamIfaceTypes.add(HIPRI_TYPE);
- }
- }
- }
- if (mUpstreamIfaceTypes.contains(DUN_TYPE)) {
- mPreferredUpstreamMobileApn = ConnectivityManager.TYPE_MOBILE_DUN;
- } else {
- mPreferredUpstreamMobileApn = ConnectivityManager.TYPE_MOBILE_HIPRI;
- }
- }
- }
-
// TODO review API - maybe return ArrayList<String> here and below?
public String[] getTetheredIfaces() {
ArrayList<String> list = new ArrayList<String>();
@@ -1008,7 +903,7 @@
}
public String[] getTetheredDhcpRanges() {
- return mDhcpRange;
+ return mConfig.dhcpRanges;
}
public String[] getErroredIfaces() {
@@ -1083,7 +978,7 @@
private final ArrayList<TetherInterfaceStateMachine> mNotifyList;
private final IPv6TetheringCoordinator mIPv6TetheringCoordinator;
- private int mPreviousMobileApn = ConnectivityManager.TYPE_NONE;
+ private int mPreviousMobileType = ConnectivityManager.TYPE_NONE;
private static final int UPSTREAM_SETTLE_TIME_MS = 10000;
@@ -1118,13 +1013,13 @@
return false;
}
- protected boolean turnOnUpstreamMobileConnection(int apnType) {
+ protected boolean requestUpstreamMobileConnection(int apnType) {
if (apnType == ConnectivityManager.TYPE_NONE) { return false; }
- if (apnType != mPreviousMobileApn) {
+ if (apnType != mPreviousMobileType) {
// Unregister any previous mobile upstream callback because
// this request, if any, will be different.
- turnOffUpstreamMobileConnection();
+ unrequestUpstreamMobileConnection();
}
if (mUpstreamNetworkMonitor.mobileNetworkRequested()) {
@@ -1136,28 +1031,29 @@
case ConnectivityManager.TYPE_MOBILE_DUN:
case ConnectivityManager.TYPE_MOBILE:
case ConnectivityManager.TYPE_MOBILE_HIPRI:
- mPreviousMobileApn = apnType;
+ mPreviousMobileType = apnType;
break;
default:
return false;
}
- // TODO: This should be called by the code that observes
- // configuration changes, once the above code in this function
- // is simplified (i.e. eradicated).
- mUpstreamNetworkMonitor.mobileUpstreamRequiresDun(
+ // TODO: Replace this with a call to pass the current tethering
+ // configuration to mUpstreamNetworkMonitor and let it handle
+ // choosing APN type accordingly.
+ mUpstreamNetworkMonitor.updateMobileRequiresDun(
apnType == ConnectivityManager.TYPE_MOBILE_DUN);
mUpstreamNetworkMonitor.registerMobileNetworkRequest();
return true;
}
- protected void turnOffUpstreamMobileConnection() {
+ protected void unrequestUpstreamMobileConnection() {
mUpstreamNetworkMonitor.releaseMobileNetworkRequest();
- mPreviousMobileApn = ConnectivityManager.TYPE_NONE;
+ mPreviousMobileType = ConnectivityManager.TYPE_NONE;
}
protected boolean turnOnMasterTetherSettings() {
+ final TetheringConfiguration cfg = mConfig;
try {
mNMService.setIpForwardingEnabled(true);
} catch (Exception e) {
@@ -1165,11 +1061,11 @@
return false;
}
try {
- mNMService.startTethering(mDhcpRange);
+ mNMService.startTethering(cfg.dhcpRanges);
} catch (Exception e) {
try {
mNMService.stopTethering();
- mNMService.startTethering(mDhcpRange);
+ mNMService.startTethering(cfg.dhcpRanges);
} catch (Exception ee) {
transitionTo(mStartTetheringErrorState);
return false;
@@ -1202,29 +1098,31 @@
updateConfiguration(); // TODO - remove?
- synchronized (mPublicSync) {
- if (VDBG) {
- Log.d(TAG, "chooseUpstreamType has upstream iface types:");
- for (Integer netType : mUpstreamIfaceTypes) {
- Log.d(TAG, " " + netType);
- }
- }
-
- for (Integer netType : mUpstreamIfaceTypes) {
- NetworkInfo info = cm.getNetworkInfo(netType.intValue());
- // TODO: if the network is suspended we should consider
- // that to be the same as connected here.
- if ((info != null) && info.isConnected()) {
- upType = netType.intValue();
- break;
- }
+ final TetheringConfiguration cfg = mConfig;
+ if (VDBG) {
+ Log.d(TAG, "chooseUpstreamType has upstream iface types:");
+ for (Integer netType : cfg.preferredUpstreamIfaceTypes) {
+ Log.d(TAG, " " + netType);
}
}
+ for (Integer netType : cfg.preferredUpstreamIfaceTypes) {
+ NetworkInfo info = cm.getNetworkInfo(netType.intValue());
+ // TODO: if the network is suspended we should consider
+ // that to be the same as connected here.
+ if ((info != null) && info.isConnected()) {
+ upType = netType.intValue();
+ break;
+ }
+ }
+
+ final int preferredUpstreamMobileApn = cfg.isDunRequired
+ ? ConnectivityManager.TYPE_MOBILE_DUN
+ : ConnectivityManager.TYPE_MOBILE_HIPRI;
if (DBG) {
Log.d(TAG, "chooseUpstreamType(" + tryCell + "),"
+ " preferredApn="
- + ConnectivityManager.getNetworkTypeName(mPreferredUpstreamMobileApn)
+ + ConnectivityManager.getNetworkTypeName(preferredUpstreamMobileApn)
+ ", got type="
+ ConnectivityManager.getNetworkTypeName(upType));
}
@@ -1233,11 +1131,11 @@
case ConnectivityManager.TYPE_MOBILE_DUN:
case ConnectivityManager.TYPE_MOBILE_HIPRI:
// If we're on DUN, put our own grab on it.
- turnOnUpstreamMobileConnection(upType);
+ requestUpstreamMobileConnection(upType);
break;
case ConnectivityManager.TYPE_NONE:
if (tryCell &&
- turnOnUpstreamMobileConnection(mPreferredUpstreamMobileApn)) {
+ requestUpstreamMobileConnection(preferredUpstreamMobileApn)) {
// We think mobile should be coming up; don't set a retry.
} else {
sendMessageDelayed(CMD_RETRY_UPSTREAM, UPSTREAM_SETTLE_TIME_MS);
@@ -1250,7 +1148,7 @@
* If we found NONE we don't want to do this as we want any previous
* requests to keep trying to bring up something we can use.
*/
- turnOffUpstreamMobileConnection();
+ unrequestUpstreamMobileConnection();
break;
}
@@ -1295,7 +1193,8 @@
}
protected void setDnsForwarders(final Network network, final LinkProperties lp) {
- String[] dnsServers = mDefaultDnsServers;
+ // TODO: Set v4 and/or v6 DNS per available connectivity.
+ String[] dnsServers = mConfig.defaultIPv4DNS;
final Collection<InetAddress> dnses = lp.getDnsServers();
// TODO: Properly support the absence of DNS servers.
if (dnses != null && !dnses.isEmpty()) {
@@ -1330,96 +1229,127 @@
}
}
- private final AtomicInteger mSimBcastGenerationNumber = new AtomicInteger(0);
- private SimChangeBroadcastReceiver mBroadcastReceiver = null;
+ private class SimChangeListener {
+ private final Context mContext;
+ private final AtomicInteger mSimBcastGenerationNumber;
+ private BroadcastReceiver mBroadcastReceiver;
- private void startListeningForSimChanges() {
- if (DBG) Log.d(TAG, "startListeningForSimChanges");
- if (mBroadcastReceiver == null) {
+ SimChangeListener(Context ctx) {
+ mContext = ctx;
+ mSimBcastGenerationNumber = new AtomicInteger(0);
+ }
+
+ public int generationNumber() {
+ return mSimBcastGenerationNumber.get();
+ }
+
+ public void startListening() {
+ if (DBG) Log.d(TAG, "startListening for SIM changes");
+
+ if (mBroadcastReceiver != null) return;
+
mBroadcastReceiver = new SimChangeBroadcastReceiver(
mSimBcastGenerationNumber.incrementAndGet());
final IntentFilter filter = new IntentFilter();
filter.addAction(TelephonyIntents.ACTION_SIM_STATE_CHANGED);
- mContext.registerReceiver(mBroadcastReceiver, filter);
+ mContext.registerReceiver(mBroadcastReceiver, filter, null,
+ mTetherMasterSM.getHandler());
}
- }
- private void stopListeningForSimChanges() {
- if (DBG) Log.d(TAG, "stopListeningForSimChanges");
- if (mBroadcastReceiver != null) {
+ public void stopListening() {
+ if (DBG) Log.d(TAG, "stopListening for SIM changes");
+
+ if (mBroadcastReceiver == null) return;
+
mSimBcastGenerationNumber.incrementAndGet();
mContext.unregisterReceiver(mBroadcastReceiver);
mBroadcastReceiver = null;
}
- }
- class SimChangeBroadcastReceiver extends BroadcastReceiver {
- // used to verify this receiver is still current
- final private int mGenerationNumber;
-
- // we're interested in edge-triggered LOADED notifications, so
- // ignore LOADED unless we saw an ABSENT state first
- private boolean mSimAbsentSeen = false;
-
- public SimChangeBroadcastReceiver(int generationNumber) {
- super();
- mGenerationNumber = generationNumber;
+ public boolean hasMobileHotspotProvisionApp() {
+ try {
+ if (!mContext.getResources().getString(com.android.internal.R.string.
+ config_mobile_hotspot_provision_app_no_ui).isEmpty()) {
+ Log.d(TAG, "re-evaluate provisioning");
+ return true;
+ }
+ } catch (Resources.NotFoundException e) {}
+ Log.d(TAG, "no prov-check needed for new SIM");
+ return false;
}
- @Override
- public void onReceive(Context context, Intent intent) {
- if (DBG) {
- Log.d(TAG, "simchange mGenerationNumber=" + mGenerationNumber +
- ", current generationNumber=" + mSimBcastGenerationNumber.get());
- }
- if (mGenerationNumber != mSimBcastGenerationNumber.get()) return;
+ private boolean isSimCardAbsent(String state) {
+ return IccCardConstants.INTENT_VALUE_ICC_ABSENT.equals(state);
+ }
- final String state =
- intent.getStringExtra(IccCardConstants.INTENT_KEY_ICC_STATE);
+ private boolean isSimCardLoaded(String state) {
+ return IccCardConstants.INTENT_VALUE_ICC_LOADED.equals(state);
+ }
- Log.d(TAG, "got Sim changed to state " + state + ", mSimAbsentSeen=" +
- mSimAbsentSeen);
- if (!mSimAbsentSeen && IccCardConstants.INTENT_VALUE_ICC_ABSENT.equals(state)) {
- mSimAbsentSeen = true;
+ private void startProvisionIntent(int tetherType) {
+ final Intent startProvIntent = new Intent();
+ startProvIntent.putExtra(ConnectivityManager.EXTRA_ADD_TETHER_TYPE, tetherType);
+ startProvIntent.putExtra(ConnectivityManager.EXTRA_RUN_PROVISION, true);
+ startProvIntent.setComponent(TETHER_SERVICE);
+ mContext.startServiceAsUser(startProvIntent, UserHandle.CURRENT);
+ }
+
+ private class SimChangeBroadcastReceiver extends BroadcastReceiver {
+ // used to verify this receiver is still current
+ final private int mGenerationNumber;
+
+ // we're interested in edge-triggered LOADED notifications, so
+ // ignore LOADED unless we saw an ABSENT state first
+ private boolean mSimAbsentSeen = false;
+
+ public SimChangeBroadcastReceiver(int generationNumber) {
+ mGenerationNumber = generationNumber;
}
- if (mSimAbsentSeen && IccCardConstants.INTENT_VALUE_ICC_LOADED.equals(state)) {
- mSimAbsentSeen = false;
- try {
- if (mContext.getResources().getString(com.android.internal.R.string.
- config_mobile_hotspot_provision_app_no_ui).isEmpty() == false) {
- ArrayList<Integer> tethered = new ArrayList<Integer>();
- synchronized (mPublicSync) {
- for (int i = 0; i < mTetherStates.size(); i++) {
- TetherState tetherState = mTetherStates.valueAt(i);
- if (tetherState.mLastState !=
- IControlsTethering.STATE_TETHERED) {
- continue; // Skip interfaces that aren't tethered.
- }
- String iface = mTetherStates.keyAt(i);
- int interfaceType = ifaceNameToType(iface);
- if (interfaceType != ConnectivityManager.TETHERING_INVALID) {
- tethered.add(new Integer(interfaceType));
- }
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ final int currentGenerationNumber = mSimBcastGenerationNumber.get();
+
+ if (DBG) {
+ Log.d(TAG, "simchange mGenerationNumber=" + mGenerationNumber +
+ ", current generationNumber=" + currentGenerationNumber);
+ }
+ if (mGenerationNumber != currentGenerationNumber) return;
+
+ final String state = intent.getStringExtra(
+ IccCardConstants.INTENT_KEY_ICC_STATE);
+ Log.d(TAG, "got Sim changed to state " + state + ", mSimAbsentSeen=" +
+ mSimAbsentSeen);
+
+ if (isSimCardAbsent(state)) {
+ if (!mSimAbsentSeen) mSimAbsentSeen = true;
+ return;
+ }
+
+ if (isSimCardLoaded(state) && mSimAbsentSeen) {
+ mSimAbsentSeen = false;
+
+ if (!hasMobileHotspotProvisionApp()) return;
+
+ ArrayList<Integer> tethered = new ArrayList<Integer>();
+ synchronized (mPublicSync) {
+ for (int i = 0; i < mTetherStates.size(); i++) {
+ TetherState tetherState = mTetherStates.valueAt(i);
+ if (tetherState.mLastState != IControlsTethering.STATE_TETHERED) {
+ continue; // Skip interfaces that aren't tethered.
+ }
+ String iface = mTetherStates.keyAt(i);
+ int interfaceType = ifaceNameToType(iface);
+ if (interfaceType != ConnectivityManager.TETHERING_INVALID) {
+ tethered.add(new Integer(interfaceType));
}
}
- for (int tetherType : tethered) {
- Intent startProvIntent = new Intent();
- startProvIntent.putExtra(
- ConnectivityManager.EXTRA_ADD_TETHER_TYPE, tetherType);
- startProvIntent.putExtra(
- ConnectivityManager.EXTRA_RUN_PROVISION, true);
- startProvIntent.setComponent(TETHER_SERVICE);
- mContext.startServiceAsUser(startProvIntent, UserHandle.CURRENT);
- }
- Log.d(TAG, "re-evaluate provisioning");
- } else {
- Log.d(TAG, "no prov-check needed for new SIM");
}
- } catch (Resources.NotFoundException e) {
- Log.d(TAG, "no prov-check needed for new SIM");
- // not defined, do nothing
+
+ for (int tetherType : tethered) {
+ startProvisionIntent(tetherType);
+ }
}
}
}
@@ -1455,12 +1385,13 @@
}
class TetherModeAliveState extends TetherMasterUtilState {
+ final SimChangeListener simChange = new SimChangeListener(mContext);
boolean mTryCell = true;
@Override
public void enter() {
// TODO: examine if we should check the return value.
turnOnMasterTetherSettings(); // may transition us out
- startListeningForSimChanges();
+ simChange.startListening();
mUpstreamNetworkMonitor.start();
mTryCell = true; // better try something first pass or crazy tests cases will fail
@@ -1470,9 +1401,9 @@
@Override
public void exit() {
- turnOffUpstreamMobileConnection();
+ unrequestUpstreamMobileConnection();
mUpstreamNetworkMonitor.stop();
- stopListeningForSimChanges();
+ simChange.stopListening();
notifyTetheredOfNewUpstreamIface(null);
handleNewUpstreamNetworkState(null);
}
@@ -1672,9 +1603,10 @@
pw.println("Tethering:");
pw.increaseIndent();
- pw.print("mUpstreamIfaceTypes:");
+ final TetheringConfiguration cfg = mConfig;
+ pw.print("preferredUpstreamIfaceTypes:");
synchronized (mPublicSync) {
- for (Integer netType : mUpstreamIfaceTypes) {
+ for (Integer netType : cfg.preferredUpstreamIfaceTypes) {
pw.print(" " + ConnectivityManager.getNetworkTypeName(netType));
}
pw.println();
@@ -1754,4 +1686,123 @@
mTetherStates.put(iface, tetherState);
tetherState.mStateMachine.start();
}
+
+ private static String[] copy(String[] strarray) {
+ return Arrays.copyOf(strarray, strarray.length);
+ }
+
+ private static class TetheringConfiguration {
+ private static final int DUN_NOT_REQUIRED = 0;
+ private static final int DUN_REQUIRED = 1;
+ private static final int DUN_UNSPECIFIED = 2;
+
+ // USB is 192.168.42.1 and 255.255.255.0
+ // Wifi is 192.168.43.1 and 255.255.255.0
+ // BT is limited to max default of 5 connections. 192.168.44.1 to 192.168.48.1
+ // with 255.255.255.0
+ // P2P is 192.168.49.1 and 255.255.255.0
+ private static final String[] DHCP_DEFAULT_RANGE = {
+ "192.168.42.2", "192.168.42.254", "192.168.43.2", "192.168.43.254",
+ "192.168.44.2", "192.168.44.254", "192.168.45.2", "192.168.45.254",
+ "192.168.46.2", "192.168.46.254", "192.168.47.2", "192.168.47.254",
+ "192.168.48.2", "192.168.48.254", "192.168.49.2", "192.168.49.254",
+ };
+
+ private final String[] DEFAULT_IPV4_DNS = {"8.8.4.4", "8.8.8.8"};
+
+ public final String[] tetherableUsbRegexs;
+ public final String[] tetherableWifiRegexs;
+ public final String[] tetherableBluetoothRegexs;
+ public final boolean isDunRequired;
+ public final Collection<Integer> preferredUpstreamIfaceTypes;
+ public final String[] dhcpRanges;
+ public final String[] defaultIPv4DNS;
+
+ public TetheringConfiguration(Context ctx) {
+ tetherableUsbRegexs = ctx.getResources().getStringArray(
+ com.android.internal.R.array.config_tether_usb_regexs);
+ tetherableWifiRegexs = ctx.getResources().getStringArray(
+ com.android.internal.R.array.config_tether_wifi_regexs);
+ tetherableBluetoothRegexs = ctx.getResources().getStringArray(
+ com.android.internal.R.array.config_tether_bluetooth_regexs);
+
+ isDunRequired = checkDunRequired(ctx);
+ preferredUpstreamIfaceTypes = getUpstreamIfaceTypes(ctx, isDunRequired);
+
+ dhcpRanges = getDhcpRanges(ctx);
+ defaultIPv4DNS = copy(DEFAULT_IPV4_DNS);
+ }
+
+ public boolean isUsb(String iface) {
+ for (String regex : tetherableUsbRegexs) {
+ if (iface.matches(regex)) return true;
+ }
+ return false;
+ }
+
+ public boolean isWifi(String iface) {
+ for (String regex : tetherableWifiRegexs) {
+ if (iface.matches(regex)) return true;
+ }
+ return false;
+ }
+
+ public boolean isBluetooth(String iface) {
+ for (String regex : tetherableBluetoothRegexs) {
+ if (iface.matches(regex)) return true;
+ }
+ return false;
+ }
+
+ private static boolean checkDunRequired(Context ctx) {
+ final TelephonyManager tm = ctx.getSystemService(TelephonyManager.class);
+ final int secureSetting =
+ (tm != null) ? tm.getTetherApnRequired() : DUN_UNSPECIFIED;
+ return (secureSetting == DUN_REQUIRED);
+ }
+
+ private static Collection<Integer> getUpstreamIfaceTypes(Context ctx, boolean requiresDun) {
+ final int ifaceTypes[] = ctx.getResources().getIntArray(
+ com.android.internal.R.array.config_tether_upstream_types);
+ final ArrayList<Integer> upstreamIfaceTypes = new ArrayList<>(ifaceTypes.length);
+ for (int i : ifaceTypes) {
+ upstreamIfaceTypes.add(i);
+ }
+
+ // Fix up upstream interface types for DUN or mobile.
+ // TODO: Perform this filtering step in the above for loop.
+ if (requiresDun) {
+ while (upstreamIfaceTypes.contains(MOBILE_TYPE)) {
+ upstreamIfaceTypes.remove(MOBILE_TYPE);
+ }
+ while (upstreamIfaceTypes.contains(HIPRI_TYPE)) {
+ upstreamIfaceTypes.remove(HIPRI_TYPE);
+ }
+ if (!upstreamIfaceTypes.contains(DUN_TYPE)) {
+ upstreamIfaceTypes.add(DUN_TYPE);
+ }
+ } else {
+ while (upstreamIfaceTypes.contains(DUN_TYPE)) {
+ upstreamIfaceTypes.remove(DUN_TYPE);
+ }
+ if (!upstreamIfaceTypes.contains(MOBILE_TYPE)) {
+ upstreamIfaceTypes.add(MOBILE_TYPE);
+ }
+ if (!upstreamIfaceTypes.contains(HIPRI_TYPE)) {
+ upstreamIfaceTypes.add(HIPRI_TYPE);
+ }
+ }
+
+ return upstreamIfaceTypes;
+ }
+
+ private static String[] getDhcpRanges(Context ctx) {
+ final String[] fromResource = ctx.getResources().getStringArray(
+ com.android.internal.R.array.config_tether_dhcp_range);
+ if ((fromResource.length > 0) && (fromResource.length % 2 == 0)) {
+ return fromResource;
+ }
+ return copy(DHCP_DEFAULT_RANGE);
+ }
+ }
}
diff --git a/services/core/java/com/android/server/connectivity/tethering/UpstreamNetworkMonitor.java b/services/core/java/com/android/server/connectivity/tethering/UpstreamNetworkMonitor.java
index 4c950de..23481dc 100644
--- a/services/core/java/com/android/server/connectivity/tethering/UpstreamNetworkMonitor.java
+++ b/services/core/java/com/android/server/connectivity/tethering/UpstreamNetworkMonitor.java
@@ -109,7 +109,7 @@
mNetworkMap.clear();
}
- public void mobileUpstreamRequiresDun(boolean dunRequired) {
+ public void updateMobileRequiresDun(boolean dunRequired) {
final boolean valueChanged = (mDunRequired != dunRequired);
mDunRequired = dunRequired;
if (valueChanged && mobileNetworkRequested()) {
@@ -123,7 +123,10 @@
}
public void registerMobileNetworkRequest() {
- if (mMobileNetworkCallback != null) return;
+ if (mMobileNetworkCallback != null) {
+ Log.e(TAG, "registerMobileNetworkRequest() already registered");
+ return;
+ }
final NetworkRequest.Builder builder = new NetworkRequest.Builder()
.addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR);
@@ -139,11 +142,10 @@
// Therefore, to avoid duplicate notifications, we only register a no-op.
mMobileNetworkCallback = new NetworkCallback();
- // TODO: Change the timeout from 0 (no onUnavailable callback) to use some
- // moderate callback time (once timeout callbacks are implemented). This might
- // be useful for updating some UI. Additionally, we should definitely log a
- // message to aid in any subsequent debugging
- if (DBG) Log.d(TAG, "requesting mobile upstream network: " + mobileUpstreamRequest);
+ // TODO: Change the timeout from 0 (no onUnavailable callback) to some
+ // moderate callback timeout. This might be useful for updating some UI.
+ // Additionally, we log a message to aid in any subsequent debugging.
+ Log.d(TAG, "requesting mobile upstream network: " + mobileUpstreamRequest);
// The following use of the legacy type system cannot be removed until
// after upstream selection no longer finds networks by legacy type.
diff --git a/services/core/java/com/android/server/display/DisplayManagerService.java b/services/core/java/com/android/server/display/DisplayManagerService.java
index 9c762cc..cd07793 100644
--- a/services/core/java/com/android/server/display/DisplayManagerService.java
+++ b/services/core/java/com/android/server/display/DisplayManagerService.java
@@ -48,6 +48,7 @@
import android.os.SystemProperties;
import android.os.Trace;
import android.text.TextUtils;
+import android.util.IntArray;
import android.util.Slog;
import android.util.SparseArray;
import android.view.Display;
@@ -230,6 +231,9 @@
// intended for use inside of the requestGlobalDisplayStateInternal function.
private final ArrayList<Runnable> mTempDisplayStateWorkQueue = new ArrayList<Runnable>();
+ // Lists of UIDs that are present on the displays. Maps displayId -> array of UIDs.
+ private final SparseArray<IntArray> mDisplayAccessUIDs = new SparseArray<>();
+
public DisplayManagerService(Context context) {
super(context);
mContext = context;
@@ -394,7 +398,8 @@
LogicalDisplay display = mLogicalDisplays.get(displayId);
if (display != null) {
DisplayInfo info = display.getDisplayInfoLocked();
- if (info.hasAccess(callingUid)) {
+ if (info.hasAccess(callingUid)
+ || isUidPresentOnDisplayInternal(callingUid, displayId)) {
return info;
}
}
@@ -937,6 +942,25 @@
}
}
+ // Updates the lists of UIDs that are present on displays.
+ private void setDisplayAccessUIDsInternal(SparseArray<IntArray> newDisplayAccessUIDs) {
+ synchronized (mSyncRoot) {
+ mDisplayAccessUIDs.clear();
+ for (int i = newDisplayAccessUIDs.size() - 1; i >= 0; i--) {
+ mDisplayAccessUIDs.append(newDisplayAccessUIDs.keyAt(i),
+ newDisplayAccessUIDs.valueAt(i));
+ }
+ }
+ }
+
+ // Checks if provided UID's content is present on the display and UID has access to it.
+ private boolean isUidPresentOnDisplayInternal(int uid, int displayId) {
+ synchronized (mSyncRoot) {
+ final IntArray displayUIDs = mDisplayAccessUIDs.get(displayId);
+ return displayUIDs != null && displayUIDs.indexOf(uid) != -1;
+ }
+ }
+
private void clearViewportsLocked() {
mDefaultViewport.valid = false;
mExternalTouchViewport.valid = false;
@@ -1647,5 +1671,15 @@
public void setDisplayOffsets(int displayId, int x, int y) {
setDisplayOffsetsInternal(displayId, x, y);
}
+
+ @Override
+ public void setDisplayAccessUIDs(SparseArray<IntArray> newDisplayAccessUIDs) {
+ setDisplayAccessUIDsInternal(newDisplayAccessUIDs);
+ }
+
+ @Override
+ public boolean isUidPresentOnDisplay(int uid, int displayId) {
+ return isUidPresentOnDisplayInternal(uid, displayId);
+ }
}
}
diff --git a/services/core/java/com/android/server/location/GpsXtraDownloader.java b/services/core/java/com/android/server/location/GpsXtraDownloader.java
index bf779859..62332c9 100644
--- a/services/core/java/com/android/server/location/GpsXtraDownloader.java
+++ b/services/core/java/com/android/server/location/GpsXtraDownloader.java
@@ -16,22 +16,19 @@
package com.android.server.location;
+import android.net.TrafficStats;
import android.text.TextUtils;
import android.util.Log;
+import java.io.ByteArrayOutputStream;
import java.io.IOException;
+import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
-
-import java.io.ByteArrayOutputStream;
-import java.io.InputStream;
-import java.io.IOException;
import java.util.Properties;
import java.util.Random;
import java.util.concurrent.TimeUnit;
-import libcore.io.Streams;
-
/**
* A class for downloading GPS XTRA data.
*
@@ -94,7 +91,12 @@
// load balance our requests among the available servers
while (result == null) {
- result = doDownload(mXtraServers[mNextServerIndex]);
+ final int oldTag = TrafficStats.getAndSetThreadStatsTag(TrafficStats.TAG_SYSTEM_GPS);
+ try {
+ result = doDownload(mXtraServers[mNextServerIndex]);
+ } finally {
+ TrafficStats.setThreadStatsTag(oldTag);
+ }
// increment mNextServerIndex and wrap around if necessary
mNextServerIndex++;
diff --git a/services/core/java/com/android/server/notification/NotificationManagerService.java b/services/core/java/com/android/server/notification/NotificationManagerService.java
index 9018302..6c66a60 100644
--- a/services/core/java/com/android/server/notification/NotificationManagerService.java
+++ b/services/core/java/com/android/server/notification/NotificationManagerService.java
@@ -702,16 +702,19 @@
int changeUserId = intent.getIntExtra(Intent.EXTRA_USER_HANDLE,
UserHandle.USER_ALL);
String pkgList[] = null;
+ int uidList[] = null;
boolean removingPackage = queryRemove &&
!intent.getBooleanExtra(Intent.EXTRA_REPLACING, false);
if (DBG) Slog.i(TAG, "action=" + action + " removing=" + removingPackage);
if (action.equals(Intent.ACTION_EXTERNAL_APPLICATIONS_UNAVAILABLE)) {
pkgList = intent.getStringArrayExtra(Intent.EXTRA_CHANGED_PACKAGE_LIST);
+ uidList = intent.getIntArrayExtra(Intent.EXTRA_CHANGED_UID_LIST);
} else if (action.equals(Intent.ACTION_PACKAGES_SUSPENDED)) {
pkgList = intent.getStringArrayExtra(Intent.EXTRA_CHANGED_PACKAGE_LIST);
reason = REASON_PACKAGE_SUSPENDED;
} else if (queryRestart) {
pkgList = intent.getStringArrayExtra(Intent.EXTRA_PACKAGES);
+ uidList = new int[] {intent.getIntExtra(Intent.EXTRA_UID, -1)};
} else {
Uri uri = intent.getData();
if (uri == null) {
@@ -743,8 +746,8 @@
}
}
pkgList = new String[]{pkgName};
+ uidList = new int[] {intent.getIntExtra(Intent.EXTRA_UID, -1)};
}
-
if (pkgList != null && (pkgList.length > 0)) {
for (String pkgName : pkgList) {
if (cancelNotifications) {
@@ -756,7 +759,8 @@
mListeners.onPackagesChanged(removingPackage, pkgList);
mNotificationAssistants.onPackagesChanged(removingPackage, pkgList);
mConditionProviders.onPackagesChanged(removingPackage, pkgList);
- mRankingHelper.onPackagesChanged(removingPackage, changeUserId, pkgList);
+ mRankingHelper.onPackagesChanged(removingPackage, changeUserId, pkgList, uidList);
+ savePolicyFile();
}
}
};
@@ -1527,14 +1531,16 @@
@Override
public NotificationChannel getNotificationChannel(String pkg, String channelId) {
checkCallerIsSystemOrSameApp(pkg);
- return mRankingHelper.getNotificationChannel(pkg, Binder.getCallingUid(), channelId);
+ return mRankingHelper.getNotificationChannel(
+ pkg, Binder.getCallingUid(), channelId, false /* includeDeleted */);
}
@Override
public NotificationChannel getNotificationChannelForPackage(String pkg, int uid,
- String channelId) {
+ String channelId, boolean includeDeleted) {
checkCallerIsSystem();
- return mRankingHelper.getNotificationChannel(pkg, uid, channelId);
+ return mRankingHelper.getNotificationChannel
+ (pkg, uid, channelId, includeDeleted);
}
@Override
@@ -1566,17 +1572,42 @@
@Override
public ParceledListSlice<NotificationChannel> getNotificationChannelsForPackage(String pkg,
- int uid) {
+ int uid, boolean includeDeleted) {
checkCallerIsSystem();
- return mRankingHelper.getNotificationChannels(pkg, uid);
+ return mRankingHelper.getNotificationChannels(pkg, uid, includeDeleted);
}
@Override
public ParceledListSlice<NotificationChannel> getNotificationChannels(String pkg) {
checkCallerIsSystemOrSameApp(pkg);
- return mRankingHelper.getNotificationChannels(pkg, Binder.getCallingUid());
+ return mRankingHelper.getNotificationChannels(
+ pkg, Binder.getCallingUid(), false /* includeDeleted */);
}
+
+ @Override
+ public void clearData(String packageName, int uid) throws RemoteException {
+ checkCallerIsSystem();
+
+ // Cancel posted notifications
+ cancelAllNotificationsInt(MY_UID, MY_PID, packageName, null, 0, 0, true,
+ UserHandle.getUserId(Binder.getCallingUid()), REASON_CHANNEL_BANNED, null);
+
+ // Listener & assistant
+ mListeners.onPackagesChanged(true, new String[] {packageName});
+ mNotificationAssistants.onPackagesChanged(true, new String[] {packageName});
+
+ // Zen
+ mConditionProviders.onPackagesChanged(true, new String[] {packageName});
+
+ // Reset notification preferences
+ mRankingHelper.onPackagesChanged(true, UserHandle.getCallingUserId(),
+ new String[] {packageName}, new int[] {uid});
+
+ savePolicyFile();
+ }
+
+
/**
* System-only API for getting a list of current (i.e. not cleared) notifications.
*
@@ -2475,7 +2506,7 @@
INotificationListener token, String pkg) throws RemoteException {
ManagedServiceInfo info = mNotificationAssistants.checkServiceTokenLocked(token);
int uid = mPackageManager.getPackageUid(pkg, 0, info.userid);
- return mRankingHelper.getNotificationChannels(pkg, uid);
+ return mRankingHelper.getNotificationChannels(pkg, uid, false /* includeDeleted */);
}
};
@@ -2493,7 +2524,8 @@
adjustment.getSignals().getParcelableArrayList(Adjustment.KEY_SNOOZE_CRITERIA);
if (!TextUtils.isEmpty(overrideChannelId)) {
n.setNotificationChannelOverride(mRankingHelper.getNotificationChannel(
- n.sbn.getPackageName(), n.sbn.getUid(), overrideChannelId));
+ n.sbn.getPackageName(), n.sbn.getUid(), overrideChannelId,
+ false /* includeDeleted */));
}
n.setPeopleOverride(people);
n.setSnoozeCriteria(snoozeCriterionList);
@@ -2846,7 +2878,7 @@
+ " id=" + id + " notification=" + notification);
}
final NotificationChannel channel = mRankingHelper.getNotificationChannelWithFallback(pkg,
- callingUid, notification.getChannel());
+ callingUid, notification.getChannel(), false /* includeDeleted */);
final StatusBarNotification n = new StatusBarNotification(
pkg, opPkg, channel, id, tag, callingUid, callingPid, notification,
user, null, System.currentTimeMillis());
diff --git a/services/core/java/com/android/server/notification/RankingConfig.java b/services/core/java/com/android/server/notification/RankingConfig.java
index 5c1e99c..c2cef09 100644
--- a/services/core/java/com/android/server/notification/RankingConfig.java
+++ b/services/core/java/com/android/server/notification/RankingConfig.java
@@ -27,8 +27,10 @@
boolean fromTargetApp);
void updateNotificationChannel(String pkg, int uid, NotificationChannel channel);
void updateNotificationChannelFromAssistant(String pkg, int uid, NotificationChannel channel);
- NotificationChannel getNotificationChannel(String pkg, int uid, String channelId);
- NotificationChannel getNotificationChannelWithFallback(String pkg, int uid, String channelId);
+ NotificationChannel getNotificationChannel(String pkg, int uid, String channelId, boolean includeDeleted);
+ NotificationChannel getNotificationChannelWithFallback(String pkg, int uid, String channelId, boolean includeDeleted);
void deleteNotificationChannel(String pkg, int uid, String channelId);
- ParceledListSlice<NotificationChannel> getNotificationChannels(String pkg, int uid);
+ void permanentlyDeleteNotificationChannel(String pkg, int uid, String channelId);
+ void permanentlyDeleteNotificationChannels(String pkg, int uid);
+ ParceledListSlice<NotificationChannel> getNotificationChannels(String pkg, int uid, boolean includeDeleted);
}
diff --git a/services/core/java/com/android/server/notification/RankingHelper.java b/services/core/java/com/android/server/notification/RankingHelper.java
index 3fcce3c..e44fb7f 100644
--- a/services/core/java/com/android/server/notification/RankingHelper.java
+++ b/services/core/java/com/android/server/notification/RankingHelper.java
@@ -18,6 +18,7 @@
import static android.app.NotificationManager.IMPORTANCE_NONE;
import com.android.internal.R;
+import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.util.Preconditions;
import android.app.Notification;
@@ -29,7 +30,6 @@
import android.content.pm.PackageManager.NameNotFoundException;
import android.content.pm.ParceledListSlice;
import android.os.Build;
-import android.os.Process;
import android.os.UserHandle;
import android.service.notification.NotificationListenerService.Ranking;
import android.text.TextUtils;
@@ -432,9 +432,13 @@
if (IMPORTANCE_NONE == r.importance) {
throw new IllegalArgumentException("Package blocked");
}
- if (r.channels.containsKey(channel.getId()) || channel.getName().equals(
- mContext.getString(R.string.default_notification_channel_label))) {
- // Channel already exists, no-op.
+ NotificationChannel existing = r.channels.get(channel.getId());
+ // Keep existing settings
+ if (existing != null) {
+ if (existing.isDeleted()) {
+ existing.setDeleted(false);
+ updateConfig();
+ }
return;
}
if (channel.getImportance() < NotificationManager.IMPORTANCE_NONE
@@ -471,7 +475,7 @@
throw new IllegalArgumentException("Invalid package");
}
NotificationChannel channel = r.channels.get(updatedChannel.getId());
- if (channel == null) {
+ if (channel == null || channel.isDeleted()) {
throw new IllegalArgumentException("Channel does not exist");
}
if (updatedChannel.getLockscreenVisibility() == Notification.VISIBILITY_PUBLIC) {
@@ -489,7 +493,7 @@
throw new IllegalArgumentException("Invalid package");
}
NotificationChannel channel = r.channels.get(updatedChannel.getId());
- if (channel == null) {
+ if (channel == null || channel.isDeleted()) {
throw new IllegalArgumentException("Channel does not exist");
}
@@ -519,6 +523,9 @@
if ((channel.getUserLockedFields() & NotificationChannel.USER_LOCKED_SHOW_BADGE) == 0) {
channel.setShowBadge(updatedChannel.canShowBadge());
}
+ if (updatedChannel.isDeleted()) {
+ updatedChannel.setDeleted(true);
+ }
r.channels.put(channel.getId(), channel);
updateConfig();
@@ -526,13 +533,13 @@
@Override
public NotificationChannel getNotificationChannelWithFallback(String pkg, int uid,
- String channelId) {
+ String channelId, boolean includeDeleted) {
Record r = getOrCreateRecord(pkg, uid);
if (channelId == null) {
channelId = NotificationChannel.DEFAULT_CHANNEL_ID;
}
NotificationChannel channel = r.channels.get(channelId);
- if (channel != null) {
+ if (channel != null && (includeDeleted || !channel.isDeleted())) {
return channel;
} else {
return r.channels.get(NotificationChannel.DEFAULT_CHANNEL_ID);
@@ -540,16 +547,21 @@
}
@Override
- public NotificationChannel getNotificationChannel(String pkg, int uid, String channelId) {
+ public NotificationChannel getNotificationChannel(String pkg, int uid, String channelId,
+ boolean includeDeleted) {
Preconditions.checkNotNull(pkg);
Record r = getOrCreateRecord(pkg, uid);
if (r == null) {
- throw new IllegalArgumentException("Invalid package");
+ return null;
}
if (channelId == null) {
channelId = NotificationChannel.DEFAULT_CHANNEL_ID;
}
- return r.channels.get(channelId);
+ final NotificationChannel nc = r.channels.get(channelId);
+ if (nc != null && (includeDeleted || !nc.isDeleted())) {
+ return nc;
+ }
+ return null;
}
@Override
@@ -558,24 +570,57 @@
Preconditions.checkNotNull(channelId);
Record r = getRecord(pkg, uid);
if (r == null) {
- throw new IllegalArgumentException("Invalid package");
+ return;
}
- if (r != null) {
- r.channels.remove(channelId);
+ NotificationChannel channel = r.channels.get(channelId);
+ if (channel != null) {
+ channel.setDeleted(true);
}
}
@Override
- public ParceledListSlice<NotificationChannel> getNotificationChannels(String pkg, int uid) {
+ @VisibleForTesting
+ public void permanentlyDeleteNotificationChannel(String pkg, int uid, String channelId) {
+ Preconditions.checkNotNull(pkg);
+ Preconditions.checkNotNull(channelId);
+ Record r = getRecord(pkg, uid);
+ if (r == null) {
+ return;
+ }
+ r.channels.remove(channelId);
+ }
+
+ @Override
+ public void permanentlyDeleteNotificationChannels(String pkg, int uid) {
+ Preconditions.checkNotNull(pkg);
+ Record r = getRecord(pkg, uid);
+ if (r == null) {
+ return;
+ }
+ int N = r.channels.size() - 1;
+ for (int i = N; i >= 0; i--) {
+ String key = r.channels.keyAt(i);
+ if (!NotificationChannel.DEFAULT_CHANNEL_ID.equals(key)) {
+ r.channels.remove(key);
+ }
+ }
+ }
+
+ @Override
+ public ParceledListSlice<NotificationChannel> getNotificationChannels(String pkg, int uid,
+ boolean includeDeleted) {
Preconditions.checkNotNull(pkg);
List<NotificationChannel> channels = new ArrayList<>();
Record r = getRecord(pkg, uid);
if (r == null) {
- throw new IllegalArgumentException("Invalid package");
+ return ParceledListSlice.emptyList();
}
int N = r.channels.size();
for (int i = 0; i < N; i++) {
- channels.add(r.channels.valueAt(i));
+ final NotificationChannel nc = r.channels.valueAt(i);
+ if (includeDeleted || !nc.isDeleted()) {
+ channels.add(nc);
+ }
}
return new ParceledListSlice<>(channels);
}
@@ -738,30 +783,46 @@
return packageBans;
}
- public void onPackagesChanged(boolean removingPackage, int changeUserId, String[] pkgList) {
- if (removingPackage || pkgList == null || pkgList.length == 0) {
+ public void onPackagesChanged(boolean removingPackage, int changeUserId, String[] pkgList,
+ int[] uidList) {
+ if (pkgList == null || pkgList.length == 0) {
return; // nothing to do
}
boolean updated = false;
- for (String pkg : pkgList) {
- final Record r = mRestoredWithoutUids.get(pkg);
- if (r != null) {
+ if (removingPackage) {
+ // Remove notification settings for uninstalled package
+ int size = Math.min(pkgList.length, uidList.length);
+ for (int i = 0; i < size; i++) {
+ final String pkg = pkgList[i];
+ final int uid = uidList[i];
+ mRecords.remove(recordKey(pkg, uid));
+ mRestoredWithoutUids.remove(pkg);
+ updated = true;
+ }
+ } else {
+ for (String pkg : pkgList) {
+ // Package install
+ final Record r = mRestoredWithoutUids.get(pkg);
+ if (r != null) {
+ try {
+ r.uid = mPm.getPackageUidAsUser(r.pkg, changeUserId);
+ mRestoredWithoutUids.remove(pkg);
+ mRecords.put(recordKey(r.pkg, r.uid), r);
+ updated = true;
+ } catch (NameNotFoundException e) {
+ // noop
+ }
+ }
+ // Package upgrade
try {
- r.uid = mPm.getPackageUidAsUser(r.pkg, changeUserId);
- mRestoredWithoutUids.remove(pkg);
- mRecords.put(recordKey(r.pkg, r.uid), r);
- updated = true;
+ Record fullRecord = getRecord(pkg,
+ mPm.getPackageUidAsUser(pkg, changeUserId));
+ if (fullRecord != null) {
+ clampDefaultChannel(fullRecord);
+ }
} catch (NameNotFoundException e) {
- // noop
}
}
- try {
- Record fullRecord = getRecord(pkg,
- mPm.getPackageUidAsUser(pkg, changeUserId));
- if (fullRecord != null) {
- clampDefaultChannel(fullRecord);
- }
- } catch (NameNotFoundException e) {}
}
if (updated) {
diff --git a/services/core/java/com/android/server/pm/EphemeralApplicationRegistry.java b/services/core/java/com/android/server/pm/EphemeralApplicationRegistry.java
index 1e3e0ca..3d946e0 100644
--- a/services/core/java/com/android/server/pm/EphemeralApplicationRegistry.java
+++ b/services/core/java/com/android/server/pm/EphemeralApplicationRegistry.java
@@ -17,6 +17,7 @@
package com.android.server.pm;
import android.content.Context;
+import android.content.Intent;
import android.content.pm.EphemeralApplicationInfo;
import android.content.pm.PackageParser;
import android.content.pm.PackageUserState;
@@ -27,10 +28,13 @@
import android.graphics.drawable.Drawable;
import android.os.Binder;
import android.os.Environment;
+import android.os.UserHandle;
import android.provider.Settings;
import android.util.AtomicFile;
import android.util.Slog;
import android.util.SparseArray;
+import android.util.SparseBooleanArray;
+import android.util.SparseIntArray;
import android.util.Xml;
import com.android.internal.annotations.GuardedBy;
import com.android.internal.util.ArrayUtils;
@@ -51,6 +55,7 @@
import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
import java.util.Collections;
+import java.util.HashSet;
import java.util.List;
import java.util.Set;
@@ -62,7 +67,7 @@
class EphemeralApplicationRegistry {
private static final boolean DEBUG = false;
- private static final boolean ENABLED = false;
+ private static final boolean ENABLED = true;
private static final String LOG_TAG = "EphemeralAppRegistry";
@@ -90,6 +95,16 @@
@GuardedBy("mService.mPackages")
private SparseArray<List<UninstalledEphemeralAppState>> mUninstalledEphemeralApps;
+ /**
+ * Automatic grants for access to instant app metadata.
+ * The key is the target application UID.
+ * The value is a set of instant app UIDs.
+ * UserID -> TargetAppId -> InstantAppId
+ */
+ private SparseArray<SparseArray<SparseBooleanArray>> mEphemeralGrants;
+ /** The set of all installed instant apps. UserID -> AppID */
+ private SparseArray<SparseBooleanArray> mInstalledEphemeralAppUids;
+
public EphemeralApplicationRegistry(PackageManagerService service) {
mService = service;
}
@@ -188,7 +203,11 @@
}
// Propagate permissions before removing any state
- propagateEphemeralAppPermissionsIfNeeded(pkg, userId);
+ // TODO: Fix this later
+ // propagateEphemeralAppPermissionsIfNeeded(pkg, userId);
+ if (pkg.applicationInfo.isEphemeralApp()) {
+ addEphemeralAppLPw(userId, ps.appId);
+ }
// Remove the in-memory state
if (mUninstalledEphemeralApps != null) {
@@ -248,9 +267,11 @@
if (pkg.applicationInfo.isEphemeralApp()) {
// Add a record for an uninstalled ephemeral app
addUninstalledEphemeralAppLPw(pkg, userId);
+ removeEphemeralAppLPw(userId, ps.appId);
} else {
// Deleting an app prunes all ephemeral state such as cookie
deleteDir(getEphemeralApplicationDir(pkg.packageName, userId));
+ removeAppLPw(userId, ps.appId);
}
}
}
@@ -262,9 +283,114 @@
if (mUninstalledEphemeralApps != null) {
mUninstalledEphemeralApps.remove(userId);
}
+ if (mInstalledEphemeralAppUids != null) {
+ mInstalledEphemeralAppUids.remove(userId);
+ }
+ if (mEphemeralGrants != null) {
+ mEphemeralGrants.remove(userId);
+ }
deleteDir(getEphemeralApplicationsDir(userId));
}
+ public boolean isEphemeralAccessGranted(int userId, int targetAppId, int ephemeralAppId) {
+ if (mEphemeralGrants == null) {
+ return false;
+ }
+ final SparseArray<SparseBooleanArray> targetAppList = mEphemeralGrants.get(userId);
+ if (targetAppList == null) {
+ return false;
+ }
+ final SparseBooleanArray ephemeralGrantList = targetAppList.get(targetAppId);
+ if (ephemeralGrantList == null) {
+ return false;
+ }
+ return ephemeralGrantList.get(ephemeralAppId);
+ }
+
+ public void grantEphemeralAccessLPw(int userId, Intent intent,
+ int targetAppId, int ephemeralAppId) {
+ if (mInstalledEphemeralAppUids == null) {
+ return; // no ephemeral apps installed; no need to grant
+ }
+ SparseBooleanArray ephemeralAppList = mInstalledEphemeralAppUids.get(userId);
+ if (ephemeralAppList == null || !ephemeralAppList.get(ephemeralAppId)) {
+ return; // ephemeral app id isn't installed; no need to grant
+ }
+ if (ephemeralAppList.get(targetAppId)) {
+ return; // target app id is an ephemeral app; no need to grant
+ }
+ if (intent != null && Intent.ACTION_VIEW.equals(intent.getAction())) {
+ final Set<String> categories = intent.getCategories();
+ if (categories != null && categories.contains(Intent.CATEGORY_BROWSABLE)) {
+ return; // launched via VIEW/BROWSABLE intent; no need to grant
+ }
+ }
+ if (mEphemeralGrants == null) {
+ mEphemeralGrants = new SparseArray<>();
+ }
+ SparseArray<SparseBooleanArray> targetAppList = mEphemeralGrants.get(userId);
+ if (targetAppList == null) {
+ targetAppList = new SparseArray<>();
+ mEphemeralGrants.put(userId, targetAppList);
+ }
+ SparseBooleanArray ephemeralGrantList = targetAppList.get(targetAppId);
+ if (ephemeralGrantList == null) {
+ ephemeralGrantList = new SparseBooleanArray();
+ targetAppList.put(targetAppId, ephemeralGrantList);
+ }
+ ephemeralGrantList.put(ephemeralAppId, true /*granted*/);
+ }
+
+ public void addEphemeralAppLPw(int userId, int ephemeralAppId) {
+ if (mInstalledEphemeralAppUids == null) {
+ mInstalledEphemeralAppUids = new SparseArray<>();
+ }
+ SparseBooleanArray ephemeralAppList = mInstalledEphemeralAppUids.get(userId);
+ if (ephemeralAppList == null) {
+ ephemeralAppList = new SparseBooleanArray();
+ mInstalledEphemeralAppUids.put(userId, ephemeralAppList);
+ }
+ ephemeralAppList.put(ephemeralAppId, true /*installed*/);
+ }
+
+ private void removeEphemeralAppLPw(int userId, int ephemeralAppId) {
+ // remove from the installed list
+ if (mInstalledEphemeralAppUids == null) {
+ return; // no ephemeral apps on the system
+ }
+ final SparseBooleanArray ephemeralAppList = mInstalledEphemeralAppUids.get(userId);
+ if (ephemeralAppList == null) {
+ Slog.w(LOG_TAG, "Remove ephemeral not in install list");
+ return;
+ } else {
+ ephemeralAppList.delete(ephemeralAppId);
+ }
+ // remove any grants
+ if (mEphemeralGrants == null) {
+ return; // no grants on the system
+ }
+ final SparseArray<SparseBooleanArray> targetAppList = mEphemeralGrants.get(userId);
+ if (targetAppList == null) {
+ return; // no grants for this user
+ }
+ final int numApps = targetAppList.size();
+ for (int i = targetAppList.size() - 1; i >= 0; --i) {
+ targetAppList.valueAt(i).delete(ephemeralAppId);
+ }
+ }
+
+ private void removeAppLPw(int userId, int targetAppId) {
+ // remove from the installed list
+ if (mEphemeralGrants == null) {
+ return; // no grants on the system
+ }
+ final SparseArray<SparseBooleanArray> targetAppList = mEphemeralGrants.get(userId);
+ if (targetAppList == null) {
+ return; // no grants for this user
+ }
+ targetAppList.delete(targetAppId);
+ }
+
private void addUninstalledEphemeralAppLPw(PackageParser.Package pkg, int userId) {
EphemeralApplicationInfo uninstalledApp = createEphemeralAppInfoForPackage(pkg, userId);
if (uninstalledApp == null) {
diff --git a/services/core/java/com/android/server/pm/LauncherAppsService.java b/services/core/java/com/android/server/pm/LauncherAppsService.java
index 2ddf6db..a74e141 100644
--- a/services/core/java/com/android/server/pm/LauncherAppsService.java
+++ b/services/core/java/com/android/server/pm/LauncherAppsService.java
@@ -231,11 +231,15 @@
long ident = injectClearCallingIdentity();
try {
UserInfo callingUserInfo = mUm.getUserInfo(callingUserId);
+ if (callingUserInfo.isManagedProfile()) {
+ throw new SecurityException(message + " for another profile " + targetUserId);
+ }
+
UserInfo targetUserInfo = mUm.getUserInfo(targetUserId);
if (targetUserInfo == null
|| targetUserInfo.profileGroupId == UserInfo.NO_PROFILE_GROUP_ID
|| targetUserInfo.profileGroupId != callingUserInfo.profileGroupId) {
- throw new SecurityException(message);
+ throw new SecurityException(message + " for unrelated profile " + targetUserId);
}
} finally {
injectRestoreCallingIdentity(ident);
@@ -289,7 +293,7 @@
@Override
public ActivityInfo resolveActivity(ComponentName component, UserHandle user)
throws RemoteException {
- ensureInUserProfiles(user, "Cannot resolve activity for unrelated profile " + user);
+ ensureInUserProfiles(user, "Cannot resolve activity");
if (!isUserEnabled(user)) {
return null;
}
@@ -315,7 +319,7 @@
private ParceledListSlice<ResolveInfo> queryActivitiesForUser(Intent intent,
UserHandle user) {
- ensureInUserProfiles(user, "Cannot retrieve activities for unrelated profile " + user);
+ ensureInUserProfiles(user, "Cannot retrieve activities");
if (!isUserEnabled(user)) {
return null;
}
@@ -356,7 +360,7 @@
@Override
public boolean isPackageEnabled(String packageName, UserHandle user)
throws RemoteException {
- ensureInUserProfiles(user, "Cannot check package for unrelated profile " + user);
+ ensureInUserProfiles(user, "Cannot check package");
if (!isUserEnabled(user)) {
return false;
}
@@ -377,7 +381,7 @@
@Override
public ApplicationInfo getApplicationInfo(String packageName, int flags, UserHandle user)
throws RemoteException {
- ensureInUserProfiles(user, "Cannot check package for unrelated profile " + user);
+ ensureInUserProfiles(user, "Cannot check package");
if (!isUserEnabled(user)) {
return null;
}
@@ -399,7 +403,7 @@
private void ensureShortcutPermission(@NonNull String callingPackage, int userId) {
verifyCallingPackage(callingPackage);
- ensureInUserProfiles(userId, "Cannot access shortcuts for unrelated profile " + userId);
+ ensureInUserProfiles(userId, "Cannot access shortcuts");
if (!mShortcutServiceInternal.hasShortcutHostPermission(getCallingUserId(),
callingPackage)) {
@@ -475,7 +479,7 @@
public boolean startShortcut(String callingPackage, String packageName, String shortcutId,
Rect sourceBounds, Bundle startActivityOptions, int userId) {
verifyCallingPackage(callingPackage);
- ensureInUserProfiles(userId, "Cannot start activity for unrelated profile " + userId);
+ ensureInUserProfiles(userId, "Cannot start activity");
if (!isUserEnabled(userId)) {
throw new IllegalStateException("Cannot start a shortcut for disabled profile "
@@ -528,7 +532,7 @@
@Override
public boolean isActivityEnabled(ComponentName component, UserHandle user)
throws RemoteException {
- ensureInUserProfiles(user, "Cannot check component for unrelated profile " + user);
+ ensureInUserProfiles(user, "Cannot check component");
if (!isUserEnabled(user)) {
return false;
}
@@ -549,7 +553,7 @@
@Override
public void startActivityAsUser(ComponentName component, Rect sourceBounds,
Bundle opts, UserHandle user) throws RemoteException {
- ensureInUserProfiles(user, "Cannot start activity for unrelated profile " + user);
+ ensureInUserProfiles(user, "Cannot start activity");
if (!isUserEnabled(user)) {
throw new IllegalStateException("Cannot start activity for disabled profile " + user);
}
@@ -602,7 +606,7 @@
@Override
public void showAppDetailsAsUser(ComponentName component, Rect sourceBounds,
Bundle opts, UserHandle user) throws RemoteException {
- ensureInUserProfiles(user, "Cannot show app details for unrelated profile " + user);
+ ensureInUserProfiles(user, "Cannot show app details");
if (!isUserEnabled(user)) {
throw new IllegalStateException("Cannot show app details for disabled profile "
+ user);
diff --git a/services/core/java/com/android/server/pm/PackageInstallerService.java b/services/core/java/com/android/server/pm/PackageInstallerService.java
index d516acf..da6a67e 100644
--- a/services/core/java/com/android/server/pm/PackageInstallerService.java
+++ b/services/core/java/com/android/server/pm/PackageInstallerService.java
@@ -52,6 +52,7 @@
import android.content.pm.PackageInstaller.SessionParams;
import android.content.pm.PackageManager;
import android.content.pm.ParceledListSlice;
+import android.content.pm.VersionedPackage;
import android.graphics.Bitmap;
import android.graphics.Bitmap.CompressFormat;
import android.graphics.BitmapFactory;
@@ -869,8 +870,8 @@
}
@Override
- public void uninstall(String packageName, String callerPackageName, int flags,
- IntentSender statusReceiver, int userId) {
+ public void uninstall(VersionedPackage versionedPackage, String callerPackageName, int flags,
+ IntentSender statusReceiver, int userId) throws RemoteException {
final int callingUid = Binder.getCallingUid();
mPm.enforceCrossUserPermission(callingUid, userId, true, true, "uninstall");
if ((callingUid != Process.SHELL_UID) && (callingUid != Process.ROOT_UID)) {
@@ -884,24 +885,24 @@
callerPackageName);
final PackageDeleteObserverAdapter adapter = new PackageDeleteObserverAdapter(mContext,
- statusReceiver, packageName, isDeviceOwner, userId);
+ statusReceiver, versionedPackage.getPackageName(), isDeviceOwner, userId);
if (mContext.checkCallingOrSelfPermission(android.Manifest.permission.DELETE_PACKAGES)
== PackageManager.PERMISSION_GRANTED) {
// Sweet, call straight through!
- mPm.deletePackage(packageName, adapter.getBinder(), userId, flags);
+ mPm.deletePackageVersioned(versionedPackage, adapter.getBinder(), userId, flags);
} else if (isDeviceOwner) {
// Allow the DeviceOwner to silently delete packages
// Need to clear the calling identity to get DELETE_PACKAGES permission
long ident = Binder.clearCallingIdentity();
try {
- mPm.deletePackage(packageName, adapter.getBinder(), userId, flags);
+ mPm.deletePackageVersioned(versionedPackage, adapter.getBinder(), userId, flags);
} finally {
Binder.restoreCallingIdentity(ident);
}
} else {
// Take a short detour to confirm with user
final Intent intent = new Intent(Intent.ACTION_UNINSTALL_PACKAGE);
- intent.setData(Uri.fromParts("package", packageName, null));
+ intent.setData(Uri.fromParts("package", versionedPackage.getPackageName(), null));
intent.putExtra(PackageInstaller.EXTRA_CALLBACK, adapter.getBinder().asBinder());
adapter.onUserActionRequired(intent);
}
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java
index 6669889..e40b30f 100644
--- a/services/core/java/com/android/server/pm/PackageManagerService.java
+++ b/services/core/java/com/android/server/pm/PackageManagerService.java
@@ -16,7 +16,11 @@
package com.android.server.pm;
+import static android.Manifest.permission.DELETE_PACKAGES;
+import static android.Manifest.permission.INSTALL_PACKAGES;
import static android.Manifest.permission.READ_EXTERNAL_STORAGE;
+import static android.Manifest.permission.REQUEST_DELETE_PACKAGES;
+import static android.Manifest.permission.REQUEST_INSTALL_PACKAGES;
import static android.Manifest.permission.WRITE_EXTERNAL_STORAGE;
import static android.Manifest.permission.WRITE_MEDIA_STORAGE;
import static android.content.pm.PackageManager.COMPONENT_ENABLED_STATE_DEFAULT;
@@ -68,6 +72,7 @@
import static android.content.pm.PackageManager.MATCH_KNOWN_PACKAGES;
import static android.content.pm.PackageManager.MATCH_SYSTEM_ONLY;
import static android.content.pm.PackageManager.MATCH_UNINSTALLED_PACKAGES;
+import static android.content.pm.PackageManager.MOVE_FAILED_3RD_PARTY_NOT_ALLOWED_ON_INTERNAL;
import static android.content.pm.PackageManager.MOVE_FAILED_DEVICE_ADMIN;
import static android.content.pm.PackageManager.MOVE_FAILED_DOESNT_EXIST;
import static android.content.pm.PackageManager.MOVE_FAILED_INTERNAL_ERROR;
@@ -80,7 +85,6 @@
import static android.os.Trace.TRACE_TAG_PACKAGE_MANAGER;
import static android.system.OsConstants.O_CREAT;
import static android.system.OsConstants.O_RDWR;
-
import static com.android.internal.app.IntentForwarderActivity.FORWARD_INTENT_TO_MANAGED_PROFILE;
import static com.android.internal.app.IntentForwarderActivity.FORWARD_INTENT_TO_PARENT;
import static com.android.internal.content.NativeLibraryHelper.LIB64_DIR_NAME;
@@ -160,10 +164,12 @@
import android.content.pm.ProviderInfo;
import android.content.pm.ResolveInfo;
import android.content.pm.ServiceInfo;
+import android.content.pm.SharedLibraryInfo;
import android.content.pm.Signature;
import android.content.pm.UserInfo;
import android.content.pm.VerifierDeviceIdentity;
import android.content.pm.VerifierInfo;
+import android.content.pm.VersionedPackage;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.hardware.display.DisplayManager;
@@ -218,6 +224,7 @@
import android.util.Log;
import android.util.LogPrinter;
import android.util.MathUtils;
+import android.util.PackageUtils;
import android.util.Pair;
import android.util.PrintStreamPrinter;
import android.util.Slog;
@@ -415,6 +422,8 @@
static final int REMOVE_CHATTY = 1<<16;
static final int SCAN_FIRST_BOOT_OR_UPGRADE = 1<<17;
+ private static final String STATIC_SHARED_LIB_DELIMITER = "_";
+
private static final int[] EMPTY_INT_ARRAY = new int[0];
/**
@@ -710,16 +719,21 @@
public static final class SharedLibraryEntry {
public final String path;
public final String apk;
+ public final SharedLibraryInfo info;
- SharedLibraryEntry(String _path, String _apk) {
+ SharedLibraryEntry(String _path, String _apk, String name, int version, int type,
+ String declaringPackageName, int declaringPackageVersionCode) {
path = _path;
apk = _apk;
+ info = new SharedLibraryInfo(name, version, type, new VersionedPackage(
+ declaringPackageName, declaringPackageVersionCode), null);
}
}
// Currently known shared libraries.
- final ArrayMap<String, SharedLibraryEntry> mSharedLibraries =
- new ArrayMap<String, SharedLibraryEntry>();
+ final ArrayMap<String, SparseArray<SharedLibraryEntry>> mSharedLibraries = new ArrayMap<>();
+ final ArrayMap<String, SparseArray<SharedLibraryEntry>> mStaticLibsByDeclaringPackage =
+ new ArrayMap<>();
// All available activities, for your resolving pleasure.
final ActivityIntentResolver mActivities =
@@ -1763,7 +1777,8 @@
}
// Send installed broadcasts if the install/update is not ephemeral
- if (!isEphemeral(res.pkg)) {
+ // and the package is not a static shared lib.
+ if (!isEphemeral(res.pkg) && res.pkg.staticSharedLibName == null) {
mProcessLoggingHandler.invalidateProcessLoggingBaseApkHash(res.pkg.baseCodePath);
// Send added for users that see the package for the first time
@@ -1940,9 +1955,10 @@
final List<PackageSetting> packages = mSettings.getVolumePackagesLPr(fsUuid);
for (PackageSetting ps : packages) {
Slog.d(TAG, "Destroying " + ps.name + " because volume was forgotten");
- deletePackage(ps.name, new LegacyPackageDeleteObserver(null).getBinder(),
+ deletePackageVersioned(new VersionedPackage(ps.name,
+ PackageManager.VERSION_CODE_HIGHEST),
+ new LegacyPackageDeleteObserver(null).getBinder(),
UserHandle.USER_SYSTEM, PackageManager.DELETE_ALL_USERS);
-
// Try very hard to release any references to this package
// so we don't risk the system server being killed due to
// open FDs
@@ -2224,6 +2240,7 @@
Watchdog.getInstance().addThread(mHandler, WATCHDOG_TIMEOUT);
mDefaultPermissionPolicy = new DefaultPermissionGrantPolicy(this);
+ mEphemeralApplicationRegistry = new EphemeralApplicationRegistry(this);
File dataDir = Environment.getDataDirectory();
mAppInstallDir = new File(dataDir, "app");
@@ -2250,9 +2267,12 @@
}
ArrayMap<String, String> libConfig = systemConfig.getSharedLibraries();
- for (int i=0; i<libConfig.size(); i++) {
- mSharedLibraries.put(libConfig.keyAt(i),
- new SharedLibraryEntry(libConfig.valueAt(i), null));
+ final int builtInLibCount = libConfig.size();
+ for (int i = 0; i < builtInLibCount; i++) {
+ String name = libConfig.keyAt(i);
+ String path = libConfig.valueAt(i);
+ addSharedLibraryLPw(path, null, name, SharedLibraryInfo.VERSION_UNDEFINED,
+ SharedLibraryInfo.TYPE_BUILTIN, PLATFORM_PACKAGE_NAME, 0);
}
mFoundPolicyFile = SELinuxMMAC.readInstallPolicy();
@@ -2317,32 +2337,38 @@
// to compile them only when we come across an app that uses them (there's
// already logic for that in scanPackageLI) but that adds some complexity.
for (String dexCodeInstructionSet : dexCodeInstructionSets) {
- for (SharedLibraryEntry libEntry : mSharedLibraries.values()) {
- final String lib = libEntry.path;
- if (lib == null) {
- continue;
- }
-
- try {
- // Shared libraries do not have profiles so we perform a full
- // AOT compilation (if needed).
- int dexoptNeeded = DexFile.getDexOptNeeded(
- lib, dexCodeInstructionSet,
- getCompilerFilterForReason(REASON_SHARED_APK),
- false /* newProfile */);
- if (dexoptNeeded != DexFile.NO_DEXOPT_NEEDED) {
- mInstaller.dexopt(lib, Process.SYSTEM_UID, "*",
- dexCodeInstructionSet, dexoptNeeded, null,
- DEXOPT_PUBLIC,
- getCompilerFilterForReason(REASON_SHARED_APK),
- StorageManager.UUID_PRIVATE_INTERNAL,
- SKIP_SHARED_LIBRARY_CHECK);
+ final int libCount = mSharedLibraries.size();
+ for (int i = 0; i < libCount; i++) {
+ SparseArray<SharedLibraryEntry> versionedLib = mSharedLibraries.valueAt(i);
+ final int versionCount = versionedLib.size();
+ for (int j = 0; j < versionCount; j++) {
+ SharedLibraryEntry libEntry = versionedLib.valueAt(j);
+ final String libPath = libEntry.path != null
+ ? libEntry.path : libEntry.apk;
+ if (libPath == null) {
+ continue;
}
- } catch (FileNotFoundException e) {
- Slog.w(TAG, "Library not found: " + lib);
- } catch (IOException | InstallerException e) {
- Slog.w(TAG, "Cannot dexopt " + lib + "; is it an APK or JAR? "
- + e.getMessage());
+ try {
+ // Shared libraries do not have profiles so we perform a full
+ // AOT compilation (if needed).
+ int dexoptNeeded = DexFile.getDexOptNeeded(
+ libPath, dexCodeInstructionSet,
+ getCompilerFilterForReason(REASON_SHARED_APK),
+ false /* newProfile */);
+ if (dexoptNeeded != DexFile.NO_DEXOPT_NEEDED) {
+ mInstaller.dexopt(libPath, Process.SYSTEM_UID, "*",
+ dexCodeInstructionSet, dexoptNeeded, null,
+ DEXOPT_PUBLIC,
+ getCompilerFilterForReason(REASON_SHARED_APK),
+ StorageManager.UUID_PRIVATE_INTERNAL,
+ SKIP_SHARED_LIBRARY_CHECK);
+ }
+ } catch (FileNotFoundException e) {
+ Slog.w(TAG, "Library not found: " + libPath);
+ } catch (IOException | InstallerException e) {
+ Slog.w(TAG, "Cannot dexopt " + libPath + "; is it an APK or JAR? "
+ + e.getMessage());
+ }
}
}
}
@@ -2636,7 +2662,7 @@
// Now that we know all of the shared libraries, update all clients to have
// the correct library paths.
- updateAllSharedLibrariesLPw();
+ updateAllSharedLibrariesLPw(null);
for (SharedUserSetting setting : mSettings.getAllSharedUsersLPw()) {
// NOTE: We ignore potential failures here during a system scan (like
@@ -2773,9 +2799,11 @@
mIntentFilterVerifier = new IntentVerifierProxy(mContext,
mIntentFilterVerifierComponent);
mServicesSystemSharedLibraryPackageName = getRequiredSharedLibraryLPr(
- PackageManager.SYSTEM_SHARED_LIBRARY_SERVICES);
+ PackageManager.SYSTEM_SHARED_LIBRARY_SERVICES,
+ SharedLibraryInfo.VERSION_UNDEFINED);
mSharedSystemSharedLibraryPackageName = getRequiredSharedLibraryLPr(
- PackageManager.SYSTEM_SHARED_LIBRARY_SHARED);
+ PackageManager.SYSTEM_SHARED_LIBRARY_SHARED,
+ SharedLibraryInfo.VERSION_UNDEFINED);
} else {
mRequiredVerifierPackage = null;
mRequiredInstallerPackage = null;
@@ -2806,8 +2834,6 @@
setUpEphemeralInstallerActivityLP(mEphemeralInstallerComponent);
}
- mEphemeralApplicationRegistry = new EphemeralApplicationRegistry(this);
-
// Read and update the usage of dex files.
// Do this at the end of PM init so that all the packages have their
// data directory reconciled.
@@ -2934,11 +2960,11 @@
throw new RuntimeException("There must be exactly one verifier; found " + matches);
}
- private @NonNull String getRequiredSharedLibraryLPr(String libraryName) {
+ private @NonNull String getRequiredSharedLibraryLPr(String name, int version) {
synchronized (mPackages) {
- SharedLibraryEntry libraryEntry = mSharedLibraries.get(libraryName);
+ SharedLibraryEntry libraryEntry = getSharedLibraryEntryLPr(name, version);
if (libraryEntry == null) {
- throw new IllegalStateException("Missing required shared library:" + libraryName);
+ throw new IllegalStateException("Missing required shared library:" + name);
}
return libraryEntry.apk;
}
@@ -3257,6 +3283,31 @@
if (p == null) {
return null;
}
+ // Filter out ephemeral app metadata:
+ // * The system/shell/root can see metadata for any app
+ // * An installed app can see metadata for 1) other installed apps
+ // and 2) ephemeral apps that have explicitly interacted with it
+ // * Ephemeral apps can only see their own metadata
+ final int callingAppId = UserHandle.getAppId(Binder.getCallingUid());
+ if (callingAppId != Process.SYSTEM_UID
+ && callingAppId != Process.SHELL_UID
+ && callingAppId != Process.ROOT_UID) {
+ final String ephemeralPackageName = getEphemeralPackageName(Binder.getCallingUid());
+ if (ephemeralPackageName != null) {
+ // ephemeral apps can only get information on themselves
+ if (!ephemeralPackageName.equals(p.packageName)) {
+ return null;
+ }
+ } else {
+ if (p.applicationInfo.isEphemeralApp()) {
+ // only get access to the ephemeral app if we've been granted access
+ if (!mEphemeralApplicationRegistry.isEphemeralAccessGranted(
+ userId, callingAppId, ps.appId)) {
+ return null;
+ }
+ }
+ }
+ }
final PermissionsState permissionsState = ps.getPermissionsState();
@@ -3273,8 +3324,17 @@
flags |= MATCH_ANY_USER;
}
- return PackageParser.generatePackageInfo(p, gids, flags,
+ PackageInfo packageInfo = PackageParser.generatePackageInfo(p, gids, flags,
ps.firstInstallTime, ps.lastUpdateTime, permissions, state, userId);
+
+ if (packageInfo == null) {
+ return null;
+ }
+
+ packageInfo.packageName = packageInfo.applicationInfo.packageName =
+ resolveExternalPackageNameLPr(p);
+
+ return packageInfo;
}
@Override
@@ -3329,6 +3389,20 @@
@Override
public PackageInfo getPackageInfo(String packageName, int flags, int userId) {
+ return getPackageInfoInternal(packageName, PackageManager.VERSION_CODE_HIGHEST,
+ flags, userId);
+ }
+
+ @Override
+ public PackageInfo getPackageInfoVersioned(VersionedPackage versionedPackage,
+ int flags, int userId) {
+ return getPackageInfoInternal(versionedPackage.getPackageName(),
+ // TODO: We will change version code to long, so in the new API it is long
+ (int) versionedPackage.getVersionCode(), flags, userId);
+ }
+
+ private PackageInfo getPackageInfoInternal(String packageName, int versionCode,
+ int flags, int userId) {
if (!sUserManager.exists(userId)) return null;
flags = updateFlagsForPackage(flags, userId, packageName);
enforceCrossUserPermission(Binder.getCallingUid(), userId,
@@ -3336,36 +3410,89 @@
// reader
synchronized (mPackages) {
- // Normalize package name to hanlde renamed packages
- packageName = normalizePackageNameLPr(packageName);
+ // Normalize package name to handle renamed packages and static libs
+ packageName = resolveInternalPackageNameLPr(packageName, versionCode);
final boolean matchFactoryOnly = (flags & MATCH_FACTORY_ONLY) != 0;
- PackageParser.Package p = null;
if (matchFactoryOnly) {
final PackageSetting ps = mSettings.getDisabledSystemPkgLPr(packageName);
if (ps != null) {
+ if (filterSharedLibPackageLPr(ps, Binder.getCallingUid(), userId)) {
+ return null;
+ }
return generatePackageInfo(ps, flags, userId);
}
}
- if (p == null) {
- p = mPackages.get(packageName);
- if (matchFactoryOnly && p != null && !isSystemApp(p)) {
- return null;
- }
+
+ PackageParser.Package p = mPackages.get(packageName);
+ if (matchFactoryOnly && p != null && !isSystemApp(p)) {
+ return null;
}
if (DEBUG_PACKAGE_INFO)
Log.v(TAG, "getPackageInfo " + packageName + ": " + p);
if (p != null) {
+ if (filterSharedLibPackageLPr((PackageSetting) p.mExtras,
+ Binder.getCallingUid(), userId)) {
+ return null;
+ }
return generatePackageInfo((PackageSetting)p.mExtras, flags, userId);
}
if (!matchFactoryOnly && (flags & MATCH_KNOWN_PACKAGES) != 0) {
final PackageSetting ps = mSettings.mPackages.get(packageName);
+ if (filterSharedLibPackageLPr(ps, Binder.getCallingUid(), userId)) {
+ return null;
+ }
return generatePackageInfo(ps, flags, userId);
}
}
return null;
}
+
+ private boolean filterSharedLibPackageLPr(PackageSetting ps, int uid, int userId) {
+ // System/shell/root get to see all static libs
+ final int appId = UserHandle.getAppId(uid);
+ if (appId == Process.SYSTEM_UID || appId == Process.SHELL_UID
+ || appId == Process.ROOT_UID) {
+ return false;
+ }
+
+ // No package means no static lib as it is always on internal storage
+ if (ps.pkg == null || !ps.pkg.applicationInfo.isStaticSharedLibrary()) {
+ return false;
+ }
+
+ final SharedLibraryEntry libEntry = getSharedLibraryEntryLPr(ps.pkg.staticSharedLibName,
+ ps.pkg.staticSharedLibVersion);
+ if (libEntry == null) {
+ return false;
+ }
+
+ final int resolvedUid = UserHandle.getUid(userId, UserHandle.getAppId(uid));
+ final String[] uidPackageNames = getPackagesForUid(resolvedUid);
+ if (uidPackageNames == null) {
+ return true;
+ }
+
+ for (String uidPackageName : uidPackageNames) {
+ if (ps.name.equals(uidPackageName)) {
+ return false;
+ }
+ PackageSetting uidPs = mSettings.getPackageLPr(uidPackageName);
+ if (uidPs != null) {
+ final int index = ArrayUtils.indexOf(uidPs.usesStaticLibraries,
+ libEntry.info.getName());
+ if (index < 0) {
+ continue;
+ }
+ if (uidPs.pkg.usesStaticLibrariesVersions[index] == libEntry.info.getVersion()) {
+ return false;
+ }
+ }
+ }
+ return true;
+ }
+
@Override
public String[] currentToCanonicalPackageNames(String[] names) {
String[] out = new String[names.length];
@@ -3518,10 +3645,13 @@
}
private ApplicationInfo generateApplicationInfoFromSettingsLPw(String packageName, int flags,
- int userId) {
+ int uid, int userId) {
if (!sUserManager.exists(userId)) return null;
PackageSetting ps = mSettings.mPackages.get(packageName);
if (ps != null) {
+ if (filterSharedLibPackageLPr(ps, uid, userId)) {
+ return null;
+ }
if (ps.pkg == null) {
final PackageInfo pInfo = generatePackageInfo(ps, flags, userId);
if (pInfo != null) {
@@ -3529,8 +3659,12 @@
}
return null;
}
- return PackageParser.generateApplicationInfo(ps.pkg, flags,
+ ApplicationInfo ai = PackageParser.generateApplicationInfo(ps.pkg, flags,
ps.readUserState(userId), userId);
+ if (ai != null) {
+ ai.packageName = resolveExternalPackageNameLPr(ps.pkg);
+ }
+ return ai;
}
return null;
}
@@ -3544,8 +3678,9 @@
// writer
synchronized (mPackages) {
- // Normalize package name to hanlde renamed packages
- packageName = normalizePackageNameLPr(packageName);
+ // Normalize package name to handle renamed packages and static libs
+ packageName = resolveInternalPackageNameLPr(packageName,
+ PackageManager.VERSION_CODE_HIGHEST);
PackageParser.Package p = mPackages.get(packageName);
if (DEBUG_PACKAGE_INFO) Log.v(
@@ -3554,15 +3689,24 @@
if (p != null) {
PackageSetting ps = mSettings.mPackages.get(packageName);
if (ps == null) return null;
+ if (filterSharedLibPackageLPr(ps, Binder.getCallingUid(), userId)) {
+ return null;
+ }
// Note: isEnabledLP() does not apply here - always return info
- return PackageParser.generateApplicationInfo(
+ ApplicationInfo ai = PackageParser.generateApplicationInfo(
p, flags, ps.readUserState(userId), userId);
+ if (ai != null) {
+ ai.packageName = resolveExternalPackageNameLPr(p);
+ }
+ return ai;
}
if ("android".equals(packageName)||"system".equals(packageName)) {
return mAndroidApplication;
}
if ((flags & MATCH_KNOWN_PACKAGES) != 0) {
- return generateApplicationInfoFromSettingsLPw(packageName, flags, userId);
+ // Already generates the external package name
+ return generateApplicationInfoFromSettingsLPw(packageName,
+ Binder.getCallingUid(), flags, userId);
}
}
return null;
@@ -3745,6 +3889,19 @@
}
/**
+ * Update given intent when being used to request {@link ResolveInfo}.
+ */
+ private Intent updateIntentForResolve(Intent intent) {
+ if (intent.getSelector() != null) {
+ intent = intent.getSelector();
+ }
+ if (DEBUG_PREFERRED) {
+ intent.addFlags(Intent.FLAG_DEBUG_LOG_RESOLUTION);
+ }
+ return intent;
+ }
+
+ /**
* Update given flags when being used to request {@link ResolveInfo}.
*/
int updateFlagsForResolve(int flags, int userId, Object cookie) {
@@ -3835,6 +3992,113 @@
}
@Override
+ public ParceledListSlice<SharedLibraryInfo> getSharedLibraries(int flags, int userId) {
+ if (!sUserManager.exists(userId)) return null;
+ Preconditions.checkArgumentNonnegative(userId, "userId must be >= 0");
+
+ flags = updateFlagsForPackage(flags, userId, null);
+
+ final boolean canSeeStaticLibraries =
+ mContext.checkCallingOrSelfPermission(INSTALL_PACKAGES)
+ == PERMISSION_GRANTED
+ || mContext.checkCallingOrSelfPermission(DELETE_PACKAGES)
+ == PERMISSION_GRANTED
+ || mContext.checkCallingOrSelfPermission(REQUEST_INSTALL_PACKAGES)
+ == PERMISSION_GRANTED
+ || mContext.checkCallingOrSelfPermission(REQUEST_DELETE_PACKAGES)
+ == PERMISSION_GRANTED;
+
+ synchronized (mPackages) {
+ List<SharedLibraryInfo> result = null;
+
+ final int libCount = mSharedLibraries.size();
+ for (int i = 0; i < libCount; i++) {
+ SparseArray<SharedLibraryEntry> versionedLib = mSharedLibraries.valueAt(i);
+ if (versionedLib == null) {
+ continue;
+ }
+
+ final int versionCount = versionedLib.size();
+ for (int j = 0; j < versionCount; j++) {
+ SharedLibraryInfo libInfo = versionedLib.valueAt(j).info;
+ if (!canSeeStaticLibraries && libInfo.isStatic()) {
+ break;
+ }
+ final long identity = Binder.clearCallingIdentity();
+ try {
+ // TODO: We will change version code to long, so in the new API it is long
+ PackageInfo packageInfo = getPackageInfoVersioned(
+ libInfo.getDeclaringPackage(), flags, userId);
+ if (packageInfo == null) {
+ continue;
+ }
+ } finally {
+ Binder.restoreCallingIdentity(identity);
+ }
+
+ SharedLibraryInfo resLibInfo = new SharedLibraryInfo(libInfo.getName(),
+ libInfo.getVersion(), libInfo.getType(), libInfo.getDeclaringPackage(),
+ getPackagesUsingSharedLibraryLPr(libInfo, flags, userId));
+
+ if (result == null) {
+ result = new ArrayList<>();
+ }
+ result.add(resLibInfo);
+ }
+ }
+
+ return result != null ? new ParceledListSlice<>(result) : null;
+ }
+ }
+
+ private List<VersionedPackage> getPackagesUsingSharedLibraryLPr(
+ SharedLibraryInfo libInfo, int flags, int userId) {
+ List<VersionedPackage> versionedPackages = null;
+ final int packageCount = mSettings.mPackages.size();
+ for (int i = 0; i < packageCount; i++) {
+ PackageSetting ps = mSettings.mPackages.valueAt(i);
+
+ if (ps == null) {
+ continue;
+ }
+
+ if (!ps.getUserState().get(userId).isAvailable(flags)) {
+ continue;
+ }
+
+ final String libName = libInfo.getName();
+ if (libInfo.isStatic()) {
+ final int libIdx = ArrayUtils.indexOf(ps.usesStaticLibraries, libName);
+ if (libIdx < 0) {
+ continue;
+ }
+ if (ps.usesStaticLibrariesVersions[libIdx] != libInfo.getVersion()) {
+ continue;
+ }
+ if (versionedPackages == null) {
+ versionedPackages = new ArrayList<>();
+ }
+ // If the dependent is a static shared lib, use the public package name
+ String dependentPackageName = ps.name;
+ if (ps.pkg != null && ps.pkg.applicationInfo.isStaticSharedLibrary()) {
+ dependentPackageName = ps.pkg.manifestPackageName;
+ }
+ versionedPackages.add(new VersionedPackage(dependentPackageName, ps.versionCode));
+ } else if (ps.pkg != null) {
+ if (ArrayUtils.contains(ps.pkg.usesLibraries, libName)
+ || ArrayUtils.contains(ps.pkg.usesOptionalLibraries, libName)) {
+ if (versionedPackages == null) {
+ versionedPackages = new ArrayList<>();
+ }
+ versionedPackages.add(new VersionedPackage(ps.name, ps.versionCode));
+ }
+ }
+ }
+
+ return versionedPackages;
+ }
+
+ @Override
public ServiceInfo getServiceInfo(ComponentName component, int flags, int userId) {
if (!sUserManager.exists(userId)) return null;
flags = updateFlagsForComponent(flags, userId, component);
@@ -3876,17 +4140,44 @@
@Override
public String[] getSystemSharedLibraryNames() {
- Set<String> libSet;
synchronized (mPackages) {
- libSet = mSharedLibraries.keySet();
- int size = libSet.size();
- if (size > 0) {
- String[] libs = new String[size];
- libSet.toArray(libs);
- return libs;
+ Set<String> libs = null;
+ final int libCount = mSharedLibraries.size();
+ for (int i = 0; i < libCount; i++) {
+ SparseArray<SharedLibraryEntry> versionedLib = mSharedLibraries.valueAt(i);
+ if (versionedLib == null) {
+ continue;
+ }
+ final int versionCount = versionedLib.size();
+ for (int j = 0; j < versionCount; j++) {
+ SharedLibraryEntry libEntry = versionedLib.valueAt(j);
+ if (!libEntry.info.isStatic()) {
+ if (libs == null) {
+ libs = new ArraySet<>();
+ }
+ libs.add(libEntry.info.getName());
+ break;
+ }
+ PackageSetting ps = mSettings.getPackageLPr(libEntry.apk);
+ if (ps != null && !filterSharedLibPackageLPr(ps, Binder.getCallingUid(),
+ UserHandle.getUserId(Binder.getCallingUid()))) {
+ if (libs == null) {
+ libs = new ArraySet<>();
+ }
+ libs.add(libEntry.info.getName());
+ break;
+ }
+ }
}
+
+ if (libs != null) {
+ String[] libsArray = new String[libs.size()];
+ libs.toArray(libsArray);
+ return libsArray;
+ }
+
+ return null;
}
- return null;
}
@Override
@@ -4998,7 +5289,9 @@
return res;
} else if (obj instanceof PackageSetting) {
final PackageSetting ps = (PackageSetting) obj;
- return new String[] { ps.name };
+ if (ps.getInstalled(userId)) {
+ return new String[]{ps.name};
+ }
}
}
return null;
@@ -5128,6 +5421,26 @@
}
@Override
+ public ResolveInfo findPersistentPreferredActivity(Intent intent, int userId) {
+ if (!UserHandle.isSameApp(Binder.getCallingUid(), Process.SYSTEM_UID)) {
+ throw new SecurityException(
+ "findPersistentPreferredActivity can only be run by the system");
+ }
+ if (!sUserManager.exists(userId)) {
+ return null;
+ }
+ intent = updateIntentForResolve(intent);
+ final String resolvedType = intent.resolveTypeIfNeeded(mContext.getContentResolver());
+ final int flags = updateFlagsForResolve(0, userId, intent);
+ final List<ResolveInfo> query = queryIntentActivitiesInternal(intent, resolvedType, flags,
+ userId);
+ synchronized (mPackages) {
+ return findPersistentPreferredActivityLP(intent, resolvedType, flags, query, false,
+ userId);
+ }
+ }
+
+ @Override
public void setLastChosenActivity(Intent intent, String resolvedType, int flags,
IntentFilter filter, int match, ComponentName activity) {
final int userId = UserHandle.getCallingUserId();
@@ -5393,13 +5706,9 @@
boolean removeMatches, boolean debug, int userId) {
if (!sUserManager.exists(userId)) return null;
flags = updateFlagsForResolve(flags, userId, intent);
+ intent = updateIntentForResolve(intent);
// writer
synchronized (mPackages) {
- if (intent.getSelector() != null) {
- intent = intent.getSelector();
- }
- if (DEBUG_PREFERRED) intent.addFlags(Intent.FLAG_DEBUG_LOG_RESOLUTION);
-
// Try to find a matching persistent preferred activity.
ResolveInfo pri = findPersistentPreferredActivityLP(intent, resolvedType, flags, query,
debug, userId);
@@ -5965,7 +6274,7 @@
int status = (int)(packedStatus >> 32);
int linkGeneration = (int)(packedStatus & 0xFFFFFFFF);
if (status == INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ALWAYS) {
- if (DEBUG_DOMAIN_VERIFICATION) {
+ if (DEBUG_DOMAIN_VERIFICATION || debug) {
Slog.i(TAG, " + always: " + info.activityInfo.packageName
+ " : linkgen=" + linkGeneration);
}
@@ -5974,18 +6283,18 @@
info.preferredOrder = linkGeneration;
alwaysList.add(info);
} else if (status == INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_NEVER) {
- if (DEBUG_DOMAIN_VERIFICATION) {
+ if (DEBUG_DOMAIN_VERIFICATION || debug) {
Slog.i(TAG, " + never: " + info.activityInfo.packageName);
}
neverList.add(info);
} else if (status == INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ALWAYS_ASK) {
- if (DEBUG_DOMAIN_VERIFICATION) {
+ if (DEBUG_DOMAIN_VERIFICATION || debug) {
Slog.i(TAG, " + always-ask: " + info.activityInfo.packageName);
}
alwaysAskList.add(info);
} else if (status == INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_UNDEFINED ||
status == INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ASK) {
- if (DEBUG_DOMAIN_VERIFICATION) {
+ if (DEBUG_DOMAIN_VERIFICATION || debug) {
Slog.i(TAG, " + ask: " + info.activityInfo.packageName);
}
undefinedList.add(info);
@@ -6550,30 +6859,32 @@
synchronized (mPackages) {
ArrayList<PackageInfo> list;
if (listUninstalled) {
- list = new ArrayList<PackageInfo>(mSettings.mPackages.size());
+ list = new ArrayList<>(mSettings.mPackages.size());
for (PackageSetting ps : mSettings.mPackages.values()) {
- final PackageInfo pi;
- if (ps.pkg != null) {
- pi = generatePackageInfo(ps, flags, userId);
- } else {
- pi = generatePackageInfo(ps, flags, userId);
+ if (filterSharedLibPackageLPr(ps, Binder.getCallingUid(), userId)) {
+ continue;
}
+ final PackageInfo pi = generatePackageInfo(ps, flags, userId);
if (pi != null) {
list.add(pi);
}
}
} else {
- list = new ArrayList<PackageInfo>(mPackages.size());
+ list = new ArrayList<>(mPackages.size());
for (PackageParser.Package p : mPackages.values()) {
- final PackageInfo pi =
- generatePackageInfo((PackageSetting)p.mExtras, flags, userId);
+ if (filterSharedLibPackageLPr((PackageSetting) p.mExtras,
+ Binder.getCallingUid(), userId)) {
+ continue;
+ }
+ final PackageInfo pi = generatePackageInfo((PackageSetting)
+ p.mExtras, flags, userId);
if (pi != null) {
list.add(pi);
}
}
}
- return new ParceledListSlice<PackageInfo>(list);
+ return new ParceledListSlice<>(list);
}
}
@@ -6593,12 +6904,8 @@
if (numMatch == 0) {
return;
}
- final PackageInfo pi;
- if (ps.pkg != null) {
- pi = generatePackageInfo(ps, flags, userId);
- } else {
- pi = generatePackageInfo(ps, flags, userId);
- }
+ final PackageInfo pi = generatePackageInfo(ps, flags, userId);
+
// The above might return null in cases of uninstalled apps or install-state
// skew across users/profiles.
if (pi != null) {
@@ -6663,7 +6970,7 @@
synchronized (mPackages) {
ArrayList<ApplicationInfo> list;
if (listUninstalled) {
- list = new ArrayList<ApplicationInfo>(mSettings.mPackages.size());
+ list = new ArrayList<>(mSettings.mPackages.size());
for (PackageSetting ps : mSettings.mPackages.values()) {
ApplicationInfo ai;
int effectiveFlags = flags;
@@ -6671,30 +6978,43 @@
effectiveFlags |= PackageManager.MATCH_ANY_USER;
}
if (ps.pkg != null) {
+ if (filterSharedLibPackageLPr(ps, Binder.getCallingUid(), userId)) {
+ continue;
+ }
ai = PackageParser.generateApplicationInfo(ps.pkg, effectiveFlags,
ps.readUserState(userId), userId);
+ if (ai != null) {
+ ai.packageName = resolveExternalPackageNameLPr(ps.pkg);
+ }
} else {
- ai = generateApplicationInfoFromSettingsLPw(ps.name, effectiveFlags,
- userId);
+ // Shared lib filtering done in generateApplicationInfoFromSettingsLPw
+ // and already converts to externally visible package name
+ ai = generateApplicationInfoFromSettingsLPw(ps.name,
+ Binder.getCallingUid(), effectiveFlags, userId);
}
if (ai != null) {
list.add(ai);
}
}
} else {
- list = new ArrayList<ApplicationInfo>(mPackages.size());
+ list = new ArrayList<>(mPackages.size());
for (PackageParser.Package p : mPackages.values()) {
if (p.mExtras != null) {
+ PackageSetting ps = (PackageSetting) p.mExtras;
+ if (filterSharedLibPackageLPr(ps, Binder.getCallingUid(), userId)) {
+ continue;
+ }
ApplicationInfo ai = PackageParser.generateApplicationInfo(p, flags,
- ((PackageSetting)p.mExtras).readUserState(userId), userId);
+ ps.readUserState(userId), userId);
if (ai != null) {
+ ai.packageName = resolveExternalPackageNameLPr(p);
list.add(ai);
}
}
}
}
- return new ParceledListSlice<ApplicationInfo>(list);
+ return new ParceledListSlice<>(list);
}
}
@@ -6784,6 +7104,7 @@
mContext.enforceCallingOrSelfPermission(Manifest.permission.ACCESS_EPHEMERAL_APPS,
"getEphemeralApplicationIcon");
+
enforceCrossUserPermission(Binder.getCallingUid(), userId,
true /* requireFullPermission */, false /* checkShell */,
"getEphemeralApplicationIcon");
@@ -7060,9 +7381,15 @@
int errorCode = PackageManager.INSTALL_SUCCEEDED;
if (throwable == null) {
+ // Static shared libraries have synthetic package names
+ if (parseResult.pkg.applicationInfo.isStaticSharedLibrary()) {
+ renameStaticSharedLibraryPackage(parseResult.pkg);
+ }
try {
- scanPackageLI(parseResult.pkg, parseResult.scanFile, parseFlags, scanFlags,
- currentTime, null);
+ if (errorCode == PackageManager.INSTALL_SUCCEEDED) {
+ scanPackageLI(parseResult.pkg, parseResult.scanFile, parseFlags, scanFlags,
+ currentTime, null);
+ }
} catch (PackageManagerException e) {
errorCode = e.error;
Slog.w(TAG, "Failed to scan " + parseResult.scanFile + ": " + e.getMessage());
@@ -7216,6 +7543,11 @@
Trace.traceEnd(TRACE_TAG_PACKAGE_MANAGER);
}
+ // Static shared libraries have synthetic package names
+ if (pkg.applicationInfo.isStaticSharedLibrary()) {
+ renameStaticSharedLibraryPackage(pkg);
+ }
+
return scanPackageLI(pkg, scanFile, parseFlags, scanFlags, currentTime, user);
}
@@ -7518,6 +7850,12 @@
return scannedPkg;
}
+ private void renameStaticSharedLibraryPackage(PackageParser.Package pkg) {
+ // Derive the new package synthetic package name
+ pkg.setPackageName(pkg.packageName + STATIC_SHARED_LIB_DELIMITER
+ + pkg.staticSharedLibVersion);
+ }
+
private static String fixProcessName(String defProcessName,
String processName) {
if (processName == null) {
@@ -7873,8 +8211,9 @@
targetCompilerFilter, getOrCreateCompilerPackageStats(p));
}
- Collection<PackageParser.Package> findSharedNonSystemLibraries(PackageParser.Package p) {
- if (p.usesLibraries != null || p.usesOptionalLibraries != null) {
+ List<PackageParser.Package> findSharedNonSystemLibraries(PackageParser.Package p) {
+ if (p.usesLibraries != null || p.usesOptionalLibraries != null
+ || p.usesStaticLibraries != null) {
ArrayList<PackageParser.Package> retValue = new ArrayList<>();
Set<String> collectedNames = new HashSet<>();
findSharedNonSystemLibrariesRecursive(p, retValue, collectedNames);
@@ -7888,37 +8227,74 @@
}
private void findSharedNonSystemLibrariesRecursive(PackageParser.Package p,
- Collection<PackageParser.Package> collected, Set<String> collectedNames) {
+ ArrayList<PackageParser.Package> collected, Set<String> collectedNames) {
if (!collectedNames.contains(p.packageName)) {
collectedNames.add(p.packageName);
collected.add(p);
if (p.usesLibraries != null) {
- findSharedNonSystemLibrariesRecursive(p.usesLibraries, collected, collectedNames);
+ findSharedNonSystemLibrariesRecursive(p.usesLibraries,
+ null, collected, collectedNames);
}
if (p.usesOptionalLibraries != null) {
- findSharedNonSystemLibrariesRecursive(p.usesOptionalLibraries, collected,
- collectedNames);
+ findSharedNonSystemLibrariesRecursive(p.usesOptionalLibraries,
+ null, collected, collectedNames);
+ }
+ if (p.usesStaticLibraries != null) {
+ findSharedNonSystemLibrariesRecursive(p.usesStaticLibraries,
+ p.usesStaticLibrariesVersions, collected, collectedNames);
}
}
}
- private void findSharedNonSystemLibrariesRecursive(Collection<String> libs,
- Collection<PackageParser.Package> collected, Set<String> collectedNames) {
- for (String libName : libs) {
- PackageParser.Package libPkg = findSharedNonSystemLibrary(libName);
+ private void findSharedNonSystemLibrariesRecursive(ArrayList<String> libs, int[] versions,
+ ArrayList<PackageParser.Package> collected, Set<String> collectedNames) {
+ final int libNameCount = libs.size();
+ for (int i = 0; i < libNameCount; i++) {
+ String libName = libs.get(i);
+ int version = (versions != null && versions.length == libNameCount)
+ ? versions[i] : PackageManager.VERSION_CODE_HIGHEST;
+ PackageParser.Package libPkg = findSharedNonSystemLibrary(libName, version);
if (libPkg != null) {
findSharedNonSystemLibrariesRecursive(libPkg, collected, collectedNames);
}
}
}
- private PackageParser.Package findSharedNonSystemLibrary(String libName) {
+ private PackageParser.Package findSharedNonSystemLibrary(String name, int version) {
synchronized (mPackages) {
- PackageManagerService.SharedLibraryEntry lib = mSharedLibraries.get(libName);
- if (lib != null && lib.apk != null) {
- return mPackages.get(lib.apk);
+ SharedLibraryEntry libEntry = getSharedLibraryEntryLPr(name, version);
+ if (libEntry != null) {
+ return mPackages.get(libEntry.apk);
}
+ return null;
+ }
+ }
+
+ private SharedLibraryEntry getSharedLibraryEntryLPr(String name, int version) {
+ SparseArray<SharedLibraryEntry> versionedLib = mSharedLibraries.get(name);
+ if (versionedLib == null) {
+ return null;
+ }
+ return versionedLib.get(version);
+ }
+
+ private SharedLibraryEntry getLatestSharedLibraVersionLPr(PackageParser.Package pkg) {
+ SparseArray<SharedLibraryEntry> versionedLib = mSharedLibraries.get(
+ pkg.staticSharedLibName);
+ if (versionedLib == null) {
+ return null;
+ }
+ int previousLibVersion = -1;
+ final int versionCount = versionedLib.size();
+ for (int i = 0; i < versionCount; i++) {
+ final int libVersion = versionedLib.keyAt(i);
+ if (libVersion < pkg.staticSharedLibVersion) {
+ previousLibVersion = Math.max(previousLibVersion, libVersion);
+ }
+ }
+ if (previousLibVersion >= 0) {
+ return versionedLib.get(previousLibVersion);
}
return null;
}
@@ -8212,36 +8588,84 @@
private void updateSharedLibrariesLPr(PackageParser.Package pkg,
PackageParser.Package changingLib) throws PackageManagerException {
- if (pkg.usesLibraries != null || pkg.usesOptionalLibraries != null) {
- final ArraySet<String> usesLibraryFiles = new ArraySet<>();
- int N = pkg.usesLibraries != null ? pkg.usesLibraries.size() : 0;
- for (int i=0; i<N; i++) {
- final SharedLibraryEntry file = mSharedLibraries.get(pkg.usesLibraries.get(i));
- if (file == null) {
+ if (pkg == null) {
+ return;
+ }
+ ArraySet<String> usesLibraryFiles = null;
+ if (pkg.usesLibraries != null) {
+ usesLibraryFiles = addSharedLibrariesLPw(pkg.usesLibraries,
+ null, null, pkg.packageName, changingLib, true, null);
+ }
+ if (pkg.usesStaticLibraries != null) {
+ usesLibraryFiles = addSharedLibrariesLPw(pkg.usesStaticLibraries,
+ pkg.usesStaticLibrariesVersions, pkg.usesStaticLibrariesCertDigests,
+ pkg.packageName, changingLib, true, usesLibraryFiles);
+ }
+ if (pkg.usesOptionalLibraries != null) {
+ usesLibraryFiles = addSharedLibrariesLPw(pkg.usesOptionalLibraries,
+ null, null, pkg.packageName, changingLib, false, usesLibraryFiles);
+ }
+ if (!ArrayUtils.isEmpty(usesLibraryFiles)) {
+ pkg.usesLibraryFiles = usesLibraryFiles.toArray(new String[usesLibraryFiles.size()]);
+ } else {
+ pkg.usesLibraryFiles = null;
+ }
+ }
+
+ private ArraySet<String> addSharedLibrariesLPw(@NonNull List<String> requestedLibraries,
+ @Nullable int[] requiredVersions, @Nullable String[] requiredCertDigests,
+ @NonNull String packageName, @Nullable PackageParser.Package changingLib,
+ boolean required, @Nullable ArraySet<String> outUsedLibraries)
+ throws PackageManagerException {
+ final int libCount = requestedLibraries.size();
+ for (int i = 0; i < libCount; i++) {
+ final String libName = requestedLibraries.get(i);
+ final int libVersion = requiredVersions != null ? requiredVersions[i]
+ : SharedLibraryInfo.VERSION_UNDEFINED;
+ final SharedLibraryEntry libEntry = getSharedLibraryEntryLPr(libName, libVersion);
+ if (libEntry == null) {
+ if (required) {
throw new PackageManagerException(INSTALL_FAILED_MISSING_SHARED_LIBRARY,
- "Package " + pkg.packageName + " requires unavailable shared library "
- + pkg.usesLibraries.get(i) + "; failing!");
- }
- addSharedLibraryLPr(usesLibraryFiles, file, changingLib);
- }
- N = pkg.usesOptionalLibraries != null ? pkg.usesOptionalLibraries.size() : 0;
- for (int i=0; i<N; i++) {
- final SharedLibraryEntry file = mSharedLibraries.get(pkg.usesOptionalLibraries.get(i));
- if (file == null) {
- Slog.w(TAG, "Package " + pkg.packageName
- + " desires unavailable shared library "
- + pkg.usesOptionalLibraries.get(i) + "; ignoring!");
+ "Package " + packageName + " requires unavailable shared library "
+ + libName + "; failing!");
} else {
- addSharedLibraryLPr(usesLibraryFiles, file, changingLib);
+ Slog.w(TAG, "Package " + packageName
+ + " desires unavailable shared library "
+ + libName + "; ignoring!");
}
- }
- N = usesLibraryFiles.size();
- if (N > 0) {
- pkg.usesLibraryFiles = usesLibraryFiles.toArray(new String[N]);
} else {
- pkg.usesLibraryFiles = null;
+ if (requiredVersions != null && requiredCertDigests != null) {
+ if (libEntry.info.getVersion() != requiredVersions[i]) {
+ throw new PackageManagerException(INSTALL_FAILED_MISSING_SHARED_LIBRARY,
+ "Package " + packageName + " requires unavailable static shared"
+ + " library " + libName + " version "
+ + libEntry.info.getVersion() + "; failing!");
+ }
+
+ PackageParser.Package libPkg = mPackages.get(libEntry.apk);
+ if (libPkg == null) {
+ throw new PackageManagerException(INSTALL_FAILED_MISSING_SHARED_LIBRARY,
+ "Package " + packageName + " requires unavailable static shared"
+ + " library; failing!");
+ }
+
+ String expectedCertDigest = requiredCertDigests[i];
+ String libCertDigest = PackageUtils.computeCertSha256Digest(
+ libPkg.mSignatures[0]);
+ if (!libCertDigest.equalsIgnoreCase(expectedCertDigest)) {
+ throw new PackageManagerException(INSTALL_FAILED_MISSING_SHARED_LIBRARY,
+ "Package " + packageName + " requires differently signed" +
+ " static shared library; failing!");
+ }
+ }
+
+ if (outUsedLibraries == null) {
+ outUsedLibraries = new ArraySet<>();
+ }
+ addSharedLibraryLPr(outUsedLibraries, libEntry, changingLib);
}
}
+ return outUsedLibraries;
}
private static boolean hasString(List<String> list, List<String> which) {
@@ -8258,31 +8682,36 @@
return false;
}
- private void updateAllSharedLibrariesLPw() {
- for (PackageParser.Package pkg : mPackages.values()) {
- try {
- updateSharedLibrariesLPr(pkg, null);
- } catch (PackageManagerException e) {
- Slog.e(TAG, "updateAllSharedLibrariesLPw failed: " + e.getMessage());
- }
- }
- }
-
private ArrayList<PackageParser.Package> updateAllSharedLibrariesLPw(
PackageParser.Package changingPkg) {
ArrayList<PackageParser.Package> res = null;
for (PackageParser.Package pkg : mPackages.values()) {
- if (hasString(pkg.usesLibraries, changingPkg.libraryNames)
- || hasString(pkg.usesOptionalLibraries, changingPkg.libraryNames)) {
- if (res == null) {
- res = new ArrayList<PackageParser.Package>();
+ if (changingPkg != null
+ && !hasString(pkg.usesLibraries, changingPkg.libraryNames)
+ && !hasString(pkg.usesOptionalLibraries, changingPkg.libraryNames)
+ && !ArrayUtils.contains(pkg.usesStaticLibraries,
+ changingPkg.staticSharedLibName)) {
+ return null;
+ }
+ if (res == null) {
+ res = new ArrayList<>();
+ }
+ res.add(pkg);
+ try {
+ updateSharedLibrariesLPr(pkg, changingPkg);
+ } catch (PackageManagerException e) {
+ // If a system app update or an app and a required lib missing we
+ // delete the package and for updated system apps keep the data as
+ // it is better for the user to reinstall than to be in an limbo
+ // state. Also libs disappearing under an app should never happen
+ // - just in case.
+ if (!pkg.isSystemApp() || pkg.isUpdatedSystemApp()) {
+ final int flags = pkg.isUpdatedSystemApp()
+ ? PackageManager.DELETE_KEEP_DATA : 0;
+ deletePackageLIF(pkg.packageName, null, true, sUserManager.getUserIds(),
+ flags , null, true, null);
}
- res.add(pkg);
- try {
- updateSharedLibrariesLPr(pkg, changingPkg);
- } catch (PackageManagerException e) {
- Slog.e(TAG, "updateAllSharedLibrariesLPw failed: " + e.getMessage());
- }
+ Slog.e(TAG, "updateAllSharedLibrariesLPw failed: " + e.getMessage());
}
}
return res;
@@ -8540,9 +8969,17 @@
pkgSetting == null ? null : new PackageSetting(pkgSetting);
final PackageSetting disabledPkgSetting =
mSettings.getDisabledSystemPkgLPr(pkg.packageName);
+
+ String[] usesStaticLibraries = null;
+ if (pkg.usesStaticLibraries != null) {
+ usesStaticLibraries = new String[pkg.usesStaticLibraries.size()];
+ pkg.usesStaticLibraries.toArray(usesStaticLibraries);
+ }
+
if (pkgSetting == null) {
final String parentPackageName = (pkg.parentPackage != null)
? pkg.parentPackage.packageName : null;
+
// REMOVE SharedUserSetting from method; update in a separate call
pkgSetting = Settings.createNewSetting(pkg.packageName, origPackage,
disabledPkgSetting, realName, suid, destCodeFile, destResourceFile,
@@ -8550,7 +8987,8 @@
pkg.applicationInfo.secondaryCpuAbi, pkg.mVersionCode,
pkg.applicationInfo.flags, pkg.applicationInfo.privateFlags, user,
true /*allowInstall*/, parentPackageName, pkg.getChildPackageNames(),
- UserManagerService.getInstance());
+ UserManagerService.getInstance(), usesStaticLibraries,
+ pkg.usesStaticLibrariesVersions);
// SIDE EFFECTS; updates system state; move elsewhere
if (origPackage != null) {
mSettings.addRenamedPackageLPw(pkg.packageName, origPackage.name);
@@ -8566,7 +9004,8 @@
pkg.applicationInfo.nativeLibraryDir, pkg.applicationInfo.primaryCpuAbi,
pkg.applicationInfo.secondaryCpuAbi, pkg.applicationInfo.flags,
pkg.applicationInfo.privateFlags, pkg.getChildPackageNames(),
- UserManagerService.getInstance());
+ UserManagerService.getInstance(), usesStaticLibraries,
+ pkg.usesStaticLibrariesVersions);
}
// SIDE EFFECTS; persists system state to files on disk; move elsewhere
mSettings.writeUserRestrictionsLPw(pkgSetting, oldPkgSetting);
@@ -8603,12 +9042,15 @@
pkg.applicationInfo.flags |= ApplicationInfo.FLAG_UPDATED_SYSTEM_APP;
}
- if ((policyFlags & PackageParser.PARSE_IS_SYSTEM_DIR) == 0) {
+ if ((scanFlags & SCAN_BOOTING) == 0
+ && (policyFlags & PackageParser.PARSE_IS_SYSTEM_DIR) == 0) {
// Check all shared libraries and map to their actual file path.
// We only do this here for apps not on a system dir, because those
// are the only ones that can fail an install due to this. We
// will take care of the system apps by updating all of their
- // library paths after the scan is done.
+ // library paths after the scan is done. Also during the initial
+ // scan don't update any libs as we do this wholesale after all
+ // apps are scanned to avoid dependency based scanning.
updateSharedLibrariesLPr(pkg, null);
}
@@ -8618,8 +9060,22 @@
pkg.applicationInfo.uid = pkgSetting.appId;
pkg.mExtras = pkgSetting;
- if (shouldCheckUpgradeKeySetLP(pkgSetting, scanFlags)) {
- if (checkUpgradeKeySetLP(pkgSetting, pkg)) {
+
+
+ // Static shared libs have same package with different versions where
+ // we internally use a synthetic package name to allow multiple versions
+ // of the same package, therefore we need to compare signatures against
+ // the package setting for the latest library version.
+ PackageSetting signatureCheckPs = pkgSetting;
+ if (pkg.applicationInfo.isStaticSharedLibrary()) {
+ SharedLibraryEntry libraryEntry = getLatestSharedLibraVersionLPr(pkg);
+ if (libraryEntry != null) {
+ signatureCheckPs = mSettings.getPackageLPr(libraryEntry.apk);
+ }
+ }
+
+ if (shouldCheckUpgradeKeySetLP(signatureCheckPs, scanFlags)) {
+ if (checkUpgradeKeySetLP(signatureCheckPs, pkg)) {
// We just determined the app is signed correctly, so bring
// over the latest parsed certs.
pkgSetting.signatures.mSignatures = pkg.mSignatures;
@@ -8638,7 +9094,7 @@
} else {
try {
// SIDE EFFECTS; compareSignaturesCompat() changes KeysetManagerService
- verifySignaturesLP(pkgSetting, pkg);
+ verifySignaturesLP(signatureCheckPs, pkg);
// We just determined the app is signed correctly, so bring
// over the latest parsed certs.
pkgSetting.signatures.mSignatures = pkg.mSignatures;
@@ -8654,8 +9110,8 @@
// What this means is that you can't change the signatures
// associated with an overall shared user, which doesn't seem all
// that unreasonable.
- if (pkgSetting.sharedUser != null) {
- if (compareSignatures(pkgSetting.sharedUser.signatures.mSignatures,
+ if (signatureCheckPs.sharedUser != null) {
+ if (compareSignatures(signatureCheckPs.sharedUser.signatures.mSignatures,
pkg.mSignatures) != PackageManager.SIGNATURE_MATCH) {
throw new PackageManagerException(
INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES,
@@ -8839,6 +9295,10 @@
// Modify state for the given package setting
commitPackageSettings(pkg, pkgSetting, user, scanFlags,
(policyFlags & PackageParser.PARSE_CHATTY) != 0 /*chatty*/);
+ if (isEphemeral(pkg)) {
+ final int userId = user == null ? 0 : user.getIdentifier();
+ mEphemeralApplicationRegistry.addEphemeralAppLPw(userId, pkgSetting.appId);
+ }
}
return pkg;
}
@@ -8892,7 +9352,7 @@
}
/**
- * Asserts the parsed package is valid according to teh given policy. If the
+ * Asserts the parsed package is valid according to the given policy. If the
* package is invalid, for whatever reason, throws {@link PackgeManagerException}.
* <p>
* Implementation detail: This method must NOT have any side effects. It would
@@ -8938,6 +9398,128 @@
+ " already installed. Skipping duplicate.");
}
+ if (pkg.applicationInfo.isStaticSharedLibrary()) {
+ // Static libs have a synthetic package name containing the version
+ // but we still want the base name to be unique.
+ if (mPackages.containsKey(pkg.manifestPackageName)) {
+ throw new PackageManagerException(
+ "Duplicate static shared lib provider package");
+ }
+
+ // Static shared libraries should have at least O target SDK
+ if (pkg.applicationInfo.targetSdkVersion < Build.VERSION_CODES.O) {
+ throw new PackageManagerException(
+ "Packages declaring static-shared libs must target O SDK or higher");
+ }
+
+ // Package declaring static a shared lib cannot be ephemeral
+ if (pkg.applicationInfo.isEphemeralApp()) {
+ throw new PackageManagerException(
+ "Packages declaring static-shared libs cannot be ephemeral");
+ }
+
+ // Package declaring static a shared lib cannot be renamed since the package
+ // name is synthetic and apps can't code around package manager internals.
+ if (!ArrayUtils.isEmpty(pkg.mOriginalPackages)) {
+ throw new PackageManagerException(
+ "Packages declaring static-shared libs cannot be renamed");
+ }
+
+ // Package declaring static a shared lib cannot declare child packages
+ if (!ArrayUtils.isEmpty(pkg.childPackages)) {
+ throw new PackageManagerException(
+ "Packages declaring static-shared libs cannot have child packages");
+ }
+
+ // Package declaring static a shared lib cannot declare dynamic libs
+ if (!ArrayUtils.isEmpty(pkg.libraryNames)) {
+ throw new PackageManagerException(
+ "Packages declaring static-shared libs cannot declare dynamic libs");
+ }
+
+ // Package declaring static a shared lib cannot declare shared users
+ if (pkg.mSharedUserId != null) {
+ throw new PackageManagerException(
+ "Packages declaring static-shared libs cannot declare shared users");
+ }
+
+ // Static shared libs cannot declare activities
+ if (!pkg.activities.isEmpty()) {
+ throw new PackageManagerException(
+ "Static shared libs cannot declare activities");
+ }
+
+ // Static shared libs cannot declare services
+ if (!pkg.services.isEmpty()) {
+ throw new PackageManagerException(
+ "Static shared libs cannot declare services");
+ }
+
+ // Static shared libs cannot declare providers
+ if (!pkg.providers.isEmpty()) {
+ throw new PackageManagerException(
+ "Static shared libs cannot declare content providers");
+ }
+
+ // Static shared libs cannot declare receivers
+ if (!pkg.receivers.isEmpty()) {
+ throw new PackageManagerException(
+ "Static shared libs cannot declare broadcast receivers");
+ }
+
+ // Static shared libs cannot declare permission groups
+ if (!pkg.permissionGroups.isEmpty()) {
+ throw new PackageManagerException(
+ "Static shared libs cannot declare permission groups");
+ }
+
+ // Static shared libs cannot declare permissions
+ if (!pkg.permissions.isEmpty()) {
+ throw new PackageManagerException(
+ "Static shared libs cannot declare permissions");
+ }
+
+ // Static shared libs cannot declare protected broadcasts
+ if (pkg.protectedBroadcasts != null) {
+ throw new PackageManagerException(
+ "Static shared libs cannot declare protected broadcasts");
+ }
+
+ // Static shared libs cannot be overlay targets
+ if (pkg.mOverlayTarget != null) {
+ throw new PackageManagerException(
+ "Static shared libs cannot be overlay targets");
+ }
+
+ // The version codes must be ordered as lib versions
+ int minVersionCode = Integer.MIN_VALUE;
+ int maxVersionCode = Integer.MAX_VALUE;
+
+ SparseArray<SharedLibraryEntry> versionedLib = mSharedLibraries.get(
+ pkg.staticSharedLibName);
+ if (versionedLib != null) {
+ final int versionCount = versionedLib.size();
+ for (int i = 0; i < versionCount; i++) {
+ SharedLibraryInfo libInfo = versionedLib.valueAt(i).info;
+ // TODO: We will change version code to long, so in the new API it is long
+ final int libVersionCode = (int) libInfo.getDeclaringPackage()
+ .getVersionCode();
+ if (libInfo.getVersion() < pkg.staticSharedLibVersion) {
+ minVersionCode = Math.max(minVersionCode, libVersionCode + 1);
+ } else if (libInfo.getVersion() > pkg.staticSharedLibVersion) {
+ maxVersionCode = Math.min(maxVersionCode, libVersionCode - 1);
+ } else {
+ minVersionCode = maxVersionCode = libVersionCode;
+ break;
+ }
+ }
+ }
+ if (pkg.mVersionCode < minVersionCode || pkg.mVersionCode > maxVersionCode) {
+ throw new PackageManagerException("Static shared"
+ + " lib version codes must be ordered as lib versions");
+ }
+ }
+
// Only privileged apps and updated privileged apps can add child packages.
if (pkg.childPackages != null && !pkg.childPackages.isEmpty()) {
if ((policyFlags & PARSE_IS_PRIVILEGED) == 0) {
@@ -9018,6 +9600,45 @@
}
}
+ private boolean addSharedLibraryLPw(String path, String apk, String name, int version,
+ int type, String declaringPackageName, int declaringVersionCode) {
+ SparseArray<SharedLibraryEntry> versionedLib = mSharedLibraries.get(name);
+ if (versionedLib == null) {
+ versionedLib = new SparseArray<>();
+ mSharedLibraries.put(name, versionedLib);
+ if (type == SharedLibraryInfo.TYPE_STATIC) {
+ mStaticLibsByDeclaringPackage.put(declaringPackageName, versionedLib);
+ }
+ } else if (versionedLib.indexOfKey(version) >= 0) {
+ return false;
+ }
+ SharedLibraryEntry libEntry = new SharedLibraryEntry(path, apk, name,
+ version, type, declaringPackageName, declaringVersionCode);
+ versionedLib.put(version, libEntry);
+ return true;
+ }
+
+ private boolean removeSharedLibraryLPw(String name, int version) {
+ SparseArray<SharedLibraryEntry> versionedLib = mSharedLibraries.get(name);
+ if (versionedLib == null) {
+ return false;
+ }
+ final int libIdx = versionedLib.indexOfKey(version);
+ if (libIdx < 0) {
+ return false;
+ }
+ SharedLibraryEntry libEntry = versionedLib.valueAt(libIdx);
+ versionedLib.remove(version);
+ if (versionedLib.size() <= 0) {
+ mSharedLibraries.remove(name);
+ if (libEntry.info.getType() == SharedLibraryInfo.TYPE_STATIC) {
+ mStaticLibsByDeclaringPackage.remove(libEntry.info.getDeclaringPackage()
+ .getPackageName());
+ }
+ }
+ return true;
+ }
+
/**
* Adds a scanned package to the system. When this method is finished, the package will
* be available for query, resolution, etc...
@@ -9070,10 +9691,30 @@
ArrayList<PackageParser.Package> clientLibPkgs = null;
// writer
synchronized (mPackages) {
- if ((pkg.applicationInfo.flags&ApplicationInfo.FLAG_SYSTEM) != 0) {
- // Only system apps can add new shared libraries.
+ boolean hasStaticSharedLibs = false;
+
+ // Any app can add new static shared libraries
+ if (pkg.staticSharedLibName != null) {
+ // Static shared libs don't allow renaming as they have synthetic package
+ // names to allow install of multiple versions, so use name from manifest.
+ if (addSharedLibraryLPw(null, pkg.packageName, pkg.staticSharedLibName,
+ pkg.staticSharedLibVersion, SharedLibraryInfo.TYPE_STATIC,
+ pkg.manifestPackageName, pkg.mVersionCode)) {
+ hasStaticSharedLibs = true;
+ } else {
+ Slog.w(TAG, "Package " + pkg.packageName + " library "
+ + pkg.staticSharedLibName + " already exists; skipping");
+ }
+ // Static shared libs cannot be updated once installed since they
+ // use synthetic package name which includes the version code, so
+ // not need to update other packages's shared lib dependencies.
+ }
+
+ if (!hasStaticSharedLibs
+ && (pkg.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0) {
+ // Only system apps can add new dynamic shared libraries.
if (pkg.libraryNames != null) {
- for (int i=0; i<pkg.libraryNames.size(); i++) {
+ for (int i = 0; i < pkg.libraryNames.size(); i++) {
String name = pkg.libraryNames.get(i);
boolean allowed = false;
if (pkg.isUpdatedSystemApp()) {
@@ -9090,7 +9731,7 @@
final PackageSetting sysPs = mSettings
.getDisabledSystemPkgLPr(pkg.packageName);
if (sysPs.pkg != null && sysPs.pkg.libraryNames != null) {
- for (int j=0; j<sysPs.pkg.libraryNames.size(); j++) {
+ for (int j = 0; j < sysPs.pkg.libraryNames.size(); j++) {
if (name.equals(sysPs.pkg.libraryNames.get(j))) {
allowed = true;
break;
@@ -9101,9 +9742,10 @@
allowed = true;
}
if (allowed) {
- if (!mSharedLibraries.containsKey(name)) {
- mSharedLibraries.put(name, new SharedLibraryEntry(null, pkg.packageName));
- } else if (!name.equals(pkg.packageName)) {
+ if (!addSharedLibraryLPw(null, pkg.packageName, name,
+ SharedLibraryInfo.VERSION_UNDEFINED,
+ SharedLibraryInfo.TYPE_DYNAMIC,
+ pkg.packageName, pkg.mVersionCode)) {
Slog.w(TAG, "Package " + pkg.packageName + " library "
+ name + " already exists; skipping");
}
@@ -9112,6 +9754,7 @@
+ name + " that is not declared on system image; skipping");
}
}
+
if ((scanFlags & SCAN_BOOTING) == 0) {
// If we are not booting, we need to update any applications
// that are clients of our shared library. If we are booting,
@@ -10325,11 +10968,9 @@
if ((pkg.applicationInfo.flags&ApplicationInfo.FLAG_SYSTEM) != 0) {
// Only system apps can hold shared libraries.
if (pkg.libraryNames != null) {
- for (i=0; i<pkg.libraryNames.size(); i++) {
+ for (i = 0; i < pkg.libraryNames.size(); i++) {
String name = pkg.libraryNames.get(i);
- SharedLibraryEntry cur = mSharedLibraries.get(name);
- if (cur != null && cur.apk != null && cur.apk.equals(pkg.packageName)) {
- mSharedLibraries.remove(name);
+ if (removeSharedLibraryLPw(name, 0)) {
if (DEBUG_REMOVE && chatty) {
if (r == null) {
r = new StringBuilder(256);
@@ -10342,6 +10983,23 @@
}
}
}
+
+ r = null;
+
+ // Any package can hold static shared libraries.
+ if (pkg.staticSharedLibName != null) {
+ if (removeSharedLibraryLPw(pkg.staticSharedLibName, pkg.staticSharedLibVersion)) {
+ if (DEBUG_REMOVE && chatty) {
+ if (r == null) {
+ r = new StringBuilder(256);
+ } else {
+ r.append(' ');
+ }
+ r.append(pkg.staticSharedLibName);
+ }
+ }
+ }
+
if (r != null) {
if (DEBUG_REMOVE) Log.d(TAG, " Libraries: " + r);
}
@@ -12143,7 +12801,7 @@
IActivityManager am = ActivityManager.getService();
if (am != null) {
try {
- am.startService(null, intent, null, mContext.getOpPackageName(),
+ am.startService(null, intent, null, -1, null, mContext.getOpPackageName(),
UserHandle.USER_SYSTEM);
} catch (RemoteException e) {
}
@@ -12403,6 +13061,16 @@
Slog.w(TAG, "Cannot hide package: android");
return false;
}
+ // Cannot hide static shared libs as they are considered
+ // a part of the using app (emulating static linking). Also
+ // static libs are installed always on internal storage.
+ PackageParser.Package pkg = mPackages.get(packageName);
+ if (pkg != null && pkg.staticSharedLibName != null) {
+ Slog.w(TAG, "Cannot hide package: " + packageName
+ + " providing static shared library: "
+ + pkg.staticSharedLibName);
+ return false;
+ }
// Only allow protected packages to hide themselves.
if (hidden && !UserHandle.isSameApp(uid, pkgSetting.appId)
&& mProtectedPackages.isPackageStateProtected(userId, packageName)) {
@@ -12663,6 +13331,17 @@
return false;
}
+ // Cannot suspend static shared libs as they are considered
+ // a part of the using app (emulating static linking). Also
+ // static libs are installed always on internal storage.
+ PackageParser.Package pkg = mPackages.get(packageName);
+ if (pkg != null && pkg.applicationInfo.isStaticSharedLibrary()) {
+ Slog.w(TAG, "Cannot suspend package: " + packageName
+ + " providing static shared library: "
+ + pkg.staticSharedLibName);
+ return false;
+ }
+
return true;
}
@@ -15096,6 +15775,7 @@
res.removedInfo = new PackageRemovedInfo();
res.removedInfo.uid = oldPackage.applicationInfo.uid;
res.removedInfo.removedPackage = oldPackage.packageName;
+ res.removedInfo.isStaticSharedLib = pkg.staticSharedLibName != null;
res.removedInfo.isUpdate = true;
res.removedInfo.origUsers = installedUsers;
final PackageSetting ps = mSettings.getPackageLPr(pkgName);
@@ -15758,6 +16438,19 @@
return;
}
+ if (pkg.applicationInfo.isStaticSharedLibrary()) {
+ // Static shared libraries have synthetic package names
+ renameStaticSharedLibraryPackage(pkg);
+
+ // No static shared libs on external storage
+ if (onExternal) {
+ Slog.i(TAG, "Static shared libs can only be installed on internal storage.");
+ res.setError(INSTALL_FAILED_INVALID_INSTALL_LOCATION,
+ "Packages declaring static-shared libs cannot be updated");
+ return;
+ }
+ }
+
// If we are installing a clustered package add results for the children
if (pkg.childPackages != null) {
synchronized (mPackages) {
@@ -15882,11 +16575,23 @@
if (ps != null) {
if (DEBUG_INSTALL) Slog.d(TAG, "Existing package: " + ps);
+ // Static shared libs have same package with different versions where
+ // we internally use a synthetic package name to allow multiple versions
+ // of the same package, therefore we need to compare signatures against
+ // the package setting for the latest library version.
+ PackageSetting signatureCheckPs = ps;
+ if (pkg.applicationInfo.isStaticSharedLibrary()) {
+ SharedLibraryEntry libraryEntry = getLatestSharedLibraVersionLPr(pkg);
+ if (libraryEntry != null) {
+ signatureCheckPs = mSettings.getPackageLPr(libraryEntry.apk);
+ }
+ }
+
// Quick sanity check that we're signed correctly if updating;
// we'll check this again later when scanning, but we want to
// bail early here before tripping over redefined permissions.
- if (shouldCheckUpgradeKeySetLP(ps, scanFlags)) {
- if (!checkUpgradeKeySetLP(ps, pkg)) {
+ if (shouldCheckUpgradeKeySetLP(signatureCheckPs, scanFlags)) {
+ if (!checkUpgradeKeySetLP(signatureCheckPs, pkg)) {
res.setError(INSTALL_FAILED_UPDATE_INCOMPATIBLE, "Package "
+ pkg.packageName + " upgrade keys do not match the "
+ "previously installed version");
@@ -15894,7 +16599,7 @@
}
} else {
try {
- verifySignaturesLP(ps, pkg);
+ verifySignaturesLP(signatureCheckPs, pkg);
} catch (PackageManagerException e) {
res.setError(e.error, e.getMessage());
return;
@@ -16011,14 +16716,6 @@
return;
}
- // Shared libraries for the package need to be updated.
- synchronized (mPackages) {
- try {
- updateSharedLibrariesLPr(pkg, null);
- } catch (PackageManagerException e) {
- Slog.e(TAG, "updateSharedLibrariesLPw failed: " + e.getMessage());
- }
- }
Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER, "dexopt");
// Do not run PackageDexOptimizer through the local performDexOpt
// method because `pkg` may not be in `mPackages` yet.
@@ -16046,6 +16743,18 @@
try (PackageFreezer freezer = freezePackageForInstall(pkgName, installFlags,
"installPackageLI")) {
if (replace) {
+ if (pkg.applicationInfo.isStaticSharedLibrary()) {
+ // Static libs have a synthetic package name containing the version
+ // and cannot be updated as an update would get a new package name,
+ // unless this is the exact same version code which is useful for
+ // development.
+ PackageParser.Package existingPkg = mPackages.get(pkg.packageName);
+ if (existingPkg != null && existingPkg.mVersionCode != pkg.mVersionCode) {
+ res.setError(INSTALL_FAILED_DUPLICATE_PACKAGE, "Packages declaring "
+ + "static-shared libs cannot be updated");
+ return;
+ }
+ }
replacePackageLIF(pkg, parseFlags, scanFlags | SCAN_REPLACING, args.user,
installerPackageName, res, args.installReason);
} else {
@@ -16291,22 +17000,37 @@
}
@Override
- public void deletePackageAsUser(String packageName, IPackageDeleteObserver observer, int userId,
- int flags) {
- deletePackage(packageName, new LegacyPackageDeleteObserver(observer).getBinder(), userId,
- flags);
+ public void deletePackageAsUser(String packageName, int versionCode,
+ IPackageDeleteObserver observer, int userId, int flags) {
+ deletePackageVersioned(new VersionedPackage(packageName, versionCode),
+ new LegacyPackageDeleteObserver(observer).getBinder(), userId, flags);
}
@Override
- public void deletePackage(final String packageName,
+ public void deletePackageVersioned(VersionedPackage versionedPackage,
final IPackageDeleteObserver2 observer, final int userId, final int deleteFlags) {
mContext.enforceCallingOrSelfPermission(
android.Manifest.permission.DELETE_PACKAGES, null);
- Preconditions.checkNotNull(packageName);
+ Preconditions.checkNotNull(versionedPackage);
Preconditions.checkNotNull(observer);
+ Preconditions.checkArgumentInRange(versionedPackage.getVersionCode(),
+ PackageManager.VERSION_CODE_HIGHEST,
+ Integer.MAX_VALUE, "versionCode must be >= -1");
+
+ final String packageName = versionedPackage.getPackageName();
+ // TODO: We will change version code to long, so in the new API it is long
+ final int versionCode = (int) versionedPackage.getVersionCode();
+ final String internalPackageName;
+ synchronized (mPackages) {
+ // Normalize package name to handle renamed packages and static libs
+ internalPackageName = resolveInternalPackageNameLPr(versionedPackage.getPackageName(),
+ // TODO: We will change version code to long, so in the new API it is long
+ (int) versionedPackage.getVersionCode());
+ }
+
final int uid = Binder.getCallingUid();
- if (!isOrphaned(packageName)
- && !isCallerAllowedToSilentlyUninstall(uid, packageName)) {
+ if (!isOrphaned(internalPackageName)
+ && !isCallerAllowedToSilentlyUninstall(uid, internalPackageName)) {
try {
final Intent intent = new Intent(Intent.ACTION_UNINSTALL_PACKAGE);
intent.setData(Uri.fromParts(PACKAGE_SCHEME, packageName, null));
@@ -16333,7 +17057,7 @@
return;
}
- if (!deleteAllUsers && getBlockUninstallForUser(packageName, userId)) {
+ if (!deleteAllUsers && getBlockUninstallForUser(internalPackageName, userId)) {
try {
observer.onPackageDeleted(packageName,
PackageManager.DELETE_FAILED_OWNER_BLOCKED, null);
@@ -16343,8 +17067,10 @@
}
if (DEBUG_REMOVE) {
- Slog.d(TAG, "deletePackageAsUser: pkg=" + packageName + " user=" + userId
- + " deleteAllUsers: " + deleteAllUsers );
+ Slog.d(TAG, "deletePackageAsUser: pkg=" + internalPackageName + " user=" + userId
+ + " deleteAllUsers: " + deleteAllUsers + " version="
+ + (versionCode == PackageManager.VERSION_CODE_HIGHEST
+ ? "VERSION_CODE_HIGHEST" : versionCode));
}
// Queue up an async operation since the package deletion may take a little while.
mHandler.post(new Runnable() {
@@ -16352,18 +17078,22 @@
mHandler.removeCallbacks(this);
int returnCode;
if (!deleteAllUsers) {
- returnCode = deletePackageX(packageName, userId, deleteFlags);
+ returnCode = deletePackageX(internalPackageName, versionCode,
+ userId, deleteFlags);
} else {
- int[] blockUninstallUserIds = getBlockUninstallForUsers(packageName, users);
+ int[] blockUninstallUserIds = getBlockUninstallForUsers(
+ internalPackageName, users);
// If nobody is blocking uninstall, proceed with delete for all users
if (ArrayUtils.isEmpty(blockUninstallUserIds)) {
- returnCode = deletePackageX(packageName, userId, deleteFlags);
+ returnCode = deletePackageX(internalPackageName, versionCode,
+ userId, deleteFlags);
} else {
// Otherwise uninstall individually for users with blockUninstalls=false
final int userFlags = deleteFlags & ~PackageManager.DELETE_ALL_USERS;
for (int userId : users) {
if (!ArrayUtils.contains(blockUninstallUserIds, userId)) {
- returnCode = deletePackageX(packageName, userId, userFlags);
+ returnCode = deletePackageX(internalPackageName, versionCode,
+ userId, userFlags);
if (returnCode != PackageManager.DELETE_SUCCEEDED) {
Slog.w(TAG, "Package delete failed for user " + userId
+ ", returnCode " + returnCode);
@@ -16384,6 +17114,80 @@
});
}
+ private String resolveExternalPackageNameLPr(PackageParser.Package pkg) {
+ if (pkg.staticSharedLibName != null) {
+ return pkg.manifestPackageName;
+ }
+ return pkg.packageName;
+ }
+
+ private String resolveInternalPackageNameLPr(String packageName, int versionCode) {
+ // Handle renamed packages
+ String normalizedPackageName = mSettings.getRenamedPackageLPr(packageName);
+ packageName = normalizedPackageName != null ? normalizedPackageName : packageName;
+
+ // Is this a static library?
+ SparseArray<SharedLibraryEntry> versionedLib =
+ mStaticLibsByDeclaringPackage.get(packageName);
+ if (versionedLib == null || versionedLib.size() <= 0) {
+ return packageName;
+ }
+
+ // Figure out which lib versions the caller can see
+ SparseIntArray versionsCallerCanSee = null;
+ final int callingAppId = UserHandle.getAppId(Binder.getCallingUid());
+ if (callingAppId != Process.SYSTEM_UID && callingAppId != Process.SHELL_UID
+ && callingAppId != Process.ROOT_UID) {
+ versionsCallerCanSee = new SparseIntArray();
+ String libName = versionedLib.valueAt(0).info.getName();
+ String[] uidPackages = getPackagesForUid(Binder.getCallingUid());
+ if (uidPackages != null) {
+ for (String uidPackage : uidPackages) {
+ PackageSetting ps = mSettings.getPackageLPr(uidPackage);
+ final int libIdx = ArrayUtils.indexOf(ps.usesStaticLibraries, libName);
+ if (libIdx >= 0) {
+ final int libVersion = ps.usesStaticLibrariesVersions[libIdx];
+ versionsCallerCanSee.append(libVersion, libVersion);
+ }
+ }
+ }
+ }
+
+ // Caller can see nothing - done
+ if (versionsCallerCanSee != null && versionsCallerCanSee.size() <= 0) {
+ return packageName;
+ }
+
+ // Find the version the caller can see and the app version code
+ SharedLibraryEntry highestVersion = null;
+ final int versionCount = versionedLib.size();
+ for (int i = 0; i < versionCount; i++) {
+ SharedLibraryEntry libEntry = versionedLib.valueAt(i);
+ if (versionsCallerCanSee != null && versionsCallerCanSee.indexOfKey(
+ libEntry.info.getVersion()) < 0) {
+ continue;
+ }
+ // TODO: We will change version code to long, so in the new API it is long
+ final int libVersionCode = (int) libEntry.info.getDeclaringPackage().getVersionCode();
+ if (versionCode != PackageManager.VERSION_CODE_HIGHEST) {
+ if (libVersionCode == versionCode) {
+ return libEntry.apk;
+ }
+ } else if (highestVersion == null) {
+ highestVersion = libEntry;
+ } else if (libVersionCode > highestVersion.info
+ .getDeclaringPackage().getVersionCode()) {
+ highestVersion = libEntry;
+ }
+ }
+
+ if (highestVersion != null) {
+ return highestVersion.apk;
+ }
+
+ return packageName;
+ }
+
private boolean isCallerAllowedToSilentlyUninstall(int callingUid, String pkgName) {
if (callingUid == Process.SHELL_UID || callingUid == Process.ROOT_UID
|| callingUid == Process.SYSTEM_UID) {
@@ -16482,7 +17286,7 @@
* persisting settings for later use
* sending a broadcast if necessary
*/
- private int deletePackageX(String packageName, int userId, int deleteFlags) {
+ private int deletePackageX(String packageName, int versionCode, int userId, int deleteFlags) {
final PackageRemovedInfo info = new PackageRemovedInfo();
final boolean res;
@@ -16505,6 +17309,32 @@
Slog.w(TAG, "Not removing non-existent package " + packageName);
return PackageManager.DELETE_FAILED_INTERNAL_ERROR;
}
+
+ if (versionCode != PackageManager.VERSION_CODE_HIGHEST
+ && uninstalledPs.versionCode != versionCode) {
+ Slog.w(TAG, "Not removing package " + packageName + " with versionCode "
+ + uninstalledPs.versionCode + " != " + versionCode);
+ return PackageManager.DELETE_FAILED_INTERNAL_ERROR;
+ }
+
+ // Static shared libs can be declared by any package, so let us not
+ // allow removing a package if it provides a lib others depend on.
+ PackageParser.Package pkg = mPackages.get(packageName);
+ if (pkg != null && pkg.staticSharedLibName != null) {
+ SharedLibraryEntry libEntry = getSharedLibraryEntryLPr(pkg.staticSharedLibName,
+ pkg.staticSharedLibVersion);
+ if (libEntry != null) {
+ List<VersionedPackage> libClientPackages = getPackagesUsingSharedLibraryLPr(
+ libEntry.info, 0, userId);
+ if (!ArrayUtils.isEmpty(libClientPackages)) {
+ Slog.w(TAG, "Not removing package " + pkg.manifestPackageName
+ + " hosting lib " + libEntry.info.getName() + " version "
+ + libEntry.info.getVersion() + " used by " + libClientPackages);
+ return PackageManager.DELETE_FAILED_USED_SHARED_LIBRARY;
+ }
+ }
+ }
+
allUsers = sUserManager.getUserIds();
info.origUsers = uninstalledPs.queryInstalledUsers(allUsers, true);
}
@@ -16563,6 +17393,7 @@
boolean isUpdate;
boolean dataRemoved;
boolean removedForAllUsers;
+ boolean isStaticSharedLib;
// Clean up resources deleted packages.
InstallArgs args = null;
ArrayMap<String, PackageRemovedInfo> removedChildPackages;
@@ -16614,6 +17445,12 @@
}
private void sendPackageRemovedBroadcastInternal(boolean killApp) {
+ // Don't send static shared library removal broadcasts as these
+ // libs are visible only the the apps that depend on them an one
+ // cannot remove the library if it has a dependency.
+ if (isStaticSharedLib) {
+ return;
+ }
Bundle extras = new Bundle(2);
extras.putInt(Intent.EXTRA_UID, removedAppId >= 0 ? removedAppId : uid);
extras.putBoolean(Intent.EXTRA_DATA_REMOVED, dataRemoved);
@@ -16627,7 +17464,8 @@
extras, 0, null, null, removedUsers);
if (dataRemoved && !isRemovedPackageSystemUpdate) {
sendPackageBroadcast(Intent.ACTION_PACKAGE_FULLY_REMOVED,
- removedPackage, extras, 0, null, null, removedUsers);
+ removedPackage, extras, Intent.FLAG_RECEIVER_INCLUDE_BACKGROUND,
+ null, null, removedUsers);
}
}
if (removedAppId >= 0) {
@@ -16656,6 +17494,8 @@
deletedPs = mSettings.mPackages.get(packageName);
if (outInfo != null) {
outInfo.removedPackage = packageName;
+ outInfo.isStaticSharedLib = deletedPkg != null
+ && deletedPkg.staticSharedLibName != null;
outInfo.removedUsers = deletedPs != null
? deletedPs.queryInstalledUsers(sUserManager.getUserIds(), true)
: null;
@@ -16683,15 +17523,18 @@
schedulePackageCleaning(packageName, UserHandle.USER_ALL, true);
}
+ int removedAppId = -1;
+
// writer
synchronized (mPackages) {
if (deletedPs != null) {
if ((flags&PackageManager.DELETE_KEEP_DATA) == 0) {
clearIntentFilterVerificationsLPw(deletedPs.name, UserHandle.USER_ALL);
clearDefaultBrowserIfNeeded(packageName);
+ mSettings.mKeySetManagerService.removeAppKeySetDataLPw(packageName);
+ removedAppId = mSettings.removePackageLPw(packageName);
if (outInfo != null) {
- mSettings.mKeySetManagerService.removeAppKeySetDataLPw(packageName);
- outInfo.removedAppId = mSettings.removePackageLPw(packageName);
+ outInfo.removedAppId = removedAppId;
}
updatePermissionsLPw(deletedPs.name, null, 0);
if (deletedPs.sharedUser != null) {
@@ -16741,10 +17584,10 @@
mSettings.writeLPr();
}
}
- if (outInfo != null) {
+ if (removedAppId != -1) {
// A user ID was deleted here. Go through all users and remove it
// from KeyStore.
- removeKeystoreDataIfNeeded(UserHandle.USER_ALL, outInfo.removedAppId);
+ removeKeystoreDataIfNeeded(UserHandle.USER_ALL, removedAppId);
}
}
@@ -16860,12 +17703,6 @@
+ e.getMessage());
return false;
}
- try {
- // update shared libraries for the newly re-installed system package
- updateSharedLibrariesLPr(newPkg, null);
- } catch (PackageManagerException e) {
- Slog.e(TAG, "updateAllSharedLibrariesLPw failed: " + e.getMessage());
- }
prepareAppDataAfterInstallLIF(newPkg);
@@ -16978,6 +17815,15 @@
Log.i(TAG, "Package doesn't exist in set block uninstall " + packageName);
return false;
}
+ // Cannot block uninstall of static shared libs as they are
+ // considered a part of the using app (emulating static linking).
+ // Also static libs are installed always on internal storage.
+ PackageParser.Package pkg = mPackages.get(packageName);
+ if (pkg != null && pkg.staticSharedLibName != null) {
+ Slog.w(TAG, "Cannot block uninstall of package: " + packageName
+ + " providing static shared library: " + pkg.staticSharedLibName);
+ return false;
+ }
if (!ps.getInstalled(userId)) {
// Can't block uninstall for an app that is not installed or enabled.
Log.i(TAG, "Package not installed in set block uninstall " + packageName);
@@ -17039,7 +17885,6 @@
if (DEBUG_REMOVE) Slog.d(TAG, "deletePackageLI: " + packageName + " user " + user);
PackageSetting ps;
-
synchronized (mPackages) {
ps = mSettings.mPackages.get(packageName);
if (ps == null) {
@@ -17232,6 +18077,7 @@
if (outInfo != null) {
outInfo.removedPackage = ps.name;
+ outInfo.isStaticSharedLib = pkg != null && pkg.staticSharedLibName != null;
outInfo.removedAppId = ps.appId;
outInfo.removedUsers = userIds;
}
@@ -19252,6 +20098,7 @@
pw.println("Error: check-permission missing package argument");
return;
}
+
String pkg = args[opti];
opti++;
int user = UserHandle.getUserId(Binder.getCallingUid());
@@ -19264,6 +20111,10 @@
return;
}
}
+
+ // Normalize package name to handle renamed packages and static libs
+ pkg = resolveInternalPackageNameLPr(pkg, PackageManager.VERSION_CODE_HIGHEST);
+
pw.println(checkPermission(perm, pkg, user));
return;
} else if ("l".equals(cmd) || "libraries".equals(cmd)) {
@@ -19416,41 +20267,41 @@
boolean printedHeader = false;
final Iterator<String> it = mSharedLibraries.keySet().iterator();
while (it.hasNext()) {
- String name = it.next();
- SharedLibraryEntry ent = mSharedLibraries.get(name);
- if (!checkin) {
- if (!printedHeader) {
- if (dumpState.onTitlePrinted())
- pw.println();
- pw.println("Libraries:");
- printedHeader = true;
- }
- pw.print(" ");
- } else {
- pw.print("lib,");
+ String libName = it.next();
+ SparseArray<SharedLibraryEntry> versionedLib = mSharedLibraries.get(libName);
+ if (versionedLib == null) {
+ continue;
}
- pw.print(name);
- if (!checkin) {
- pw.print(" -> ");
- }
- if (ent.path != null) {
+ final int versionCount = versionedLib.size();
+ for (int i = 0; i < versionCount; i++) {
+ SharedLibraryEntry libEntry = versionedLib.valueAt(i);
if (!checkin) {
- pw.print("(jar) ");
- pw.print(ent.path);
+ if (!printedHeader) {
+ if (dumpState.onTitlePrinted())
+ pw.println();
+ pw.println("Libraries:");
+ printedHeader = true;
+ }
+ pw.print(" ");
} else {
- pw.print(",jar,");
- pw.print(ent.path);
+ pw.print("lib,");
}
- } else {
+ pw.print(libEntry.info.getName());
+ if (libEntry.info.isStatic()) {
+ pw.print(" version=" + libEntry.info.getVersion());
+ }
if (!checkin) {
- pw.print("(apk) ");
- pw.print(ent.apk);
- } else {
- pw.print(",apk,");
- pw.print(ent.apk);
+ pw.print(" -> ");
}
+ if (libEntry.path != null) {
+ pw.print(" (jar) ");
+ pw.print(libEntry.path);
+ } else {
+ pw.print(" (apk) ");
+ pw.print(libEntry.apk);
+ }
+ pw.println();
}
- pw.println();
}
}
@@ -19581,7 +20432,8 @@
count = 0;
for (PackageSetting ps : allPackageSettings) {
final long status = ps.getDomainVerificationStatusForUser(userId);
- if (status >> 32 == INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_UNDEFINED) {
+ if (status >> 32 == INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_UNDEFINED
+ && !DEBUG_DOMAIN_VERIFICATION) {
continue;
}
pw.println(prefix + "Package: " + ps.name);
@@ -20563,14 +21415,29 @@
}
}
+ private List<String> collectAbsoluteCodePaths() {
+ synchronized (mPackages) {
+ List<String> codePaths = new ArrayList<>();
+ final int packageCount = mSettings.mPackages.size();
+ for (int i = 0; i < packageCount; i++) {
+ final PackageSetting ps = mSettings.mPackages.valueAt(i);
+ codePaths.add(ps.codePath.getAbsolutePath());
+ }
+ return codePaths;
+ }
+ }
+
/**
* Examine all apps present on given mounted volume, and destroy apps that
* aren't expected, either due to uninstallation or reinstallation on
* another volume.
*/
private void reconcileApps(String volumeUuid) {
- final File[] files = FileUtils
- .listFilesOrEmpty(Environment.getDataAppDirectory(volumeUuid));
+ List<String> absoluteCodePaths = collectAbsoluteCodePaths();
+ List<File> filesToDelete = null;
+
+ final File[] files = FileUtils.listFilesOrEmpty(
+ Environment.getDataAppDirectory(volumeUuid));
for (File file : files) {
final boolean isPackage = (isApkFile(file) || file.isDirectory())
&& !PackageInstallerService.isStageName(file.getName());
@@ -20579,15 +21446,33 @@
continue;
}
- try {
- final PackageLite pkg = PackageParser.parsePackageLite(file,
- PackageParser.PARSE_MUST_BE_APK);
- assertPackageKnown(volumeUuid, pkg.packageName);
+ String absolutePath = file.getAbsolutePath();
- } catch (PackageParserException | PackageManagerException e) {
- logCriticalInfo(Log.WARN, "Destroying " + file + " due to: " + e);
+ boolean pathValid = false;
+ final int absoluteCodePathCount = absoluteCodePaths.size();
+ for (int i = 0; i < absoluteCodePathCount; i++) {
+ String absoluteCodePath = absoluteCodePaths.get(i);
+ if (absolutePath.startsWith(absoluteCodePath)) {
+ pathValid = true;
+ break;
+ }
+ }
+
+ if (!pathValid) {
+ if (filesToDelete == null) {
+ filesToDelete = new ArrayList<>();
+ }
+ filesToDelete.add(file);
+ }
+ }
+
+ if (filesToDelete != null) {
+ final int fileToDeleteCount = filesToDelete.size();
+ for (int i = 0; i < fileToDeleteCount; i++) {
+ File fileToDelete = filesToDelete.get(i);
+ logCriticalInfo(Log.WARN, "Destroying orphaned" + fileToDelete);
synchronized (mInstallLock) {
- removeCodePathLI(file);
+ removeCodePathLI(fileToDelete);
}
}
}
@@ -21042,6 +21927,14 @@
"Cannot move system application");
}
+ final boolean isInternalStorage = VolumeInfo.ID_PRIVATE_INTERNAL.equals(volumeUuid);
+ final boolean allow3rdPartyOnInternal = mContext.getResources().getBoolean(
+ com.android.internal.R.bool.config_allow3rdPartyAppOnInternal);
+ if (isInternalStorage && !allow3rdPartyOnInternal) {
+ throw new PackageManagerException(MOVE_FAILED_3RD_PARTY_NOT_ALLOWED_ON_INTERNAL,
+ "3rd party apps are not allowed on internal storage");
+ }
+
if (pkg.applicationInfo.isExternalAsec()) {
currentAsec = true;
currentVolumeUuid = StorageManager.UUID_PRIMARY_PHYSICAL;
@@ -21357,7 +22250,8 @@
}
mHandler.post(new Runnable() {
public void run() {
- deletePackageX(packageName, userHandle, 0);
+ deletePackageX(packageName, PackageManager.VERSION_CODE_HIGHEST,
+ userHandle, 0);
} //end run
});
}
@@ -21567,7 +22461,8 @@
// after this method returns.
mHandler.post(new Runnable() {
public void run() {
- deletePackageX(packageName, 0, PackageManager.DELETE_ALL_USERS);
+ deletePackageX(packageName, PackageManager.VERSION_CODE_HIGHEST,
+ 0, PackageManager.DELETE_ALL_USERS);
}
});
}
@@ -21924,6 +22819,15 @@
responseObj, origIntent, resolvedType, launchIntent, callingPackage, userId);
}
+ @Override
+ public void grantEphemeralAccess(int userId, Intent intent,
+ int targetAppId, int ephemeralAppId) {
+ synchronized (mPackages) {
+ mEphemeralApplicationRegistry.grantEphemeralAccessLPw(userId, intent,
+ targetAppId, ephemeralAppId);
+ }
+ }
+
public String getSetupWizardPackageName() {
return mSetupWizardPackage;
}
diff --git a/services/core/java/com/android/server/pm/PackageManagerShellCommand.java b/services/core/java/com/android/server/pm/PackageManagerShellCommand.java
index 2751742..aa421b1 100644
--- a/services/core/java/com/android/server/pm/PackageManagerShellCommand.java
+++ b/services/core/java/com/android/server/pm/PackageManagerShellCommand.java
@@ -40,6 +40,7 @@
import android.content.pm.PackageInstaller.SessionInfo;
import android.content.pm.PackageInstaller.SessionParams;
import android.content.pm.ResolveInfo;
+import android.content.pm.VersionedPackage;
import android.content.res.AssetManager;
import android.content.res.Resources;
import android.net.Uri;
@@ -663,7 +664,8 @@
pw.print(info.applicationInfo.sourceDir);
pw.print("=");
}
- pw.print(info.packageName);
+ pw.print(info.packageName); pw.print( " versionCode:"
+ + info.applicationInfo.versionCode);
if (listInstaller) {
pw.print(" installer=");
pw.print(mInterface.getInstallerPackageName(info.packageName));
@@ -770,6 +772,7 @@
final PrintWriter pw = getOutPrintWriter();
int flags = 0;
int userId = UserHandle.USER_ALL;
+ int versionCode = PackageManager.VERSION_CODE_HIGHEST;
String opt;
while ((opt = getNextOption()) != null) {
@@ -780,6 +783,9 @@
case "--user":
userId = UserHandle.parseUserArg(getNextArgRequired());
break;
+ case "--versionCode":
+ versionCode = Integer.parseInt(getNextArgRequired());
+ break;
default:
pw.println("Error: Unknown option: " + opt);
return 1;
@@ -819,7 +825,8 @@
}
final LocalIntentReceiver receiver = new LocalIntentReceiver();
- mInterface.getPackageInstaller().uninstall(packageName, null /*callerPackageName*/, flags,
+ mInterface.getPackageInstaller().uninstall(new VersionedPackage(packageName,
+ versionCode), null /*callerPackageName*/, flags,
receiver.getIntentSender(), userId);
final Intent result = receiver.getResult();
diff --git a/services/core/java/com/android/server/pm/PackageSetting.java b/services/core/java/com/android/server/pm/PackageSetting.java
index 80a398a..5f348ab 100644
--- a/services/core/java/com/android/server/pm/PackageSetting.java
+++ b/services/core/java/com/android/server/pm/PackageSetting.java
@@ -46,10 +46,12 @@
String legacyNativeLibraryPathString, String primaryCpuAbiString,
String secondaryCpuAbiString, String cpuAbiOverrideString,
int pVersionCode, int pkgFlags, int privateFlags, String parentPackageName,
- List<String> childPackageNames, int sharedUserId) {
+ List<String> childPackageNames, int sharedUserId, String[] usesStaticLibraries,
+ int[] usesStaticLibrariesVersions) {
super(name, realName, codePath, resourcePath, legacyNativeLibraryPathString,
primaryCpuAbiString, secondaryCpuAbiString, cpuAbiOverrideString,
- pVersionCode, pkgFlags, privateFlags, parentPackageName, childPackageNames);
+ pVersionCode, pkgFlags, privateFlags, parentPackageName, childPackageNames,
+ usesStaticLibraries, usesStaticLibrariesVersions);
this.sharedUserId = sharedUserId;
}
diff --git a/services/core/java/com/android/server/pm/PackageSettingBase.java b/services/core/java/com/android/server/pm/PackageSettingBase.java
index b332fa5..b63edfd 100644
--- a/services/core/java/com/android/server/pm/PackageSettingBase.java
+++ b/services/core/java/com/android/server/pm/PackageSettingBase.java
@@ -32,6 +32,7 @@
import java.io.File;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.List;
import java.util.Set;
@@ -68,6 +69,9 @@
File resourcePath;
String resourcePathString;
+ String[] usesStaticLibraries;
+ int[] usesStaticLibrariesVersions;
+
/**
* The path under which native libraries have been unpacked. This path is
* always derived at runtime, and is only stored here for cleanup when a
@@ -139,13 +143,16 @@
String legacyNativeLibraryPathString, String primaryCpuAbiString,
String secondaryCpuAbiString, String cpuAbiOverrideString,
int pVersionCode, int pkgFlags, int pkgPrivateFlags,
- String parentPackageName, List<String> childPackageNames) {
+ String parentPackageName, List<String> childPackageNames,
+ String[] usesStaticLibraries, int[] usesStaticLibrariesVersions) {
super(pkgFlags, pkgPrivateFlags);
this.name = name;
this.realName = realName;
this.parentPackageName = parentPackageName;
this.childPackageNames = (childPackageNames != null)
? new ArrayList<>(childPackageNames) : null;
+ this.usesStaticLibraries = usesStaticLibraries;
+ this.usesStaticLibrariesVersions = usesStaticLibrariesVersions;
init(codePath, resourcePath, legacyNativeLibraryPathString, primaryCpuAbiString,
secondaryCpuAbiString, cpuAbiOverrideString, pVersionCode);
}
@@ -250,6 +257,12 @@
versionCode = orig.versionCode;
volumeUuid = orig.volumeUuid;
categoryHint = orig.categoryHint;
+ usesStaticLibraries = orig.usesStaticLibraries != null
+ ? Arrays.copyOf(orig.usesStaticLibraries,
+ orig.usesStaticLibraries.length) : null;
+ usesStaticLibrariesVersions = orig.usesStaticLibrariesVersions != null
+ ? Arrays.copyOf(orig.usesStaticLibrariesVersions,
+ orig.usesStaticLibrariesVersions.length) : null;
}
private PackageUserState modifyUserState(int userId) {
diff --git a/services/core/java/com/android/server/pm/Settings.java b/services/core/java/com/android/server/pm/Settings.java
index 8761a6d..281e445 100644
--- a/services/core/java/com/android/server/pm/Settings.java
+++ b/services/core/java/com/android/server/pm/Settings.java
@@ -183,6 +183,7 @@
private static final String TAG_RUNTIME_PERMISSIONS = "runtime-permissions";
private static final String TAG_PERMISSIONS = "perms";
private static final String TAG_CHILD_PACKAGE = "child-package";
+ private static final String TAG_USES_STATIC_LIB = "uses-static-lib";
private static final String TAG_PERSISTENT_PREFERRED_ACTIVITIES =
"persistent-preferred-activities";
@@ -201,6 +202,7 @@
private static final String ATTR_CODE = "code";
private static final String ATTR_GRANTED = "granted";
private static final String ATTR_FLAGS = "flags";
+ private static final String ATTR_VERSION = "version";
private static final String ATTR_CE_DATA_INODE = "ceDataInode";
private static final String ATTR_INSTALLED = "inst";
@@ -561,7 +563,8 @@
p.legacyNativeLibraryPathString, p.primaryCpuAbiString,
p.secondaryCpuAbiString, p.cpuAbiOverrideString,
p.appId, p.versionCode, p.pkgFlags, p.pkgPrivateFlags,
- p.parentPackageName, p.childPackageNames);
+ p.parentPackageName, p.childPackageNames, p.usesStaticLibraries,
+ p.usesStaticLibrariesVersions);
mDisabledSysPackages.remove(name);
return ret;
}
@@ -578,7 +581,8 @@
String legacyNativeLibraryPathString, String primaryCpuAbiString,
String secondaryCpuAbiString, String cpuAbiOverrideString, int uid, int vc, int
pkgFlags, int pkgPrivateFlags, String parentPackageName,
- List<String> childPackageNames) {
+ List<String> childPackageNames, String[] usesStaticLibraries,
+ int[] usesStaticLibraryNames) {
PackageSetting p = mPackages.get(name);
if (p != null) {
if (p.appId == uid) {
@@ -591,7 +595,7 @@
p = new PackageSetting(name, realName, codePath, resourcePath,
legacyNativeLibraryPathString, primaryCpuAbiString, secondaryCpuAbiString,
cpuAbiOverrideString, vc, pkgFlags, pkgPrivateFlags, parentPackageName,
- childPackageNames, 0 /*userId*/);
+ childPackageNames, 0 /*userId*/, usesStaticLibraries, usesStaticLibraryNames);
p.appId = uid;
if (addUserIdLPw(uid, p, name)) {
mPackages.put(name, p);
@@ -678,7 +682,8 @@
File codePath, File resourcePath, String legacyNativeLibraryPath, String primaryCpuAbi,
String secondaryCpuAbi, int versionCode, int pkgFlags, int pkgPrivateFlags,
UserHandle installUser, boolean allowInstall, String parentPkgName,
- List<String> childPkgNames, UserManagerService userManager) {
+ List<String> childPkgNames, UserManagerService userManager,
+ String[] usesStaticLibraries, int[] usesStaticLibrariesVersions) {
final PackageSetting pkgSetting;
if (originalPkg != null) {
if (PackageManagerService.DEBUG_UPGRADE) Log.v(PackageManagerService.TAG, "Package "
@@ -699,13 +704,16 @@
// overwrite the signatures in the original package setting.
pkgSetting.signatures = new PackageSignatures();
pkgSetting.versionCode = versionCode;
+ pkgSetting.usesStaticLibraries = usesStaticLibraries;
+ pkgSetting.usesStaticLibrariesVersions = usesStaticLibrariesVersions;
// Update new package state.
pkgSetting.setTimeStamp(codePath.lastModified());
} else {
pkgSetting = new PackageSetting(pkgName, realPkgName, codePath, resourcePath,
legacyNativeLibraryPath, primaryCpuAbi, secondaryCpuAbi,
null /*cpuAbiOverrideString*/, versionCode, pkgFlags, pkgPrivateFlags,
- parentPkgName, childPkgNames, 0 /*sharedUserId*/);
+ parentPkgName, childPkgNames, 0 /*sharedUserId*/, usesStaticLibraries,
+ usesStaticLibrariesVersions);
pkgSetting.setTimeStamp(codePath.lastModified());
pkgSetting.sharedUser = sharedUser;
// If this is not a system app, it starts out stopped.
@@ -782,7 +790,8 @@
@NonNull File codePath, @Nullable String legacyNativeLibraryPath,
@Nullable String primaryCpuAbi, @Nullable String secondaryCpuAbi,
int pkgFlags, int pkgPrivateFlags, @Nullable List<String> childPkgNames,
- @NonNull UserManagerService userManager) throws PackageManagerException {
+ @NonNull UserManagerService userManager, @Nullable String[] usesStaticLibraries,
+ @Nullable int[] usesStaticLibrariesVersions) throws PackageManagerException {
final String pkgName = pkgSetting.name;
if (pkgSetting.sharedUser != sharedUser) {
PackageManagerService.reportSettingsProblem(Log.WARN,
@@ -844,6 +853,14 @@
if (childPkgNames != null) {
pkgSetting.childPackageNames = new ArrayList<>(childPkgNames);
}
+ if (usesStaticLibraries != null) {
+ pkgSetting.usesStaticLibraries = Arrays.copyOf(usesStaticLibraries,
+ usesStaticLibraries.length);
+ }
+ if (usesStaticLibrariesVersions != null) {
+ pkgSetting.usesStaticLibrariesVersions = Arrays.copyOf(usesStaticLibrariesVersions,
+ usesStaticLibrariesVersions.length);
+ }
}
/**
@@ -949,6 +966,16 @@
if (p.sharedUser != null && p.sharedUser.signatures.mSignatures == null) {
p.sharedUser.signatures.assignSignatures(pkg.mSignatures);
}
+ // Update static shared library dependencies if needed
+ if (pkg.usesStaticLibraries != null && pkg.usesStaticLibrariesVersions != null
+ && pkg.usesStaticLibraries.size() == pkg.usesStaticLibrariesVersions.length) {
+ String[] usesStaticLibraries = new String[pkg.usesStaticLibraries.size()];
+ pkg.usesStaticLibraries.toArray(usesStaticLibraries);
+ p.usesStaticLibrariesVersions = pkg.usesStaticLibrariesVersions;
+ } else {
+ pkg.usesStaticLibraries = null;
+ p.usesStaticLibrariesVersions = null;
+ }
addPackageSettingLPw(p, p.sharedUser);
}
@@ -2163,6 +2190,53 @@
}
}
+ void readUsesStaticLibLPw(XmlPullParser parser, PackageSetting outPs)
+ throws IOException, XmlPullParserException {
+ int outerDepth = parser.getDepth();
+ int type;
+ while ((type = parser.next()) != XmlPullParser.END_DOCUMENT
+ && (type != XmlPullParser.END_TAG || parser.getDepth() > outerDepth)) {
+ if (type == XmlPullParser.END_TAG || type == XmlPullParser.TEXT) {
+ continue;
+ }
+ String libName = parser.getAttributeValue(null, ATTR_NAME);
+ String libVersionStr = parser.getAttributeValue(null, ATTR_VERSION);
+
+ int libVersion = -1;
+ try {
+ libVersion = Integer.parseInt(libVersionStr);
+ } catch (NumberFormatException e) {
+ // ignore
+ }
+
+ if (libName != null && libVersion >= 0) {
+ outPs.usesStaticLibraries = ArrayUtils.appendElement(String.class,
+ outPs.usesStaticLibraries, libName);
+ outPs.usesStaticLibrariesVersions = ArrayUtils.appendInt(
+ outPs.usesStaticLibrariesVersions, libVersion);
+ }
+
+ XmlUtils.skipCurrentTag(parser);
+ }
+ }
+
+ void writeUsesStaticLibLPw(XmlSerializer serializer, String[] usesStaticLibraries,
+ int[] usesStaticLibraryVersions) throws IOException {
+ if (ArrayUtils.isEmpty(usesStaticLibraries) || ArrayUtils.isEmpty(usesStaticLibraryVersions)
+ || usesStaticLibraries.length != usesStaticLibraryVersions.length) {
+ return;
+ }
+ final int libCount = usesStaticLibraries.length;
+ for (int i = 0; i < libCount; i++) {
+ final String libName = usesStaticLibraries[i];
+ final int libVersion = usesStaticLibraryVersions[i];
+ serializer.startTag(null, TAG_USES_STATIC_LIB);
+ serializer.attribute(null, ATTR_NAME, libName);
+ serializer.attribute(null, ATTR_VERSION, Integer.toString(libVersion));
+ serializer.endTag(null, TAG_USES_STATIC_LIB);
+ }
+ }
+
// Note: assumed "stopped" field is already cleared in all packages.
// Legacy reader, used to read in the old file format after an upgrade. Not used after that.
void readStoppedLPw() {
@@ -2622,6 +2696,8 @@
writeChildPackagesLPw(serializer, pkg.childPackageNames);
+ writeUsesStaticLibLPw(serializer, pkg.usesStaticLibraries, pkg.usesStaticLibrariesVersions);
+
// If this is a shared user, the permissions will be written there.
if (pkg.sharedUser == null) {
writePermissionsLPr(serializer, pkg.getPermissionsState()
@@ -2692,6 +2768,8 @@
writeChildPackagesLPw(serializer, pkg.childPackageNames);
+ writeUsesStaticLibLPw(serializer, pkg.usesStaticLibraries, pkg.usesStaticLibrariesVersions);
+
pkg.signatures.writeXml(serializer, "sigs", mPastSignatures);
writePermissionsLPr(serializer, pkg.getPermissionsState()
@@ -3465,7 +3543,7 @@
PackageSetting ps = new PackageSetting(name, realName, codePathFile,
new File(resourcePathStr), legacyNativeLibraryPathStr, primaryCpuAbiStr,
secondaryCpuAbiStr, cpuAbiOverrideStr, versionCode, pkgFlags, pkgPrivateFlags,
- parentPackageName, null /*childPackageNames*/, 0 /*sharedUserId*/);
+ parentPackageName, null /*childPackageNames*/, 0 /*sharedUserId*/, null, null);
String timeStampStr = parser.getAttributeValue(null, "ft");
if (timeStampStr != null) {
try {
@@ -3520,6 +3598,8 @@
ps.childPackageNames = new ArrayList<>();
}
ps.childPackageNames.add(childPackageName);
+ } else if (parser.getName().equals(TAG_USES_STATIC_LIB)) {
+ readUsesStaticLibLPw(parser, ps);
} else {
PackageManagerService.reportSettingsProblem(Log.WARN,
"Unknown element under <updated-package>: " + parser.getName());
@@ -3705,7 +3785,8 @@
packageSetting = addPackageLPw(name.intern(), realName, new File(codePathStr),
new File(resourcePathStr), legacyNativeLibraryPathStr, primaryCpuAbiString,
secondaryCpuAbiString, cpuAbiOverrideString, userId, versionCode, pkgFlags,
- pkgPrivateFlags, parentPackageName, null /*childPackageNames*/);
+ pkgPrivateFlags, parentPackageName, null /*childPackageNames*/,
+ null /*usesStaticLibraries*/, null /*usesStaticLibraryVersions*/);
if (PackageManagerService.DEBUG_SETTINGS)
Log.i(PackageManagerService.TAG, "Reading package " + name + ": userId="
+ userId + " pkg=" + packageSetting);
@@ -3724,7 +3805,8 @@
codePathStr), new File(resourcePathStr), legacyNativeLibraryPathStr,
primaryCpuAbiString, secondaryCpuAbiString, cpuAbiOverrideString,
versionCode, pkgFlags, pkgPrivateFlags, parentPackageName,
- null /*childPackageNames*/, sharedUserId);
+ null /*childPackageNames*/, sharedUserId,
+ null /*usesStaticLibraries*/, null /*usesStaticLibraryVersions*/);
packageSetting.setTimeStamp(timeStamp);
packageSetting.firstInstallTime = firstInstallTime;
packageSetting.lastUpdateTime = lastUpdateTime;
@@ -4294,6 +4376,7 @@
ApplicationInfo.PRIVATE_FLAG_RESIZEABLE_ACTIVITIES_EXPLICITLY_SET, "RESIZEABLE_ACTIVITIES_EXPLICITLY_SET",
ApplicationInfo.PRIVATE_FLAG_RESIZEABLE_ACTIVITIES_VIA_SDK_VERSION, "RESIZEABLE_ACTIVITIES_VIA_SDK_VERSION",
ApplicationInfo.PRIVATE_FLAG_BACKUP_IN_FOREGROUND, "BACKUP_IN_FOREGROUND",
+ ApplicationInfo.PRIVATE_FLAG_STATIC_SHARED_LIBRARY, "STATIC_SHARED_LIBRARY",
};
void dumpVersionLPr(IndentingPrintWriter pw) {
@@ -4486,23 +4569,39 @@
}
pw.println("]");
if (ps.pkg.libraryNames != null && ps.pkg.libraryNames.size() > 0) {
- pw.print(prefix); pw.println(" libraries:");
- for (int i=0; i<ps.pkg.libraryNames.size(); i++) {
- pw.print(prefix); pw.print(" "); pw.println(ps.pkg.libraryNames.get(i));
+ pw.print(prefix); pw.println(" dynamic libraries:");
+ for (int i = 0; i<ps.pkg.libraryNames.size(); i++) {
+ pw.print(prefix); pw.print(" ");
+ pw.println(ps.pkg.libraryNames.get(i));
}
}
+ if (ps.pkg.staticSharedLibName != null) {
+ pw.print(prefix); pw.println(" static library:");
+ pw.print(prefix); pw.print(" ");
+ pw.print("name:"); pw.print(ps.pkg.staticSharedLibName);
+ pw.print(" version:"); pw.println(ps.pkg.staticSharedLibVersion);
+ }
if (ps.pkg.usesLibraries != null && ps.pkg.usesLibraries.size() > 0) {
pw.print(prefix); pw.println(" usesLibraries:");
for (int i=0; i<ps.pkg.usesLibraries.size(); i++) {
pw.print(prefix); pw.print(" "); pw.println(ps.pkg.usesLibraries.get(i));
}
}
+ if (ps.pkg.usesStaticLibraries != null
+ && ps.pkg.usesStaticLibraries.size() > 0) {
+ pw.print(prefix); pw.println(" usesStaticLibraries:");
+ for (int i=0; i<ps.pkg.usesStaticLibraries.size(); i++) {
+ pw.print(prefix); pw.print(" ");
+ pw.print(ps.pkg.usesStaticLibraries.get(i)); pw.print(" version:");
+ pw.println(ps.pkg.usesStaticLibrariesVersions[i]);
+ }
+ }
if (ps.pkg.usesOptionalLibraries != null
&& ps.pkg.usesOptionalLibraries.size() > 0) {
pw.print(prefix); pw.println(" usesOptionalLibraries:");
for (int i=0; i<ps.pkg.usesOptionalLibraries.size(); i++) {
pw.print(prefix); pw.print(" ");
- pw.println(ps.pkg.usesOptionalLibraries.get(i));
+ pw.println(ps.pkg.usesOptionalLibraries.get(i));
}
}
if (ps.pkg.usesLibraryFiles != null
diff --git a/services/core/java/com/android/server/pm/ShortcutRequestPinProcessor.java b/services/core/java/com/android/server/pm/ShortcutRequestPinProcessor.java
index a156356..6e96726 100644
--- a/services/core/java/com/android/server/pm/ShortcutRequestPinProcessor.java
+++ b/services/core/java/com/android/server/pm/ShortcutRequestPinProcessor.java
@@ -203,19 +203,13 @@
// Next, validate the incoming shortcut, etc.
final PinItemRequest request;
if (inShortcut != null) {
- request = requestPinShortcutLocked(inShortcut, resultIntent, confirmActivity,
- true /* ignoreIfAlreadyPinned */);
+ request = requestPinShortcutLocked(inShortcut, resultIntent, confirmActivity);
} else {
int launcherUid = mService.injectGetPackageUid(
confirmActivity.first.getPackageName(), launcherUserId);
request = new PinItemRequest(inAppWidget,
new PinItemRequestInner(this, resultIntent, launcherUid));
}
-
- if (request == null) {
- sendResultIntent(resultIntent, null);
- return true;
- }
return startRequestConfirmActivity(confirmActivity.first, launcherUserId, request);
}
@@ -238,23 +232,17 @@
mService.throwIfUserLockedL(launcherUserId);
// Next, validate the incoming shortcut, etc.
- PinItemRequest request = requestPinShortcutLocked(inShortcut, null,
- Pair.create(defaultLauncher, launcherUserId), false /* ignoreIfAlreadyPinned */);
- if (request == null) {
- return null;
- }
+ final PinItemRequest request = requestPinShortcutLocked(inShortcut, null,
+ Pair.create(defaultLauncher, launcherUserId));
return new Intent().putExtra(LauncherApps.EXTRA_PIN_ITEM_REQUEST, request);
}
/**
* Handle {@link android.content.pm.ShortcutManager#requestPinShortcut)}.
- *
- * @param ignoreIfAlreadyPinned if true and the {@param inShortcut} is already pinned for
- * {@param confirmActivity}, null is returned instead.
*/
+ @NonNull
private PinItemRequest requestPinShortcutLocked(ShortcutInfo inShortcut,
- IntentSender resultIntent, Pair<ComponentName, Integer> confirmActivity,
- boolean ignoreIfAlreadyPinned) {
+ IntentSender resultIntentOriginal, Pair<ComponentName, Integer> confirmActivity) {
final ShortcutPackage ps = mService.getPackageShortcutsForPublisherLocked(
inShortcut.getPackage(), inShortcut.getUserId());
@@ -272,16 +260,20 @@
final String launcherPackage = confirmActivity.first.getPackageName();
final int launcherUserId = confirmActivity.second;
+ IntentSender resultIntentToSend = resultIntentOriginal;
+
if (existsAlready) {
validateExistingShortcut(existing);
final boolean isAlreadyPinned = mService.getLauncherShortcutsLocked(
launcherPackage, existing.getUserId(), launcherUserId).hasPinned(existing);
- // See if it's already pinned.
- if (ignoreIfAlreadyPinned && isAlreadyPinned) {
- Log.i(TAG, "Launcher's already pinning shortcut " + existing.getId()
- + " for package " + existing.getPackage());
- return null;
+ if (isAlreadyPinned) {
+ // When the shortcut is already pinned by this launcher, the request will always
+ // succeed, so just send the result at this point.
+ sendResultIntent(resultIntentOriginal, null);
+
+ // So, do not send the intent again.
+ resultIntentToSend = null;
}
// Pass a clone, not the original.
@@ -289,7 +281,7 @@
shortcutForLauncher = existing.clone(ShortcutInfo.CLONE_REMOVE_FOR_LAUNCHER);
if (!isAlreadyPinned) {
- // FLAG_PINNED is still set, if it's pinned by other launchers.
+ // FLAG_PINNED may still be set, if it's pinned by other launchers.
shortcutForLauncher.clearFlags(ShortcutInfo.FLAG_PINNED);
}
} else {
@@ -320,8 +312,8 @@
// Create a request object.
final PinShortcutRequestInner inner =
- new PinShortcutRequestInner(this, inShortcut, shortcutForLauncher, resultIntent,
- launcherPackage, launcherUserId,
+ new PinShortcutRequestInner(this, inShortcut, shortcutForLauncher,
+ resultIntentToSend, launcherPackage, launcherUserId,
mService.injectGetPackageUid(launcherPackage, launcherUserId),
existsAlready);
@@ -410,6 +402,16 @@
return false;
}
+ final ShortcutLauncher launcher = mService.getLauncherShortcutsLocked(
+ launcherPackage, appUserId, launcherUserId);
+ launcher.attemptToRestoreIfNeededAndSave();
+ if (launcher.hasPinned(original)) {
+ if (DEBUG) {
+ Slog.d(TAG, "Shortcut " + original + " already pinned.");
+ }
+ return true;
+ }
+
final ShortcutPackage ps = mService.getPackageShortcutsForPublisherLocked(
appPackageName, appUserId);
final ShortcutInfo current = ps.findShortcutById(shortcutId);
@@ -447,9 +449,6 @@
Slog.d(TAG, "Pinning " + shortcutId);
}
- final ShortcutLauncher launcher = mService.getLauncherShortcutsLocked(
- launcherPackage, appUserId, launcherUserId);
- launcher.attemptToRestoreIfNeededAndSave();
launcher.addPinnedShortcut(appPackageName, appUserId, shortcutId);
if (current == null) {
diff --git a/services/core/java/com/android/server/policy/PhoneWindowManager.java b/services/core/java/com/android/server/policy/PhoneWindowManager.java
index 32b8c9b..c25ad46 100644
--- a/services/core/java/com/android/server/policy/PhoneWindowManager.java
+++ b/services/core/java/com/android/server/policy/PhoneWindowManager.java
@@ -19,6 +19,8 @@
import static android.app.ActivityManager.StackId.DOCKED_STACK_ID;
import static android.app.ActivityManager.StackId.FREEFORM_WORKSPACE_STACK_ID;
import static android.app.ActivityManager.StackId.HOME_STACK_ID;
+import static android.content.Context.DISPLAY_SERVICE;
+import static android.content.Context.WINDOW_SERVICE;
import static android.content.pm.PackageManager.FEATURE_PICTURE_IN_PICTURE;
import static android.content.pm.PackageManager.FEATURE_TELEVISION;
import static android.content.pm.PackageManager.FEATURE_WATCH;
@@ -140,6 +142,7 @@
import android.database.ContentObserver;
import android.graphics.PixelFormat;
import android.graphics.Rect;
+import android.hardware.display.DisplayManager;
import android.hardware.hdmi.HdmiControlManager;
import android.hardware.hdmi.HdmiPlaybackClient;
import android.hardware.hdmi.HdmiPlaybackClient.OneTouchPlayCallback;
@@ -2254,8 +2257,7 @@
}
lp.format = PixelFormat.TRANSLUCENT;
lp.setTitle("PointerLocation");
- WindowManager wm = (WindowManager)
- mContext.getSystemService(Context.WINDOW_SERVICE);
+ WindowManager wm = (WindowManager) mContext.getSystemService(WINDOW_SERVICE);
lp.inputFeatures |= WindowManager.LayoutParams.INPUT_FEATURE_NO_INPUT_CHANNEL;
wm.addView(mPointerLocationView, lp);
mWindowManagerFuncs.registerPointerEventListener(mPointerLocationView);
@@ -2265,7 +2267,7 @@
private void disablePointerLocation() {
if (mPointerLocationView != null) {
mWindowManagerFuncs.unregisterPointerEventListener(mPointerLocationView);
- WindowManager wm = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE);
+ WindowManager wm = (WindowManager) mContext.getSystemService(WINDOW_SERVICE);
wm.removeView(mPointerLocationView);
mPointerLocationView = null;
}
@@ -2826,7 +2828,7 @@
@Override
public StartingSurface addSplashScreen(IBinder appToken, String packageName, int theme,
CompatibilityInfo compatInfo, CharSequence nonLocalizedLabel, int labelRes, int icon,
- int logo, int windowFlags, Configuration overrideConfig) {
+ int logo, int windowFlags, Configuration overrideConfig, int displayId) {
if (!SHOW_SPLASH_SCREENS) {
return null;
}
@@ -2927,7 +2929,13 @@
params.setTitle("Splash Screen " + packageName);
- wm = (WindowManager)context.getSystemService(Context.WINDOW_SERVICE);
+ // Obtain proper context to launch on the right display.
+ final Context displayContext = getDisplayContext(context, displayId);
+ if (displayContext == null) {
+ // Can't show splash screen on requested display, so skip showing at all.
+ return null;
+ }
+ wm = (WindowManager) displayContext.getSystemService(WINDOW_SERVICE);
view = win.getDecorView();
if (DEBUG_SPLASH_SCREEN) Slog.d(TAG, "Adding splash screen window for "
@@ -2957,6 +2965,24 @@
return null;
}
+ /** Obtain proper context for showing splash screen on the provided display. */
+ private Context getDisplayContext(Context context, int displayId) {
+ if (displayId == Display.DEFAULT_DISPLAY) {
+ // The default context fits.
+ return context;
+ }
+
+ final DisplayManager dm = (DisplayManager) context.getSystemService(DISPLAY_SERVICE);
+ final Display targetDisplay = dm.getDisplay(displayId);
+ if (targetDisplay == null) {
+ // Failed to obtain the non-default display where splash screen should be shown,
+ // lets not show at all.
+ return null;
+ }
+
+ return context.createDisplayContext(targetDisplay);
+ }
+
/**
* Preflight adding a window to the system.
*
diff --git a/services/core/java/com/android/server/power/PowerManagerService.java b/services/core/java/com/android/server/power/PowerManagerService.java
index 8aefebc..e1b6c87 100644
--- a/services/core/java/com/android/server/power/PowerManagerService.java
+++ b/services/core/java/com/android/server/power/PowerManagerService.java
@@ -57,6 +57,7 @@
import android.service.vr.IVrManager;
import android.service.vr.IVrStateCallbacks;
import android.util.EventLog;
+import android.util.Log;
import android.util.PrintWriterPrinter;
import android.util.Slog;
import android.util.SparseArray;
@@ -69,6 +70,7 @@
import com.android.internal.os.BackgroundThread;
import com.android.internal.util.ArrayUtils;
import com.android.server.EventLogTags;
+import com.android.server.RescueParty;
import com.android.server.ServiceThread;
import com.android.server.SystemService;
import com.android.server.Watchdog;
@@ -2549,7 +2551,14 @@
private void shutdownOrRebootInternal(final @HaltMode int haltMode, final boolean confirm,
final String reason, boolean wait) {
if (mHandler == null || !mSystemReady) {
- throw new IllegalStateException("Too early to call shutdown() or reboot()");
+ if (RescueParty.isAttemptingFactoryReset()) {
+ // If we're stuck in a really low-level reboot loop, and a
+ // rescue party is trying to prompt the user for a factory data
+ // reset, we must GET TO DA CHOPPA!
+ PowerManagerService.lowLevelReboot(reason);
+ } else {
+ throw new IllegalStateException("Too early to call shutdown() or reboot()");
+ }
}
Runnable runnable = new Runnable() {
diff --git a/services/core/java/com/android/server/storage/DeviceStorageMonitorService.java b/services/core/java/com/android/server/storage/DeviceStorageMonitorService.java
index 90c711a..a3837b2 100644
--- a/services/core/java/com/android/server/storage/DeviceStorageMonitorService.java
+++ b/services/core/java/com/android/server/storage/DeviceStorageMonitorService.java
@@ -338,9 +338,11 @@
mTotalMemory = (long)mDataFileStats.getBlockCount() *
mDataFileStats.getBlockSize();
mStorageLowIntent = new Intent(Intent.ACTION_DEVICE_STORAGE_LOW);
- mStorageLowIntent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT);
+ mStorageLowIntent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT
+ | Intent.FLAG_RECEIVER_INCLUDE_BACKGROUND);
mStorageOkIntent = new Intent(Intent.ACTION_DEVICE_STORAGE_OK);
- mStorageOkIntent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT);
+ mStorageOkIntent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT
+ | Intent.FLAG_RECEIVER_INCLUDE_BACKGROUND);
mStorageFullIntent = new Intent(Intent.ACTION_DEVICE_STORAGE_FULL);
mStorageFullIntent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT);
mStorageNotFullIntent = new Intent(Intent.ACTION_DEVICE_STORAGE_NOT_FULL);
diff --git a/services/core/java/com/android/server/trust/TrustAgentWrapper.java b/services/core/java/com/android/server/trust/TrustAgentWrapper.java
index e7c5384..6c1648c 100644
--- a/services/core/java/com/android/server/trust/TrustAgentWrapper.java
+++ b/services/core/java/com/android/server/trust/TrustAgentWrapper.java
@@ -321,6 +321,19 @@
}
/**
+ * @see android.service.trust.TrustAgentService#onUnlockLockout(int)
+ */
+ public void onUnlockLockout(int timeoutMs) {
+ try {
+ if (mTrustAgentService != null) {
+ mTrustAgentService.onUnlockLockout(timeoutMs);
+ }
+ } catch (RemoteException e) {
+ onError(e);
+ }
+ }
+
+ /**
* @see android.service.trust.TrustAgentService#onDeviceLocked()
*/
public void onDeviceLocked() {
diff --git a/services/core/java/com/android/server/trust/TrustManagerService.java b/services/core/java/com/android/server/trust/TrustManagerService.java
index c69b87c..71b725e 100644
--- a/services/core/java/com/android/server/trust/TrustManagerService.java
+++ b/services/core/java/com/android/server/trust/TrustManagerService.java
@@ -105,6 +105,7 @@
private static final int MSG_FLUSH_TRUST_USUALLY_MANAGED = 10;
private static final int MSG_UNLOCK_USER = 11;
private static final int MSG_STOP_USER = 12;
+ private static final int MSG_DISPATCH_UNLOCK_LOCKOUT = 13;
private static final int TRUST_USUALLY_MANAGED_FLUSH_DELAY = 2 * 60 * 1000;
@@ -335,13 +336,16 @@
if (!mStrongAuthTracker.canAgentsRunForUser(userInfo.id)) {
int flag = mStrongAuthTracker.getStrongAuthForUser(userInfo.id);
- if (flag != StrongAuthTracker.STRONG_AUTH_REQUIRED_AFTER_BOOT
- || !directUnlock) {
- if (DEBUG) Slog.d(TAG, "refreshAgentList: skipping user " + userInfo.id
- + ": prevented by StrongAuthTracker = 0x"
- + Integer.toHexString(mStrongAuthTracker.getStrongAuthForUser(
- userInfo.id)));
- continue;
+ if (flag != StrongAuthTracker.STRONG_AUTH_REQUIRED_AFTER_LOCKOUT) {
+ if (flag != StrongAuthTracker.STRONG_AUTH_REQUIRED_AFTER_BOOT
+ || !directUnlock) {
+ if (DEBUG)
+ Slog.d(TAG, "refreshAgentList: skipping user " + userInfo.id
+ + ": prevented by StrongAuthTracker = 0x"
+ + Integer.toHexString(mStrongAuthTracker.getStrongAuthForUser(
+ userInfo.id)));
+ continue;
+ }
}
}
@@ -650,6 +654,15 @@
}
}
+ private void dispatchUnlockLockout(int timeoutMs, int userId) {
+ for (int i = 0; i < mActiveAgents.size(); i++) {
+ AgentInfo info = mActiveAgents.valueAt(i);
+ if (info.userId == userId) {
+ info.agent.onUnlockLockout(timeoutMs);
+ }
+ }
+ }
+
// Listeners
private void addListener(ITrustListener listener) {
@@ -745,6 +758,13 @@
}
@Override
+ public void reportUnlockLockout(int timeoutMs, int userId) throws RemoteException {
+ enforceReportPermission();
+ mHandler.obtainMessage(MSG_DISPATCH_UNLOCK_LOCKOUT, timeoutMs, userId)
+ .sendToTarget();
+ }
+
+ @Override
public void reportEnabledTrustAgentsChanged(int userId) throws RemoteException {
enforceReportPermission();
// coalesce refresh messages.
@@ -975,6 +995,9 @@
case MSG_DISPATCH_UNLOCK_ATTEMPT:
dispatchUnlockAttempt(msg.arg1 != 0, msg.arg2);
break;
+ case MSG_DISPATCH_UNLOCK_LOCKOUT:
+ dispatchUnlockLockout(msg.arg1, msg.arg2);
+ break;
case MSG_ENABLED_AGENTS_CHANGED:
refreshAgentList(UserHandle.USER_ALL);
// This is also called when the security mode of a user changes.
diff --git a/services/core/java/com/android/server/vr/CompatibilityDisplay.java b/services/core/java/com/android/server/vr/CompatibilityDisplay.java
new file mode 100644
index 0000000..15edaaf
--- /dev/null
+++ b/services/core/java/com/android/server/vr/CompatibilityDisplay.java
@@ -0,0 +1,119 @@
+
+package com.android.server.vr;
+
+import android.app.Service;
+import android.content.Context;
+import android.content.Intent;
+import android.hardware.display.DisplayManager;
+import android.hardware.display.VirtualDisplay;
+import android.os.Build;
+import android.os.Handler;
+import android.os.IBinder;
+import android.os.RemoteException;
+import android.os.ServiceManager;
+import android.service.vr.IVrStateCallbacks;
+import android.service.vr.IVrManager;
+import android.util.Log;
+
+import com.android.server.vr.VrManagerService;
+
+/**
+ * Creates a 2D Virtual Display while VR Mode is enabled. This display will be used to run and
+ * render 2D app within a VR experience. For example, bringing up the 2D calculator app in VR.
+ */
+class CompatibilityDisplay {
+ private final static String TAG = "CompatDisplay";
+ private final static boolean DEBUG = false;
+
+ // TODO: Go over these values and figure out what is best
+ private final static int HEIGHT = 960;
+ private final static int WIDTH = 720;
+ private final static int DPI = 320;
+
+ private final DisplayManager mDisplayManager;
+ private final IVrManager mVrManager;
+
+ // TODO: Lock initially created when VrStateCallback was connected through Binder. This may not
+ // be necessary with the direct access to VrManager.
+ private final Object vdLock = new Object();
+
+ private final IVrStateCallbacks mVrStateCallbacks = new IVrStateCallbacks.Stub() {
+ @Override
+ public void onVrStateChanged(boolean enabled) {
+ if (enabled != mIsVrModeEnabled) {
+ mIsVrModeEnabled = enabled;
+ if (enabled) {
+ // TODO: Consider not creating the display until ActivityManager needs one on
+ // which to display a 2D application.
+ startVirtualDisplay();
+ } else {
+ stopVirtualDisplay();
+ }
+ }
+ }
+ };
+
+ private VirtualDisplay mVirtualDisplay;
+ private boolean mIsVrModeEnabled;
+
+ public CompatibilityDisplay(DisplayManager displayManager, IVrManager vrManager) {
+ mDisplayManager = displayManager;
+ mVrManager = vrManager;
+ }
+
+ /**
+ * Initializes the compabilitiy display by listening to VR mode changes.
+ */
+ public void init() {
+ startVrModeListener();
+ }
+
+ private void startVrModeListener() {
+ if (mVrManager != null) {
+ try {
+ mVrManager.registerListener(mVrStateCallbacks);
+ } catch (RemoteException e) {
+ Log.e(TAG, "Could not register VR State listener.", e);
+ }
+ }
+ }
+
+ private void startVirtualDisplay() {
+ if (DEBUG) {
+ Log.d(TAG, "Starting VD, DM:" + mDisplayManager);
+ }
+
+ if (mDisplayManager == null) {
+ Log.w(TAG, "Cannot create virtual display because mDisplayManager == null");
+ return;
+ }
+
+ synchronized (vdLock) {
+ if (mVirtualDisplay != null) {
+ Log.e(TAG, "Starting the virtual display when one already exists", new Exception());
+ return;
+ }
+
+ mVirtualDisplay = mDisplayManager.createVirtualDisplay("VR 2D Display", WIDTH, HEIGHT,
+ DPI,
+ null /* Surface */, 0 /* flags */);
+ }
+
+ if (DEBUG) {
+ Log.d(TAG, "VD created: " + mVirtualDisplay);
+ }
+ }
+
+ private void stopVirtualDisplay() {
+ if (DEBUG) {
+ Log.i(TAG, "Santos, stopping VD");
+ }
+
+ synchronized (vdLock) {
+ if (mVirtualDisplay != null) {
+ mVirtualDisplay.release();
+ mVirtualDisplay = null;
+ }
+ }
+ }
+}
diff --git a/services/core/java/com/android/server/vr/VrManagerService.java b/services/core/java/com/android/server/vr/VrManagerService.java
index 84cf0c6..57587b0 100644
--- a/services/core/java/com/android/server/vr/VrManagerService.java
+++ b/services/core/java/com/android/server/vr/VrManagerService.java
@@ -31,6 +31,7 @@
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
+import android.hardware.display.DisplayManager;
import android.os.Binder;
import android.os.Handler;
import android.os.IBinder;
@@ -51,6 +52,7 @@
import android.util.ArraySet;
import android.util.Slog;
import android.util.SparseArray;
+
import com.android.internal.R;
import com.android.server.LocalServices;
import com.android.server.SystemConfig;
@@ -136,6 +138,7 @@
private final NotificationAccessManager mNotifAccessManager = new NotificationAccessManager();
/** Tracks the state of the screen and keyguard UI.*/
private int mSystemSleepFlags = FLAG_NONE;
+ private CompatibilityDisplay mCompatibilityDisplay;
private static final int MSG_VR_STATE_CHANGE = 0;
private static final int MSG_PENDING_VR_STATE_CHANGE = 1;
@@ -493,6 +496,11 @@
mComponentObserver.rebuildAll();
}
+
+ DisplayManager dm =
+ (DisplayManager) getContext().getSystemService(Context.DISPLAY_SERVICE);
+ mCompatibilityDisplay = new CompatibilityDisplay(dm, mVrManager);
+ mCompatibilityDisplay.init();
} else if (phase == SystemService.PHASE_THIRD_PARTY_APPS_CAN_START) {
synchronized (mLock) {
mVrModeAllowed = true;
diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java
index 592eaec..505051f 100644
--- a/services/core/java/com/android/server/wm/DisplayContent.java
+++ b/services/core/java/com/android/server/wm/DisplayContent.java
@@ -1488,6 +1488,13 @@
boolean canAddToastWindowForUid(int uid) {
// We allow one toast window per UID being shown at a time.
+ // Also if the app is focused adding more than one toast at
+ // a time for better backwards compatibility.
+ final WindowState focusedWindowForUid = getWindow(w ->
+ w.mOwnerUid == uid && w.isFocused());
+ if (focusedWindowForUid != null) {
+ return true;
+ }
final WindowState win = getWindow(w ->
w.mAttrs.type == TYPE_TOAST && w.mOwnerUid == uid && !w.mPermanentlyHidden
&& !w.mWindowRemovalAllowed);
diff --git a/services/core/java/com/android/server/wm/PinnedStackController.java b/services/core/java/com/android/server/wm/PinnedStackController.java
index bfb4269..08f9b45 100644
--- a/services/core/java/com/android/server/wm/PinnedStackController.java
+++ b/services/core/java/com/android/server/wm/PinnedStackController.java
@@ -333,7 +333,9 @@
*/
void setActions(List<RemoteAction> actions) {
mActions.clear();
- mActions.addAll(actions);
+ if (actions != null) {
+ mActions.addAll(actions);
+ }
notifyActionsChanged(mActions);
}
diff --git a/services/core/java/com/android/server/wm/SplashScreenStartingData.java b/services/core/java/com/android/server/wm/SplashScreenStartingData.java
index ee4209f..4b14f86 100644
--- a/services/core/java/com/android/server/wm/SplashScreenStartingData.java
+++ b/services/core/java/com/android/server/wm/SplashScreenStartingData.java
@@ -54,6 +54,6 @@
StartingSurface createStartingSurface(AppWindowToken atoken) {
return mService.mPolicy.addSplashScreen(atoken.token, mPkg, mTheme, mCompatInfo,
mNonLocalizedLabel, mLabelRes, mIcon, mLogo, mWindowFlags,
- mMergedOverrideConfiguration);
+ mMergedOverrideConfiguration, atoken.getDisplayContent().getDisplayId());
}
}
diff --git a/services/core/java/com/android/server/wm/TaskSnapshotController.java b/services/core/java/com/android/server/wm/TaskSnapshotController.java
index df8679d..10ecf3b 100644
--- a/services/core/java/com/android/server/wm/TaskSnapshotController.java
+++ b/services/core/java/com/android/server/wm/TaskSnapshotController.java
@@ -22,11 +22,13 @@
import android.app.ActivityManager.StackId;
import android.app.ActivityManager.TaskSnapshot;
import android.graphics.GraphicBuffer;
+import android.os.Environment;
import android.util.ArraySet;
import android.view.WindowManagerPolicy.StartingSurface;
import com.android.internal.annotations.VisibleForTesting;
+import java.io.File;
import java.io.PrintWriter;
/**
@@ -45,14 +47,21 @@
class TaskSnapshotController {
private final WindowManagerService mService;
- private final TaskSnapshotCache mCache = new TaskSnapshotCache();
+ private final TaskSnapshotCache mCache = new TaskSnapshotCache();
+ private final TaskSnapshotPersister mPersister = new TaskSnapshotPersister(
+ Environment::getDataSystemCeDirectory);
+ private final TaskSnapshotLoader mLoader = new TaskSnapshotLoader(mPersister);
private final ArraySet<Task> mTmpTasks = new ArraySet<>();
TaskSnapshotController(WindowManagerService service) {
mService = service;
}
+ void systemReady() {
+ mPersister.start();
+ }
+
void onTransitionStarting() {
if (!ENABLE_TASK_SNAPSHOTS) {
return;
@@ -69,6 +78,7 @@
final TaskSnapshot snapshot = snapshotTask(task);
if (snapshot != null) {
mCache.putSnapshot(task, snapshot);
+ mPersister.persistSnapshot(task.mTaskId, task.mUserId, snapshot);
if (task.getController() != null) {
task.getController().reportSnapshotChanged(snapshot);
}
@@ -141,6 +151,17 @@
mCache.cleanCache(wtoken);
}
+ void notifyTaskRemovedFromRecents(int taskId, int userId) {
+ mPersister.onTaskRemovedFromRecents(taskId, userId);
+ }
+
+ /**
+ * See {@link TaskSnapshotPersister#removeObsoleteFiles}
+ */
+ void removeObsoleteTaskFiles(ArraySet<Integer> persistentTaskIds, int[] runningUserIds) {
+ mPersister.removeObsoleteFiles(persistentTaskIds, runningUserIds);
+ }
+
void dump(PrintWriter pw, String prefix) {
mCache.dump(pw, prefix);
}
diff --git a/services/core/java/com/android/server/wm/TaskSnapshotLoader.java b/services/core/java/com/android/server/wm/TaskSnapshotLoader.java
new file mode 100644
index 0000000..4340822
--- /dev/null
+++ b/services/core/java/com/android/server/wm/TaskSnapshotLoader.java
@@ -0,0 +1,93 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+
+package com.android.server.wm;
+
+import static com.android.server.wm.WindowManagerDebugConfig.TAG_WITH_CLASS_NAME;
+import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM;
+
+import android.app.ActivityManager.TaskSnapshot;
+import android.graphics.Bitmap;
+import android.graphics.Bitmap.Config;
+import android.graphics.BitmapFactory;
+import android.graphics.BitmapFactory.Options;
+import android.graphics.GraphicBuffer;
+import android.graphics.Rect;
+import android.util.Slog;
+
+import com.android.server.wm.nano.WindowManagerProtos.TaskSnapshotProto;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.file.Files;
+
+/**
+ * Loads a persisted {@link TaskSnapshot} from disk.
+ * <p>
+ * Do not hold the window manager lock when accessing this class.
+ * <p>
+ * Test class: {@link TaskSnapshotPersisterLoaderTest}
+ */
+class TaskSnapshotLoader {
+
+ private static final String TAG = TAG_WITH_CLASS_NAME ? "TaskSnapshotLoader" : TAG_WM;
+
+ private final TaskSnapshotPersister mPersister;
+
+ TaskSnapshotLoader(TaskSnapshotPersister persister) {
+ mPersister = persister;
+ }
+
+ /**
+ * Loads a task from the disk.
+ * <p>
+ * Do not hold the window manager lock when calling this method, as we directly read data from
+ * disk here, which might be slow.
+ *
+ * @param taskId The id of the task to load.
+ * @param userId The id of the user the task belonged to.
+ * @return The loaded {@link TaskSnapshot} or {@code null} if it couldn't be loaded.
+ */
+ TaskSnapshot loadTask(int taskId, int userId) {
+ final File protoFile = mPersister.getProtoFile(taskId, userId);
+ final File bitmapFile = mPersister.getBitmapFile(taskId, userId);
+ if (!protoFile.exists() || !bitmapFile.exists()) {
+ return null;
+ }
+ try {
+ final byte[] bytes = Files.readAllBytes(protoFile.toPath());
+ final TaskSnapshotProto proto = TaskSnapshotProto.parseFrom(bytes);
+ final Options options = new Options();
+ options.inPreferredConfig = Config.HARDWARE;
+ final Bitmap bitmap = BitmapFactory.decodeFile(bitmapFile.getPath(), options);
+ if (bitmap == null) {
+ Slog.w(TAG, "Failed to load bitmap: " + bitmapFile.getPath());
+ return null;
+ }
+ final GraphicBuffer buffer = bitmap.createGraphicBufferHandle();
+ if (buffer == null) {
+ Slog.w(TAG, "Failed to retrieve gralloc buffer for bitmap: "
+ + bitmapFile.getPath());
+ return null;
+ }
+ return new TaskSnapshot(buffer, proto.orientation,
+ new Rect(proto.insetLeft, proto.insetTop, proto.insetRight, proto.insetBottom));
+ } catch (IOException e) {
+ Slog.w(TAG, "Unable to load task snapshot data for taskId=" + taskId);
+ return null;
+ }
+ }
+}
diff --git a/services/core/java/com/android/server/wm/TaskSnapshotPersister.java b/services/core/java/com/android/server/wm/TaskSnapshotPersister.java
new file mode 100644
index 0000000..3a06c38
--- /dev/null
+++ b/services/core/java/com/android/server/wm/TaskSnapshotPersister.java
@@ -0,0 +1,335 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+
+package com.android.server.wm;
+
+import static com.android.server.wm.WindowManagerDebugConfig.TAG_WITH_CLASS_NAME;
+import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM;
+
+import android.annotation.TestApi;
+import android.app.ActivityManager.TaskSnapshot;
+import android.graphics.Bitmap;
+import android.graphics.Bitmap.CompressFormat;
+import android.os.Process;
+import android.os.SystemClock;
+import android.util.ArraySet;
+import android.util.Slog;
+
+import com.android.internal.annotations.GuardedBy;
+import com.android.internal.annotations.VisibleForTesting;
+import com.android.internal.os.AtomicFile;
+import com.android.server.wm.nano.WindowManagerProtos.TaskSnapshotProto;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.util.ArrayDeque;
+
+/**
+ * Persists {@link TaskSnapshot}s to disk.
+ * <p>
+ * Test class: {@link TaskSnapshotPersisterLoaderTest}
+ */
+class TaskSnapshotPersister {
+
+ private static final String TAG = TAG_WITH_CLASS_NAME ? "TaskSnapshotPersister" : TAG_WM;
+ private static final String SNAPSHOTS_DIRNAME = "snapshots";
+ private static final long DELAY_MS = 100;
+ private static final String PROTO_EXTENSION = ".proto";
+ private static final String BITMAP_EXTENSION = ".png";
+
+ @GuardedBy("mLock")
+ private final ArrayDeque<WriteQueueItem> mWriteQueue = new ArrayDeque<>();
+ @GuardedBy("mLock")
+ private boolean mQueueIdling;
+ private boolean mStarted;
+ private final Object mLock = new Object();
+ private final DirectoryResolver mDirectoryResolver;
+
+ /**
+ * The list of ids of the tasks that have been persisted since {@link #removeObsoleteFiles} was
+ * called.
+ */
+ @GuardedBy("mLock")
+ private final ArraySet<Integer> mPersistedTaskIdsSinceLastRemoveObsolete = new ArraySet<>();
+
+ TaskSnapshotPersister(DirectoryResolver resolver) {
+ mDirectoryResolver = resolver;
+ }
+
+ /**
+ * Starts persisting.
+ */
+ void start() {
+ if (!mStarted) {
+ mStarted = true;
+ mPersister.start();
+ }
+ }
+
+ /**
+ * Persists a snapshot of a task to disk.
+ *
+ * @param taskId The id of the task that needs to be persisted.
+ * @param userId The id of the user this tasks belongs to.
+ * @param snapshot The snapshot to persist.
+ */
+ void persistSnapshot(int taskId, int userId, TaskSnapshot snapshot) {
+ synchronized (mLock) {
+ mPersistedTaskIdsSinceLastRemoveObsolete.add(taskId);
+ sendToQueueLocked(new StoreWriteQueueItem(taskId, userId, snapshot));
+ }
+ }
+
+ /**
+ * Callend when a task has been removed.
+ *
+ * @param taskId The id of task that has been removed.
+ * @param userId The id of the user the task belonged to.
+ */
+ void onTaskRemovedFromRecents(int taskId, int userId) {
+ synchronized (mLock) {
+ mPersistedTaskIdsSinceLastRemoveObsolete.remove(taskId);
+ sendToQueueLocked(new DeleteWriteQueueItem(taskId, userId));
+ }
+ }
+
+ /**
+ * In case a write/delete operation was lost because the system crashed, this makes sure to
+ * clean up the directory to remove obsolete files.
+ *
+ * @param persistentTaskIds A set of task ids that exist in our in-memory model.
+ * @param runningUserIds The ids of the list of users that have tasks loaded in our in-memory
+ * model.
+ */
+ void removeObsoleteFiles(ArraySet<Integer> persistentTaskIds, int[] runningUserIds) {
+ synchronized (mLock) {
+ mPersistedTaskIdsSinceLastRemoveObsolete.clear();
+ sendToQueueLocked(new RemoveObsoleteFilesQueueItem(persistentTaskIds, runningUserIds));
+ }
+ }
+
+ @TestApi
+ void waitForQueueEmpty() {
+ while (true) {
+ synchronized (mLock) {
+ if (mWriteQueue.isEmpty() && mQueueIdling) {
+ return;
+ }
+ }
+ SystemClock.sleep(100);
+ }
+ }
+
+ @GuardedBy("mLock")
+ private void sendToQueueLocked(WriteQueueItem item) {
+ mWriteQueue.offer(item);
+ mLock.notifyAll();
+ }
+
+ private File getDirectory(int userId) {
+ return new File(mDirectoryResolver.getSystemDirectoryForUser(userId), SNAPSHOTS_DIRNAME);
+ }
+
+ File getProtoFile(int taskId, int userId) {
+ return new File(getDirectory(userId), taskId + PROTO_EXTENSION);
+ }
+
+ File getBitmapFile(int taskId, int userId) {
+ return new File(getDirectory(userId), taskId + BITMAP_EXTENSION);
+ }
+
+ private boolean createDirectory(int userId) {
+ final File dir = getDirectory(userId);
+ return dir.exists() || dir.mkdirs();
+ }
+
+ private void deleteSnapshot(int taskId, int userId) {
+ final File protoFile = getProtoFile(taskId, userId);
+ final File bitmapFile = getBitmapFile(taskId, userId);
+ protoFile.delete();
+ bitmapFile.delete();
+ }
+
+ interface DirectoryResolver {
+ File getSystemDirectoryForUser(int userId);
+ }
+
+ private Thread mPersister = new Thread("TaskSnapshotPersister") {
+ public void run() {
+ android.os.Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND);
+ while (true) {
+ WriteQueueItem next;
+ synchronized (mLock) {
+ next = mWriteQueue.poll();
+ }
+ if (next != null) {
+ next.write();
+ SystemClock.sleep(DELAY_MS);
+ }
+ synchronized (mLock) {
+ if (!mWriteQueue.isEmpty()) {
+ continue;
+ }
+ try {
+ mQueueIdling = true;
+ mLock.wait();
+ mQueueIdling = false;
+ } catch (InterruptedException e) {
+ }
+ }
+ }
+ }
+ };
+
+ private abstract class WriteQueueItem {
+ abstract void write();
+ }
+
+ private class StoreWriteQueueItem extends WriteQueueItem {
+ private final int mTaskId;
+ private final int mUserId;
+ private final TaskSnapshot mSnapshot;
+
+ StoreWriteQueueItem(int taskId, int userId, TaskSnapshot snapshot) {
+ mTaskId = taskId;
+ mUserId = userId;
+ mSnapshot = snapshot;
+ }
+
+ @Override
+ void write() {
+ if (!createDirectory(mUserId)) {
+ Slog.e(TAG, "Unable to create snapshot directory for user dir="
+ + getDirectory(mUserId));
+ }
+ boolean failed = false;
+ if (!writeProto()) {
+ failed = true;
+ }
+ if (!writeBuffer()) {
+ writeBuffer();
+ failed = true;
+ }
+ if (failed) {
+ deleteSnapshot(mTaskId, mUserId);
+ }
+ }
+
+ boolean writeProto() {
+ final TaskSnapshotProto proto = new TaskSnapshotProto();
+ proto.orientation = mSnapshot.getOrientation();
+ proto.insetLeft = mSnapshot.getContentInsets().left;
+ proto.insetTop = mSnapshot.getContentInsets().top;
+ proto.insetRight = mSnapshot.getContentInsets().right;
+ proto.insetBottom = mSnapshot.getContentInsets().bottom;
+ final byte[] bytes = TaskSnapshotProto.toByteArray(proto);
+ final File file = getProtoFile(mTaskId, mUserId);
+ final AtomicFile atomicFile = new AtomicFile(file);
+ FileOutputStream fos = null;
+ try {
+ fos = atomicFile.startWrite();
+ fos.write(bytes);
+ atomicFile.finishWrite(fos);
+ } catch (IOException e) {
+ atomicFile.failWrite(fos);
+ Slog.e(TAG, "Unable to open " + file + " for persisting. " + e);
+ return false;
+ }
+ return true;
+ }
+
+ boolean writeBuffer() {
+ final File file = getBitmapFile(mTaskId, mUserId);
+ final Bitmap bitmap = Bitmap.createHardwareBitmap(mSnapshot.getSnapshot());
+ try {
+ FileOutputStream fos = new FileOutputStream(file);
+ bitmap.compress(CompressFormat.PNG, 0 /* quality */, fos);
+ fos.close();
+ } catch (IOException e) {
+ Slog.e(TAG, "Unable to open " + file + " for persisting. " + e);
+ return false;
+ }
+ return true;
+ }
+ }
+
+ private class DeleteWriteQueueItem extends WriteQueueItem {
+ private final int mTaskId;
+ private final int mUserId;
+
+ DeleteWriteQueueItem(int taskId, int userId) {
+ mTaskId = taskId;
+ mUserId = userId;
+ }
+
+ @Override
+ void write() {
+ deleteSnapshot(mTaskId, mUserId);
+ }
+ }
+
+ @VisibleForTesting
+ class RemoveObsoleteFilesQueueItem extends WriteQueueItem {
+ private final ArraySet<Integer> mPersistentTaskIds;
+ private final int[] mRunningUserIds;
+
+ @VisibleForTesting
+ RemoveObsoleteFilesQueueItem(ArraySet<Integer> persistentTaskIds,
+ int[] runningUserIds) {
+ mPersistentTaskIds = persistentTaskIds;
+ mRunningUserIds = runningUserIds;
+ }
+
+ @Override
+ void write() {
+ final ArraySet<Integer> newPersistedTaskIds;
+ synchronized (mLock) {
+ newPersistedTaskIds = new ArraySet<>(mPersistedTaskIdsSinceLastRemoveObsolete);
+ }
+ for (int userId : mRunningUserIds) {
+ final File dir = getDirectory(userId);
+ final String[] files = dir.list();
+ if (files == null) {
+ continue;
+ }
+ for (String file : files) {
+ final int taskId = getTaskId(file);
+ if (!mPersistentTaskIds.contains(taskId)
+ && !newPersistedTaskIds.contains(taskId)) {
+ new File(dir, file).delete();
+ }
+ }
+ }
+ }
+
+ @VisibleForTesting
+ int getTaskId(String fileName) {
+ if (!fileName.endsWith(PROTO_EXTENSION) && !fileName.endsWith(BITMAP_EXTENSION)) {
+ return -1;
+ }
+ final int end = fileName.lastIndexOf('.');
+ if (end == -1) {
+ return -1;
+ }
+ try {
+ return Integer.parseInt(fileName.substring(0, end));
+ } catch (NumberFormatException e) {
+ return -1;
+ }
+ }
+ }
+}
diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java
index dcc0c6f..9a6cd2c 100644
--- a/services/core/java/com/android/server/wm/WindowManagerService.java
+++ b/services/core/java/com/android/server/wm/WindowManagerService.java
@@ -1115,7 +1115,8 @@
+ displayId + ". Aborting.");
return WindowManagerGlobal.ADD_INVALID_DISPLAY;
}
- if (!displayContent.hasAccess(session.mUid)) {
+ if (!displayContent.hasAccess(session.mUid)
+ && !mDisplayManagerInternal.isUidPresentOnDisplay(session.mUid, displayId)) {
Slog.w(TAG_WM, "Attempted to add window to a display for which the application "
+ "does not have access: " + displayId + ". Aborting.");
return WindowManagerGlobal.ADD_INVALID_DISPLAY;
@@ -3902,6 +3903,20 @@
}
/**
+ * In case a task write/delete operation was lost because the system crashed, this makes sure to
+ * clean up the directory to remove obsolete files.
+ *
+ * @param persistentTaskIds A set of task ids that exist in our in-memory model.
+ * @param runningUserIds The ids of the list of users that have tasks loaded in our in-memory
+ * model.
+ */
+ public void removeObsoleteTaskFiles(ArraySet<Integer> persistentTaskIds, int[] runningUserIds) {
+ synchronized (mWindowMap) {
+ mTaskSnapshotController.removeObsoleteTaskFiles(persistentTaskIds, runningUserIds);
+ }
+ }
+
+ /**
* Takes a snapshot of the screen. In landscape mode this grabs the whole screen.
* In portrait mode, it grabs the full screenshot.
*
@@ -5346,6 +5361,7 @@
public void systemReady() {
mPolicy.systemReady();
+ mTaskSnapshotController.systemReady();
}
// -------------------------------------------------------------
@@ -6985,6 +7001,18 @@
}
}
+ /**
+ * Called when a task has been removed from the recent tasks list.
+ * <p>
+ * Note: This doesn't go through {@link TaskWindowContainerController} yet as the window
+ * container may not exist when this happens.
+ */
+ public void notifyTaskRemovedFromRecents(int taskId, int userId) {
+ synchronized (mWindowMap) {
+ mTaskSnapshotController.notifyTaskRemovedFromRecents(taskId, userId);
+ }
+ }
+
@Override
public int getDockedDividerInsetsLw() {
return getDefaultDisplayContentLocked().getDockedDividerController().getContentInsets();
diff --git a/services/core/jni/com_android_server_VibratorService.cpp b/services/core/jni/com_android_server_VibratorService.cpp
index 118562f..50bae794 100644
--- a/services/core/jni/com_android_server_VibratorService.cpp
+++ b/services/core/jni/com_android_server_VibratorService.cpp
@@ -43,7 +43,7 @@
if (mHal != nullptr) {
return;
}
- mHal = IVibrator::getService("vibrator");
+ mHal = IVibrator::getService();
}
static jboolean vibratorExists(JNIEnv* /* env */, jobject /* clazz */)
diff --git a/services/core/jni/com_android_server_tv_TvInputHal.cpp b/services/core/jni/com_android_server_tv_TvInputHal.cpp
index 179fba0..9f528b1 100644
--- a/services/core/jni/com_android_server_tv_TvInputHal.cpp
+++ b/services/core/jni/com_android_server_tv_TvInputHal.cpp
@@ -327,7 +327,7 @@
JTvInputHal* JTvInputHal::createInstance(JNIEnv* env, jobject thiz, const sp<Looper>& looper) {
// TODO(b/31632518)
- sp<ITvInput> tvInput = ITvInput::getService("tv.input");
+ sp<ITvInput> tvInput = ITvInput::getService();
if (tvInput == nullptr) {
ALOGE("Couldn't get tv.input service.");
return nullptr;
diff --git a/services/java/com/android/server/SystemServer.java b/services/java/com/android/server/SystemServer.java
index b6c518b..bedc6e1 100644
--- a/services/java/com/android/server/SystemServer.java
+++ b/services/java/com/android/server/SystemServer.java
@@ -486,6 +486,18 @@
mActivityManagerService.initPowerManagement();
traceEnd();
+ // Bring up recovery system in case a rescue party needs a reboot
+ if (!SystemProperties.getBoolean("config.disable_noncore", false)) {
+ traceBeginAndSlog("StartRecoverySystemService");
+ mSystemServiceManager.startService(RecoverySystemService.class);
+ traceEnd();
+ }
+
+ // Now that we have the bare essentials of the OS up and running, take
+ // note that we just booted, which might send out a rescue party if
+ // we're stuck in a runtime restart loop.
+ RescueParty.noteBoot(mSystemContext);
+
// Manages LEDs and display backlight so we need it to bring up the display.
traceBeginAndSlog("StartLightsService");
mSystemServiceManager.startService(LightsService.class);
@@ -643,6 +655,11 @@
boolean isEmulator = SystemProperties.get("ro.kernel.qemu").equals("1");
+ // For debugging RescueParty
+ if (Build.IS_DEBUGGABLE && SystemProperties.getBoolean("debug.crash_system", false)) {
+ throw new RuntimeException();
+ }
+
try {
Slog.i(TAG, "Reading configuration...");
traceBeginAndSlog("ReadingSystemConfig");
@@ -1026,12 +1043,6 @@
traceEnd();
}
- if (!disableNonCoreServices) {
- traceBeginAndSlog("StartRecoverSystemService");
- mSystemServiceManager.startService(RecoverySystemService.class);
- traceEnd();
- }
-
/*
* StorageManagerService has a few dependencies: Notification Manager and
* AppWidget Provider. Make sure StorageManagerService is completely started
diff --git a/services/net/java/android/net/dhcp/DhcpClient.java b/services/net/java/android/net/dhcp/DhcpClient.java
index 8dd05b1..2624f0b 100644
--- a/services/net/java/android/net/dhcp/DhcpClient.java
+++ b/services/net/java/android/net/dhcp/DhcpClient.java
@@ -30,6 +30,7 @@
import android.net.InterfaceConfiguration;
import android.net.LinkAddress;
import android.net.NetworkUtils;
+import android.net.TrafficStats;
import android.net.metrics.IpConnectivityLog;
import android.net.metrics.DhcpClientEvent;
import android.net.metrics.DhcpErrorEvent;
@@ -303,6 +304,7 @@
}
private boolean initUdpSocket() {
+ final int oldTag = TrafficStats.getAndSetThreadStatsTag(TrafficStats.TAG_SYSTEM_DHCP);
try {
mUdpSock = Os.socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
Os.setsockoptInt(mUdpSock, SOL_SOCKET, SO_REUSEADDR, 1);
@@ -314,6 +316,8 @@
} catch(SocketException|ErrnoException e) {
Log.e(TAG, "Error creating UDP socket", e);
return false;
+ } finally {
+ TrafficStats.setThreadStatsTag(oldTag);
}
return true;
}
diff --git a/services/net/java/android/net/ip/RouterAdvertisementDaemon.java b/services/net/java/android/net/ip/RouterAdvertisementDaemon.java
index 6802cff..ba1621d 100644
--- a/services/net/java/android/net/ip/RouterAdvertisementDaemon.java
+++ b/services/net/java/android/net/ip/RouterAdvertisementDaemon.java
@@ -22,6 +22,7 @@
import android.net.LinkAddress;
import android.net.LinkProperties;
import android.net.NetworkUtils;
+import android.net.TrafficStats;
import android.system.ErrnoException;
import android.system.Os;
import android.system.StructGroupReq;
@@ -563,6 +564,7 @@
private boolean createSocket() {
final int SEND_TIMEOUT_MS = 300;
+ final int oldTag = TrafficStats.getAndSetThreadStatsTag(TrafficStats.TAG_SYSTEM_NEIGHBOR);
try {
mSocket = Os.socket(AF_INET6, SOCK_RAW, IPPROTO_ICMPV6);
// Setting SNDTIMEO is purely for defensive purposes.
@@ -574,6 +576,8 @@
} catch (ErrnoException | IOException e) {
Log.e(TAG, "Failed to create RA daemon socket: " + e);
return false;
+ } finally {
+ TrafficStats.setThreadStatsTag(oldTag);
}
return true;
diff --git a/services/tests/notification/src/com/android/server/notification/RankingHelperTest.java b/services/tests/notification/src/com/android/server/notification/RankingHelperTest.java
index f8061f6..59ac427 100644
--- a/services/tests/notification/src/com/android/server/notification/RankingHelperTest.java
+++ b/services/tests/notification/src/com/android/server/notification/RankingHelperTest.java
@@ -15,6 +15,7 @@
*/
package com.android.server.notification;
+import static junit.framework.Assert.assertNull;
import static junit.framework.Assert.fail;
import org.junit.Before;
@@ -34,6 +35,7 @@
import android.app.NotificationManager;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
+import android.content.pm.ParceledListSlice;
import android.net.Uri;
import android.os.Build;
import android.os.UserHandle;
@@ -49,6 +51,9 @@
import java.io.ByteArrayOutputStream;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
@@ -166,7 +171,7 @@
serializer.flush();
for (String channelId : channelIds) {
- mHelper.deleteNotificationChannel(pkg, uid, channelId);
+ mHelper.permanentlyDeleteNotificationChannel(pkg, uid, channelId);
}
return baos;
}
@@ -246,26 +251,23 @@
channel2.enableVibration(true);
channel2.setVibrationPattern(new long[] {100, 67, 145, 156});
- mHelper.createNotificationChannel(pkg, uid, channel1, false);
+ mHelper.createNotificationChannel(pkg, uid, channel1, true);
mHelper.createNotificationChannel(pkg, uid, channel2, false);
ByteArrayOutputStream baos = writeXmlAndPurge(pkg, uid, channel1.getId(), channel2.getId(),
NotificationChannel.DEFAULT_CHANNEL_ID);
- mHelper.deleteNotificationChannel(pkg, uid, channel1.getId());
- mHelper.deleteNotificationChannel(pkg, uid, channel2.getId());
- mHelper.deleteNotificationChannel(pkg, uid, NotificationChannel.DEFAULT_CHANNEL_ID);
-
XmlPullParser parser = Xml.newPullParser();
parser.setInput(new BufferedInputStream(new ByteArrayInputStream(baos.toByteArray())),
null);
parser.nextTag();
mHelper.readXml(parser, false);
- assertEquals(channel1, mHelper.getNotificationChannel(pkg, uid, channel1.getId()));
- compareChannels(channel2, mHelper.getNotificationChannel(pkg, uid, channel2.getId()));
- assertNotNull(
- mHelper.getNotificationChannel(pkg, uid, NotificationChannel.DEFAULT_CHANNEL_ID));
+ assertEquals(channel1, mHelper.getNotificationChannel(pkg, uid, channel1.getId(), false));
+ compareChannels(channel2,
+ mHelper.getNotificationChannel(pkg, uid, channel2.getId(), false));
+ assertNotNull(mHelper.getNotificationChannel(
+ pkg, uid, NotificationChannel.DEFAULT_CHANNEL_ID, false));
}
@Test
@@ -284,8 +286,8 @@
parser.nextTag();
mHelper.readXml(parser, false);
- final NotificationChannel updated =
- mHelper.getNotificationChannel(pkg, uid, NotificationChannel.DEFAULT_CHANNEL_ID);
+ final NotificationChannel updated = mHelper.getNotificationChannel(
+ pkg, uid, NotificationChannel.DEFAULT_CHANNEL_ID, false);
assertEquals(NotificationManager.IMPORTANCE_UNSPECIFIED, updated.getImportance());
assertFalse(updated.canBypassDnd());
assertEquals(NotificationManager.VISIBILITY_NO_OVERRIDE,updated.getLockscreenVisibility());
@@ -298,8 +300,8 @@
new NotificationChannel("id1", "name1", NotificationManager.IMPORTANCE_MIN);
mHelper.createNotificationChannel(pkg, uid, channel1, true);
- final NotificationChannel defaultChannel =
- mHelper.getNotificationChannel(pkg, uid, NotificationChannel.DEFAULT_CHANNEL_ID);
+ final NotificationChannel defaultChannel = mHelper.getNotificationChannel(
+ pkg, uid, NotificationChannel.DEFAULT_CHANNEL_ID, false);
defaultChannel.setImportance(NotificationManager.IMPORTANCE_LOW);
mHelper.updateNotificationChannel(pkg, uid, defaultChannel);
@@ -313,7 +315,7 @@
mHelper.readXml(parser, false);
assertEquals(NotificationManager.IMPORTANCE_LOW, mHelper.getNotificationChannel(
- pkg, uid, NotificationChannel.DEFAULT_CHANNEL_ID).getImportance());
+ pkg, uid, NotificationChannel.DEFAULT_CHANNEL_ID, false).getImportance());
}
@Test
@@ -331,8 +333,8 @@
parser.nextTag();
mHelper.readXml(parser, false);
- final NotificationChannel updated1 =
- mHelper.getNotificationChannel(pkg, uid, NotificationChannel.DEFAULT_CHANNEL_ID);
+ final NotificationChannel updated1 = mHelper.getNotificationChannel(
+ pkg, uid, NotificationChannel.DEFAULT_CHANNEL_ID, false);
assertEquals(NotificationManager.IMPORTANCE_HIGH, updated1.getImportance());
assertTrue(updated1.canBypassDnd());
assertEquals(Notification.VISIBILITY_SECRET, updated1.getLockscreenVisibility());
@@ -340,8 +342,8 @@
| NotificationChannel.USER_LOCKED_PRIORITY
| NotificationChannel.USER_LOCKED_VISIBILITY, updated1.getUserLockedFields());
- final NotificationChannel updated2 =
- mHelper.getNotificationChannel(pkg2, uid2, NotificationChannel.DEFAULT_CHANNEL_ID);
+ final NotificationChannel updated2 = mHelper.getNotificationChannel(
+ pkg2, uid2, NotificationChannel.DEFAULT_CHANNEL_ID, false);
// clamped
assertEquals(NotificationManager.IMPORTANCE_LOW, updated2.getImportance());
assertFalse(updated2.canBypassDnd());
@@ -378,7 +380,7 @@
mHelper.updateNotificationChannelFromAssistant(pkg, uid, channel2);
// no fields should be changed
- assertEquals(channel, mHelper.getNotificationChannel(pkg, uid, channel.getId()));
+ assertEquals(channel, mHelper.getNotificationChannel(pkg, uid, channel.getId(), false));
}
@Test
@@ -399,7 +401,7 @@
mHelper.updateNotificationChannelFromAssistant(pkg, uid, channel2);
// no fields should be changed
- assertEquals(channel, mHelper.getNotificationChannel(pkg, uid, channel.getId()));
+ assertEquals(channel, mHelper.getNotificationChannel(pkg, uid, channel.getId(), false));
}
@Test
@@ -421,7 +423,7 @@
mHelper.updateNotificationChannelFromAssistant(pkg, uid, channel2);
// no fields should be changed
- assertEquals(channel, mHelper.getNotificationChannel(pkg, uid, channel.getId()));
+ assertEquals(channel, mHelper.getNotificationChannel(pkg, uid, channel.getId(), false));
}
@Test
@@ -442,7 +444,7 @@
mHelper.updateNotificationChannelFromAssistant(pkg, uid, channel2);
// no fields should be changed
- assertEquals(channel, mHelper.getNotificationChannel(pkg, uid, channel.getId()));
+ assertEquals(channel, mHelper.getNotificationChannel(pkg, uid, channel.getId(), false));
}
@Test
@@ -463,7 +465,7 @@
mHelper.updateNotificationChannelFromAssistant(pkg, uid, channel2);
// no fields should be changed
- assertEquals(channel, mHelper.getNotificationChannel(pkg, uid, channel.getId()));
+ assertEquals(channel, mHelper.getNotificationChannel(pkg, uid, channel.getId(), false));
}
@Test
@@ -484,7 +486,7 @@
mHelper.updateNotificationChannelFromAssistant(pkg, uid, channel2);
// no fields should be changed
- assertEquals(channel, mHelper.getNotificationChannel(pkg, uid, channel.getId()));
+ assertEquals(channel, mHelper.getNotificationChannel(pkg, uid, channel.getId(), false));
}
@Test
@@ -503,7 +505,7 @@
mHelper.updateNotificationChannelFromAssistant(pkg, uid, channel2);
// no fields should be changed
- assertEquals(channel, mHelper.getNotificationChannel(pkg, uid, channel.getId()));
+ assertEquals(channel, mHelper.getNotificationChannel(pkg, uid, channel.getId(), false));
}
@Test
@@ -529,13 +531,13 @@
mHelper.updateNotificationChannel(pkg, uid, channel2);
// all fields should be changed
- assertEquals(channel2, mHelper.getNotificationChannel(pkg, uid, channel.getId()));
+ assertEquals(channel2, mHelper.getNotificationChannel(pkg, uid, channel.getId(), false));
}
@Test
public void testGetChannelWithFallback() throws Exception {
NotificationChannel channel =
- mHelper.getNotificationChannelWithFallback(pkg, uid, "garbage");
+ mHelper.getNotificationChannelWithFallback(pkg, uid, "garbage", false);
assertEquals(NotificationChannel.DEFAULT_CHANNEL_ID, channel.getId());
}
@@ -557,7 +559,7 @@
mHelper.createNotificationChannel(pkg, uid, channel, true);
NotificationChannel savedChannel =
- mHelper.getNotificationChannel(pkg, uid, channel.getId());
+ mHelper.getNotificationChannel(pkg, uid, channel.getId(), false);
assertEquals(channel.getName(), savedChannel.getName());
assertEquals(channel.shouldShowLights(), savedChannel.shouldShowLights());
@@ -584,7 +586,7 @@
mHelper.createNotificationChannel(pkg, uid, channel, true);
NotificationChannel savedChannel =
- mHelper.getNotificationChannel(pkg, uid, channel.getId());
+ mHelper.getNotificationChannel(pkg, uid, channel.getId(), false);
assertEquals(channel.getName(), savedChannel.getName());
assertEquals(channel.shouldShowLights(), savedChannel.shouldShowLights());
@@ -592,4 +594,168 @@
assertFalse(Notification.VISIBILITY_SECRET == savedChannel.getLockscreenVisibility());
assertEquals(channel.canShowBadge(), savedChannel.canShowBadge());
}
+
+ @Test
+ public void testGetDeletedChannel() throws Exception {
+ NotificationChannel channel =
+ new NotificationChannel("id2", "name2", NotificationManager.IMPORTANCE_LOW);
+ channel.setSound(new Uri.Builder().scheme("test").build());
+ channel.setLights(true);
+ channel.setBypassDnd(true);
+ channel.setLockscreenVisibility(Notification.VISIBILITY_SECRET);
+ channel.enableVibration(true);
+ channel.setVibrationPattern(new long[] {100, 67, 145, 156});
+
+ mHelper.createNotificationChannel(pkg, uid, channel, true);
+ mHelper.deleteNotificationChannel(pkg, uid, channel.getId());
+
+ // Does not return deleted channel
+ NotificationChannel response =
+ mHelper.getNotificationChannel(pkg, uid, channel.getId(), false);
+ assertNull(response);
+
+ // Returns deleted channel
+ response = mHelper.getNotificationChannel(pkg, uid, channel.getId(), true);
+ compareChannels(channel, response);
+ assertTrue(response.isDeleted());
+ }
+
+ @Test
+ public void testGetDeletedChannels() throws Exception {
+ Map<String, NotificationChannel> channelMap = new HashMap<>();
+ NotificationChannel channel =
+ new NotificationChannel("id2", "name2", NotificationManager.IMPORTANCE_LOW);
+ channel.setSound(new Uri.Builder().scheme("test").build());
+ channel.setLights(true);
+ channel.setBypassDnd(true);
+ channel.setLockscreenVisibility(Notification.VISIBILITY_PRIVATE);
+ channel.enableVibration(true);
+ channel.setVibrationPattern(new long[] {100, 67, 145, 156});
+ channelMap.put(channel.getId(), channel);
+ NotificationChannel channel2 =
+ new NotificationChannel("id4", "a", NotificationManager.IMPORTANCE_HIGH);
+ channelMap.put(channel2.getId(), channel2);
+ mHelper.createNotificationChannel(pkg, uid, channel, true);
+ mHelper.createNotificationChannel(pkg, uid, channel2, true);
+
+ mHelper.deleteNotificationChannel(pkg, uid, channel.getId());
+
+ // Returns only non-deleted channels
+ List<NotificationChannel> channels =
+ mHelper.getNotificationChannels(pkg, uid, false).getList();
+ assertEquals(2, channels.size()); // Default channel + non-deleted channel
+ for (NotificationChannel nc : channels) {
+ if (!NotificationChannel.DEFAULT_CHANNEL_ID.equals(nc.getId())) {
+ compareChannels(channel2, nc);
+ }
+ }
+
+ // Returns deleted channels too
+ channels = mHelper.getNotificationChannels(pkg, uid, true).getList();
+ assertEquals(3, channels.size()); // Includes default channel
+ for (NotificationChannel nc : channels) {
+ if (!NotificationChannel.DEFAULT_CHANNEL_ID.equals(nc.getId())) {
+ compareChannels(channelMap.get(nc.getId()), nc);
+ }
+ }
+ }
+
+ @Test
+ public void testUpdateDeletedChannels() throws Exception {
+ NotificationChannel channel =
+ new NotificationChannel("id2", "name2", NotificationManager.IMPORTANCE_LOW);
+ mHelper.createNotificationChannel(pkg, uid, channel, true);
+
+ mHelper.deleteNotificationChannel(pkg, uid, channel.getId());
+
+ channel.setSound(new Uri.Builder().scheme("test").build());
+ try {
+ mHelper.updateNotificationChannel(pkg, uid, channel);
+ fail("Updated deleted channel");
+ } catch (IllegalArgumentException e) {
+ // :)
+ }
+
+ try {
+ mHelper.updateNotificationChannelFromAssistant(pkg, uid, channel);
+ fail("Updated deleted channel");
+ } catch (IllegalArgumentException e) {
+ // :)
+ }
+ }
+
+ @Test
+ public void testCreateDeletedChannel() throws Exception {
+ long[] vibration = new long[] {100, 67, 145, 156};
+ NotificationChannel channel =
+ new NotificationChannel("id2", "name2", NotificationManager.IMPORTANCE_LOW);
+ channel.setVibrationPattern(vibration);
+
+ mHelper.createNotificationChannel(pkg, uid, channel, true);
+ mHelper.deleteNotificationChannel(pkg, uid, channel.getId());
+
+ NotificationChannel newChannel = new NotificationChannel(
+ channel.getId(), channel.getName(), NotificationManager.IMPORTANCE_HIGH);
+ newChannel.setVibrationPattern(new long[] {100});
+
+ mHelper.createNotificationChannel(pkg, uid, newChannel, true);
+
+ // No long deleted, using old settings
+ compareChannels(channel,
+ mHelper.getNotificationChannel(pkg, uid, newChannel.getId(), false));
+ }
+
+ @Test
+ public void testCreateChannel_alreadyExists() throws Exception {
+ long[] vibration = new long[] {100, 67, 145, 156};
+ NotificationChannel channel =
+ new NotificationChannel("id2", "name2", NotificationManager.IMPORTANCE_LOW);
+ channel.setVibrationPattern(vibration);
+
+ mHelper.createNotificationChannel(pkg, uid, channel, true);
+
+ NotificationChannel newChannel = new NotificationChannel(
+ channel.getId(), channel.getName(), NotificationManager.IMPORTANCE_HIGH);
+ newChannel.setVibrationPattern(new long[] {100});
+
+ mHelper.createNotificationChannel(pkg, uid, newChannel, true);
+
+ // Old settings not overridden
+ compareChannels(channel,
+ mHelper.getNotificationChannel(pkg, uid, newChannel.getId(), false));
+ }
+
+ @Test
+ public void testPermanentlyDeleteChannels() throws Exception {
+ NotificationChannel channel1 =
+ new NotificationChannel("id1", "name1", NotificationManager.IMPORTANCE_HIGH);
+ NotificationChannel channel2 =
+ new NotificationChannel("id2", "name2", NotificationManager.IMPORTANCE_LOW);
+
+ mHelper.createNotificationChannel(pkg, uid, channel1, true);
+ mHelper.createNotificationChannel(pkg, uid, channel2, false);
+
+ mHelper.permanentlyDeleteNotificationChannels(pkg, uid);
+
+ // Only default channel remains
+ assertEquals(1, mHelper.getNotificationChannels(pkg, uid, true).getList().size());
+ }
+
+ @Test
+ public void testOnPackageChanged_packageRemoval() throws Exception {
+ // Deleted
+ NotificationChannel channel1 =
+ new NotificationChannel("id1", "name1", NotificationManager.IMPORTANCE_HIGH);
+ mHelper.createNotificationChannel(pkg, uid, channel1, true);
+
+ mHelper.onPackagesChanged(true, UserHandle.USER_SYSTEM, new String[]{pkg}, new int[]{uid});
+
+ assertEquals(0, mHelper.getNotificationChannels(pkg, uid, true).getList().size());
+
+ // Not deleted
+ mHelper.createNotificationChannel(pkg, uid, channel1, true);
+
+ mHelper.onPackagesChanged(false, UserHandle.USER_SYSTEM, new String[]{pkg}, new int[]{uid});
+ assertEquals(2, mHelper.getNotificationChannels(pkg, uid, false).getList().size());
+ }
}
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 228b8e0..167b33a 100644
--- a/services/tests/servicestests/src/com/android/server/pm/BaseShortcutManagerTest.java
+++ b/services/tests/servicestests/src/com/android/server/pm/BaseShortcutManagerTest.java
@@ -618,9 +618,16 @@
protected static final UserInfo USER_INFO_11 =
new UserInfo(USER_11, "user11", UserInfo.FLAG_INITIALIZED);
+ /*
+ * Cheat: USER_P0 is a sub profile of USER_0, but it doesn't have the MANAGED_PROFILE flag set.
+ * Due to a change made to LauncherApps (b/34340531), work profile apps a no longer able
+ * to see the main profile, which would break tons of unit tests. We avoid it by not setting
+ * MANAGED_PROFILE for P0.
+ * We cover this negative case in CTS. (i.e. CTS has tests to make sure maanged profile
+ * can't access main profile's shortcuts.)
+ */
protected static final UserInfo USER_INFO_P0 = withProfileGroupId(
- new UserInfo(USER_P0, "userP0",
- UserInfo.FLAG_MANAGED_PROFILE), 0);
+ new UserInfo(USER_P0, "userP0", UserInfo.FLAG_INITIALIZED), 0);
protected BiPredicate<String, Integer> mDefaultLauncherChecker =
(callingPackage, userId) ->
diff --git a/services/tests/servicestests/src/com/android/server/pm/KeySetManagerServiceTest.java b/services/tests/servicestests/src/com/android/server/pm/KeySetManagerServiceTest.java
index 64c5622..fec3267 100644
--- a/services/tests/servicestests/src/com/android/server/pm/KeySetManagerServiceTest.java
+++ b/services/tests/servicestests/src/com/android/server/pm/KeySetManagerServiceTest.java
@@ -39,7 +39,8 @@
public PackageSetting generateFakePackageSetting(String name) {
return new PackageSetting(name, name, new File(mContext.getCacheDir(), "fakeCodePath"),
new File(mContext.getCacheDir(), "fakeResPath"), "", "", "",
- "", 1, 0, 0, null, null, 0 /*sharedUserId*/);
+ "", 1, 0, 0, null, null, 0 /*sharedUserId*/, null /*usesStaticLibraries*/,
+ null /*usesStaticLibrariesVersions*/);
}
@Override
diff --git a/services/tests/servicestests/src/com/android/server/pm/PackageManagerSettingsTests.java b/services/tests/servicestests/src/com/android/server/pm/PackageManagerSettingsTests.java
index bd2bb6c..baf60c5 100644
--- a/services/tests/servicestests/src/com/android/server/pm/PackageManagerSettingsTests.java
+++ b/services/tests/servicestests/src/com/android/server/pm/PackageManagerSettingsTests.java
@@ -216,7 +216,9 @@
ApplicationInfo.PRIVATE_FLAG_PRIVILEGED|ApplicationInfo.PRIVATE_FLAG_HIDDEN,
PARENT_PACKAGE_NAME,
childPackageNames,
- 0);
+ 0,
+ null /*usesStaticLibraries*/,
+ null /*usesStaticLibrariesVersions*/);
final PackageSetting testPkgSetting01 = new PackageSetting(origPkgSetting01);
verifySettingCopy(origPkgSetting01, testPkgSetting01);
}
@@ -241,7 +243,9 @@
ApplicationInfo.PRIVATE_FLAG_PRIVILEGED|ApplicationInfo.PRIVATE_FLAG_HIDDEN,
PARENT_PACKAGE_NAME,
childPackageNames,
- 0);
+ 0,
+ null /*usesStaticLibraries*/,
+ null /*usesStaticLibrariesVersions*/);
final PackageSetting testPkgSetting01 = new PackageSetting(
PACKAGE_NAME /*pkgName*/,
REAL_PACKAGE_NAME /*realPkgName*/,
@@ -256,7 +260,9 @@
0 /*pkgPrivateFlags*/,
null /*parentPkgName*/,
null /*childPkgNames*/,
- 0);
+ 0,
+ null /*usesStaticLibraries*/,
+ null /*usesStaticLibrariesVersions*/);
testPkgSetting01.copyFrom(origPkgSetting01);
verifySettingCopy(origPkgSetting01, testPkgSetting01);
}
@@ -281,7 +287,9 @@
0 /*pkgFlags*/,
0 /*pkgPrivateFlags*/,
null /*childPkgNames*/,
- UserManagerService.getInstance());
+ UserManagerService.getInstance(),
+ null /*usesStaticLibraries*/,
+ null /*usesStaticLibrariesVersions*/);
assertThat(testPkgSetting01.primaryCpuAbiString, is("arm64-v8a"));
assertThat(testPkgSetting01.secondaryCpuAbiString, is("armeabi"));
assertThat(testPkgSetting01.origPackage, is(nullValue()));
@@ -313,7 +321,9 @@
ApplicationInfo.FLAG_SYSTEM /*pkgFlags*/,
ApplicationInfo.PRIVATE_FLAG_PRIVILEGED /*pkgPrivateFlags*/,
null /*childPkgNames*/,
- UserManagerService.getInstance());
+ UserManagerService.getInstance(),
+ null /*usesStaticLibraries*/,
+ null /*usesStaticLibrariesVersions*/);
assertThat(testPkgSetting01.primaryCpuAbiString, is("arm64-v8a"));
assertThat(testPkgSetting01.secondaryCpuAbiString, is("armeabi"));
assertThat(testPkgSetting01.origPackage, is(nullValue()));
@@ -348,7 +358,9 @@
0 /*pkgFlags*/,
0 /*pkgPrivateFlags*/,
null /*childPkgNames*/,
- UserManagerService.getInstance());
+ UserManagerService.getInstance(),
+ null /*usesStaticLibraries*/,
+ null /*usesStaticLibrariesVersions*/);
fail("Expected a PackageManagerException");
} catch (PackageManagerException expected) {
}
@@ -378,7 +390,9 @@
false /*allowInstall*/,
null /*parentPkgName*/,
null /*childPkgNames*/,
- UserManagerService.getInstance());
+ UserManagerService.getInstance(),
+ null /*usesStaticLibraries*/,
+ null /*usesStaticLibrariesVersions*/);
assertThat(testPkgSetting01.codePath, is(UPDATED_CODE_PATH));
assertThat(testPkgSetting01.name, is(PACKAGE_NAME));
assertThat(testPkgSetting01.pkgFlags, is(ApplicationInfo.FLAG_SYSTEM));
@@ -416,7 +430,9 @@
true /*allowInstall*/,
null /*parentPkgName*/,
null /*childPkgNames*/,
- UserManagerService.getInstance());
+ UserManagerService.getInstance(),
+ null /*usesStaticLibraries*/,
+ null /*usesStaticLibrariesVersions*/);
assertThat(testPkgSetting01.appId, is(0));
assertThat(testPkgSetting01.codePath, is(INITIAL_CODE_PATH));
assertThat(testPkgSetting01.name, is(PACKAGE_NAME));
@@ -457,7 +473,9 @@
false /*allowInstall*/,
null /*parentPkgName*/,
null /*childPkgNames*/,
- UserManagerService.getInstance());
+ UserManagerService.getInstance(),
+ null /*usesStaticLibraries*/,
+ null /*usesStaticLibrariesVersions*/);
assertThat(testPkgSetting01.appId, is(10064));
assertThat(testPkgSetting01.codePath, is(INITIAL_CODE_PATH));
assertThat(testPkgSetting01.name, is(PACKAGE_NAME));
@@ -498,7 +516,9 @@
false /*allowInstall*/,
null /*parentPkgName*/,
null /*childPkgNames*/,
- UserManagerService.getInstance());
+ UserManagerService.getInstance(),
+ null /*usesStaticLibraries*/,
+ null /*usesStaticLibrariesVersions*/);
assertThat(testPkgSetting01.appId, is(10064));
assertThat(testPkgSetting01.codePath, is(UPDATED_CODE_PATH));
assertThat(testPkgSetting01.name, is(PACKAGE_NAME));
@@ -624,7 +644,9 @@
0 /*privateFlags*/,
null /*parentPackageName*/,
null /*childPackageNames*/,
- sharedUserId);
+ sharedUserId,
+ null /*usesStaticLibraries*/,
+ null /*usesStaticLibrariesVersions*/);
}
private @NonNull List<UserInfo> createFakeUsers() {
diff --git a/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest8.java b/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest8.java
index df275d2..96e8948 100644
--- a/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest8.java
+++ b/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest8.java
@@ -22,6 +22,9 @@
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.eq;
+import static org.mockito.Matchers.isNull;
+import static org.mockito.Matchers.notNull;
+import static org.mockito.Mockito.reset;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
@@ -238,7 +241,7 @@
* - Launcher supports the feature.
* - Shortcut doesn't pre-exist.
*/
- private void checkRequestPinShortcut(@Nullable PendingIntent resultIntent) {
+ private void checkRequestPinShortcut(@Nullable IntentSender resultIntent) {
setDefaultLauncher(USER_0, mMainActivityFetcher.apply(LAUNCHER_1, USER_0));
setDefaultLauncher(USER_10, mMainActivityFetcher.apply(LAUNCHER_2, USER_10));
@@ -254,8 +257,7 @@
assertNull(s.getActivity());
- assertTrue(mManager.requestPinShortcut(s,
- resultIntent == null ? null : resultIntent.getIntentSender()));
+ assertTrue(mManager.requestPinShortcut(s, resultIntent));
verify(mServiceContext, times(0)).sendIntentSender(any(IntentSender.class));
@@ -294,9 +296,9 @@
// This method is always called, even with PI == null.
if (resultIntent == null) {
- verify(mServiceContext, times(1)).sendIntentSender(eq(null));
+ verify(mServiceContext, times(1)).sendIntentSender(isNull(IntentSender.class));
} else {
- verify(mServiceContext, times(1)).sendIntentSender(any(IntentSender.class));
+ verify(mServiceContext, times(1)).sendIntentSender(notNull(IntentSender.class));
}
runWithCaller(CALLING_PACKAGE_1, USER_P0, () -> {
@@ -314,11 +316,12 @@
checkRequestPinShortcut(/* resultIntent=*/ null);
}
- public void testRequestPinShortcut_withCallback() {
- final PendingIntent resultIntent =
- PendingIntent.getActivity(getTestContext(), 0, new Intent(), 0);
+ private IntentSender makeResultIntent() {
+ return PendingIntent.getActivity(getTestContext(), 0, new Intent(), 0).getIntentSender();
+ }
- checkRequestPinShortcut(resultIntent);
+ public void testRequestPinShortcut_withCallback() {
+ checkRequestPinShortcut(makeResultIntent());
}
public void testRequestPinShortcut_explicitTargetActivity() {
@@ -578,8 +581,15 @@
public void testRequestPinShortcut_dynamicExists_alreadyPinned() {
setDefaultLauncher(USER_0, mMainActivityFetcher.apply(LAUNCHER_1, USER_0));
+ final Icon res32x32 = Icon.createWithResource(getTestContext(), R.drawable.black_32x32);
+
runWithCaller(CALLING_PACKAGE_1, USER_P0, () -> {
- assertTrue(mManager.setDynamicShortcuts(list(makeShortcut("s1"))));
+ final ShortcutInfo.Builder b = new ShortcutInfo.Builder(mClientContext, "s1")
+ .setShortLabel("Title-" + "s1")
+ .setIcon(res32x32)
+ .setIntent(makeIntent(Intent.ACTION_VIEW, ShortcutActivity.class));
+ final ShortcutInfo s = b.build();
+ assertTrue(mManager.setDynamicShortcuts(list(s)));
});
runWithCaller(LAUNCHER_1, USER_0, () -> {
@@ -590,14 +600,66 @@
assertWith(getCallerShortcuts())
.haveIds("s1")
.areAllDynamic()
- .areAllWithActivity(new ComponentName(CALLING_PACKAGE_1, "main"))
+ .areAllWithActivity(new ComponentName(CALLING_PACKAGE_1, "MainActivity"))
.areAllPinned();
assertTrue(mManager.requestPinShortcut(makeShortcutIdOnly("s1"),
- /* resultIntent=*/ null));
+ makeResultIntent()));
// The intent should be sent right away.
- verify(mServiceContext, times(1)).sendIntentSender(any(IntentSender.class));
+ verify(mServiceContext, times(1)).sendIntentSender(notNull(IntentSender.class));
+ });
+
+ // Already pinned.
+ runWithCaller(CALLING_PACKAGE_1, USER_P0, () -> {
+ assertWith(getCallerShortcuts())
+ .haveIds("s1")
+ .areAllDynamic()
+ .areAllEnabled()
+ .areAllWithActivity(new ComponentName(CALLING_PACKAGE_1, "MainActivity"))
+ .areAllPinned();
+ });
+
+ // ... But the launcher will still receive the request.
+ runWithCaller(LAUNCHER_1, USER_0, () -> {
+ // Check the intent passed to startActivityAsUser().
+ final ArgumentCaptor<Intent> intent = ArgumentCaptor.forClass(Intent.class);
+
+ verify(mServiceContext).startActivityAsUser(intent.capture(), eq(HANDLE_USER_0));
+
+ assertPinItemRequestIntent(intent.getValue(), mInjectedClientPackage);
+
+ // Check the request object.
+ final PinItemRequest request = mLauncherApps.getPinItemRequest(intent.getValue());
+
+ assertPinItemRequest(request);
+
+ assertWith(request.getShortcutInfo())
+ .haveIds("s1")
+ .areAllDynamic()
+ .areAllPinned() // Note it's pinned already.
+ .areAllWithActivity(new ComponentName(CALLING_PACKAGE_1, "MainActivity"))
+ .areAllWithNoIntent();
+
+ assertAllHaveIcon(list(request.getShortcutInfo()));
+
+ reset(mServiceContext);
+
+ // Accept the request.
+ assertTrue(request.accept());
+
+ // The intent is only sent once, so times(1).
+ verify(mServiceContext, times(1)).sendIntentSender(isNull(IntentSender.class));
+ });
+
+ // Still pinned.
+ runWithCaller(CALLING_PACKAGE_1, USER_P0, () -> {
+ assertWith(getCallerShortcuts())
+ .haveIds("s1")
+ .areAllDynamic()
+ .areAllEnabled()
+ .areAllWithActivity(new ComponentName(CALLING_PACKAGE_1, "MainActivity"))
+ .areAllPinned();
});
}
@@ -621,10 +683,65 @@
.areAllPinned();
assertTrue(mManager.requestPinShortcut(makeShortcutIdOnly("ms1"),
- /* resultIntent=*/ null));
+ makeResultIntent()));
// The intent should be sent right away.
- verify(mServiceContext, times(1)).sendIntentSender(any(IntentSender.class));
+ verify(mServiceContext, times(1)).sendIntentSender(notNull(IntentSender.class));
+ });
+
+ // Already pinned.
+ runWithCaller(CALLING_PACKAGE_1, USER_P0, () -> {
+ assertWith(getCallerShortcuts())
+ .haveIds("ms1")
+ .areAllManifest()
+ .areAllEnabled()
+ .areAllWithActivity(new ComponentName(CALLING_PACKAGE_1,
+ ShortcutActivity.class.getName()))
+ .areAllPinned();
+ });
+
+ // ... But the launcher will still receive the request.
+ runWithCaller(LAUNCHER_1, USER_0, () -> {
+ // Check the intent passed to startActivityAsUser().
+ final ArgumentCaptor<Intent> intent = ArgumentCaptor.forClass(Intent.class);
+
+ verify(mServiceContext).startActivityAsUser(intent.capture(), eq(HANDLE_USER_0));
+
+ assertPinItemRequestIntent(intent.getValue(), mInjectedClientPackage);
+
+ // Check the request object.
+ final PinItemRequest request = mLauncherApps.getPinItemRequest(intent.getValue());
+
+ assertPinItemRequest(request);
+
+ assertWith(request.getShortcutInfo())
+ .haveIds("ms1")
+ .areAllManifest()
+ .areAllPinned() // Note it's pinned already.
+ .areAllWithActivity(new ComponentName(CALLING_PACKAGE_1,
+ ShortcutActivity.class.getName()))
+ .areAllWithNoIntent();
+
+ assertAllHaveIcon(list(request.getShortcutInfo()));
+
+ reset(mServiceContext);
+
+ // Accept the request.
+ assertTrue(request.accept());
+
+ // The intent is only sent once, so times(1).
+ verify(mServiceContext, times(1)).sendIntentSender(isNull(IntentSender.class));
+ });
+
+ // Still pinned.
+ runWithCaller(CALLING_PACKAGE_1, USER_P0, () -> {
+ assertWith(getCallerShortcuts())
+ .haveIds("ms1")
+ .areAllManifest()
+ .areAllEnabled()
+ .areAllWithActivity(new ComponentName(CALLING_PACKAGE_1,
+ ShortcutActivity.class.getName()))
+ .areAllPinned();
});
}
diff --git a/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest9.java b/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest9.java
index 84a7c19..cfa35c2 100644
--- a/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest9.java
+++ b/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest9.java
@@ -83,7 +83,8 @@
private void assertPinItemRequest(PinItemRequest actualRequest, String className) {
assertNotNull(actualRequest);
assertEquals(PinItemRequest.REQUEST_TYPE_APPWIDGET, actualRequest.getRequestType());
- assertEquals(className, actualRequest.getAppWidgetProviderInfo().provider.getClassName());
+ assertEquals(className, actualRequest.getAppWidgetProviderInfo(getTestContext())
+ .provider.getClassName());
}
public void testNotForeground() {
diff --git a/services/tests/servicestests/src/com/android/server/wm/TaskSnapshotPersisterLoaderTest.java b/services/tests/servicestests/src/com/android/server/wm/TaskSnapshotPersisterLoaderTest.java
new file mode 100644
index 0000000..8d6d2da
--- /dev/null
+++ b/services/tests/servicestests/src/com/android/server/wm/TaskSnapshotPersisterLoaderTest.java
@@ -0,0 +1,222 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+
+package com.android.server.wm;
+
+import static android.graphics.GraphicBuffer.USAGE_HW_TEXTURE;
+import static android.graphics.GraphicBuffer.USAGE_SW_READ_RARELY;
+import static org.junit.Assert.assertEquals;
+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 android.app.ActivityManager.TaskSnapshot;
+import android.content.pm.UserInfo;
+import android.content.res.Configuration;
+import android.graphics.Bitmap;
+import android.graphics.Canvas;
+import android.graphics.Color;
+import android.graphics.GraphicBuffer;
+import android.graphics.PixelFormat;
+import android.graphics.Rect;
+import android.os.SystemClock;
+import android.os.UserManager;
+import android.platform.test.annotations.Presubmit;
+import android.support.test.InstrumentationRegistry;
+import android.support.test.filters.MediumTest;
+import android.support.test.runner.AndroidJUnit4;
+import android.util.ArraySet;
+
+import com.android.internal.util.Predicate;
+import com.android.server.wm.TaskSnapshotPersister.RemoveObsoleteFilesQueueItem;
+
+import org.junit.After;
+import org.junit.AfterClass;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import java.io.File;
+
+/**
+ * Test class for {@link TaskSnapshotPersister} and {@link TaskSnapshotLoader}
+ *
+ * runtest frameworks-services -c com.android.server.wm.TaskSnapshotPersisterLoaderTest
+ */
+@MediumTest
+@Presubmit
+@RunWith(AndroidJUnit4.class)
+public class TaskSnapshotPersisterLoaderTest {
+
+ private static final String TEST_USER_NAME = "TaskSnapshotPersisterTest User";
+ private static final Rect TEST_INSETS = new Rect(10, 20, 30, 40);
+
+ private TaskSnapshotPersister mPersister;
+ private TaskSnapshotLoader mLoader;
+ private static int sTestUserId;
+ private static File sFilesDir;
+ private static UserManager sUserManager;
+
+ @BeforeClass
+ public static void setUpUser() {
+ sUserManager = UserManager.get(InstrumentationRegistry.getContext());
+ sTestUserId = createUser(TEST_USER_NAME, 0);
+ sFilesDir = InstrumentationRegistry.getContext().getFilesDir();
+ }
+
+ @AfterClass
+ public static void tearDownUser() {
+ removeUser(sTestUserId);
+ }
+
+ @Before
+ public void setUp() throws Exception {
+ mPersister = new TaskSnapshotPersister(
+ userId -> sFilesDir);
+ mLoader = new TaskSnapshotLoader(mPersister);
+ mPersister.start();
+ }
+
+ @After
+ public void tearDown() throws Exception {
+ cleanDirectory();
+ }
+
+ @Test
+ public void testPersistAndLoadSnapshot() {
+ mPersister.persistSnapshot(1 , sTestUserId, createSnapshot());
+ mPersister.waitForQueueEmpty();
+ final File[] files = new File[] { new File(sFilesDir.getPath() + "/snapshots/1.proto"),
+ new File(sFilesDir.getPath() + "/snapshots/1.png") };
+ assertTrueForFiles(files, File::exists, " must exist");
+ final TaskSnapshot snapshot = mLoader.loadTask(1, sTestUserId);
+ assertNotNull(snapshot);
+ assertEquals(TEST_INSETS, snapshot.getContentInsets());
+ assertNotNull(snapshot.getSnapshot());
+ assertEquals(Configuration.ORIENTATION_PORTRAIT, snapshot.getOrientation());
+ }
+
+ private void assertTrueForFiles(File[] files, Predicate<File> predicate, String message) {
+ for (File file : files) {
+ assertTrue(file.getName() + message, predicate.apply(file));
+ }
+ }
+
+ @Test
+ public void testTaskRemovedFromRecents() {
+ mPersister.persistSnapshot(1, sTestUserId, createSnapshot());
+ mPersister.onTaskRemovedFromRecents(1, sTestUserId);
+ mPersister.waitForQueueEmpty();
+ assertFalse(new File(sFilesDir.getPath() + "/snapshots/1.proto").exists());
+ assertFalse(new File(sFilesDir.getPath() + "/snapshots/1.png").exists());
+ }
+
+ /**
+ * Tests that persisting a couple of snapshots is being throttled.
+ */
+ @Test
+ public void testThrottling() {
+ long ms = SystemClock.elapsedRealtime();
+ mPersister.persistSnapshot(1, sTestUserId, createSnapshot());
+ mPersister.persistSnapshot(2, sTestUserId, createSnapshot());
+ mPersister.persistSnapshot(3, sTestUserId, createSnapshot());
+ mPersister.persistSnapshot(4, sTestUserId, createSnapshot());
+ mPersister.persistSnapshot(5, sTestUserId, createSnapshot());
+ mPersister.persistSnapshot(6, sTestUserId, createSnapshot());
+ mPersister.waitForQueueEmpty();
+ assertTrue(SystemClock.elapsedRealtime() - ms > 500);
+ }
+
+ @Test
+ public void testGetTaskId() {
+ RemoveObsoleteFilesQueueItem removeObsoleteFilesQueueItem =
+ mPersister.new RemoveObsoleteFilesQueueItem(new ArraySet<>(), new int[] {});
+ assertEquals(-1, removeObsoleteFilesQueueItem.getTaskId("blablablulp"));
+ assertEquals(-1, removeObsoleteFilesQueueItem.getTaskId("nothing.err"));
+ assertEquals(-1, removeObsoleteFilesQueueItem.getTaskId("/invalid/"));
+ assertEquals(12, removeObsoleteFilesQueueItem.getTaskId("12.png"));
+ assertEquals(12, removeObsoleteFilesQueueItem.getTaskId("12.proto"));
+ assertEquals(1, removeObsoleteFilesQueueItem.getTaskId("1.png"));
+ }
+
+ @Test
+ public void testRemoveObsoleteFiles() {
+ mPersister.persistSnapshot(1, sTestUserId, createSnapshot());
+ mPersister.persistSnapshot(2, sTestUserId, createSnapshot());
+ final ArraySet<Integer> taskIds = new ArraySet<>();
+ taskIds.add(1);
+ mPersister.removeObsoleteFiles(taskIds, new int[] { sTestUserId });
+ mPersister.waitForQueueEmpty();
+ final File[] existsFiles = new File[] {
+ new File(sFilesDir.getPath() + "/snapshots/1.proto"),
+ new File(sFilesDir.getPath() + "/snapshots/1.png") };
+ final File[] nonExistsFiles = new File[] {
+ new File(sFilesDir.getPath() + "/snapshots/2.proto"),
+ new File(sFilesDir.getPath() + "/snapshots/2.png") };
+ assertTrueForFiles(existsFiles, File::exists, " must exist");
+ assertTrueForFiles(nonExistsFiles, file -> !file.exists(), " must not exist");
+ }
+
+ @Test
+ public void testRemoveObsoleteFiles_addedOneInTheMeantime() {
+ mPersister.persistSnapshot(1, sTestUserId, createSnapshot());
+ final ArraySet<Integer> taskIds = new ArraySet<>();
+ taskIds.add(1);
+ mPersister.removeObsoleteFiles(taskIds, new int[] { sTestUserId });
+ mPersister.persistSnapshot(2, sTestUserId, createSnapshot());
+ mPersister.waitForQueueEmpty();
+ final File[] existsFiles = new File[] {
+ new File(sFilesDir.getPath() + "/snapshots/1.proto"),
+ new File(sFilesDir.getPath() + "/snapshots/1.png"),
+ new File(sFilesDir.getPath() + "/snapshots/2.proto"),
+ new File(sFilesDir.getPath() + "/snapshots/2.png") };
+ assertTrueForFiles(existsFiles, File::exists, " must exist");
+ }
+
+ private TaskSnapshot createSnapshot() {
+ GraphicBuffer buffer = GraphicBuffer.create(100, 100, PixelFormat.RGBA_8888,
+ USAGE_HW_TEXTURE | USAGE_SW_READ_RARELY | USAGE_SW_READ_RARELY);
+ Canvas c = buffer.lockCanvas();
+ c.drawColor(Color.RED);
+ buffer.unlockCanvasAndPost(c);
+ return new TaskSnapshot(buffer, Configuration.ORIENTATION_PORTRAIT, TEST_INSETS);
+ }
+
+ private static int createUser(String name, int flags) {
+ UserInfo user = sUserManager.createUser(name, flags);
+ if (user == null) {
+ Assert.fail("Error while creating the test user: " + TEST_USER_NAME);
+ }
+ return user.id;
+ }
+
+ private static void removeUser(int userId) {
+ if (!sUserManager.removeUser(userId)) {
+ Assert.fail("Error while removing the test user: " + TEST_USER_NAME);
+ }
+ }
+
+ private void cleanDirectory() {
+ for (File file : new File(sFilesDir, "snapshots").listFiles()) {
+ if (!file.isDirectory()) {
+ file.delete();
+ }
+ }
+ }
+}
diff --git a/services/tests/servicestests/src/com/android/server/wm/TestWindowManagerPolicy.java b/services/tests/servicestests/src/com/android/server/wm/TestWindowManagerPolicy.java
index c0c8fb0..269b719 100644
--- a/services/tests/servicestests/src/com/android/server/wm/TestWindowManagerPolicy.java
+++ b/services/tests/servicestests/src/com/android/server/wm/TestWindowManagerPolicy.java
@@ -321,7 +321,7 @@
@Override
public StartingSurface addSplashScreen(IBinder appToken, String packageName, int theme,
CompatibilityInfo compatInfo, CharSequence nonLocalizedLabel, int labelRes, int icon,
- int logo, int windowFlags, Configuration overrideConfig) {
+ int logo, int windowFlags, Configuration overrideConfig, int displayId) {
return null;
}
diff --git a/services/usage/java/com/android/server/usage/UsageStatsService.java b/services/usage/java/com/android/server/usage/UsageStatsService.java
index d243bf2..6dfb48b 100644
--- a/services/usage/java/com/android/server/usage/UsageStatsService.java
+++ b/services/usage/java/com/android/server/usage/UsageStatsService.java
@@ -106,6 +106,7 @@
private static final long FLUSH_INTERVAL = COMPRESS_TIME ? TEN_SECONDS : TWENTY_MINUTES;
private static final long TIME_CHANGE_THRESHOLD_MILLIS = 2 * 1000; // Two seconds.
+ private static final boolean ENABLE_KERNEL_UPDATES = false;
private static final File KERNEL_COUNTER_FILE = new File("/proc/uid_procstat/set");
long mAppIdleScreenThresholdMillis;
@@ -241,7 +242,7 @@
postOneTimeCheckIdleStates();
}
- if (KERNEL_COUNTER_FILE.exists()) {
+ if (ENABLE_KERNEL_UPDATES && KERNEL_COUNTER_FILE.exists()) {
try {
ActivityManager.getService().registerUidObserver(mUidObserver,
ActivityManager.UID_OBSERVER_PROCSTATE
diff --git a/services/usb/java/com/android/server/usb/UsbPortManager.java b/services/usb/java/com/android/server/usb/UsbPortManager.java
index 7f182a4..4aff3d54 100644
--- a/services/usb/java/com/android/server/usb/UsbPortManager.java
+++ b/services/usb/java/com/android/server/usb/UsbPortManager.java
@@ -556,7 +556,9 @@
private void sendPortChangedBroadcastLocked(PortInfo portInfo) {
final Intent intent = new Intent(UsbManager.ACTION_USB_PORT_CHANGED);
- intent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND);
+ intent.addFlags(
+ Intent.FLAG_RECEIVER_FOREGROUND |
+ Intent.FLAG_RECEIVER_INCLUDE_BACKGROUND);
intent.putExtra(UsbManager.EXTRA_PORT, portInfo.mUsbPort);
intent.putExtra(UsbManager.EXTRA_PORT_STATUS, portInfo.mUsbPortStatus);
diff --git a/services/usb/java/com/android/server/usb/UsbProfileGroupSettingsManager.java b/services/usb/java/com/android/server/usb/UsbProfileGroupSettingsManager.java
index e03a14f..2e99b6e 100644
--- a/services/usb/java/com/android/server/usb/UsbProfileGroupSettingsManager.java
+++ b/services/usb/java/com/android/server/usb/UsbProfileGroupSettingsManager.java
@@ -971,7 +971,9 @@
public void accessoryAttached(UsbAccessory accessory) {
Intent intent = new Intent(UsbManager.ACTION_USB_ACCESSORY_ATTACHED);
intent.putExtra(UsbManager.EXTRA_ACCESSORY, accessory);
- intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ intent.addFlags(
+ Intent.FLAG_ACTIVITY_NEW_TASK |
+ Intent.FLAG_RECEIVER_INCLUDE_BACKGROUND);
ArrayList<ResolveInfo> matches;
String defaultPackage = null;
@@ -1364,7 +1366,9 @@
private static Intent createDeviceAttachedIntent(UsbDevice device) {
Intent intent = new Intent(UsbManager.ACTION_USB_DEVICE_ATTACHED);
intent.putExtra(UsbManager.EXTRA_DEVICE, device);
- intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ intent.addFlags(
+ Intent.FLAG_ACTIVITY_NEW_TASK |
+ Intent.FLAG_RECEIVER_INCLUDE_BACKGROUND);
return intent;
}
}
diff --git a/services/usb/java/com/android/server/usb/UsbSettingsManager.java b/services/usb/java/com/android/server/usb/UsbSettingsManager.java
index 24d5f09..7a55be4 100644
--- a/services/usb/java/com/android/server/usb/UsbSettingsManager.java
+++ b/services/usb/java/com/android/server/usb/UsbSettingsManager.java
@@ -182,6 +182,7 @@
}
Intent intent = new Intent(UsbManager.ACTION_USB_DEVICE_DETACHED);
+ intent.addFlags(Intent.FLAG_RECEIVER_INCLUDE_BACKGROUND);
intent.putExtra(UsbManager.EXTRA_DEVICE, device);
if (DEBUG) {
@@ -204,6 +205,7 @@
}
Intent intent = new Intent(UsbManager.ACTION_USB_ACCESSORY_DETACHED);
+ intent.addFlags(Intent.FLAG_RECEIVER_INCLUDE_BACKGROUND);
intent.putExtra(UsbManager.EXTRA_ACCESSORY, accessory);
mContext.sendBroadcastAsUser(intent, UserHandle.ALL);
}
diff --git a/telephony/java/android/telephony/CarrierConfigManager.java b/telephony/java/android/telephony/CarrierConfigManager.java
index 288c9ab..c0a86d6 100644
--- a/telephony/java/android/telephony/CarrierConfigManager.java
+++ b/telephony/java/android/telephony/CarrierConfigManager.java
@@ -878,39 +878,6 @@
public static final String KEY_CARRIER_SETUP_APP_STRING = "carrier_setup_app_string";
/**
- * A list of component name of carrier signalling receivers which are interested in intent
- * android.intent.action.CARRIER_SIGNAL_REDIRECTED.
- * Example:
- * <item>com.google.android.carrierPackageName/.CarrierSignalReceiverNameA</item>
- * <item>com.google.android.carrierPackageName/.CarrierSignalReceiverNameB</item>
- * @hide
- */
- public static final String KEY_SIGNAL_REDIRECTION_RECEIVER_STRING_ARRAY =
- "signal_redirection_receiver_string_array";
-
- /**
- * A list of component name of carrier signalling receivers which are interested in intent
- * android.intent.action.CARRIER_SIGNAL_REQUEST_NETWORK_FAILED.
- * Example:
- * <item>com.google.android.carrierPackageName/.CarrierSignalReceiverNameA</item>
- * <item>com.google.android.carrierPackageName/.CarrierSignalReceiverNameB</item>
- * @hide
- */
- public static final String KEY_SIGNAL_DCFAILURE_RECEIVER_STRING_ARRAY =
- "signal_dcfailure_receiver_string_array";
-
- /**
- * A list of component name of carrier signalling receivers which are interested in intent
- * android.intent.action.CARRIER_SIGNAL_PCO_VALUE.
- * Example:
- * <item>com.google.android.carrierPackageName/.CarrierSignalReceiverNameA</item>
- * <item>com.google.android.carrierPackageName/.CarrierSignalReceiverNameB</item>
- * @hide
- */
- public static final String KEY_SIGNAL_PCO_RECEIVER_STRING_ARRAY =
- "signal_pco_receiver_string_array";
-
- /**
* Defines carrier-specific actions which act upon
* android.intent.action.CARRIER_SIGNAL_REDIRECTED, used for customization of the
* default carrier app
@@ -963,6 +930,42 @@
"carrier_default_redirection_url_string_array";
/**
+ * Each config includes the componentName of the carrier app, followed by a list of interesting
+ * signals(declared in the manifest) which could wake up the app.
+ * @see com.android.internal.telephony.TelephonyIntents
+ * Example:
+ * <item>com.google.android.carrierAPK/.CarrierSignalReceiverA:
+ * android.intent.action.CARRIER_SIGNAL_REDIRECTED,
+ * android.intent.action.CARRIER_SIGNAL_PCO_VALUE
+ * </item>
+ * <item>com.google.android.carrierAPK/.CarrierSignalReceiverB:
+ * android.intent.action.CARRIER_SIGNAL_PCO_VALUE
+ * </item>
+ * @hide
+ */
+ public static final String KEY_CARRIER_APP_WAKE_SIGNAL_CONFIG_STRING_ARRAY =
+ "carrier_app_wake_signal_config";
+
+ /**
+ * Each config includes the componentName of the carrier app, followed by a list of interesting
+ * signals for the app during run-time. The list of signals(intents) are targeting on run-time
+ * broadcast receivers only, aiming to avoid unnecessary wake-ups and should not be declared in
+ * the app's manifest.
+ * @see com.android.internal.telephony.TelephonyIntents
+ * Example:
+ * <item>com.google.android.carrierAPK/.CarrierSignalReceiverA:
+ * android.intent.action.CARRIER_SIGNAL_REQUEST_NETWORK_FAILED,
+ * android.intent.action.CARRIER_SIGNAL_PCO_VALUE
+ * </item>
+ * <item>com.google.android.carrierAPK/.CarrierSignalReceiverB:
+ * android.intent.action.CARRIER_SIGNAL_REQUEST_NETWORK_FAILED
+ * </item>
+ * @hide
+ */
+ public static final String KEY_CARRIER_APP_NO_WAKE_SIGNAL_CONFIG_STRING_ARRAY =
+ "carrier_app_no_wake_signal_config";
+
+ /**
* Determines whether the carrier supports making non-emergency phone calls while the phone is
* in emergency callback mode. Default value is {@code true}, meaning that non-emergency calls
* are allowed in emergency callback mode.
@@ -1413,10 +1416,14 @@
sDefaults.putString(KEY_RCS_CONFIG_SERVER_URL_STRING, "");
// Carrier Signalling Receivers
- sDefaults.putStringArray(KEY_SIGNAL_REDIRECTION_RECEIVER_STRING_ARRAY, null);
- sDefaults.putStringArray(KEY_SIGNAL_DCFAILURE_RECEIVER_STRING_ARRAY, null);
- sDefaults.putStringArray(KEY_SIGNAL_PCO_RECEIVER_STRING_ARRAY, null);
sDefaults.putString(KEY_CARRIER_SETUP_APP_STRING, "");
+ sDefaults.putStringArray(KEY_CARRIER_APP_WAKE_SIGNAL_CONFIG_STRING_ARRAY,
+ new String[]{
+ "com.android.carrierdefaultapp/.CarrierDefaultBroadcastReceiver:" +
+ "android.intent.action.CARRIER_SIGNAL_REDIRECTED"
+ });
+ sDefaults.putStringArray(KEY_CARRIER_APP_NO_WAKE_SIGNAL_CONFIG_STRING_ARRAY, null);
+
// Default carrier app configurations
sDefaults.putStringArray(KEY_CARRIER_DEFAULT_ACTIONS_ON_REDIRECTION_STRING_ARRAY,
diff --git a/telephony/java/android/telephony/TelephonyManager.java b/telephony/java/android/telephony/TelephonyManager.java
index eb838fa..a3f7c18 100644
--- a/telephony/java/android/telephony/TelephonyManager.java
+++ b/telephony/java/android/telephony/TelephonyManager.java
@@ -5809,10 +5809,17 @@
* Set the allowed carrier list for slotId
* Require system privileges. In the future we may add this to carrier APIs.
*
+ * <p>Requires Permission:
+ * {@link android.Manifest.permission#MODIFY_PHONE_STATE}
+ *
+ * <p>This method works only on devices with {@link
+ * android.content.pm.PackageManager#FEATURE_TELEPHONY_CARRIERLOCK} enabled.
+ *
* @return The number of carriers set successfully. Should be length of
* carrierList on success; -1 on error.
* @hide
*/
+ @SystemApi
public int setAllowedCarriers(int slotId, List<CarrierIdentifier> carriers) {
try {
ITelephony service = getITelephony();
@@ -5821,6 +5828,8 @@
}
} catch (RemoteException e) {
Log.e(TAG, "Error calling ITelephony#setAllowedCarriers", e);
+ } catch (NullPointerException e) {
+ Log.e(TAG, "Error calling ITelephony#setAllowedCarriers", e);
}
return -1;
}
@@ -5829,10 +5838,17 @@
* Get the allowed carrier list for slotId.
* Require system privileges. In the future we may add this to carrier APIs.
*
+ * <p>Requires Permission:
+ * {@link android.Manifest.permission#READ_PRIVILEGED_PHONE_STATE}
+ *
+ * <p>This method returns valid data on devices with {@link
+ * android.content.pm.PackageManager#FEATURE_TELEPHONY_CARRIERLOCK} enabled.
+ *
* @return List of {@link android.telephony.CarrierIdentifier}; empty list
* means all carriers are allowed.
* @hide
*/
+ @SystemApi
public List<CarrierIdentifier> getAllowedCarriers(int slotId) {
try {
ITelephony service = getITelephony();
@@ -5841,6 +5857,8 @@
}
} catch (RemoteException e) {
Log.e(TAG, "Error calling ITelephony#getAllowedCarriers", e);
+ } catch (NullPointerException e) {
+ Log.e(TAG, "Error calling ITelephony#setAllowedCarriers", e);
}
return new ArrayList<CarrierIdentifier>(0);
}
diff --git a/test-runner/src/android/test/mock/MockContext.java b/test-runner/src/android/test/mock/MockContext.java
index bcc68b3..b6e701e 100644
--- a/test-runner/src/android/test/mock/MockContext.java
+++ b/test-runner/src/android/test/mock/MockContext.java
@@ -19,6 +19,7 @@
import android.annotation.SystemApi;
import android.app.IApplicationThread;
import android.app.IServiceConnection;
+import android.app.Notification;
import android.content.ComponentName;
import android.content.ContentResolver;
import android.content.Context;
@@ -513,6 +514,12 @@
}
@Override
+ public ComponentName startServiceInForeground(Intent service,
+ int id, Notification notification) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
public boolean stopService(Intent service) {
throw new UnsupportedOperationException();
}
@@ -525,6 +532,13 @@
/** @hide */
@Override
+ public ComponentName startServiceInForegroundAsUser(Intent service,
+ int id, Notification notification, UserHandle user) {
+ throw new UnsupportedOperationException();
+ }
+
+ /** @hide */
+ @Override
public boolean stopServiceAsUser(Intent service, UserHandle user) {
throw new UnsupportedOperationException();
}
diff --git a/test-runner/src/android/test/mock/MockPackageManager.java b/test-runner/src/android/test/mock/MockPackageManager.java
index c46d4a5..0c34f20 100644
--- a/test-runner/src/android/test/mock/MockPackageManager.java
+++ b/test-runner/src/android/test/mock/MockPackageManager.java
@@ -16,6 +16,7 @@
package android.test.mock;
+import android.annotation.IntRange;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.app.PackageInstallObserver;
@@ -43,7 +44,9 @@
import android.content.pm.ProviderInfo;
import android.content.pm.ResolveInfo;
import android.content.pm.ServiceInfo;
+import android.content.pm.SharedLibraryInfo;
import android.content.pm.VerifierDeviceIdentity;
+import android.content.pm.VersionedPackage;
import android.content.res.Resources;
import android.content.res.XmlResourceParser;
import android.graphics.Rect;
@@ -72,6 +75,12 @@
throw new UnsupportedOperationException();
}
+ @Override
+ public PackageInfo getPackageInfo(VersionedPackage versionedPackage,
+ int flags) throws NameNotFoundException {
+ throw new UnsupportedOperationException();
+ }
+
/** @hide */
@Override
public PackageInfo getPackageInfoAsUser(String packageName, int flags, int userId)
@@ -715,8 +724,7 @@
* @hide - to match hiding in superclass
*/
@Override
- public void deletePackage(
- String packageName, IPackageDeleteObserver observer, int flags) {
+ public void deletePackage(String packageName, IPackageDeleteObserver observer, int flags) {
throw new UnsupportedOperationException();
}
@@ -724,8 +732,8 @@
* @hide - to match hiding in superclass
*/
@Override
- public void deletePackageAsUser(
- String packageName, IPackageDeleteObserver observer, int flags, int userId) {
+ public void deletePackageAsUser(String packageName, IPackageDeleteObserver observer,
+ int flags, int userId) {
throw new UnsupportedOperationException();
}
@@ -818,6 +826,17 @@
throw new UnsupportedOperationException();
}
+ @Override
+ public @NonNull List<SharedLibraryInfo> getSharedLibraries(int flags) {
+ throw new UnsupportedOperationException();
+ }
+
+ /** @hide */
+ @Override
+ public @NonNull List<SharedLibraryInfo> getSharedLibrariesAsUser(int flags, int userId) {
+ throw new UnsupportedOperationException();
+ }
+
/** @hide */
@Override
public @NonNull String getServicesSystemSharedLibraryPackageName() {
diff --git a/tests/net/java/com/android/server/ConnectivityServiceTest.java b/tests/net/java/com/android/server/ConnectivityServiceTest.java
index d62c30d..46b6403 100644
--- a/tests/net/java/com/android/server/ConnectivityServiceTest.java
+++ b/tests/net/java/com/android/server/ConnectivityServiceTest.java
@@ -1103,6 +1103,29 @@
UNAVAILABLE
}
+ private static class CallbackInfo {
+ public final CallbackState state;
+ public final Network network;
+ public final Object arg;
+ public CallbackInfo(CallbackState s, Network n, Object o) {
+ state = s; network = n; arg = o;
+ }
+ public String toString() {
+ return String.format("%s (%s)", state, network);
+ }
+ @Override
+ public boolean equals(Object o) {
+ if (!(o instanceof CallbackInfo)) return false;
+ // Ignore timeMs, since it's unpredictable.
+ CallbackInfo other = (CallbackInfo) o;
+ return (state == other.state) && Objects.equals(network, other.network);
+ }
+ @Override
+ public int hashCode() {
+ return Objects.hash(state, network);
+ }
+ }
+
/**
* Utility NetworkCallback for testing. The caller must explicitly test for all the callbacks
* this class receives, by calling expectCallback() exactly once each time a callback is
@@ -1114,21 +1137,6 @@
// the linger timeout.
private final static int TIMEOUT_MS = 50;
- private class CallbackInfo {
- public final CallbackState state;
- public final Network network;
- public Object arg;
- public CallbackInfo(CallbackState s, Network n, Object o) {
- state = s; network = n; arg = o;
- }
- public String toString() { return String.format("%s (%s)", state, network); }
- public boolean equals(Object o) {
- if (!(o instanceof CallbackInfo)) return false;
- // Ignore timeMs, since it's unpredictable.
- CallbackInfo other = (CallbackInfo) o;
- return state == other.state && Objects.equals(network, other.network);
- }
- }
private final LinkedBlockingQueue<CallbackInfo> mCallbacks = new LinkedBlockingQueue<>();
protected void setLastCallback(CallbackState state, Network network, Object o) {
@@ -1155,17 +1163,24 @@
setLastCallback(CallbackState.LOST, network, null);
}
+ CallbackInfo nextCallback(int timeoutMs) {
+ CallbackInfo cb = null;
+ try {
+ cb = mCallbacks.poll(timeoutMs, TimeUnit.MILLISECONDS);
+ } catch (InterruptedException e) {
+ }
+ if (cb == null) {
+ // LinkedBlockingQueue.poll() returns null if it timeouts.
+ fail("Did not receive callback after " + timeoutMs + "ms");
+ }
+ return cb;
+ }
+
void expectCallback(CallbackState state, MockNetworkAgent mockAgent, int timeoutMs) {
CallbackInfo expected = new CallbackInfo(
state, (mockAgent != null) ? mockAgent.getNetwork() : null, 0);
- CallbackInfo actual;
- try {
- actual = mCallbacks.poll(timeoutMs, TimeUnit.MILLISECONDS);
- assertEquals("Unexpected callback:", expected, actual);
- } catch (InterruptedException e) {
- fail("Did not receive expected " + expected + " after " + TIMEOUT_MS + "ms");
- actual = null; // Or the compiler can't tell it's never used uninitialized.
- }
+ CallbackInfo actual = nextCallback(timeoutMs);
+ assertEquals("Unexpected callback:", expected, actual);
if (state == CallbackState.LOSING) {
String msg = String.format(
"Invalid linger time value %d, must be between %d and %d",
diff --git a/tests/net/java/com/android/server/connectivity/tethering/UpstreamNetworkMonitorTest.java b/tests/net/java/com/android/server/connectivity/tethering/UpstreamNetworkMonitorTest.java
index 00420e9..1e67769 100644
--- a/tests/net/java/com/android/server/connectivity/tethering/UpstreamNetworkMonitorTest.java
+++ b/tests/net/java/com/android/server/connectivity/tethering/UpstreamNetworkMonitorTest.java
@@ -22,6 +22,7 @@
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
import static org.mockito.Mockito.reset;
import android.content.Context;
@@ -69,12 +70,13 @@
@Test
public void testDoesNothingBeforeStarted() {
- UpstreamNetworkMonitor unm = new UpstreamNetworkMonitor(null, null, EVENT_UNM_UPDATE);
- assertFalse(unm.mobileNetworkRequested());
- // Given a null Context, and therefore a null ConnectivityManager,
- // these would cause an exception, if they actually attempted anything.
- unm.mobileUpstreamRequiresDun(true);
- unm.mobileUpstreamRequiresDun(false);
+ assertTrue(mCM.hasNoCallbacks());
+ assertFalse(mUNM.mobileNetworkRequested());
+
+ mUNM.updateMobileRequiresDun(true);
+ assertTrue(mCM.hasNoCallbacks());
+ mUNM.updateMobileRequiresDun(false);
+ assertTrue(mCM.hasNoCallbacks());
}
@Test
@@ -85,7 +87,7 @@
assertEquals(1, mCM.trackingDefault.size());
mUNM.stop();
- assertTrue(mCM.isEmpty());
+ assertTrue(mCM.hasNoCallbacks());
}
@Test
@@ -97,11 +99,11 @@
assertTrue(mCM.isListeningForDun());
mUNM.stop();
- assertTrue(mCM.isEmpty());
+ assertTrue(mCM.hasNoCallbacks());
}
@Test
- public void testCanRequestMobileNetwork() throws Exception {
+ public void testRequestsMobileNetwork() throws Exception {
assertFalse(mUNM.mobileNetworkRequested());
assertEquals(0, mCM.requested.size());
@@ -109,25 +111,22 @@
assertFalse(mUNM.mobileNetworkRequested());
assertEquals(0, mCM.requested.size());
- mUNM.mobileUpstreamRequiresDun(false);
+ mUNM.updateMobileRequiresDun(false);
assertFalse(mUNM.mobileNetworkRequested());
assertEquals(0, mCM.requested.size());
mUNM.registerMobileNetworkRequest();
assertTrue(mUNM.mobileNetworkRequested());
- assertEquals(1, mCM.requested.size());
- assertEquals(1, mCM.legacyTypeMap.size());
- assertEquals(Integer.valueOf(TYPE_MOBILE_HIPRI),
- mCM.legacyTypeMap.values().iterator().next());
+ assertUpstreamTypeRequested(TYPE_MOBILE_HIPRI);
assertFalse(mCM.isDunRequested());
mUNM.stop();
assertFalse(mUNM.mobileNetworkRequested());
- assertTrue(mCM.isEmpty());
+ assertTrue(mCM.hasNoCallbacks());
}
@Test
- public void testCanRequestDunNetwork() throws Exception {
+ public void testRequestsDunNetwork() throws Exception {
assertFalse(mUNM.mobileNetworkRequested());
assertEquals(0, mCM.requested.size());
@@ -135,21 +134,50 @@
assertFalse(mUNM.mobileNetworkRequested());
assertEquals(0, mCM.requested.size());
- mUNM.mobileUpstreamRequiresDun(true);
+ mUNM.updateMobileRequiresDun(true);
assertFalse(mUNM.mobileNetworkRequested());
assertEquals(0, mCM.requested.size());
mUNM.registerMobileNetworkRequest();
assertTrue(mUNM.mobileNetworkRequested());
- assertEquals(1, mCM.requested.size());
- assertEquals(1, mCM.legacyTypeMap.size());
- assertEquals(Integer.valueOf(TYPE_MOBILE_DUN),
- mCM.legacyTypeMap.values().iterator().next());
+ assertUpstreamTypeRequested(TYPE_MOBILE_DUN);
assertTrue(mCM.isDunRequested());
mUNM.stop();
assertFalse(mUNM.mobileNetworkRequested());
- assertTrue(mCM.isEmpty());
+ assertTrue(mCM.hasNoCallbacks());
+ }
+
+ @Test
+ public void testUpdateMobileRequiredDun() throws Exception {
+ mUNM.start();
+
+ // Test going from no-DUN to DUN correctly re-registers callbacks.
+ mUNM.updateMobileRequiresDun(false);
+ mUNM.registerMobileNetworkRequest();
+ assertTrue(mUNM.mobileNetworkRequested());
+ assertUpstreamTypeRequested(TYPE_MOBILE_HIPRI);
+ assertFalse(mCM.isDunRequested());
+ mUNM.updateMobileRequiresDun(true);
+ assertTrue(mUNM.mobileNetworkRequested());
+ assertUpstreamTypeRequested(TYPE_MOBILE_DUN);
+ assertTrue(mCM.isDunRequested());
+
+ // Test going from DUN to no-DUN correctly re-registers callbacks.
+ mUNM.updateMobileRequiresDun(false);
+ assertTrue(mUNM.mobileNetworkRequested());
+ assertUpstreamTypeRequested(TYPE_MOBILE_HIPRI);
+ assertFalse(mCM.isDunRequested());
+
+ mUNM.stop();
+ assertFalse(mUNM.mobileNetworkRequested());
+ }
+
+ private void assertUpstreamTypeRequested(int upstreamType) throws Exception {
+ assertEquals(1, mCM.requested.size());
+ assertEquals(1, mCM.legacyTypeMap.size());
+ assertEquals(Integer.valueOf(upstreamType),
+ mCM.legacyTypeMap.values().iterator().next());
}
private static class TestConnectivityManager extends ConnectivityManager {
@@ -162,7 +190,7 @@
super(ctx, svc);
}
- boolean isEmpty() {
+ boolean hasNoCallbacks() {
return trackingDefault.isEmpty() &&
listening.isEmpty() &&
requested.isEmpty() &&
@@ -225,6 +253,8 @@
} else if (requested.containsKey(cb)) {
requested.remove(cb);
legacyTypeMap.remove(cb);
+ } else {
+ fail("Unexpected callback removed");
}
assertFalse(trackingDefault.contains(cb));
diff --git a/tools/aapt/AaptConfig.cpp b/tools/aapt/AaptConfig.cpp
index 565d2f0..d0026a2 100644
--- a/tools/aapt/AaptConfig.cpp
+++ b/tools/aapt/AaptConfig.cpp
@@ -131,6 +131,22 @@
part = parts[index].string();
}
+ if (parseWideColorGamut(part, &config)) {
+ index++;
+ if (index == N) {
+ goto success;
+ }
+ part = parts[index].string();
+ }
+
+ if (parseHdr(part, &config)) {
+ index++;
+ if (index == N) {
+ goto success;
+ }
+ part = parts[index].string();
+ }
+
if (parseOrientation(part, &config)) {
index++;
if (index == N) {
@@ -250,7 +266,9 @@
uint16_t minSdk = 0;
if ((config->uiMode & ResTable_config::MASK_UI_MODE_TYPE)
- == ResTable_config::UI_MODE_TYPE_VR_HEADSET) {
+ == ResTable_config::UI_MODE_TYPE_VR_HEADSET
+ || config->colorimetry & ResTable_config::MASK_WIDE_COLOR_GAMUT
+ || config->colorimetry & ResTable_config::MASK_HDR) {
minSdk = SDK_O;
} else if (config->screenLayout2 & ResTable_config::MASK_SCREENROUND) {
minSdk = SDK_MNC;
@@ -431,6 +449,46 @@
return false;
}
+bool parseWideColorGamut(const char* name, ResTable_config* out) {
+ if (strcmp(name, kWildcardName) == 0) {
+ if (out) out->colorimetry =
+ (out->colorimetry&~ResTable_config::MASK_WIDE_COLOR_GAMUT)
+ | ResTable_config::WIDE_COLOR_GAMUT_ANY;
+ return true;
+ } else if (strcmp(name, "widecg") == 0) {
+ if (out) out->colorimetry =
+ (out->colorimetry&~ResTable_config::MASK_WIDE_COLOR_GAMUT)
+ | ResTable_config::WIDE_COLOR_GAMUT_YES;
+ return true;
+ } else if (strcmp(name, "nowidecg") == 0) {
+ if (out) out->colorimetry =
+ (out->colorimetry&~ResTable_config::MASK_WIDE_COLOR_GAMUT)
+ | ResTable_config::WIDE_COLOR_GAMUT_NO;
+ return true;
+ }
+ return false;
+}
+
+bool parseHdr(const char* name, ResTable_config* out) {
+ if (strcmp(name, kWildcardName) == 0) {
+ if (out) out->colorimetry =
+ (out->colorimetry&~ResTable_config::MASK_HDR)
+ | ResTable_config::HDR_ANY;
+ return true;
+ } else if (strcmp(name, "highdr") == 0) {
+ if (out) out->colorimetry =
+ (out->colorimetry&~ResTable_config::MASK_HDR)
+ | ResTable_config::HDR_YES;
+ return true;
+ } else if (strcmp(name, "lowdr") == 0) {
+ if (out) out->colorimetry =
+ (out->colorimetry&~ResTable_config::MASK_HDR)
+ | ResTable_config::HDR_NO;
+ return true;
+ }
+ return false;
+}
+
bool parseOrientation(const char* name, ResTable_config* out) {
if (strcmp(name, kWildcardName) == 0) {
if (out) out->orientation = out->ORIENTATION_ANY;
diff --git a/tools/aapt/AaptConfig.h b/tools/aapt/AaptConfig.h
index 04c763f..a6dd252 100644
--- a/tools/aapt/AaptConfig.h
+++ b/tools/aapt/AaptConfig.h
@@ -61,6 +61,8 @@
bool parseScreenLayoutSize(const char* str, android::ResTable_config* out = NULL);
bool parseScreenLayoutLong(const char* str, android::ResTable_config* out = NULL);
bool parseScreenRound(const char* name, android::ResTable_config* out = NULL);
+bool parseWideColorGamut(const char* name, android::ResTable_config* out = NULL);
+bool parseHdr(const char* name, android::ResTable_config* out = NULL);
bool parseOrientation(const char* str, android::ResTable_config* out = NULL);
bool parseUiModeType(const char* str, android::ResTable_config* out = NULL);
bool parseUiModeNight(const char* str, android::ResTable_config* out = NULL);
diff --git a/tools/aapt/tests/AaptConfig_test.cpp b/tools/aapt/tests/AaptConfig_test.cpp
index 8bb38ba..23f61e9 100644
--- a/tools/aapt/tests/AaptConfig_test.cpp
+++ b/tools/aapt/tests/AaptConfig_test.cpp
@@ -98,3 +98,33 @@
EXPECT_EQ(SDK_MNC, config.sdkVersion);
EXPECT_EQ(String8("notround-v23"), config.toString());
}
+
+TEST(AaptConfigTest, WideColorGamutQualifier) {
+ ConfigDescription config;
+ EXPECT_TRUE(TestParse("widecg", &config));
+ EXPECT_EQ(android::ResTable_config::WIDE_COLOR_GAMUT_YES,
+ config.colorimetry & android::ResTable_config::MASK_WIDE_COLOR_GAMUT);
+ EXPECT_EQ(SDK_O, config.sdkVersion);
+ EXPECT_EQ(String8("widecg-v26"), config.toString());
+
+ EXPECT_TRUE(TestParse("nowidecg", &config));
+ EXPECT_EQ(android::ResTable_config::WIDE_COLOR_GAMUT_NO,
+ config.colorimetry & android::ResTable_config::MASK_WIDE_COLOR_GAMUT);
+ EXPECT_EQ(SDK_O, config.sdkVersion);
+ EXPECT_EQ(String8("nowidecg-v26"), config.toString());
+}
+
+TEST(AaptConfigTest, HdrQualifier) {
+ ConfigDescription config;
+ EXPECT_TRUE(TestParse("highdr", &config));
+ EXPECT_EQ(android::ResTable_config::HDR_YES,
+ config.colorimetry & android::ResTable_config::MASK_HDR);
+ EXPECT_EQ(SDK_O, config.sdkVersion);
+ EXPECT_EQ(String8("highdr-v26"), config.toString());
+
+ EXPECT_TRUE(TestParse("lowdr", &config));
+ EXPECT_EQ(android::ResTable_config::HDR_NO,
+ config.colorimetry & android::ResTable_config::MASK_HDR);
+ EXPECT_EQ(SDK_O, config.sdkVersion);
+ EXPECT_EQ(String8("lowdr-v26"), config.toString());
+}
\ No newline at end of file
diff --git a/tools/aapt2/ConfigDescription.cpp b/tools/aapt2/ConfigDescription.cpp
index c97d6d4..5bea3ad 100644
--- a/tools/aapt2/ConfigDescription.cpp
+++ b/tools/aapt2/ConfigDescription.cpp
@@ -206,6 +206,52 @@
return false;
}
+static bool parseWideColorGamut(const char* name, ResTable_config* out) {
+ if (strcmp(name, kWildcardName) == 0) {
+ if (out)
+ out->colorimetry =
+ (out->colorimetry & ~ResTable_config::MASK_WIDE_COLOR_GAMUT) |
+ ResTable_config::WIDE_COLOR_GAMUT_ANY;
+ return true;
+ } else if (strcmp(name, "widecg") == 0) {
+ if (out)
+ out->colorimetry =
+ (out->colorimetry & ~ResTable_config::MASK_WIDE_COLOR_GAMUT) |
+ ResTable_config::WIDE_COLOR_GAMUT_YES;
+ return true;
+ } else if (strcmp(name, "nowidecg") == 0) {
+ if (out)
+ out->colorimetry =
+ (out->colorimetry & ~ResTable_config::MASK_WIDE_COLOR_GAMUT) |
+ ResTable_config::WIDE_COLOR_GAMUT_NO;
+ return true;
+ }
+ return false;
+}
+
+static bool parseHdr(const char* name, ResTable_config* out) {
+ if (strcmp(name, kWildcardName) == 0) {
+ if (out)
+ out->colorimetry =
+ (out->colorimetry & ~ResTable_config::MASK_HDR) |
+ ResTable_config::HDR_ANY;
+ return true;
+ } else if (strcmp(name, "highdr") == 0) {
+ if (out)
+ out->colorimetry =
+ (out->colorimetry & ~ResTable_config::MASK_HDR) |
+ ResTable_config::HDR_YES;
+ return true;
+ } else if (strcmp(name, "lowdr") == 0) {
+ if (out)
+ out->colorimetry =
+ (out->colorimetry & ~ResTable_config::MASK_HDR) |
+ ResTable_config::HDR_NO;
+ return true;
+ }
+ return false;
+}
+
static bool parseOrientation(const char* name, ResTable_config* out) {
if (strcmp(name, kWildcardName) == 0) {
if (out) out->orientation = out->ORIENTATION_ANY;
@@ -687,6 +733,20 @@
}
}
+ if (parseWideColorGamut(part_iter->c_str(), &config)) {
+ ++part_iter;
+ if (part_iter == parts_end) {
+ goto success;
+ }
+ }
+
+ if (parseHdr(part_iter->c_str(), &config)) {
+ ++part_iter;
+ if (part_iter == parts_end) {
+ goto success;
+ }
+ }
+
if (parseOrientation(part_iter->c_str(), &config)) {
++part_iter;
if (part_iter == parts_end) {
@@ -779,7 +839,9 @@
ConfigDescription* config) {
uint16_t min_sdk = 0;
if ((config->uiMode & ResTable_config::MASK_UI_MODE_TYPE)
- == ResTable_config::UI_MODE_TYPE_VR_HEADSET) {
+ == ResTable_config::UI_MODE_TYPE_VR_HEADSET ||
+ config->colorimetry & ResTable_config::MASK_WIDE_COLOR_GAMUT ||
+ config->colorimetry & ResTable_config::MASK_HDR) {
min_sdk = SDK_O;
} else if (config->screenLayout2 & ResTable_config::MASK_SCREENROUND) {
min_sdk = SDK_MARSHMALLOW;
@@ -850,6 +912,12 @@
if ((screenLayout2 | o.screenLayout2) & MASK_SCREENROUND) {
return !(o.screenLayout2 & MASK_SCREENROUND);
}
+ if ((colorimetry | o.colorimetry) & MASK_HDR) {
+ return !(o.colorimetry & MASK_HDR);
+ }
+ if ((colorimetry | o.colorimetry) & MASK_WIDE_COLOR_GAMUT) {
+ return !(o.colorimetry & MASK_WIDE_COLOR_GAMUT);
+ }
if (orientation || o.orientation) return (!o.orientation);
if ((uiMode | o.uiMode) & MASK_UI_MODE_TYPE) {
return !(o.uiMode & MASK_UI_MODE_TYPE);
@@ -896,6 +964,9 @@
!pred(uiMode & MASK_UI_MODE_NIGHT, o.uiMode & MASK_UI_MODE_NIGHT) ||
!pred(screenLayout2 & MASK_SCREENROUND,
o.screenLayout2 & MASK_SCREENROUND) ||
+ !pred(colorimetry & MASK_HDR, o.colorimetry & MASK_HDR) ||
+ !pred(colorimetry & MASK_WIDE_COLOR_GAMUT,
+ o.colorimetry & MASK_WIDE_COLOR_GAMUT) ||
!pred(orientation, o.orientation) ||
!pred(touchscreen, o.touchscreen) ||
!pred(inputFlags & MASK_KEYSHIDDEN, o.inputFlags & MASK_KEYSHIDDEN) ||
diff --git a/tools/aapt2/ConfigDescription_test.cpp b/tools/aapt2/ConfigDescription_test.cpp
index 7933568..b88838a 100644
--- a/tools/aapt2/ConfigDescription_test.cpp
+++ b/tools/aapt2/ConfigDescription_test.cpp
@@ -102,6 +102,36 @@
EXPECT_EQ(std::string("notround-v23"), config.toString().string());
}
+TEST(ConfigDescriptionTest, TestWideColorGamutQualifier) {
+ ConfigDescription config;
+ EXPECT_TRUE(TestParse("widecg", &config));
+ EXPECT_EQ(android::ResTable_config::WIDE_COLOR_GAMUT_YES,
+ config.colorimetry & android::ResTable_config::MASK_WIDE_COLOR_GAMUT);
+ EXPECT_EQ(SDK_O, config.sdkVersion);
+ EXPECT_EQ(std::string("widecg-v26"), config.toString().string());
+
+ EXPECT_TRUE(TestParse("nowidecg", &config));
+ EXPECT_EQ(android::ResTable_config::WIDE_COLOR_GAMUT_NO,
+ config.colorimetry & android::ResTable_config::MASK_WIDE_COLOR_GAMUT);
+ EXPECT_EQ(SDK_O, config.sdkVersion);
+ EXPECT_EQ(std::string("nowidecg-v26"), config.toString().string());
+}
+
+TEST(ConfigDescriptionTest, TestHdrQualifier) {
+ ConfigDescription config;
+ EXPECT_TRUE(TestParse("highdr", &config));
+ EXPECT_EQ(android::ResTable_config::HDR_YES,
+ config.colorimetry & android::ResTable_config::MASK_HDR);
+ EXPECT_EQ(SDK_O, config.sdkVersion);
+ EXPECT_EQ(std::string("highdr-v26"), config.toString().string());
+
+ EXPECT_TRUE(TestParse("lowdr", &config));
+ EXPECT_EQ(android::ResTable_config::HDR_NO,
+ config.colorimetry & android::ResTable_config::MASK_HDR);
+ EXPECT_EQ(SDK_O, config.sdkVersion);
+ EXPECT_EQ(std::string("lowdr-v26"), config.toString().string());
+}
+
TEST(ConfigDescriptionTest, ParseVrAttribute) {
ConfigDescription config;
EXPECT_TRUE(TestParse("vrheadset", &config));
diff --git a/tools/layoutlib/bridge/src/android/graphics/FontFamily_Delegate.java b/tools/layoutlib/bridge/src/android/graphics/FontFamily_Delegate.java
index d326935..50efc7f 100644
--- a/tools/layoutlib/bridge/src/android/graphics/FontFamily_Delegate.java
+++ b/tools/layoutlib/bridge/src/android/graphics/FontFamily_Delegate.java
@@ -248,17 +248,14 @@
// ---- delegate methods ----
@LayoutlibDelegate
/*package*/ static boolean addFont(FontFamily thisFontFamily, String path, int ttcIndex) {
- if (thisFontFamily.mBuilderPtr == 0) {
- throw new IllegalStateException("Unable to call addFont after freezing.");
- }
- final FontFamily_Delegate delegate = getDelegate(thisFontFamily.mBuilderPtr);
+ final FontFamily_Delegate delegate = getDelegate(thisFontFamily.mNativePtr);
return delegate != null && delegate.addFont(path, ttcIndex);
}
// ---- native methods ----
@LayoutlibDelegate
- /*package*/ static long nInitBuilder(String lang, int variant) {
+ /*package*/ static long nCreateFamily(String lang, int variant) {
// TODO: support lang. This is required for japanese locale.
FontFamily_Delegate delegate = new FontFamily_Delegate();
// variant can be 0, 1 or 2.
@@ -273,11 +270,6 @@
}
@LayoutlibDelegate
- /*package*/ static long nCreateFamily(long builderPtr) {
- return builderPtr;
- }
-
- @LayoutlibDelegate
/*package*/ static void nUnrefFamily(long nativePtr) {
// Removing the java reference for the object doesn't mean that it's freed for garbage
// collection. Typeface_Delegate may still hold a reference for it.
@@ -285,22 +277,22 @@
}
@LayoutlibDelegate
- /*package*/ static boolean nAddFont(long builderPtr, ByteBuffer font, int ttcIndex) {
+ /*package*/ static boolean nAddFont(long nativeFamily, ByteBuffer font, int ttcIndex) {
assert false : "The only client of this method has been overriden.";
return false;
}
@LayoutlibDelegate
- /*package*/ static boolean nAddFontWeightStyle(long builderPtr, ByteBuffer font,
+ /*package*/ static boolean nAddFontWeightStyle(long nativeFamily, ByteBuffer font,
int ttcIndex, List<FontListParser.Axis> listOfAxis,
int weight, boolean isItalic) {
assert false : "The only client of this method has been overriden.";
return false;
}
- static boolean addFont(long builderPtr, final String path, final int weight,
+ static boolean addFont(long nativeFamily, final String path, final int weight,
final boolean isItalic) {
- final FontFamily_Delegate delegate = getDelegate(builderPtr);
+ final FontFamily_Delegate delegate = getDelegate(nativeFamily);
if (delegate != null) {
if (sFontLocation == null) {
delegate.mPostInitRunnables.add(() -> delegate.addFont(path, weight, isItalic));
@@ -312,8 +304,8 @@
}
@LayoutlibDelegate
- /*package*/ static boolean nAddFontFromAsset(long builderPtr, AssetManager mgr, String path) {
- FontFamily_Delegate ffd = sManager.getDelegate(builderPtr);
+ /*package*/ static boolean nAddFontFromAsset(long nativeFamily, AssetManager mgr, String path) {
+ FontFamily_Delegate ffd = sManager.getDelegate(nativeFamily);
if (ffd == null) {
return false;
}
diff --git a/tools/layoutlib/bridge/src/android/graphics/Typeface_Delegate.java b/tools/layoutlib/bridge/src/android/graphics/Typeface_Delegate.java
index a554b6d..5cd34f6 100644
--- a/tools/layoutlib/bridge/src/android/graphics/Typeface_Delegate.java
+++ b/tools/layoutlib/bridge/src/android/graphics/Typeface_Delegate.java
@@ -212,10 +212,9 @@
Map<String, ByteBuffer> bufferForPath) {
FontFamily fontFamily = new FontFamily(family.lang, family.variant);
for (FontListParser.Font font : family.fonts) {
- FontFamily_Delegate.addFont(fontFamily.mBuilderPtr, font.fontName, font.weight,
+ FontFamily_Delegate.addFont(fontFamily.mNativePtr, font.fontName, font.weight,
font.isItalic);
}
- fontFamily.freeze();
return fontFamily;
}
diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeContext.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeContext.java
index 663e56d..68680d5 100644
--- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeContext.java
+++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeContext.java
@@ -40,6 +40,7 @@
import android.annotation.NonNull;
import android.annotation.Nullable;
+import android.app.Notification;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.ContentResolver;
@@ -1820,6 +1821,13 @@
}
@Override
+ public ComponentName startServiceInForeground(Intent service,
+ int id, Notification notification) {
+ // pass
+ return null;
+ }
+
+ @Override
public boolean stopService(Intent arg0) {
// pass
return false;
@@ -1832,6 +1840,13 @@
}
@Override
+ public ComponentName startServiceInForegroundAsUser(Intent service,
+ int id, Notification notification, UserHandle user) {
+ // pass
+ return null;
+ }
+
+ @Override
public boolean stopServiceAsUser(Intent arg0, UserHandle arg1) {
// pass
return false;
diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgePackageManager.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgePackageManager.java
index bc7bc74..d3ec9e2 100644
--- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgePackageManager.java
+++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgePackageManager.java
@@ -42,14 +42,15 @@
import android.content.pm.ProviderInfo;
import android.content.pm.ResolveInfo;
import android.content.pm.ServiceInfo;
+import android.content.pm.SharedLibraryInfo;
import android.content.pm.VerifierDeviceIdentity;
+import android.content.pm.VersionedPackage;
import android.content.res.Resources;
import android.content.res.XmlResourceParser;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Handler;
-import android.os.RemoteException;
import android.os.UserHandle;
import android.os.storage.VolumeInfo;
import java.util.List;
@@ -71,6 +72,23 @@
}
@Override
+ public PackageInfo getPackageInfo(VersionedPackage versionedPackage,
+ @PackageInfoFlags int flags) throws NameNotFoundException {
+ return null;
+ }
+
+ @Override
+ public List<SharedLibraryInfo> getSharedLibraries(@InstallFlags int flags) {
+ return null;
+ }
+
+ @Override
+ public List<SharedLibraryInfo> getSharedLibrariesAsUser(@InstallFlags int flags,
+ int userId) {
+ return null;
+ }
+
+ @Override
public String[] currentToCanonicalPackageNames(String[] names) {
return new String[0];
}
diff --git a/tools/layoutlib/create/src/com/android/tools/layoutlib/create/CreateInfo.java b/tools/layoutlib/create/src/com/android/tools/layoutlib/create/CreateInfo.java
index 741eb27..7ba86fd 100644
--- a/tools/layoutlib/create/src/com/android/tools/layoutlib/create/CreateInfo.java
+++ b/tools/layoutlib/create/src/com/android/tools/layoutlib/create/CreateInfo.java
@@ -339,8 +339,7 @@
*/
private final static String[] PROMOTED_FIELDS = new String[] {
"android.graphics.drawable.VectorDrawable#mVectorState",
- "android.view.Choreographer#mLastFrameTimeNanos",
- "android.graphics.FontFamily#mBuilderPtr"
+ "android.view.Choreographer#mLastFrameTimeNanos"
};
/**
diff --git a/wifi/java/android/net/wifi/WifiConfiguration.java b/wifi/java/android/net/wifi/WifiConfiguration.java
index 3a45671..8cf7a24 100644
--- a/wifi/java/android/net/wifi/WifiConfiguration.java
+++ b/wifi/java/android/net/wifi/WifiConfiguration.java
@@ -709,6 +709,16 @@
/**
* @hide
+ * Indicate that a WifiConfiguration is temporary and should not be saved
+ * nor considered by AutoJoin.
+ */
+ @SystemApi
+ public boolean isEphemeral() {
+ return ephemeral;
+ }
+
+ /**
+ * @hide
* A hint about whether or not the network represented by this WifiConfiguration
* is metered. This is hinted at via the meteredHint bit on DHCP results set in
* {@link com.android.server.wifi.WifiStateMachine}, or via a network score in
diff --git a/wifi/java/android/net/wifi/WifiNetworkScoreCache.java b/wifi/java/android/net/wifi/WifiNetworkScoreCache.java
index 71124bb..36e4717 100755
--- a/wifi/java/android/net/wifi/WifiNetworkScoreCache.java
+++ b/wifi/java/android/net/wifi/WifiNetworkScoreCache.java
@@ -43,7 +43,7 @@
*/
public class WifiNetworkScoreCache extends INetworkScoreCache.Stub {
private static final String TAG = "WifiNetworkScoreCache";
- private static final boolean DBG = false;
+ private static final boolean DBG = Log.isLoggable(TAG, Log.DEBUG);
// A Network scorer returns a score in the range [-128, +127]
// We treat the lowest possible score as though there were no score, effectively allowing the
@@ -83,18 +83,28 @@
if (networks == null || networks.isEmpty()) {
return;
}
- Log.d(TAG, "updateScores list size=" + networks.size());
+ if (DBG) {
+ Log.d(TAG, "updateScores list size=" + networks.size());
+ }
+
+ boolean changed = false;
synchronized(mNetworkCache) {
for (ScoredNetwork network : networks) {
String networkKey = buildNetworkKey(network);
- if (networkKey == null) continue;
+ if (networkKey == null) {
+ if (DBG) {
+ Log.d(TAG, "Failed to build network key for ScoredNetwork" + network);
+ }
+ continue;
+ }
mNetworkCache.put(networkKey, network);
+ changed = true;
}
}
synchronized (mCacheLock) {
- if (mListener != null) {
+ if (mListener != null && changed) {
mListener.post(networks);
}
}
@@ -170,25 +180,49 @@
return score;
}
- private ScoredNetwork getScoredNetwork(ScanResult result) {
+ @Nullable
+ public ScoredNetwork getScoredNetwork(ScanResult result) {
String key = buildNetworkKey(result);
if (key == null) return null;
- //find it
synchronized(mNetworkCache) {
ScoredNetwork network = mNetworkCache.get(key);
return network;
}
}
- private String buildNetworkKey(ScoredNetwork network) {
- if (network == null || network.networkKey == null) return null;
- if (network.networkKey.wifiKey == null) return null;
- if (network.networkKey.type == NetworkKey.TYPE_WIFI) {
- String key = network.networkKey.wifiKey.ssid;
+ /** Returns the ScoredNetwork for the given key. */
+ @Nullable
+ public ScoredNetwork getScoredNetwork(NetworkKey networkKey) {
+ String key = buildNetworkKey(networkKey);
+ if (key == null) {
+ if (DBG) {
+ Log.d(TAG, "Could not build key string for Network Key: " + networkKey);
+ }
+ return null;
+ }
+ synchronized (mNetworkCache) {
+ return mNetworkCache.get(key);
+ }
+ }
+
+ private String buildNetworkKey(ScoredNetwork network) {
+ if (network == null) {
+ return null;
+ }
+ return buildNetworkKey(network.networkKey);
+ }
+
+ private String buildNetworkKey(NetworkKey networkKey) {
+ if (networkKey == null) {
+ return null;
+ }
+ if (networkKey.wifiKey == null) return null;
+ if (networkKey.type == NetworkKey.TYPE_WIFI) {
+ String key = networkKey.wifiKey.ssid;
if (key == null) return null;
- if (network.networkKey.wifiKey.bssid != null) {
- key = key + network.networkKey.wifiKey.bssid;
+ if (networkKey.wifiKey.bssid != null) {
+ key = key + networkKey.wifiKey.bssid;
}
return key;
}