Merge "Import translations. DO NOT MERGE" into oc-dev
diff --git a/api/current.txt b/api/current.txt
index e611b34..a15e07d 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -311,7 +311,7 @@
field public static final deprecated int autoText = 16843114; // 0x101016a
field public static final int autoUrlDetect = 16843404; // 0x101028c
field public static final int autoVerify = 16844014; // 0x10104ee
- field public static final int autofillHint = 16844121; // 0x1010559
+ field public static final int autofillHints = 16844121; // 0x1010559
field public static final int autofillMode = 16844116; // 0x1010554
field public static final int background = 16842964; // 0x10100d4
field public static final int backgroundDimAmount = 16842802; // 0x1010032
@@ -5299,7 +5299,6 @@
method public android.app.Notification.Builder addExtras(android.os.Bundle);
method public android.app.Notification.Builder addPerson(java.lang.String);
method public android.app.Notification build();
- method public android.app.Notification.Builder chooseBadgeIconType(int);
method public android.widget.RemoteViews createBigContentView();
method public android.widget.RemoteViews createContentView();
method public android.widget.RemoteViews createHeadsUpContentView();
@@ -5309,6 +5308,7 @@
method public static android.app.Notification.Builder recoverBuilder(android.content.Context, android.app.Notification);
method public android.app.Notification.Builder setActions(android.app.Notification.Action...);
method public android.app.Notification.Builder setAutoCancel(boolean);
+ method public android.app.Notification.Builder setBadgeIconType(int);
method public android.app.Notification.Builder setCategory(java.lang.String);
method public android.app.Notification.Builder setChannel(java.lang.String);
method public android.app.Notification.Builder setChronometerCountDown(boolean);
@@ -5586,7 +5586,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 deprecated 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";
@@ -5641,6 +5641,7 @@
method public java.lang.String getCreatorPackage();
method public int getCreatorUid();
method public android.os.UserHandle getCreatorUserHandle();
+ method public static android.app.PendingIntent getForegroundService(android.content.Context, int, android.content.Intent, int);
method public android.content.IntentSender getIntentSender();
method public static android.app.PendingIntent getService(android.content.Context, int, android.content.Intent, int);
method public deprecated java.lang.String getTargetPackage();
@@ -6581,7 +6582,7 @@
public static class AssistStructure.ViewNode {
method public float getAlpha();
- method public java.lang.String[] getAutoFillHint();
+ method public java.lang.String[] getAutoFillHints();
method public android.view.autofill.AutofillId getAutofillId();
method public java.lang.String[] getAutofillOptions();
method public int getAutofillType();
@@ -8858,6 +8859,7 @@
method public abstract void startActivities(android.content.Intent[], android.os.Bundle);
method public abstract void startActivity(android.content.Intent);
method public abstract void startActivity(android.content.Intent, android.os.Bundle);
+ method public abstract android.content.ComponentName startForegroundService(android.content.Intent);
method public abstract boolean startInstrumentation(android.content.ComponentName, java.lang.String, android.os.Bundle);
method public abstract void startIntentSender(android.content.IntentSender, android.content.Intent, int, int, int) throws android.content.IntentSender.SendIntentException;
method public abstract void startIntentSender(android.content.IntentSender, android.content.Intent, int, int, int, android.os.Bundle) throws android.content.IntentSender.SendIntentException;
@@ -9049,6 +9051,7 @@
method public void startActivities(android.content.Intent[], android.os.Bundle);
method public void startActivity(android.content.Intent);
method public void startActivity(android.content.Intent, android.os.Bundle);
+ method public android.content.ComponentName startForegroundService(android.content.Intent);
method public boolean startInstrumentation(android.content.ComponentName, java.lang.String, android.os.Bundle);
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;
@@ -9466,7 +9469,7 @@
field public static final java.lang.String EXTRA_PHONE_NUMBER = "android.intent.extra.PHONE_NUMBER";
field public static final java.lang.String EXTRA_PROCESS_TEXT = "android.intent.extra.PROCESS_TEXT";
field public static final java.lang.String EXTRA_PROCESS_TEXT_READONLY = "android.intent.extra.PROCESS_TEXT_READONLY";
- field public static final java.lang.String EXTRA_QUICK_VIEW_ADVANCED = "android.intent.extra.QUICK_VIEW_ADVANCED";
+ field public static final java.lang.String EXTRA_QUICK_VIEW_FEATURES = "android.intent.extra.QUICK_VIEW_FEATURES";
field public static final java.lang.String EXTRA_QUIET_MODE = "android.intent.extra.QUIET_MODE";
field public static final java.lang.String EXTRA_REFERRER = "android.intent.extra.REFERRER";
field public static final java.lang.String EXTRA_REFERRER_NAME = "android.intent.extra.REFERRER_NAME";
@@ -9732,6 +9735,14 @@
field public final long period;
}
+ public class QuickViewConstants {
+ field public static final java.lang.String FEATURE_DOWNLOAD = "android:download";
+ field public static final java.lang.String FEATURE_EDIT = "android:edit";
+ field public static final java.lang.String FEATURE_PRINT = "android:print";
+ field public static final java.lang.String FEATURE_SEND = "android:send";
+ field public static final java.lang.String FEATURE_VIEW = "android:view";
+ }
+
public class ReceiverCallNotAllowedException extends android.util.AndroidRuntimeException {
ctor public ReceiverCallNotAllowedException(java.lang.String);
}
@@ -24504,26 +24515,26 @@
}
public final class TvContract {
- method public static final android.net.Uri buildChannelLogoUri(long);
- method public static final android.net.Uri buildChannelLogoUri(android.net.Uri);
- method public static final android.net.Uri buildChannelUri(long);
- method public static final android.net.Uri buildChannelUriForPassthroughInput(java.lang.String);
- method public static final android.net.Uri buildChannelsUriForInput(java.lang.String);
- method public static final java.lang.String buildInputId(android.content.ComponentName);
- method public static final android.net.Uri buildPreviewProgramUri(long);
- method public static final android.net.Uri buildPreviewProgramsUriForChannel(long);
- method public static final android.net.Uri buildPreviewProgramsUriForChannel(android.net.Uri);
- method public static final android.net.Uri buildProgramUri(long);
- method public static final android.net.Uri buildProgramsUriForChannel(long);
- method public static final android.net.Uri buildProgramsUriForChannel(android.net.Uri);
- method public static final android.net.Uri buildProgramsUriForChannel(long, long, long);
- method public static final android.net.Uri buildProgramsUriForChannel(android.net.Uri, long, long);
- method public static final android.net.Uri buildRecordedProgramUri(long);
- method public static final android.net.Uri buildWatchNextProgramUri(long);
- method public static final boolean isChannelUri(android.net.Uri);
- method public static final boolean isChannelUriForPassthroughInput(android.net.Uri);
- method public static final boolean isChannelUriForTunerInput(android.net.Uri);
- method public static final boolean isProgramUri(android.net.Uri);
+ method public static android.net.Uri buildChannelLogoUri(long);
+ method public static android.net.Uri buildChannelLogoUri(android.net.Uri);
+ method public static android.net.Uri buildChannelUri(long);
+ method public static android.net.Uri buildChannelUriForPassthroughInput(java.lang.String);
+ method public static android.net.Uri buildChannelsUriForInput(java.lang.String);
+ method public static java.lang.String buildInputId(android.content.ComponentName);
+ method public static android.net.Uri buildPreviewProgramUri(long);
+ method public static android.net.Uri buildPreviewProgramsUriForChannel(long);
+ method public static android.net.Uri buildPreviewProgramsUriForChannel(android.net.Uri);
+ method public static android.net.Uri buildProgramUri(long);
+ method public static android.net.Uri buildProgramsUriForChannel(long);
+ method public static android.net.Uri buildProgramsUriForChannel(android.net.Uri);
+ method public static android.net.Uri buildProgramsUriForChannel(long, long, long);
+ method public static android.net.Uri buildProgramsUriForChannel(android.net.Uri, long, long);
+ method public static android.net.Uri buildRecordedProgramUri(long);
+ method public static android.net.Uri buildWatchNextProgramUri(long);
+ method public static boolean isChannelUri(android.net.Uri);
+ method public static boolean isChannelUriForPassthroughInput(android.net.Uri);
+ method public static boolean isChannelUriForTunerInput(android.net.Uri);
+ method public static boolean isProgramUri(android.net.Uri);
field public static final java.lang.String ACTION_MAKE_CHANNEL_BROWSABLE = "android.media.tv.action.MAKE_CHANNEL_BROWSABLE";
field public static final java.lang.String ACTION_PREVIEW_PROGRAM_ADDED_TO_WATCH_NEXT = "android.media.tv.action.PREVIEW_PROGRAM_ADDED_TO_WATCH_NEXT";
field public static final java.lang.String ACTION_PREVIEW_PROGRAM_BROWSABLE_DISABLED = "android.media.tv.action.PREVIEW_PROGRAM_BROWSABLE_DISABLED";
@@ -33103,8 +33114,10 @@
field public static final java.lang.String DURATION = "duration";
field public static final java.lang.String EXTRA_CALL_TYPE_FILTER = "android.provider.extra.CALL_TYPE_FILTER";
field public static final java.lang.String FEATURES = "features";
+ field public static final int FEATURES_HD_CALL = 4; // 0x4
field public static final int FEATURES_PULLED_EXTERNALLY = 2; // 0x2
field public static final int FEATURES_VIDEO = 1; // 0x1
+ field public static final int FEATURES_WIFI = 8; // 0x8
field public static final java.lang.String GEOCODED_LOCATION = "geocoded_location";
field public static final int INCOMING_TYPE = 1; // 0x1
field public static final java.lang.String IS_READ = "is_read";
@@ -38850,6 +38863,7 @@
field public static final java.lang.String EVENT_CALL_MERGE_FAILED = "android.telecom.event.CALL_MERGE_FAILED";
field public static final java.lang.String EVENT_CALL_PULL_FAILED = "android.telecom.event.CALL_PULL_FAILED";
field public static final java.lang.String EXTRA_ANSWERING_DROPS_FG_CALL = "android.telecom.extra.ANSWERING_DROPS_FG_CALL";
+ field public static final java.lang.String EXTRA_ANSWERING_DROPS_FG_CALL_APP_NAME = "android.telecom.extra.ANSWERING_DROPS_FG_CALL_APP_NAME";
field public static final java.lang.String EXTRA_CALL_SUBJECT = "android.telecom.extra.CALL_SUBJECT";
field public static final java.lang.String EXTRA_CHILD_ADDRESS = "android.telecom.extra.CHILD_ADDRESS";
field public static final java.lang.String EXTRA_LAST_FORWARDED_NUMBER = "android.telecom.extra.LAST_FORWARDED_NUMBER";
@@ -39259,6 +39273,7 @@
field public static final java.lang.String EXTRA_CHANGE_DEFAULT_DIALER_PACKAGE_NAME = "android.telecom.extra.CHANGE_DEFAULT_DIALER_PACKAGE_NAME";
field public static final java.lang.String EXTRA_INCOMING_CALL_ADDRESS = "android.telecom.extra.INCOMING_CALL_ADDRESS";
field public static final java.lang.String EXTRA_INCOMING_CALL_EXTRAS = "android.telecom.extra.INCOMING_CALL_EXTRAS";
+ field public static final java.lang.String EXTRA_INCOMING_VIDEO_STATE = "android.telecom.extra.INCOMING_VIDEO_STATE";
field public static final java.lang.String EXTRA_NOTIFICATION_COUNT = "android.telecom.extra.NOTIFICATION_COUNT";
field public static final java.lang.String EXTRA_NOTIFICATION_PHONE_NUMBER = "android.telecom.extra.NOTIFICATION_PHONE_NUMBER";
field public static final java.lang.String EXTRA_OUTGOING_CALL_EXTRAS = "android.telecom.extra.OUTGOING_CALL_EXTRAS";
@@ -40679,6 +40694,7 @@
method public void startActivities(android.content.Intent[], android.os.Bundle);
method public void startActivity(android.content.Intent);
method public void startActivity(android.content.Intent, android.os.Bundle);
+ method public android.content.ComponentName startForegroundService(android.content.Intent);
method public boolean startInstrumentation(android.content.ComponentName, java.lang.String, android.os.Bundle);
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;
@@ -45252,7 +45268,7 @@
method public float getAlpha();
method public android.view.animation.Animation getAnimation();
method public android.os.IBinder getApplicationWindowToken();
- method public java.lang.String[] getAutofillHint();
+ method public java.lang.String[] getAutofillHints();
method public int getAutofillMode();
method public int getAutofillType();
method public android.view.autofill.AutofillValue getAutofillValue();
@@ -45573,7 +45589,7 @@
method public void setActivated(boolean);
method public void setAlpha(float);
method public void setAnimation(android.view.animation.Animation);
- method public void setAutofillHint(java.lang.String...);
+ method public void setAutofillHints(java.lang.String...);
method public void setAutofillMode(int);
method public void setBackground(android.graphics.drawable.Drawable);
method public void setBackgroundColor(int);
@@ -45997,6 +46013,7 @@
method public static deprecated int getEdgeSlop();
method public static deprecated int getFadingEdgeLength();
method public static deprecated long getGlobalActionKeyTimeout();
+ method public float getScaledHorizontalScrollFactor();
method public static int getJumpTapTimeout();
method public static int getKeyRepeatDelay();
method public static int getKeyRepeatTimeout();
@@ -46015,7 +46032,6 @@
method public int getScaledOverscrollDistance();
method public int getScaledPagingTouchSlop();
method public int getScaledScrollBarSize();
- method public int getScaledScrollFactor();
method public int getScaledTouchSlop();
method public int getScaledWindowTouchSlop();
method public static int getScrollBarFadeDuration();
@@ -46024,6 +46040,7 @@
method public static float getScrollFriction();
method public static int getTapTimeout();
method public static deprecated int getTouchSlop();
+ method public float getScaledVerticalScrollFactor();
method public static deprecated int getWindowTouchSlop();
method public static long getZoomControlsTimeout();
method public boolean hasPermanentMenuKey();
@@ -46388,7 +46405,7 @@
method public abstract void setAccessibilityFocused(boolean);
method public abstract void setActivated(boolean);
method public abstract void setAlpha(float);
- method public abstract void setAutofillHint(java.lang.String[]);
+ method public abstract void setAutofillHints(java.lang.String[]);
method public abstract void setAutofillId(android.view.ViewStructure, int);
method public abstract void setAutofillOptions(java.lang.String[]);
method public abstract void setAutofillType(int);
@@ -47670,6 +47687,7 @@
method public void unregisterCallback(android.view.autofill.AutofillManager.AutofillCallback);
field public static final java.lang.String EXTRA_ASSIST_STRUCTURE = "android.view.autofill.extra.ASSIST_STRUCTURE";
field public static final java.lang.String EXTRA_AUTHENTICATION_RESULT = "android.view.autofill.extra.AUTHENTICATION_RESULT";
+ field public static final java.lang.String EXTRA_DATA_EXTRAS = "android.view.autofill.extra.DATA_EXTRAS";
field public static final int FLAG_MANUAL_REQUEST = 1; // 0x1
}
diff --git a/api/removed.txt b/api/removed.txt
index af429b8..42b2ae6 100644
--- a/api/removed.txt
+++ b/api/removed.txt
@@ -33,6 +33,10 @@
method public abstract java.io.File getSharedPreferencesPath(java.lang.String);
}
+ public class Intent implements java.lang.Cloneable android.os.Parcelable {
+ field public static final deprecated java.lang.String EXTRA_QUICK_VIEW_ADVANCED = "android.intent.extra.QUICK_VIEW_ADVANCED";
+ }
+
}
package android.content.pm {
@@ -374,16 +378,12 @@
method protected void initializeScrollbars(android.content.res.TypedArray);
}
- public static class WindowManager.LayoutParams extends android.view.ViewGroup.LayoutParams implements android.os.Parcelable {
- field public static final int TYPE_KEYGUARD = 2004; // 0x7d4
+ public class ViewConfiguration {
+ method public int getScaledScrollFactor();
}
-}
-
-package android.view.textclassifier {
-
- public final class TextClassificationManager {
- method public android.view.textclassifier.TextClassifier getDefaultTextClassifier();
+ public static class WindowManager.LayoutParams extends android.view.ViewGroup.LayoutParams implements android.os.Parcelable {
+ field public static final int TYPE_KEYGUARD = 2004; // 0x7d4
}
}
diff --git a/api/system-current.txt b/api/system-current.txt
index 060586d..63a0ad6 100644
--- a/api/system-current.txt
+++ b/api/system-current.txt
@@ -425,7 +425,7 @@
field public static final deprecated int autoText = 16843114; // 0x101016a
field public static final int autoUrlDetect = 16843404; // 0x101028c
field public static final int autoVerify = 16844014; // 0x10104ee
- field public static final int autofillHint = 16844121; // 0x1010559
+ field public static final int autofillHints = 16844121; // 0x1010559
field public static final int autofillMode = 16844116; // 0x1010554
field public static final int background = 16842964; // 0x10100d4
field public static final int backgroundDimAmount = 16842802; // 0x1010032
@@ -5474,7 +5474,6 @@
method public android.app.Notification.Builder addExtras(android.os.Bundle);
method public android.app.Notification.Builder addPerson(java.lang.String);
method public android.app.Notification build();
- method public android.app.Notification.Builder chooseBadgeIconType(int);
method public android.widget.RemoteViews createBigContentView();
method public android.widget.RemoteViews createContentView();
method public android.widget.RemoteViews createHeadsUpContentView();
@@ -5484,6 +5483,7 @@
method public static android.app.Notification.Builder recoverBuilder(android.content.Context, android.app.Notification);
method public android.app.Notification.Builder setActions(android.app.Notification.Action...);
method public android.app.Notification.Builder setAutoCancel(boolean);
+ method public android.app.Notification.Builder setBadgeIconType(int);
method public android.app.Notification.Builder setCategory(java.lang.String);
method public android.app.Notification.Builder setChannel(java.lang.String);
method public android.app.Notification.Builder setChronometerCountDown(boolean);
@@ -5780,7 +5780,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 deprecated 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";
@@ -5835,6 +5835,7 @@
method public java.lang.String getCreatorPackage();
method public int getCreatorUid();
method public android.os.UserHandle getCreatorUserHandle();
+ method public static android.app.PendingIntent getForegroundService(android.content.Context, int, android.content.Intent, int);
method public android.content.IntentSender getIntentSender();
method public static android.app.PendingIntent getService(android.content.Context, int, android.content.Intent, int);
method public deprecated java.lang.String getTargetPackage();
@@ -6818,7 +6819,7 @@
public static class AssistStructure.ViewNode {
method public float getAlpha();
- method public java.lang.String[] getAutoFillHint();
+ method public java.lang.String[] getAutoFillHints();
method public android.view.autofill.AutofillId getAutofillId();
method public java.lang.String[] getAutofillOptions();
method public int getAutofillType();
@@ -9353,6 +9354,7 @@
method public abstract void startActivities(android.content.Intent[], android.os.Bundle);
method public abstract void startActivity(android.content.Intent);
method public abstract void startActivity(android.content.Intent, android.os.Bundle);
+ method public abstract android.content.ComponentName startForegroundService(android.content.Intent);
method public abstract boolean startInstrumentation(android.content.ComponentName, java.lang.String, android.os.Bundle);
method public abstract void startIntentSender(android.content.IntentSender, android.content.Intent, int, int, int) throws android.content.IntentSender.SendIntentException;
method public abstract void startIntentSender(android.content.IntentSender, android.content.Intent, int, int, int, android.os.Bundle) throws android.content.IntentSender.SendIntentException;
@@ -9558,6 +9560,7 @@
method public void startActivities(android.content.Intent[], android.os.Bundle);
method public void startActivity(android.content.Intent);
method public void startActivity(android.content.Intent, android.os.Bundle);
+ method public android.content.ComponentName startForegroundService(android.content.Intent);
method public boolean startInstrumentation(android.content.ComponentName, java.lang.String, android.os.Bundle);
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;
@@ -9898,6 +9901,7 @@
field public static final java.lang.String ACTION_USER_FOREGROUND = "android.intent.action.USER_FOREGROUND";
field public static final java.lang.String ACTION_USER_INITIALIZE = "android.intent.action.USER_INITIALIZE";
field public static final java.lang.String ACTION_USER_PRESENT = "android.intent.action.USER_PRESENT";
+ field public static final java.lang.String ACTION_USER_REMOVED = "android.intent.action.USER_REMOVED";
field public static final java.lang.String ACTION_USER_UNLOCKED = "android.intent.action.USER_UNLOCKED";
field public static final java.lang.String ACTION_VIEW = "android.intent.action.VIEW";
field public static final java.lang.String ACTION_VOICE_ASSIST = "android.intent.action.VOICE_ASSIST";
@@ -9991,7 +9995,7 @@
field public static final java.lang.String EXTRA_PHONE_NUMBER = "android.intent.extra.PHONE_NUMBER";
field public static final java.lang.String EXTRA_PROCESS_TEXT = "android.intent.extra.PROCESS_TEXT";
field public static final java.lang.String EXTRA_PROCESS_TEXT_READONLY = "android.intent.extra.PROCESS_TEXT_READONLY";
- field public static final java.lang.String EXTRA_QUICK_VIEW_ADVANCED = "android.intent.extra.QUICK_VIEW_ADVANCED";
+ field public static final java.lang.String EXTRA_QUICK_VIEW_FEATURES = "android.intent.extra.QUICK_VIEW_FEATURES";
field public static final java.lang.String EXTRA_QUIET_MODE = "android.intent.extra.QUIET_MODE";
field public static final java.lang.String EXTRA_REFERRER = "android.intent.extra.REFERRER";
field public static final java.lang.String EXTRA_REFERRER_NAME = "android.intent.extra.REFERRER_NAME";
@@ -10262,6 +10266,14 @@
field public final long period;
}
+ public class QuickViewConstants {
+ field public static final java.lang.String FEATURE_DOWNLOAD = "android:download";
+ field public static final java.lang.String FEATURE_EDIT = "android:edit";
+ field public static final java.lang.String FEATURE_PRINT = "android:print";
+ field public static final java.lang.String FEATURE_SEND = "android:send";
+ field public static final java.lang.String FEATURE_VIEW = "android:view";
+ }
+
public class ReceiverCallNotAllowedException extends android.util.AndroidRuntimeException {
ctor public ReceiverCallNotAllowedException(java.lang.String);
}
@@ -26434,28 +26446,28 @@
}
public final class TvContract {
- method public static final android.net.Uri buildChannelLogoUri(long);
- method public static final android.net.Uri buildChannelLogoUri(android.net.Uri);
- method public static final android.net.Uri buildChannelUri(long);
- method public static final android.net.Uri buildChannelUriForPassthroughInput(java.lang.String);
- method public static final android.net.Uri buildChannelsUriForInput(java.lang.String);
- method public static final android.net.Uri buildChannelsUriForInput(java.lang.String, boolean);
- method public static final android.net.Uri buildChannelsUriForInput(java.lang.String, java.lang.String, boolean);
- method public static final java.lang.String buildInputId(android.content.ComponentName);
- method public static final android.net.Uri buildPreviewProgramUri(long);
- method public static final android.net.Uri buildPreviewProgramsUriForChannel(long);
- method public static final android.net.Uri buildPreviewProgramsUriForChannel(android.net.Uri);
- method public static final android.net.Uri buildProgramUri(long);
- method public static final android.net.Uri buildProgramsUriForChannel(long);
- method public static final android.net.Uri buildProgramsUriForChannel(android.net.Uri);
- method public static final android.net.Uri buildProgramsUriForChannel(long, long, long);
- method public static final android.net.Uri buildProgramsUriForChannel(android.net.Uri, long, long);
- method public static final android.net.Uri buildRecordedProgramUri(long);
- method public static final android.net.Uri buildWatchNextProgramUri(long);
- method public static final boolean isChannelUri(android.net.Uri);
- method public static final boolean isChannelUriForPassthroughInput(android.net.Uri);
- method public static final boolean isChannelUriForTunerInput(android.net.Uri);
- method public static final boolean isProgramUri(android.net.Uri);
+ method public static android.net.Uri buildChannelLogoUri(long);
+ method public static android.net.Uri buildChannelLogoUri(android.net.Uri);
+ method public static android.net.Uri buildChannelUri(long);
+ method public static android.net.Uri buildChannelUriForPassthroughInput(java.lang.String);
+ method public static android.net.Uri buildChannelsUriForInput(java.lang.String);
+ method public static android.net.Uri buildChannelsUriForInput(java.lang.String, boolean);
+ method public static android.net.Uri buildChannelsUriForInput(java.lang.String, java.lang.String, boolean);
+ method public static java.lang.String buildInputId(android.content.ComponentName);
+ method public static android.net.Uri buildPreviewProgramUri(long);
+ method public static android.net.Uri buildPreviewProgramsUriForChannel(long);
+ method public static android.net.Uri buildPreviewProgramsUriForChannel(android.net.Uri);
+ method public static android.net.Uri buildProgramUri(long);
+ method public static android.net.Uri buildProgramsUriForChannel(long);
+ method public static android.net.Uri buildProgramsUriForChannel(android.net.Uri);
+ method public static android.net.Uri buildProgramsUriForChannel(long, long, long);
+ method public static android.net.Uri buildProgramsUriForChannel(android.net.Uri, long, long);
+ method public static android.net.Uri buildRecordedProgramUri(long);
+ method public static android.net.Uri buildWatchNextProgramUri(long);
+ method public static boolean isChannelUri(android.net.Uri);
+ method public static boolean isChannelUriForPassthroughInput(android.net.Uri);
+ method public static boolean isChannelUriForTunerInput(android.net.Uri);
+ method public static boolean isProgramUri(android.net.Uri);
field public static final java.lang.String ACTION_MAKE_CHANNEL_BROWSABLE = "android.media.tv.action.MAKE_CHANNEL_BROWSABLE";
field public static final java.lang.String ACTION_PREVIEW_PROGRAM_ADDED_TO_WATCH_NEXT = "android.media.tv.action.PREVIEW_PROGRAM_ADDED_TO_WATCH_NEXT";
field public static final java.lang.String ACTION_PREVIEW_PROGRAM_BROWSABLE_DISABLED = "android.media.tv.action.PREVIEW_PROGRAM_BROWSABLE_DISABLED";
@@ -35975,8 +35987,10 @@
field public static final java.lang.String DURATION = "duration";
field public static final java.lang.String EXTRA_CALL_TYPE_FILTER = "android.provider.extra.CALL_TYPE_FILTER";
field public static final java.lang.String FEATURES = "features";
+ field public static final int FEATURES_HD_CALL = 4; // 0x4
field public static final int FEATURES_PULLED_EXTERNALLY = 2; // 0x2
field public static final int FEATURES_VIDEO = 1; // 0x1
+ field public static final int FEATURES_WIFI = 8; // 0x8
field public static final java.lang.String GEOCODED_LOCATION = "geocoded_location";
field public static final int INCOMING_TYPE = 1; // 0x1
field public static final java.lang.String IS_READ = "is_read";
@@ -42016,6 +42030,7 @@
field public static final java.lang.String EVENT_CALL_MERGE_FAILED = "android.telecom.event.CALL_MERGE_FAILED";
field public static final java.lang.String EVENT_CALL_PULL_FAILED = "android.telecom.event.CALL_PULL_FAILED";
field public static final java.lang.String EXTRA_ANSWERING_DROPS_FG_CALL = "android.telecom.extra.ANSWERING_DROPS_FG_CALL";
+ field public static final java.lang.String EXTRA_ANSWERING_DROPS_FG_CALL_APP_NAME = "android.telecom.extra.ANSWERING_DROPS_FG_CALL_APP_NAME";
field public static final java.lang.String EXTRA_CALL_SUBJECT = "android.telecom.extra.CALL_SUBJECT";
field public static final java.lang.String EXTRA_CHILD_ADDRESS = "android.telecom.extra.CHILD_ADDRESS";
field public static final java.lang.String EXTRA_LAST_FORWARDED_NUMBER = "android.telecom.extra.LAST_FORWARDED_NUMBER";
@@ -42611,6 +42626,7 @@
field public static final java.lang.String EXTRA_CONNECTION_SERVICE = "android.telecom.extra.CONNECTION_SERVICE";
field public static final java.lang.String EXTRA_INCOMING_CALL_ADDRESS = "android.telecom.extra.INCOMING_CALL_ADDRESS";
field public static final java.lang.String EXTRA_INCOMING_CALL_EXTRAS = "android.telecom.extra.INCOMING_CALL_EXTRAS";
+ field public static final java.lang.String EXTRA_INCOMING_VIDEO_STATE = "android.telecom.extra.INCOMING_VIDEO_STATE";
field public static final java.lang.String EXTRA_NOTIFICATION_COUNT = "android.telecom.extra.NOTIFICATION_COUNT";
field public static final java.lang.String EXTRA_NOTIFICATION_PHONE_NUMBER = "android.telecom.extra.NOTIFICATION_PHONE_NUMBER";
field public static final java.lang.String EXTRA_OUTGOING_CALL_EXTRAS = "android.telecom.extra.OUTGOING_CALL_EXTRAS";
@@ -44117,6 +44133,7 @@
method public void startActivities(android.content.Intent[], android.os.Bundle);
method public void startActivity(android.content.Intent);
method public void startActivity(android.content.Intent, android.os.Bundle);
+ method public android.content.ComponentName startForegroundService(android.content.Intent);
method public boolean startInstrumentation(android.content.ComponentName, java.lang.String, android.os.Bundle);
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;
@@ -48708,7 +48725,7 @@
method public float getAlpha();
method public android.view.animation.Animation getAnimation();
method public android.os.IBinder getApplicationWindowToken();
- method public java.lang.String[] getAutofillHint();
+ method public java.lang.String[] getAutofillHints();
method public int getAutofillMode();
method public int getAutofillType();
method public android.view.autofill.AutofillValue getAutofillValue();
@@ -49029,7 +49046,7 @@
method public void setActivated(boolean);
method public void setAlpha(float);
method public void setAnimation(android.view.animation.Animation);
- method public void setAutofillHint(java.lang.String...);
+ method public void setAutofillHints(java.lang.String...);
method public void setAutofillMode(int);
method public void setBackground(android.graphics.drawable.Drawable);
method public void setBackgroundColor(int);
@@ -49453,6 +49470,7 @@
method public static deprecated int getEdgeSlop();
method public static deprecated int getFadingEdgeLength();
method public static deprecated long getGlobalActionKeyTimeout();
+ method public float getScaledHorizontalScrollFactor();
method public static int getJumpTapTimeout();
method public static int getKeyRepeatDelay();
method public static int getKeyRepeatTimeout();
@@ -49471,7 +49489,6 @@
method public int getScaledOverscrollDistance();
method public int getScaledPagingTouchSlop();
method public int getScaledScrollBarSize();
- method public int getScaledScrollFactor();
method public int getScaledTouchSlop();
method public int getScaledWindowTouchSlop();
method public static int getScrollBarFadeDuration();
@@ -49480,6 +49497,7 @@
method public static float getScrollFriction();
method public static int getTapTimeout();
method public static deprecated int getTouchSlop();
+ method public float getScaledVerticalScrollFactor();
method public static deprecated int getWindowTouchSlop();
method public static long getZoomControlsTimeout();
method public boolean hasPermanentMenuKey();
@@ -49844,7 +49862,7 @@
method public abstract void setAccessibilityFocused(boolean);
method public abstract void setActivated(boolean);
method public abstract void setAlpha(float);
- method public abstract void setAutofillHint(java.lang.String[]);
+ method public abstract void setAutofillHints(java.lang.String[]);
method public abstract void setAutofillId(android.view.ViewStructure, int);
method public abstract void setAutofillOptions(java.lang.String[]);
method public abstract void setAutofillType(int);
@@ -51129,6 +51147,7 @@
method public void unregisterCallback(android.view.autofill.AutofillManager.AutofillCallback);
field public static final java.lang.String EXTRA_ASSIST_STRUCTURE = "android.view.autofill.extra.ASSIST_STRUCTURE";
field public static final java.lang.String EXTRA_AUTHENTICATION_RESULT = "android.view.autofill.extra.AUTHENTICATION_RESULT";
+ field public static final java.lang.String EXTRA_DATA_EXTRAS = "android.view.autofill.extra.DATA_EXTRAS";
field public static final int FLAG_MANUAL_REQUEST = 1; // 0x1
}
@@ -52745,6 +52764,7 @@
}
public static abstract interface WebViewProvider.ViewDelegate {
+ method public default void autofill(android.util.SparseArray<android.view.autofill.AutofillValue>);
method public abstract boolean dispatchKeyEvent(android.view.KeyEvent);
method public abstract android.view.View findFocus(android.view.View);
method public abstract android.view.accessibility.AccessibilityNodeProvider getAccessibilityNodeProvider();
diff --git a/api/system-removed.txt b/api/system-removed.txt
index 272ae77..1bafe96 100644
--- a/api/system-removed.txt
+++ b/api/system-removed.txt
@@ -31,6 +31,10 @@
method public abstract java.io.File getSharedPreferencesPath(java.lang.String);
}
+ public class Intent implements java.lang.Cloneable android.os.Parcelable {
+ field public static final deprecated java.lang.String EXTRA_QUICK_VIEW_ADVANCED = "android.intent.extra.QUICK_VIEW_ADVANCED";
+ }
+
}
package android.content.pm {
@@ -368,16 +372,12 @@
method protected void initializeScrollbars(android.content.res.TypedArray);
}
- public static class WindowManager.LayoutParams extends android.view.ViewGroup.LayoutParams implements android.os.Parcelable {
- field public static final int TYPE_KEYGUARD = 2004; // 0x7d4
+ public class ViewConfiguration {
+ method public int getScaledScrollFactor();
}
-}
-
-package android.view.textclassifier {
-
- public final class TextClassificationManager {
- method public android.view.textclassifier.TextClassifier getDefaultTextClassifier();
+ public static class WindowManager.LayoutParams extends android.view.ViewGroup.LayoutParams implements android.os.Parcelable {
+ field public static final int TYPE_KEYGUARD = 2004; // 0x7d4
}
}
diff --git a/api/test-current.txt b/api/test-current.txt
index b4942a6..efeb5a8 100644
--- a/api/test-current.txt
+++ b/api/test-current.txt
@@ -311,7 +311,7 @@
field public static final deprecated int autoText = 16843114; // 0x101016a
field public static final int autoUrlDetect = 16843404; // 0x101028c
field public static final int autoVerify = 16844014; // 0x10104ee
- field public static final int autofillHint = 16844121; // 0x1010559
+ field public static final int autofillHints = 16844121; // 0x1010559
field public static final int autofillMode = 16844116; // 0x1010554
field public static final int background = 16842964; // 0x10100d4
field public static final int backgroundDimAmount = 16842802; // 0x1010032
@@ -5311,7 +5311,6 @@
method public android.app.Notification.Builder addExtras(android.os.Bundle);
method public android.app.Notification.Builder addPerson(java.lang.String);
method public android.app.Notification build();
- method public android.app.Notification.Builder chooseBadgeIconType(int);
method public android.widget.RemoteViews createBigContentView();
method public android.widget.RemoteViews createContentView();
method public android.widget.RemoteViews createHeadsUpContentView();
@@ -5321,6 +5320,7 @@
method public static android.app.Notification.Builder recoverBuilder(android.content.Context, android.app.Notification);
method public android.app.Notification.Builder setActions(android.app.Notification.Action...);
method public android.app.Notification.Builder setAutoCancel(boolean);
+ method public android.app.Notification.Builder setBadgeIconType(int);
method public android.app.Notification.Builder setCategory(java.lang.String);
method public android.app.Notification.Builder setChannel(java.lang.String);
method public android.app.Notification.Builder setChronometerCountDown(boolean);
@@ -5599,7 +5599,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 deprecated 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";
@@ -5654,6 +5654,7 @@
method public java.lang.String getCreatorPackage();
method public int getCreatorUid();
method public android.os.UserHandle getCreatorUserHandle();
+ method public static android.app.PendingIntent getForegroundService(android.content.Context, int, android.content.Intent, int);
method public android.content.IntentSender getIntentSender();
method public static android.app.PendingIntent getService(android.content.Context, int, android.content.Intent, int);
method public deprecated java.lang.String getTargetPackage();
@@ -6610,7 +6611,7 @@
public static class AssistStructure.ViewNode {
method public float getAlpha();
- method public java.lang.String[] getAutoFillHint();
+ method public java.lang.String[] getAutoFillHints();
method public android.view.autofill.AutofillId getAutofillId();
method public java.lang.String[] getAutofillOptions();
method public int getAutofillType();
@@ -8890,6 +8891,7 @@
method public abstract void startActivities(android.content.Intent[], android.os.Bundle);
method public abstract void startActivity(android.content.Intent);
method public abstract void startActivity(android.content.Intent, android.os.Bundle);
+ method public abstract android.content.ComponentName startForegroundService(android.content.Intent);
method public abstract boolean startInstrumentation(android.content.ComponentName, java.lang.String, android.os.Bundle);
method public abstract void startIntentSender(android.content.IntentSender, android.content.Intent, int, int, int) throws android.content.IntentSender.SendIntentException;
method public abstract void startIntentSender(android.content.IntentSender, android.content.Intent, int, int, int, android.os.Bundle) throws android.content.IntentSender.SendIntentException;
@@ -9082,6 +9084,7 @@
method public void startActivities(android.content.Intent[], android.os.Bundle);
method public void startActivity(android.content.Intent);
method public void startActivity(android.content.Intent, android.os.Bundle);
+ method public android.content.ComponentName startForegroundService(android.content.Intent);
method public boolean startInstrumentation(android.content.ComponentName, java.lang.String, android.os.Bundle);
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;
@@ -9499,7 +9502,7 @@
field public static final java.lang.String EXTRA_PHONE_NUMBER = "android.intent.extra.PHONE_NUMBER";
field public static final java.lang.String EXTRA_PROCESS_TEXT = "android.intent.extra.PROCESS_TEXT";
field public static final java.lang.String EXTRA_PROCESS_TEXT_READONLY = "android.intent.extra.PROCESS_TEXT_READONLY";
- field public static final java.lang.String EXTRA_QUICK_VIEW_ADVANCED = "android.intent.extra.QUICK_VIEW_ADVANCED";
+ field public static final java.lang.String EXTRA_QUICK_VIEW_FEATURES = "android.intent.extra.QUICK_VIEW_FEATURES";
field public static final java.lang.String EXTRA_QUIET_MODE = "android.intent.extra.QUIET_MODE";
field public static final java.lang.String EXTRA_REFERRER = "android.intent.extra.REFERRER";
field public static final java.lang.String EXTRA_REFERRER_NAME = "android.intent.extra.REFERRER_NAME";
@@ -9765,6 +9768,14 @@
field public final long period;
}
+ public class QuickViewConstants {
+ field public static final java.lang.String FEATURE_DOWNLOAD = "android:download";
+ field public static final java.lang.String FEATURE_EDIT = "android:edit";
+ field public static final java.lang.String FEATURE_PRINT = "android:print";
+ field public static final java.lang.String FEATURE_SEND = "android:send";
+ field public static final java.lang.String FEATURE_VIEW = "android:view";
+ }
+
public class ReceiverCallNotAllowedException extends android.util.AndroidRuntimeException {
ctor public ReceiverCallNotAllowedException(java.lang.String);
}
@@ -24617,26 +24628,26 @@
}
public final class TvContract {
- method public static final android.net.Uri buildChannelLogoUri(long);
- method public static final android.net.Uri buildChannelLogoUri(android.net.Uri);
- method public static final android.net.Uri buildChannelUri(long);
- method public static final android.net.Uri buildChannelUriForPassthroughInput(java.lang.String);
- method public static final android.net.Uri buildChannelsUriForInput(java.lang.String);
- method public static final java.lang.String buildInputId(android.content.ComponentName);
- method public static final android.net.Uri buildPreviewProgramUri(long);
- method public static final android.net.Uri buildPreviewProgramsUriForChannel(long);
- method public static final android.net.Uri buildPreviewProgramsUriForChannel(android.net.Uri);
- method public static final android.net.Uri buildProgramUri(long);
- method public static final android.net.Uri buildProgramsUriForChannel(long);
- method public static final android.net.Uri buildProgramsUriForChannel(android.net.Uri);
- method public static final android.net.Uri buildProgramsUriForChannel(long, long, long);
- method public static final android.net.Uri buildProgramsUriForChannel(android.net.Uri, long, long);
- method public static final android.net.Uri buildRecordedProgramUri(long);
- method public static final android.net.Uri buildWatchNextProgramUri(long);
- method public static final boolean isChannelUri(android.net.Uri);
- method public static final boolean isChannelUriForPassthroughInput(android.net.Uri);
- method public static final boolean isChannelUriForTunerInput(android.net.Uri);
- method public static final boolean isProgramUri(android.net.Uri);
+ method public static android.net.Uri buildChannelLogoUri(long);
+ method public static android.net.Uri buildChannelLogoUri(android.net.Uri);
+ method public static android.net.Uri buildChannelUri(long);
+ method public static android.net.Uri buildChannelUriForPassthroughInput(java.lang.String);
+ method public static android.net.Uri buildChannelsUriForInput(java.lang.String);
+ method public static java.lang.String buildInputId(android.content.ComponentName);
+ method public static android.net.Uri buildPreviewProgramUri(long);
+ method public static android.net.Uri buildPreviewProgramsUriForChannel(long);
+ method public static android.net.Uri buildPreviewProgramsUriForChannel(android.net.Uri);
+ method public static android.net.Uri buildProgramUri(long);
+ method public static android.net.Uri buildProgramsUriForChannel(long);
+ method public static android.net.Uri buildProgramsUriForChannel(android.net.Uri);
+ method public static android.net.Uri buildProgramsUriForChannel(long, long, long);
+ method public static android.net.Uri buildProgramsUriForChannel(android.net.Uri, long, long);
+ method public static android.net.Uri buildRecordedProgramUri(long);
+ method public static android.net.Uri buildWatchNextProgramUri(long);
+ method public static boolean isChannelUri(android.net.Uri);
+ method public static boolean isChannelUriForPassthroughInput(android.net.Uri);
+ method public static boolean isChannelUriForTunerInput(android.net.Uri);
+ method public static boolean isProgramUri(android.net.Uri);
field public static final java.lang.String ACTION_MAKE_CHANNEL_BROWSABLE = "android.media.tv.action.MAKE_CHANNEL_BROWSABLE";
field public static final java.lang.String ACTION_PREVIEW_PROGRAM_ADDED_TO_WATCH_NEXT = "android.media.tv.action.PREVIEW_PROGRAM_ADDED_TO_WATCH_NEXT";
field public static final java.lang.String ACTION_PREVIEW_PROGRAM_BROWSABLE_DISABLED = "android.media.tv.action.PREVIEW_PROGRAM_BROWSABLE_DISABLED";
@@ -33243,8 +33254,10 @@
field public static final java.lang.String DURATION = "duration";
field public static final java.lang.String EXTRA_CALL_TYPE_FILTER = "android.provider.extra.CALL_TYPE_FILTER";
field public static final java.lang.String FEATURES = "features";
+ field public static final int FEATURES_HD_CALL = 4; // 0x4
field public static final int FEATURES_PULLED_EXTERNALLY = 2; // 0x2
field public static final int FEATURES_VIDEO = 1; // 0x1
+ field public static final int FEATURES_WIFI = 8; // 0x8
field public static final java.lang.String GEOCODED_LOCATION = "geocoded_location";
field public static final int INCOMING_TYPE = 1; // 0x1
field public static final java.lang.String IS_READ = "is_read";
@@ -39053,6 +39066,7 @@
field public static final java.lang.String EVENT_CALL_MERGE_FAILED = "android.telecom.event.CALL_MERGE_FAILED";
field public static final java.lang.String EVENT_CALL_PULL_FAILED = "android.telecom.event.CALL_PULL_FAILED";
field public static final java.lang.String EXTRA_ANSWERING_DROPS_FG_CALL = "android.telecom.extra.ANSWERING_DROPS_FG_CALL";
+ field public static final java.lang.String EXTRA_ANSWERING_DROPS_FG_CALL_APP_NAME = "android.telecom.extra.ANSWERING_DROPS_FG_CALL_APP_NAME";
field public static final java.lang.String EXTRA_CALL_SUBJECT = "android.telecom.extra.CALL_SUBJECT";
field public static final java.lang.String EXTRA_CHILD_ADDRESS = "android.telecom.extra.CHILD_ADDRESS";
field public static final java.lang.String EXTRA_LAST_FORWARDED_NUMBER = "android.telecom.extra.LAST_FORWARDED_NUMBER";
@@ -39462,6 +39476,7 @@
field public static final java.lang.String EXTRA_CHANGE_DEFAULT_DIALER_PACKAGE_NAME = "android.telecom.extra.CHANGE_DEFAULT_DIALER_PACKAGE_NAME";
field public static final java.lang.String EXTRA_INCOMING_CALL_ADDRESS = "android.telecom.extra.INCOMING_CALL_ADDRESS";
field public static final java.lang.String EXTRA_INCOMING_CALL_EXTRAS = "android.telecom.extra.INCOMING_CALL_EXTRAS";
+ field public static final java.lang.String EXTRA_INCOMING_VIDEO_STATE = "android.telecom.extra.INCOMING_VIDEO_STATE";
field public static final java.lang.String EXTRA_NOTIFICATION_COUNT = "android.telecom.extra.NOTIFICATION_COUNT";
field public static final java.lang.String EXTRA_NOTIFICATION_PHONE_NUMBER = "android.telecom.extra.NOTIFICATION_PHONE_NUMBER";
field public static final java.lang.String EXTRA_OUTGOING_CALL_EXTRAS = "android.telecom.extra.OUTGOING_CALL_EXTRAS";
@@ -40883,6 +40898,7 @@
method public void startActivities(android.content.Intent[], android.os.Bundle);
method public void startActivity(android.content.Intent);
method public void startActivity(android.content.Intent, android.os.Bundle);
+ method public android.content.ComponentName startForegroundService(android.content.Intent);
method public boolean startInstrumentation(android.content.ComponentName, java.lang.String, android.os.Bundle);
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;
@@ -45626,7 +45642,7 @@
method public float getAlpha();
method public android.view.animation.Animation getAnimation();
method public android.os.IBinder getApplicationWindowToken();
- method public java.lang.String[] getAutofillHint();
+ method public java.lang.String[] getAutofillHints();
method public int getAutofillMode();
method public int getAutofillType();
method public android.view.autofill.AutofillValue getAutofillValue();
@@ -45950,7 +45966,7 @@
method public void setActivated(boolean);
method public void setAlpha(float);
method public void setAnimation(android.view.animation.Animation);
- method public void setAutofillHint(java.lang.String...);
+ method public void setAutofillHints(java.lang.String...);
method public void setAutofillMode(int);
method public void setBackground(android.graphics.drawable.Drawable);
method public void setBackgroundColor(int);
@@ -46374,6 +46390,7 @@
method public static deprecated int getEdgeSlop();
method public static deprecated int getFadingEdgeLength();
method public static deprecated long getGlobalActionKeyTimeout();
+ method public float getScaledHorizontalScrollFactor();
method public static int getHoverTooltipHideShortTimeout();
method public static int getHoverTooltipHideTimeout();
method public static int getHoverTooltipShowTimeout();
@@ -46396,7 +46413,6 @@
method public int getScaledOverscrollDistance();
method public int getScaledPagingTouchSlop();
method public int getScaledScrollBarSize();
- method public int getScaledScrollFactor();
method public int getScaledTouchSlop();
method public int getScaledWindowTouchSlop();
method public static int getScrollBarFadeDuration();
@@ -46405,6 +46421,7 @@
method public static float getScrollFriction();
method public static int getTapTimeout();
method public static deprecated int getTouchSlop();
+ method public float getScaledVerticalScrollFactor();
method public static deprecated int getWindowTouchSlop();
method public static long getZoomControlsTimeout();
method public boolean hasPermanentMenuKey();
@@ -46769,7 +46786,7 @@
method public abstract void setAccessibilityFocused(boolean);
method public abstract void setActivated(boolean);
method public abstract void setAlpha(float);
- method public abstract void setAutofillHint(java.lang.String[]);
+ method public abstract void setAutofillHints(java.lang.String[]);
method public abstract void setAutofillId(android.view.ViewStructure, int);
method public abstract void setAutofillOptions(java.lang.String[]);
method public abstract void setAutofillType(int);
@@ -48053,6 +48070,7 @@
method public void unregisterCallback(android.view.autofill.AutofillManager.AutofillCallback);
field public static final java.lang.String EXTRA_ASSIST_STRUCTURE = "android.view.autofill.extra.ASSIST_STRUCTURE";
field public static final java.lang.String EXTRA_AUTHENTICATION_RESULT = "android.view.autofill.extra.AUTHENTICATION_RESULT";
+ field public static final java.lang.String EXTRA_DATA_EXTRAS = "android.view.autofill.extra.DATA_EXTRAS";
field public static final int FLAG_MANUAL_REQUEST = 1; // 0x1
}
diff --git a/api/test-removed.txt b/api/test-removed.txt
index af429b8..42b2ae6 100644
--- a/api/test-removed.txt
+++ b/api/test-removed.txt
@@ -33,6 +33,10 @@
method public abstract java.io.File getSharedPreferencesPath(java.lang.String);
}
+ public class Intent implements java.lang.Cloneable android.os.Parcelable {
+ field public static final deprecated java.lang.String EXTRA_QUICK_VIEW_ADVANCED = "android.intent.extra.QUICK_VIEW_ADVANCED";
+ }
+
}
package android.content.pm {
@@ -374,16 +378,12 @@
method protected void initializeScrollbars(android.content.res.TypedArray);
}
- public static class WindowManager.LayoutParams extends android.view.ViewGroup.LayoutParams implements android.os.Parcelable {
- field public static final int TYPE_KEYGUARD = 2004; // 0x7d4
+ public class ViewConfiguration {
+ method public int getScaledScrollFactor();
}
-}
-
-package android.view.textclassifier {
-
- public final class TextClassificationManager {
- method public android.view.textclassifier.TextClassifier getDefaultTextClassifier();
+ public static class WindowManager.LayoutParams extends android.view.ViewGroup.LayoutParams implements android.os.Parcelable {
+ field public static final int TYPE_KEYGUARD = 2004; // 0x7d4
}
}
diff --git a/core/java/android/app/ActivityManager.java b/core/java/android/app/ActivityManager.java
index 9f2f669..4004bd6 100644
--- a/core/java/android/app/ActivityManager.java
+++ b/core/java/android/app/ActivityManager.java
@@ -405,6 +405,13 @@
*/
public static final int INTENT_SENDER_SERVICE = 4;
+ /**
+ * Type for IActivityManaqer.getIntentSender: this PendingIntent is
+ * for a startForegroundService operation.
+ * @hide
+ */
+ public static final int INTENT_SENDER_FOREGROUND_SERVICE = 5;
+
/** @hide User operation call: success! */
public static final int USER_OP_SUCCESS = 0;
diff --git a/core/java/android/app/ContextImpl.java b/core/java/android/app/ContextImpl.java
index 4c080c9..467ba99 100644
--- a/core/java/android/app/ContextImpl.java
+++ b/core/java/android/app/ContextImpl.java
@@ -1447,14 +1447,21 @@
@Override
public ComponentName startService(Intent service) {
warnIfCallingFromSystemProcess();
- return startServiceCommon(service, -1, null, mUser);
+ return startServiceCommon(service, -1, null, false, mUser);
}
@Override
+ public ComponentName startForegroundService(Intent service) {
+ warnIfCallingFromSystemProcess();
+ return startServiceCommon(service, -1, null, true, mUser);
+ }
+
+ // STOPSHIP: remove when NotificationManager.startServiceInForeground() is retired
+ @Override
public ComponentName startServiceInForeground(Intent service,
int id, Notification notification) {
warnIfCallingFromSystemProcess();
- return startServiceCommon(service, id, notification, mUser);
+ return startServiceCommon(service, id, notification, false, mUser);
}
@Override
@@ -1465,24 +1472,30 @@
@Override
public ComponentName startServiceAsUser(Intent service, UserHandle user) {
- return startServiceCommon(service, -1, null, user);
+ return startServiceCommon(service, -1, null, false, user);
}
@Override
+ public ComponentName startForegroundServiceAsUser(Intent service, UserHandle user) {
+ return startServiceCommon(service, -1, null, true, user);
+ }
+
+ // STOPSHIP: remove when NotificationManager.startServiceInForeground() is retired
+ @Override
public ComponentName startServiceInForegroundAsUser(Intent service,
int id, Notification notification, UserHandle user) {
- return startServiceCommon(service, id, notification, user);
+ return startServiceCommon(service, id, notification, false, user);
}
private ComponentName startServiceCommon(Intent service, int id, Notification notification,
- UserHandle user) {
+ boolean requireForeground, UserHandle user) {
try {
validateServiceIntent(service);
service.prepareToLeaveProcess(this);
ComponentName cn = ActivityManager.getService().startService(
mMainThread.getApplicationThread(), service, service.resolveTypeIfNeeded(
- getContentResolver()), id, notification, getOpPackageName(),
- user.getIdentifier());
+ getContentResolver()), id, notification, requireForeground,
+ getOpPackageName(), user.getIdentifier());
if (cn != null) {
if (cn.getPackageName().equals("!")) {
throw new SecurityException(
diff --git a/core/java/android/app/IActivityManager.aidl b/core/java/android/app/IActivityManager.aidl
index b9d1d91..0a5e4be 100644
--- a/core/java/android/app/IActivityManager.aidl
+++ b/core/java/android/app/IActivityManager.aidl
@@ -130,7 +130,7 @@
PendingIntent getRunningServiceControlPanel(in ComponentName service);
ComponentName startService(in IApplicationThread caller, in Intent service,
in String resolvedType, int id, in Notification notification,
- in String callingPackage, int userId);
+ boolean requireForeground, 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,
diff --git a/core/java/android/app/Notification.java b/core/java/android/app/Notification.java
index 4bbc003..3d66135 100644
--- a/core/java/android/app/Notification.java
+++ b/core/java/android/app/Notification.java
@@ -2715,7 +2715,7 @@
*
* Note: This value might be ignored, for launchers that don't support badge icons.
*/
- public Builder chooseBadgeIconType(int icon) {
+ public Builder setBadgeIconType(int icon) {
mN.mBadgeIcon = icon;
return this;
}
diff --git a/core/java/android/app/NotificationManager.java b/core/java/android/app/NotificationManager.java
index 75998f2..72c5978 100644
--- a/core/java/android/app/NotificationManager.java
+++ b/core/java/android/app/NotificationManager.java
@@ -1171,8 +1171,11 @@
* @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.
+ *
+ * @deprecated STOPSHIP transition away from this for O
*/
@Nullable
+ @Deprecated
public ComponentName startServiceInForeground(Intent service,
int id, Notification notification) {
return mContext.startServiceInForeground(service, id, notification);
diff --git a/core/java/android/app/PendingIntent.java b/core/java/android/app/PendingIntent.java
index 7d1a16a..dc432af 100644
--- a/core/java/android/app/PendingIntent.java
+++ b/core/java/android/app/PendingIntent.java
@@ -596,6 +596,42 @@
*/
public static PendingIntent getService(Context context, int requestCode,
@NonNull Intent intent, @Flags int flags) {
+ return buildServicePendingIntent(context, requestCode, intent, flags,
+ ActivityManager.INTENT_SENDER_SERVICE);
+ }
+
+ /**
+ * Retrieve a PendingIntent that will start a foreground service, like calling
+ * {@link Context#startService Context.startForegroundService()}. The start
+ * arguments given to the service will come from the extras of the Intent.
+ *
+ * <p class="note">For security reasons, the {@link android.content.Intent}
+ * you supply here should almost always be an <em>explicit intent</em>,
+ * that is specify an explicit component to be delivered to through
+ * {@link Intent#setClass(android.content.Context, Class) Intent.setClass}</p>
+ *
+ * @param context The Context in which this PendingIntent should start
+ * the service.
+ * @param requestCode Private request code for the sender
+ * @param intent An Intent describing the service to be started.
+ * @param flags May be {@link #FLAG_ONE_SHOT}, {@link #FLAG_NO_CREATE},
+ * {@link #FLAG_CANCEL_CURRENT}, {@link #FLAG_UPDATE_CURRENT},
+ * {@link #FLAG_IMMUTABLE} or any of the flags as supported by
+ * {@link Intent#fillIn Intent.fillIn()} to control which unspecified parts
+ * of the intent that can be supplied when the actual send happens.
+ *
+ * @return Returns an existing or new PendingIntent matching the given
+ * parameters. May return null only if {@link #FLAG_NO_CREATE} has been
+ * supplied.
+ */
+ public static PendingIntent getForegroundService(Context context, int requestCode,
+ @NonNull Intent intent, @Flags int flags) {
+ return buildServicePendingIntent(context, requestCode, intent, flags,
+ ActivityManager.INTENT_SENDER_FOREGROUND_SERVICE);
+ }
+
+ private static PendingIntent buildServicePendingIntent(Context context, int requestCode,
+ Intent intent, int flags, int serviceKind) {
String packageName = context.getPackageName();
String resolvedType = intent != null ? intent.resolveTypeIfNeeded(
context.getContentResolver()) : null;
@@ -603,7 +639,7 @@
intent.prepareToLeaveProcess(context);
IIntentSender target =
ActivityManager.getService().getIntentSender(
- ActivityManager.INTENT_SENDER_SERVICE, packageName,
+ serviceKind, packageName,
null, null, requestCode, new Intent[] { intent },
resolvedType != null ? new String[] { resolvedType } : null,
flags, null, UserHandle.myUserId());
diff --git a/core/java/android/app/assist/AssistStructure.java b/core/java/android/app/assist/AssistStructure.java
index a343524..124267b 100644
--- a/core/java/android/app/assist/AssistStructure.java
+++ b/core/java/android/app/assist/AssistStructure.java
@@ -593,7 +593,7 @@
// fields (viewId and childId) of the field.
AutofillId mAutofillId;
@View.AutofillType int mAutofillType;
- @Nullable String[] mAutofillHint;
+ @Nullable String[] mAutofillHints;
AutofillValue mAutofillValue;
String[] mAutofillOptions;
boolean mSanitized;
@@ -685,7 +685,7 @@
mSanitized = in.readInt() == 1;
mAutofillId = in.readParcelable(null);
mAutofillType = in.readInt();
- mAutofillHint = in.readStringArray();
+ mAutofillHints = in.readStringArray();
mAutofillValue = in.readParcelable(null);
mAutofillOptions = in.readStringArray();
}
@@ -830,7 +830,7 @@
out.writeInt(mSanitized ? 1 : 0);
out.writeParcelable(mAutofillId, 0);
out.writeInt(mAutofillType);
- out.writeStringArray(mAutofillHint);
+ out.writeStringArray(mAutofillHints);
final AutofillValue sanitizedValue = writeSensitive ? mAutofillValue : null;
out.writeParcelable(sanitizedValue, 0);
out.writeStringArray(mAutofillOptions);
@@ -973,10 +973,10 @@
* <p>It's only set when the {@link AssistStructure} is used for autofilling purposes, not
* for assist.</p>
*
- * @return The hint for this view
+ * @return The hints for this view
*/
- @Nullable public String[] getAutoFillHint() {
- return mAutofillHint;
+ @Nullable public String[] getAutoFillHints() {
+ return mAutofillHints;
}
/**
@@ -1678,8 +1678,8 @@
}
@Override
- public void setAutofillHint(@Nullable String[] hint) {
- mNode.mAutofillHint = hint;
+ public void setAutofillHints(@Nullable String[] hints) {
+ mNode.mAutofillHints = hints;
}
@Override
@@ -1836,7 +1836,7 @@
+ ", type=" + node.getAutofillType()
+ ", options=" + Arrays.toString(node.getAutofillOptions())
+ ", inputType=" + node.getInputType()
- + ", hint=" + Arrays.toString(node.getAutoFillHint())
+ + ", hints=" + Arrays.toString(node.getAutoFillHints())
+ ", value=" + node.getAutofillValue()
+ ", sanitized=" + node.isSanitized());
}
diff --git a/core/java/android/app/backup/RestoreSession.java b/core/java/android/app/backup/RestoreSession.java
index 94fac17..69d964d 100644
--- a/core/java/android/app/backup/RestoreSession.java
+++ b/core/java/android/app/backup/RestoreSession.java
@@ -54,7 +54,9 @@
public int getAvailableRestoreSets(RestoreObserver observer, BackupManagerMonitor monitor) {
int err = -1;
RestoreObserverWrapper obsWrapper = new RestoreObserverWrapper(mContext, observer);
- BackupManagerMonitorWrapper monitorWrapper = new BackupManagerMonitorWrapper(monitor);
+ BackupManagerMonitorWrapper monitorWrapper = monitor == null
+ ? null
+ : new BackupManagerMonitorWrapper(monitor);
try {
err = mBinder.getAvailableRestoreSets(obsWrapper, monitorWrapper);
} catch (RemoteException e) {
@@ -99,7 +101,9 @@
return -1;
}
mObserver = new RestoreObserverWrapper(mContext, observer);
- BackupManagerMonitorWrapper monitorWrapper = new BackupManagerMonitorWrapper(monitor);
+ BackupManagerMonitorWrapper monitorWrapper = monitor == null
+ ? null
+ : new BackupManagerMonitorWrapper(monitor);
try {
err = mBinder.restoreAll(token, mObserver, monitorWrapper);
} catch (RemoteException e) {
@@ -154,7 +158,9 @@
return -1;
}
mObserver = new RestoreObserverWrapper(mContext, observer);
- BackupManagerMonitorWrapper monitorWrapper = new BackupManagerMonitorWrapper(monitor);
+ BackupManagerMonitorWrapper monitorWrapper = monitor == null
+ ? null
+ : new BackupManagerMonitorWrapper(monitor);
try {
err = mBinder.restoreSome(token, mObserver, monitorWrapper, packages);
} catch (RemoteException e) {
@@ -212,8 +218,9 @@
return -1;
}
mObserver = new RestoreObserverWrapper(mContext, observer);
- BackupManagerMonitorWrapper monitorWrapper = new BackupManagerMonitorWrapper(monitor);
-
+ BackupManagerMonitorWrapper monitorWrapper = monitor == null
+ ? null
+ : new BackupManagerMonitorWrapper(monitor);
try {
err = mBinder.restorePackage(packageName, mObserver, monitorWrapper);
} catch (RemoteException e) {
diff --git a/core/java/android/app/job/JobInfo.java b/core/java/android/app/job/JobInfo.java
index 78e4c0d..f9094c0 100644
--- a/core/java/android/app/job/JobInfo.java
+++ b/core/java/android/app/job/JobInfo.java
@@ -83,6 +83,9 @@
/* Minimum flex for a periodic job, in milliseconds. */
private static final long MIN_FLEX_MILLIS = 5 * 60 * 1000L; // 5 minutes
+ /* Minimum backoff interval for a job, in milliseconds */
+ private static final long MIN_BACKOFF_MILLIS = 10 * 1000L; // 10 seconds
+
/**
* Query the minimum interval allowed for periodic scheduled jobs. Attempting
* to declare a smaller period that this when scheduling a job will result in a
@@ -106,6 +109,14 @@
}
/**
+ * Query the minimum automatic-reschedule backoff interval permitted for jobs.
+ * @hide
+ */
+ public static final long getMinBackoffMillis() {
+ return MIN_BACKOFF_MILLIS;
+ }
+
+ /**
* Default type of backoff.
* @hide
*/
@@ -361,7 +372,8 @@
* job does not recur periodically.
*/
public long getIntervalMillis() {
- return intervalMillis >= getMinPeriodMillis() ? intervalMillis : getMinPeriodMillis();
+ final long minInterval = getMinPeriodMillis();
+ return intervalMillis >= minInterval ? intervalMillis : minInterval;
}
/**
@@ -381,7 +393,8 @@
* to 5 seconds.
*/
public long getInitialBackoffMillis() {
- return initialBackoffMillis;
+ final long minBackoff = getMinBackoffMillis();
+ return initialBackoffMillis >= minBackoff ? initialBackoffMillis : minBackoff;
}
/**
diff --git a/core/java/android/content/Context.java b/core/java/android/content/Context.java
index 3a8a420..1803bbe 100644
--- a/core/java/android/content/Context.java
+++ b/core/java/android/content/Context.java
@@ -2576,7 +2576,7 @@
* {@link ComponentName} of the actual service that was started is
* returned; else if the service does not exist null is returned.
*
- * @throws SecurityException If the caller does not permission to access the service
+ * @throws SecurityException If the caller does not have 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).
@@ -2588,11 +2588,47 @@
public abstract ComponentName startService(Intent service);
/**
+ * Similar to {@link #startService(Intent)}, but with an implicit promise that the
+ * Service will call {@link android.app.Service#startForeground(int, Notification)
+ * startForeground(int, Notification)} once it begins running. The service is given
+ * an amount of time comparable to the ANR interval to do this, otherwise the system
+ * will automatically stop the service and declare the app ANR.
+ *
+ * <p>Unlike the ordinary {@link #startService(Intent)}, this method can be used
+ * at any time, regardless of whether the app hosting the service is in a foreground
+ * state.
+ *
+ * @param service Identifies the service to be started. The Intent must be
+ * fully explicit (supplying a component name). Additional values
+ * may be included in the Intent extras to supply arguments along with
+ * this specific start call.
+ *
+ * @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.
+ *
+ * @throws SecurityException If the caller does not have permission to access the service
+ * or the service can not be found.
+ *
+ * @see #stopService
+ * @see android.app.Service#startForeground(int, Notification)
+ */
+ @Nullable
+ public abstract ComponentName startForegroundService(Intent service);
+
+ /**
+ * @hide like {@link #startForegroundService(Intent)} but for a specific user.
+ */
+ @Nullable
+ public abstract ComponentName startForegroundServiceAsUser(Intent service, UserHandle user);
+
+ /**
* 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
+ * @deprecated STOPSHIP remove in favor of two-step startForegroundService() + startForeground()
*/
@Nullable
public abstract ComponentName startServiceInForeground(Intent service,
@@ -2620,7 +2656,7 @@
* @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 If the caller does not permission to access the service
+ * @throws SecurityException If the caller does not have 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).
@@ -2638,7 +2674,9 @@
/**
* @hide like {@link #startServiceInForeground(Intent, int, Notification)}
* but for a specific user.
+ * @deprecated STOPSHIP remove when trial API is turned off
*/
+ @Deprecated
@Nullable
public abstract ComponentName startServiceInForegroundAsUser(Intent service,
int id, Notification notification, UserHandle user);
@@ -2685,7 +2723,7 @@
* {@code false} is returned if the connection is not made so you will not
* receive the service object.
*
- * @throws SecurityException If the caller does not permission to access the service
+ * @throws SecurityException If the caller does not have permission to access the service
* or the service can not be found.
*
* @see #unbindService
diff --git a/core/java/android/content/ContextWrapper.java b/core/java/android/content/ContextWrapper.java
index 6b0bbfa..75784a6 100644
--- a/core/java/android/content/ContextWrapper.java
+++ b/core/java/android/content/ContextWrapper.java
@@ -644,7 +644,12 @@
return mBase.startService(service);
}
- /** @hide */
+ @Override
+ public ComponentName startForegroundService(Intent service) {
+ return mBase.startForegroundService(service);
+ }
+
+ /** @hide STOPSHIP remove when trial API is turned down */
@Override
public ComponentName startServiceInForeground(Intent service,
int id, Notification notification) {
@@ -664,6 +669,12 @@
/** @hide */
@Override
+ public ComponentName startForegroundServiceAsUser(Intent service, UserHandle user) {
+ return mBase.startForegroundServiceAsUser(service, user);
+ }
+
+ /** @hide STOPSHIP removed when trial API is turned down */
+ @Override
public ComponentName startServiceInForegroundAsUser(Intent service,
int id, Notification notification, UserHandle user) {
return mBase.startServiceInForegroundAsUser(service, id, notification, user);
diff --git a/core/java/android/content/Intent.java b/core/java/android/content/Intent.java
index 7890a96..116224b 100644
--- a/core/java/android/content/Intent.java
+++ b/core/java/android/content/Intent.java
@@ -668,19 +668,17 @@
* a URI or a list of URIs.
* <p>Activities handling this intent action should handle the vast majority of
* MIME types rather than only specific ones.
+ * <p>Quick viewers must render the quick view image locally, and must not send
+ * file content outside current device.
* <p>Input: {@link #getData} is a mandatory content URI of the item to
* preview. {@link #getClipData} contains an optional list of content URIs
* if there is more than one item to preview. {@link #EXTRA_INDEX} is an
* optional index of the URI in the clip data to show first.
- * <p>By default quick viewers are supposed to be lightweight and focus on
- * previewing the content only. They should not expose features such as printing,
- * opening in an external app, deleting, rotating, casting, etc.
- * However, if {@link #EXTRA_QUICK_VIEW_ADVANCED} is true, then the quick viewer
- * may show advanced UI which includes convenience actions suitable for the passed
- * Uris.
+ * {@link #EXTRA_QUICK_VIEW_FEATURES} is an optional extra indicating the features
+ * that can be shown in the quick view UI.
* <p>Output: nothing.
- * @see #EXTRA_QUICK_VIEW_ADVANCED
* @see #EXTRA_INDEX
+ * @see #EXTRA_QUICK_VIEW_FEATURES
*/
@SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
public static final String ACTION_QUICK_VIEW = "android.intent.action.QUICK_VIEW";
@@ -2447,7 +2445,8 @@
*
* {@hide}
*/
- public static final String ACTION_REQUEST_SHUTDOWN = "android.intent.action.ACTION_REQUEST_SHUTDOWN";
+ public static final String ACTION_REQUEST_SHUTDOWN
+ = "com.android.internal.intent.action.REQUEST_SHUTDOWN";
/**
* Broadcast Action: A sticky broadcast that indicates low storage space
* condition on the device
@@ -3051,6 +3050,7 @@
* {@link android.Manifest.permission#MANAGE_USERS} to receive this broadcast.
* @hide
*/
+ @SystemApi
public static final String ACTION_USER_REMOVED =
"android.intent.action.USER_REMOVED";
@@ -4488,7 +4488,7 @@
* Optional index with semantics depending on the intent action.
*
* <p>The value must be an integer greater or equal to 0.
- * @see ACTION_QUICK_VIEW
+ * @see #ACTION_QUICK_VIEW
*/
public static final String EXTRA_INDEX = "android.intent.extra.INDEX";
@@ -4498,12 +4498,38 @@
* casting, etc.
*
* <p>The value is boolean. By default false.
- * @see ACTION_QUICK_VIEW
+ * @see #ACTION_QUICK_VIEW
+ * @removed
*/
+ @Deprecated
public static final String EXTRA_QUICK_VIEW_ADVANCED =
"android.intent.extra.QUICK_VIEW_ADVANCED";
/**
+ * An optional extra of {@code String[]} indicating which quick view features should be made
+ * available to the user in the quick view UI while handing a
+ * {@link Intent#ACTION_QUICK_VIEW} intent.
+ * <li>Enumeration of features here is not meant to restrict capabilities of the quick viewer.
+ * Quick viewer can implement features not listed below.
+ * <li>Features included at this time are: {@link QuickViewConstants#FEATURE_VIEW},
+ * {@link QuickViewConstants#FEATURE_EDIT}, {@link QuickViewConstants#FEATURE_DOWNLOAD},
+ * {@link QuickViewConstants#FEATURE_SEND}, {@link QuickViewConstants#FEATURE_PRINT}.
+ * <p>
+ * Requirements:
+ * <li>Quick viewer shouldn't show a feature if the feature is absent in
+ * {@link #EXTRA_QUICK_VIEW_FEATURES}.
+ * <li>When {@link #EXTRA_QUICK_VIEW_FEATURES} is not present, quick viewer should follow
+ * internal policies.
+ * <li>Presence of an feature in {@link #EXTRA_QUICK_VIEW_FEATURES}, does not constitute a
+ * requirement that the feature be shown. Quick viewer may, according to its own policies,
+ * disable or hide features.
+ *
+ * @see #ACTION_QUICK_VIEW
+ */
+ public static final String EXTRA_QUICK_VIEW_FEATURES =
+ "android.intent.extra.QUICK_VIEW_FEATURES";
+
+ /**
* Optional boolean extra indicating whether quiet mode has been switched on or off.
* When a profile goes into quiet mode, all apps in the profile are killed and the
* profile user is stopped. Widgets originating from the profile are masked, and app
diff --git a/core/java/android/content/QuickViewConstants.java b/core/java/android/content/QuickViewConstants.java
new file mode 100644
index 0000000..7455d0c
--- /dev/null
+++ b/core/java/android/content/QuickViewConstants.java
@@ -0,0 +1,68 @@
+/*
+ * 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;
+
+/**
+ * Constants for {@link Intent#ACTION_QUICK_VIEW}.
+ */
+public class QuickViewConstants {
+
+ private QuickViewConstants() {}
+
+ /**
+ * Feature to view a document using system standard viewing mechanism, like
+ * {@link Intent#ACTION_VIEW}.
+ *
+ * @see Intent#EXTRA_QUICK_VIEW_FEATURES
+ * @see Intent#ACTION_QUICK_VIEW
+ */
+ public static final String FEATURE_VIEW = "android:view";
+
+ /**
+ * Feature to view a document using system standard editing mechanism, like
+ * {@link Intent#ACTION_EDIT}.
+ *
+ * @see Intent#EXTRA_QUICK_VIEW_FEATURES
+ * @see Intent#ACTION_QUICK_VIEW
+ */
+ public static final String FEATURE_EDIT = "android:edit";
+
+ /**
+ * Feature to view a document using system standard sending mechanism, like
+ * {@link Intent#ACTION_SEND}.
+ *
+ * @see Intent#EXTRA_QUICK_VIEW_FEATURES
+ * @see Intent#ACTION_QUICK_VIEW
+ */
+ public static final String FEATURE_SEND = "android:send";
+
+ /**
+ * Feature to download a document to the local file system.
+ *
+ * @see Intent#EXTRA_QUICK_VIEW_FEATURES
+ * @see Intent#ACTION_QUICK_VIEW
+ */
+ public static final String FEATURE_DOWNLOAD = "android:download";
+
+ /**
+ * Feature to print a document.
+ *
+ * @see Intent#EXTRA_QUICK_VIEW_FEATURES
+ * @see Intent#ACTION_QUICK_VIEW
+ */
+ public static final String FEATURE_PRINT = "android:print";
+}
diff --git a/core/java/android/content/pm/ApplicationInfo.java b/core/java/android/content/pm/ApplicationInfo.java
index 939e20f..5f53e27 100644
--- a/core/java/android/content/pm/ApplicationInfo.java
+++ b/core/java/android/content/pm/ApplicationInfo.java
@@ -523,12 +523,21 @@
public static final int PRIVATE_FLAG_REQUIRED_FOR_SYSTEM_USER = 1 << 9;
/**
- * When set, the application explicitly requested that its activities by resizeable by default.
+ * When set, the application explicitly requested that its activities be resizeable by default.
* @see android.R.styleable#AndroidManifestActivity_resizeableActivity
*
* @hide
*/
- public static final int PRIVATE_FLAG_RESIZEABLE_ACTIVITIES_EXPLICITLY_SET = 1 << 10;
+ public static final int PRIVATE_FLAG_ACTIVITIES_RESIZE_MODE_RESIZEABLE = 1 << 10;
+
+ /**
+ * When set, the application explicitly requested that its activities *not* be resizeable by
+ * default.
+ * @see android.R.styleable#AndroidManifestActivity_resizeableActivity
+ *
+ * @hide
+ */
+ public static final int PRIVATE_FLAG_ACTIVITIES_RESIZE_MODE_UNRESIZEABLE = 1 << 11;
/**
* The application isn't requesting explicitly requesting for its activities to be resizeable or
@@ -542,7 +551,8 @@
*
* @hide
*/
- public static final int PRIVATE_FLAG_RESIZEABLE_ACTIVITIES_VIA_SDK_VERSION = 1 << 11;
+ public static final int PRIVATE_FLAG_ACTIVITIES_RESIZE_MODE_RESIZEABLE_VIA_SDK_VERSION =
+ 1 << 12;
/**
* Value for {@link #privateFlags}: {@code true} means the OS should go ahead and
@@ -550,14 +560,14 @@
* foreground-equivalent run state. Defaults to {@code false} if unspecified.
* @hide
*/
- public static final int PRIVATE_FLAG_BACKUP_IN_FOREGROUND = 1 << 12;
+ public static final int PRIVATE_FLAG_BACKUP_IN_FOREGROUND = 1 << 13;
/**
* 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;
+ public static final int PRIVATE_FLAG_STATIC_SHARED_LIBRARY = 1 << 14;
/**
* Value for {@linl #privateFlags}: When set, the application will only have its splits loaded
@@ -565,7 +575,7 @@
* {@link Context#createContextForSplit(String)} API.
* @hide
*/
- public static final int PRIVATE_FLAG_ISOLATED_SPLIT_LOADING = 1 << 14;
+ public static final int PRIVATE_FLAG_ISOLATED_SPLIT_LOADING = 1 << 15;
/**
* Private/hidden flags. See {@code PRIVATE_FLAG_...} constants.
diff --git a/core/java/android/content/pm/PackageParser.java b/core/java/android/content/pm/PackageParser.java
index d264e09..9457d15 100644
--- a/core/java/android/content/pm/PackageParser.java
+++ b/core/java/android/content/pm/PackageParser.java
@@ -27,8 +27,9 @@
import static android.content.pm.ActivityInfo.RESIZE_MODE_UNRESIZEABLE;
import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED;
import static android.content.pm.ApplicationInfo.FLAG_SUSPENDED;
-import static android.content.pm.ApplicationInfo.PRIVATE_FLAG_RESIZEABLE_ACTIVITIES_EXPLICITLY_SET;
-import static android.content.pm.ApplicationInfo.PRIVATE_FLAG_RESIZEABLE_ACTIVITIES_VIA_SDK_VERSION;
+import static android.content.pm.ApplicationInfo.PRIVATE_FLAG_ACTIVITIES_RESIZE_MODE_UNRESIZEABLE;
+import static android.content.pm.ApplicationInfo.PRIVATE_FLAG_ACTIVITIES_RESIZE_MODE_RESIZEABLE;
+import static android.content.pm.ApplicationInfo.PRIVATE_FLAG_ACTIVITIES_RESIZE_MODE_RESIZEABLE_VIA_SDK_VERSION;
import static android.content.pm.PackageManager.INSTALL_PARSE_FAILED_BAD_MANIFEST;
import static android.content.pm.PackageManager.INSTALL_PARSE_FAILED_BAD_PACKAGE_NAME;
import static android.content.pm.PackageManager.INSTALL_PARSE_FAILED_CERTIFICATE_ENCODING;
@@ -3462,10 +3463,12 @@
if (sa.hasValueOrEmpty(R.styleable.AndroidManifestApplication_resizeableActivity)) {
if (sa.getBoolean(R.styleable.AndroidManifestApplication_resizeableActivity, true)) {
- ai.privateFlags |= PRIVATE_FLAG_RESIZEABLE_ACTIVITIES_EXPLICITLY_SET;
+ ai.privateFlags |= PRIVATE_FLAG_ACTIVITIES_RESIZE_MODE_RESIZEABLE;
+ } else {
+ ai.privateFlags |= PRIVATE_FLAG_ACTIVITIES_RESIZE_MODE_UNRESIZEABLE;
}
} else if (owner.applicationInfo.targetSdkVersion >= Build.VERSION_CODES.N) {
- ai.privateFlags |= PRIVATE_FLAG_RESIZEABLE_ACTIVITIES_VIA_SDK_VERSION;
+ ai.privateFlags |= PRIVATE_FLAG_ACTIVITIES_RESIZE_MODE_RESIZEABLE_VIA_SDK_VERSION;
}
ai.maxAspectRatio = sa.getFloat(R.styleable.AndroidManifestApplication_maxAspectRatio, 0);
@@ -4348,13 +4351,16 @@
private void setActivityResizeMode(ActivityInfo aInfo, TypedArray sa, Package owner) {
final boolean appExplicitDefault = (owner.applicationInfo.privateFlags
- & PRIVATE_FLAG_RESIZEABLE_ACTIVITIES_EXPLICITLY_SET) != 0;
+ & (PRIVATE_FLAG_ACTIVITIES_RESIZE_MODE_RESIZEABLE
+ | PRIVATE_FLAG_ACTIVITIES_RESIZE_MODE_UNRESIZEABLE)) != 0;
if (sa.hasValue(R.styleable.AndroidManifestActivity_resizeableActivity)
|| appExplicitDefault) {
// Activity or app explicitly set if it is resizeable or not;
+ final boolean appResizeable = (owner.applicationInfo.privateFlags
+ & PRIVATE_FLAG_ACTIVITIES_RESIZE_MODE_RESIZEABLE) != 0;
if (sa.getBoolean(R.styleable.AndroidManifestActivity_resizeableActivity,
- appExplicitDefault)) {
+ appResizeable)) {
aInfo.resizeMode = RESIZE_MODE_RESIZEABLE;
} else {
aInfo.resizeMode = RESIZE_MODE_UNRESIZEABLE;
@@ -4363,7 +4369,7 @@
}
if ((owner.applicationInfo.privateFlags
- & PRIVATE_FLAG_RESIZEABLE_ACTIVITIES_VIA_SDK_VERSION) != 0) {
+ & PRIVATE_FLAG_ACTIVITIES_RESIZE_MODE_RESIZEABLE_VIA_SDK_VERSION) != 0) {
// The activity or app didn't explicitly set the resizing option, however we want to
// make it resize due to the sdk version it is targeting.
aInfo.resizeMode = RESIZE_MODE_RESIZEABLE_VIA_SDK_VERSION;
diff --git a/core/java/android/inputmethodservice/CompactExtractEditLayout.java b/core/java/android/inputmethodservice/CompactExtractEditLayout.java
index 35c54b2..4925d25 100644
--- a/core/java/android/inputmethodservice/CompactExtractEditLayout.java
+++ b/core/java/android/inputmethodservice/CompactExtractEditLayout.java
@@ -17,6 +17,7 @@
package android.inputmethodservice;
import android.content.Context;
+import android.content.res.Configuration;
import android.content.res.Resources;
import android.annotation.FractionRes;
import android.util.AttributeSet;
@@ -24,6 +25,7 @@
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
+import android.view.WindowInsets;
import android.widget.LinearLayout;
/**
@@ -109,9 +111,25 @@
super.onAttachedToWindow();
if (mPerformLayoutChanges) {
Resources res = getResources();
+ Configuration cfg = res.getConfiguration();
DisplayMetrics dm = res.getDisplayMetrics();
- int heightPixels = dm.heightPixels;
int widthPixels = dm.widthPixels;
+ int heightPixels = dm.heightPixels;
+
+ // Percentages must be based on the pixel height of the full (apparent) display height
+ // which is sometimes different from display metrics.
+ //
+ // On a round device, a display height smaller than width indicates a chin (cropped
+ // edge of the display) for which there is no screen buffer allocated. This is
+ // typically 25-35px in height.
+ //
+ // getRootWindowInsets() does not function for InputMethod windows (always null).
+ // Instead just set height to match width if less. This is safe because round wear
+ // devices are by definition 1:1 aspect ratio.
+
+ if (cfg.isScreenRound() && heightPixels < widthPixels) {
+ heightPixels = widthPixels;
+ }
applyProportionalLayout(widthPixels, heightPixels);
}
}
diff --git a/core/java/android/provider/CallLog.java b/core/java/android/provider/CallLog.java
index c7c6ceb..8630f16 100644
--- a/core/java/android/provider/CallLog.java
+++ b/core/java/android/provider/CallLog.java
@@ -217,6 +217,12 @@
/** Call was pulled externally. */
public static final int FEATURES_PULLED_EXTERNALLY = 0x2;
+ /** Call was HD. */
+ public static final int FEATURES_HD_CALL = 0x4;
+
+ /** Call was WIFI call. */
+ public static final int FEATURES_WIFI = 0x8;
+
/**
* The phone number as the user entered it.
* <P>Type: TEXT</P>
diff --git a/core/java/android/view/ContextThemeWrapper.java b/core/java/android/view/ContextThemeWrapper.java
index 86318e9..d3cc175 100644
--- a/core/java/android/view/ContextThemeWrapper.java
+++ b/core/java/android/view/ContextThemeWrapper.java
@@ -36,8 +36,8 @@
/**
* Creates a new context wrapper with no theme and no base context.
- * <p>
- * <stong>Note:</strong> A base context <strong>must</strong> be attached
+ * <p class="note">
+ * <strong>Note:</strong> A base context <strong>must</strong> be attached
* using {@link #attachBaseContext(Context)} before calling any other
* method on the newly constructed context wrapper.
*/
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java
index 23fcb55..884283d 100644
--- a/core/java/android/view/View.java
+++ b/core/java/android/view/View.java
@@ -982,7 +982,7 @@
/**
* This view contains an email address.
*
- * Use with {@link #setAutofillHint(String[])}, or set "{@value #AUTOFILL_HINT_EMAIL_ADDRESS}"
+ * Use with {@link #setAutofillHints(String[])}, or set "{@value #AUTOFILL_HINT_EMAIL_ADDRESS}"
* to <a href="#attr_android:autofillHint"> {@code android:autofillHint}.
*/
public static final String AUTOFILL_HINT_EMAIL_ADDRESS = "emailAddress";
@@ -990,7 +990,7 @@
/**
* The view contains a real name.
*
- * Use with {@link #setAutofillHint(String[])}, or set "{@value #AUTOFILL_HINT_NAME}" to
+ * Use with {@link #setAutofillHints(String[])}, or set "{@value #AUTOFILL_HINT_NAME}" to
* <a href="#attr_android:autofillHint"> {@code android:autofillHint}.
*/
public static final String AUTOFILL_HINT_NAME = "name";
@@ -998,7 +998,7 @@
/**
* The view contains a user name.
*
- * Use with {@link #setAutofillHint(String[])}, or set "{@value #AUTOFILL_HINT_USERNAME}" to
+ * Use with {@link #setAutofillHints(String[])}, or set "{@value #AUTOFILL_HINT_USERNAME}" to
* <a href="#attr_android:autofillHint"> {@code android:autofillHint}.
*/
public static final String AUTOFILL_HINT_USERNAME = "username";
@@ -1006,7 +1006,7 @@
/**
* The view contains a password.
*
- * Use with {@link #setAutofillHint(String[])}, or set "{@value #AUTOFILL_HINT_PASSWORD}" to
+ * Use with {@link #setAutofillHints(String[])}, or set "{@value #AUTOFILL_HINT_PASSWORD}" to
* <a href="#attr_android:autofillHint"> {@code android:autofillHint}.
*/
public static final String AUTOFILL_HINT_PASSWORD = "password";
@@ -1014,7 +1014,7 @@
/**
* The view contains a phone number.
*
- * Use with {@link #setAutofillHint(String[])}, or set "{@value #AUTOFILL_HINT_PHONE}" to
+ * Use with {@link #setAutofillHints(String[])}, or set "{@value #AUTOFILL_HINT_PHONE}" to
* <a href="#attr_android:autofillHint"> {@code android:autofillHint}.
*/
public static final String AUTOFILL_HINT_PHONE = "phone";
@@ -1022,7 +1022,7 @@
/**
* The view contains a postal address.
*
- * Use with {@link #setAutofillHint(String[])}, or set "{@value #AUTOFILL_HINT_POSTAL_ADDRESS}"
+ * Use with {@link #setAutofillHints(String[])}, or set "{@value #AUTOFILL_HINT_POSTAL_ADDRESS}"
* to <a href="#attr_android:autofillHint"> {@code android:autofillHint}.
*/
public static final String AUTOFILL_HINT_POSTAL_ADDRESS = "postalAddress";
@@ -1030,7 +1030,7 @@
/**
* The view contains a postal code.
*
- * Use with {@link #setAutofillHint(String[])}, or set "{@value #AUTOFILL_HINT_POSTAL_CODE}" to
+ * Use with {@link #setAutofillHints(String[])}, or set "{@value #AUTOFILL_HINT_POSTAL_CODE}" to
* <a href="#attr_android:autofillHint"> {@code android:autofillHint}.
*/
public static final String AUTOFILL_HINT_POSTAL_CODE = "postalCode";
@@ -1038,7 +1038,7 @@
/**
* The view contains a credit card number.
*
- * Use with {@link #setAutofillHint(String[])}, or set "{@value
+ * Use with {@link #setAutofillHints(String[])}, or set "{@value
* #AUTOFILL_HINT_CREDIT_CARD_NUMBER}" to <a href="#attr_android:autofillHint"> {@code
* android:autofillHint}.
*/
@@ -1047,7 +1047,7 @@
/**
* The view contains a credit card security code.
*
- * Use with {@link #setAutofillHint(String[])}, or set "{@value
+ * Use with {@link #setAutofillHints(String[])}, or set "{@value
* #AUTOFILL_HINT_CREDIT_CARD_SECURITY_CODE}" to <a href="#attr_android:autofillHint"> {@code
* android:autofillHint}.
*/
@@ -1056,7 +1056,7 @@
/**
* The view contains a credit card expiration date.
*
- * Use with {@link #setAutofillHint(String[])}, or set "{@value
+ * Use with {@link #setAutofillHints(String[])}, or set "{@value
* #AUTOFILL_HINT_CREDIT_CARD_EXPIRATION_DATE}" to <a href="#attr_android:autofillHint"> {@code
* android:autofillHint}.
*/
@@ -1066,7 +1066,7 @@
/**
* The view contains the month a credit card expires.
*
- * Use with {@link #setAutofillHint(String[])}, or set "{@value
+ * Use with {@link #setAutofillHints(String[])}, or set "{@value
* #AUTOFILL_HINT_CREDIT_CARD_EXPIRATION_MONTH}" to <a href="#attr_android:autofillHint"> {@code
* android:autofillHint}.
*/
@@ -1076,7 +1076,7 @@
/**
* The view contains the year a credit card expires.
*
- * Use with {@link #setAutofillHint(String[])}, or set "{@value
+ * Use with {@link #setAutofillHints(String[])}, or set "{@value
* #AUTOFILL_HINT_CREDIT_CARD_EXPIRATION_YEAR}" to <a href="#attr_android:autofillHint"> {@code
* android:autofillHint}.
*/
@@ -1086,7 +1086,7 @@
/**
* The view contains the day a credit card expires.
*
- * Use with {@link #setAutofillHint(String[])}, or set "{@value
+ * Use with {@link #setAutofillHints(String[])}, or set "{@value
* #AUTOFILL_HINT_CREDIT_CARD_EXPIRATION_DAY}" to <a href="#attr_android:autofillHint"> {@code
* android:autofillHint}.
*/
@@ -1095,7 +1095,7 @@
/**
* Hintd for the autofill services that describes the content of the view.
*/
- private @Nullable String[] mAutofillHint;
+ private @Nullable String[] mAutofillHints;
/** @hide */
@IntDef({
@@ -5024,7 +5024,7 @@
setAutofillMode(a.getInt(attr, AUTOFILL_MODE_INHERIT));
}
break;
- case R.styleable.View_autofillHint:
+ case R.styleable.View_autofillHints:
if (a.peekValue(attr) != null) {
CharSequence[] rawHints = null;
String rawString = null;
@@ -5044,7 +5044,7 @@
if (rawHints == null) {
if (rawString == null) {
throw new IllegalArgumentException(
- "Could not resolve autofillHint");
+ "Could not resolve autofillHints");
} else {
rawHints = rawString.split(",");
}
@@ -5056,7 +5056,7 @@
for (int rawHintNum = 0; rawHintNum < numHints; rawHintNum++) {
hints[rawHintNum] = rawHints[rawHintNum].toString().trim();
}
- setAutofillHint(hints);
+ setAutofillHints(hints);
}
break;
case R.styleable.View_importantForAutofill:
@@ -7311,7 +7311,7 @@
// For example, only TextViews that are editable support autofill
if (autofillType != AUTOFILL_TYPE_NONE) {
structure.setAutofillType(autofillType);
- structure.setAutofillHint(getAutofillHint());
+ structure.setAutofillHints(getAutofillHints());
structure.setAutofillValue(getAutofillValue());
}
}
@@ -7476,13 +7476,13 @@
/**
* Describes the content of a view so that a autofill service can fill in the appropriate data.
*
- * @return The hint set via the attribute or {@code null} if no hint it set.
+ * @return The hints set via the attribute or {@code null} if no hint it set.
*
- * @attr ref android.R.styleable#View_autofillHint
+ * @attr ref android.R.styleable#View_autofillHints
*/
@ViewDebug.ExportedProperty()
- @Nullable public String[] getAutofillHint() {
- return mAutofillHint;
+ @Nullable public String[] getAutofillHints() {
+ return mAutofillHints;
}
/**
@@ -9111,17 +9111,17 @@
}
/**
- * Sets the a hint that helps the autofill service to select the appropriate data to fill the
+ * Sets the hints that helps the autofill service to select the appropriate data to fill the
* view.
*
- * @param autofillHint The autofill hint to set. If the array is emtpy, {@code null} is set.
- * @attr ref android.R.styleable#View_autofillHint
+ * @param autofillHints The autofill hints to set. If the array is emtpy, {@code null} is set.
+ * @attr ref android.R.styleable#View_autofillHints
*/
- public void setAutofillHint(@Nullable String... autofillHint) {
- if (autofillHint == null || autofillHint.length == 0) {
- mAutofillHint = null;
+ public void setAutofillHints(@Nullable String... autofillHints) {
+ if (autofillHints == null || autofillHints.length == 0) {
+ mAutofillHints = null;
} else {
- mAutofillHint = autofillHint;
+ mAutofillHints = autofillHints;
}
}
diff --git a/core/java/android/view/ViewConfiguration.java b/core/java/android/view/ViewConfiguration.java
index f16fcc9..574137b 100644
--- a/core/java/android/view/ViewConfiguration.java
+++ b/core/java/android/view/ViewConfiguration.java
@@ -232,10 +232,16 @@
private static final int OVERFLING_DISTANCE = 6;
/**
- * Amount to scroll in response to a {@link MotionEvent#ACTION_SCROLL} event, in dips per
- * axis value.
+ * Amount to scroll in response to a horizontal {@link MotionEvent#ACTION_SCROLL} event,
+ * in dips per axis value.
*/
- private static final int SCROLL_FACTOR = 64;
+ private static final float HORIZONTAL_SCROLL_FACTOR = 64;
+
+ /**
+ * Amount to scroll in response to a vertical {@link MotionEvent#ACTION_SCROLL} event,
+ * in dips per axis value.
+ */
+ private static final float VERTICAL_SCROLL_FACTOR = 64;
/**
* Default duration to hide an action mode for.
@@ -289,7 +295,8 @@
private final int mOverflingDistance;
private final boolean mFadingMarqueeEnabled;
private final long mGlobalActionsKeyTimeout;
- private final int mScrollFactor;
+ private final float mVerticalScrollFactor;
+ private final float mHorizontalScrollFactor;
private boolean sHasPermanentMenuKey;
private boolean sHasPermanentMenuKeySet;
@@ -319,7 +326,8 @@
mOverflingDistance = OVERFLING_DISTANCE;
mFadingMarqueeEnabled = true;
mGlobalActionsKeyTimeout = GLOBAL_ACTIONS_KEY_TIMEOUT;
- mScrollFactor = SCROLL_FACTOR;
+ mHorizontalScrollFactor = HORIZONTAL_SCROLL_FACTOR;
+ mVerticalScrollFactor = VERTICAL_SCROLL_FACTOR;
}
/**
@@ -406,8 +414,11 @@
com.android.internal.R.dimen.config_viewMaxFlingVelocity);
mGlobalActionsKeyTimeout = res.getInteger(
com.android.internal.R.integer.config_globalActionsKeyTimeout);
- mScrollFactor = res.getDimensionPixelSize(
- com.android.internal.R.dimen.config_scrollFactor);
+
+ mHorizontalScrollFactor = res.getDimensionPixelSize(
+ com.android.internal.R.dimen.config_horizontalScrollFactor);
+ mVerticalScrollFactor = res.getDimensionPixelSize(
+ com.android.internal.R.dimen.config_verticalScrollFactor);
}
/**
@@ -730,9 +741,27 @@
/**
* @return Amount to scroll in response to a {@link MotionEvent#ACTION_SCROLL} event. Multiply
* this by the event's axis value to obtain the number of pixels to be scrolled.
+ *
+ * @removed
*/
public int getScaledScrollFactor() {
- return mScrollFactor;
+ return (int) mVerticalScrollFactor;
+ }
+
+ /**
+ * @return Amount to scroll in response to a horizontal {@link MotionEvent#ACTION_SCROLL} event.
+ * Multiply this by the event's axis value to obtain the number of pixels to be scrolled.
+ */
+ public float getScaledHorizontalScrollFactor() {
+ return mHorizontalScrollFactor;
+ }
+
+ /**
+ * @return Amount to scroll in response to a vertical {@link MotionEvent#ACTION_SCROLL} event.
+ * Multiply this by the event's axis value to obtain the number of pixels to be scrolled.
+ */
+ public float getScaledVerticalScrollFactor() {
+ return mVerticalScrollFactor;
}
/**
diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java
index a43b13e..2e201bf 100644
--- a/core/java/android/view/ViewRootImpl.java
+++ b/core/java/android/view/ViewRootImpl.java
@@ -6386,7 +6386,7 @@
args.arg2 = sameProcessCall ? new Rect(contentInsets) : contentInsets;
args.arg3 = sameProcessCall ? new Rect(visibleInsets) : visibleInsets;
args.arg4 = sameProcessCall && mergedConfiguration != null
- ? new MergedConfiguration(mergedConfiguration) : null;
+ ? new MergedConfiguration(mergedConfiguration) : mergedConfiguration;
args.arg5 = sameProcessCall ? new Rect(overscanInsets) : overscanInsets;
args.arg6 = sameProcessCall ? new Rect(stableInsets) : stableInsets;
args.arg7 = sameProcessCall ? new Rect(outsets) : outsets;
diff --git a/core/java/android/view/ViewStructure.java b/core/java/android/view/ViewStructure.java
index ad4b9d7..65f3c90 100644
--- a/core/java/android/view/ViewStructure.java
+++ b/core/java/android/view/ViewStructure.java
@@ -306,10 +306,10 @@
public abstract void setAutofillType(@View.AutofillType int type);
/**
- * Sets the a hint that helps the autofill service to select the appropriate data to fill the
+ * Sets the a hints that helps the autofill service to select the appropriate data to fill the
* view.
*/
- public abstract void setAutofillHint(@Nullable String[] hint);
+ public abstract void setAutofillHints(@Nullable String[] hint);
/**
* Sets the {@link AutofillValue} representing the current value of this node.
diff --git a/core/java/android/view/autofill/AutofillManager.java b/core/java/android/view/autofill/AutofillManager.java
index 37ca5b3..19980fb 100644
--- a/core/java/android/view/autofill/AutofillManager.java
+++ b/core/java/android/view/autofill/AutofillManager.java
@@ -56,9 +56,9 @@
/**
* Intent extra: The assist structure which captures the filled screen.
+ *
* <p>
* Type: {@link android.app.assist.AssistStructure}
- * </p>
*/
public static final String EXTRA_ASSIST_STRUCTURE =
"android.view.autofill.extra.ASSIST_STRUCTURE";
@@ -72,11 +72,25 @@
* <p>
* Type: {@link android.service.autofill.FillResponse} or a
* {@link android.service.autofill.Dataset}
- * </p>
*/
public static final String EXTRA_AUTHENTICATION_RESULT =
"android.view.autofill.extra.AUTHENTICATION_RESULT";
+ /**
+ * Intent extra: The optional extras provided by the
+ * {@link android.service.autofill.AutofillService}.
+ *
+ * <p>For example, when the service responds to a {@link
+ * android.service.autofill.FillCallback#onSuccess(android.service.autofill.FillResponse)} with
+ * a {@code FillResponse} that requires authentication, the Intent that launches the
+ * service authentication will contain the Bundle set by
+ * {@link android.service.autofill.FillResponse.Builder#setExtras(Bundle)} on this extra.
+ *
+ * <p>
+ * Type: {@link android.os.Bundle}
+ */
+ public static final String EXTRA_DATA_EXTRAS = "android.view.autofill.extra.DATA_EXTRAS";
+
// Public flags start from the lowest bit
/**
* Indicates autofill was explicitly requested by the user.
diff --git a/core/java/android/view/textclassifier/TextClassificationManager.java b/core/java/android/view/textclassifier/TextClassificationManager.java
index 0b6021a..dcdbe57 100644
--- a/core/java/android/view/textclassifier/TextClassificationManager.java
+++ b/core/java/android/view/textclassifier/TextClassificationManager.java
@@ -54,12 +54,6 @@
mContext = Preconditions.checkNotNull(context);
}
- // TODO: Remove.
- /** @removed */
- public TextClassifier getDefaultTextClassifier() {
- return getTextClassifier();
- }
-
/**
* Returns the text classifier.
*/
diff --git a/core/java/android/webkit/WebView.java b/core/java/android/webkit/WebView.java
index bc49123..9582b72 100644
--- a/core/java/android/webkit/WebView.java
+++ b/core/java/android/webkit/WebView.java
@@ -45,6 +45,7 @@
import android.text.InputType;
import android.util.AttributeSet;
import android.util.Log;
+import android.util.SparseArray;
import android.view.DragEvent;
import android.view.KeyEvent;
import android.view.MotionEvent;
@@ -57,6 +58,7 @@
import android.view.accessibility.AccessibilityEvent;
import android.view.accessibility.AccessibilityNodeInfo;
import android.view.accessibility.AccessibilityNodeProvider;
+import android.view.autofill.AutofillValue;
import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputConnection;
import android.view.textclassifier.TextClassifier;
@@ -2646,7 +2648,7 @@
* <li>Otherwise, the class name should be {@code HTML.iframe}.
* </ol>
* <li>The W3C autofill field ({@code autocomplete} tag attribute) maps to
- * {@link ViewStructure#setAutofillHint(String[])}.
+ * {@link ViewStructure#setAutofillHints(String[])}.
* <li>The {@code type} attribute of {@code INPUT} tags maps to
* {@link ViewStructure#setInputType(int)}.
* <li>The {@code name} attribute maps to {@link ViewStructure#setIdEntry(String)}.
@@ -2706,6 +2708,11 @@
mProvider.getViewDelegate().onProvideAutofillVirtualStructure(structure, flags);
}
+ @Override
+ public void autofill(SparseArray<AutofillValue>values) {
+ mProvider.getViewDelegate().autofill(values);
+ }
+
/** @hide */
@Override
public void onInitializeAccessibilityNodeInfoInternal(AccessibilityNodeInfo info) {
diff --git a/core/java/android/webkit/WebViewProvider.java b/core/java/android/webkit/WebViewProvider.java
index aa1ffa2..f01b349 100644
--- a/core/java/android/webkit/WebViewProvider.java
+++ b/core/java/android/webkit/WebViewProvider.java
@@ -33,6 +33,7 @@
import android.os.Handler;
import android.os.Message;
import android.print.PrintDocumentAdapter;
+import android.util.SparseArray;
import android.view.DragEvent;
import android.view.KeyEvent;
import android.view.MotionEvent;
@@ -41,6 +42,7 @@
import android.view.accessibility.AccessibilityEvent;
import android.view.accessibility.AccessibilityNodeInfo;
import android.view.accessibility.AccessibilityNodeProvider;
+import android.view.autofill.AutofillValue;
import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputConnection;
import android.view.textclassifier.TextClassifier;
@@ -331,6 +333,10 @@
int flags) {
}
+ @SuppressWarnings("unused")
+ public default void autofill(SparseArray<AutofillValue>values) {
+ }
+
public AccessibilityNodeProvider getAccessibilityNodeProvider();
public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info);
diff --git a/core/java/android/widget/AbsListView.java b/core/java/android/widget/AbsListView.java
index 99b91bd..1c87726 100644
--- a/core/java/android/widget/AbsListView.java
+++ b/core/java/android/widget/AbsListView.java
@@ -618,7 +618,7 @@
private int mTouchSlop;
private float mDensityScale;
- private float mScrollFactor;
+ private float mVerticalScrollFactor;
private InputConnection mDefInputConnection;
private InputConnectionWrapper mPublicInputConnection;
@@ -877,7 +877,7 @@
final ViewConfiguration configuration = ViewConfiguration.get(mContext);
mTouchSlop = configuration.getScaledTouchSlop();
- mScrollFactor = configuration.getScaledScrollFactor();
+ mVerticalScrollFactor = configuration.getScaledVerticalScrollFactor();
mMinimumVelocity = configuration.getScaledMinimumFlingVelocity();
mMaximumVelocity = configuration.getScaledMaximumFlingVelocity();
mOverscrollDistance = configuration.getScaledOverscrollDistance();
@@ -4225,7 +4225,7 @@
axisValue = 0;
}
- final int delta = Math.round(axisValue * mScrollFactor);
+ final int delta = Math.round(axisValue * mVerticalScrollFactor);
if (delta != 0) {
if (!trackMotionScroll(delta, delta)) {
return true;
diff --git a/core/java/android/widget/HorizontalScrollView.java b/core/java/android/widget/HorizontalScrollView.java
index 918b6c0..da00d9c 100644
--- a/core/java/android/widget/HorizontalScrollView.java
+++ b/core/java/android/widget/HorizontalScrollView.java
@@ -129,7 +129,7 @@
private int mOverscrollDistance;
private int mOverflingDistance;
- private float mScrollFactor;
+ private float mHorizontalScrollFactor;
/**
* ID of the active pointer. This is used to retain consistency during
@@ -224,7 +224,7 @@
mMaximumVelocity = configuration.getScaledMaximumFlingVelocity();
mOverscrollDistance = configuration.getScaledOverscrollDistance();
mOverflingDistance = configuration.getScaledOverflingDistance();
- mScrollFactor = configuration.getScaledScrollFactor();
+ mHorizontalScrollFactor = configuration.getScaledHorizontalScrollFactor();
}
@Override
@@ -743,7 +743,7 @@
axisValue = 0;
}
- final int delta = Math.round(axisValue * mScrollFactor);
+ final int delta = Math.round(axisValue * mHorizontalScrollFactor);
if (delta != 0) {
final int range = getScrollRange();
int oldScrollX = mScrollX;
diff --git a/core/java/android/widget/ScrollView.java b/core/java/android/widget/ScrollView.java
index d8f3379..0a9e361 100644
--- a/core/java/android/widget/ScrollView.java
+++ b/core/java/android/widget/ScrollView.java
@@ -135,7 +135,7 @@
private int mOverscrollDistance;
private int mOverflingDistance;
- private int mScrollFactor;
+ private float mVerticalScrollFactor;
/**
* ID of the active pointer. This is used to retain consistency during
@@ -250,7 +250,7 @@
mMaximumVelocity = configuration.getScaledMaximumFlingVelocity();
mOverscrollDistance = configuration.getScaledOverscrollDistance();
mOverflingDistance = configuration.getScaledOverflingDistance();
- mScrollFactor = configuration.getScaledScrollFactor();
+ mVerticalScrollFactor = configuration.getScaledVerticalScrollFactor();
}
@Override
@@ -796,7 +796,7 @@
axisValue = 0;
}
- final int delta = Math.round(axisValue * mScrollFactor);
+ final int delta = Math.round(axisValue * mVerticalScrollFactor);
if (delta != 0) {
final int range = getScrollRange();
int oldScrollY = mScrollY;
@@ -1875,7 +1875,7 @@
@Override
public String toString() {
- return "HorizontalScrollView.SavedState{"
+ return "ScrollView.SavedState{"
+ Integer.toHexString(System.identityHashCode(this))
+ " scrollPosition=" + scrollPosition + "}";
}
diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java
index 3d5e81b..6f8df36 100644
--- a/core/java/android/widget/TextView.java
+++ b/core/java/android/widget/TextView.java
@@ -367,14 +367,6 @@
private TextClassifier mTextClassifier;
- // A flag to prevent repeated movements from escaping the enclosing text view. The idea here is
- // that if a user is holding down a movement key to traverse text, we shouldn't also traverse
- // the view hierarchy. On the other hand, if the user is using the movement key to traverse
- // views (i.e. the first movement was to traverse out of this view, or this view was traversed
- // into by the user holding the movement key down) then we shouldn't prevent the focus from
- // changing.
- private boolean mPreventDefaultMovement;
-
private TextUtils.TruncateAt mEllipsize;
static class Drawables {
@@ -6982,20 +6974,22 @@
return true;
}
+ private boolean isDirectionalNavigationKey(int keyCode) {
+ switch(keyCode) {
+ case KeyEvent.KEYCODE_DPAD_UP:
+ case KeyEvent.KEYCODE_DPAD_DOWN:
+ case KeyEvent.KEYCODE_DPAD_LEFT:
+ case KeyEvent.KEYCODE_DPAD_RIGHT:
+ return true;
+ }
+ return false;
+ }
+
private int doKeyDown(int keyCode, KeyEvent event, KeyEvent otherEvent) {
if (!isEnabled()) {
return KEY_EVENT_NOT_HANDLED;
}
- // If this is the initial keydown, we don't want to prevent a movement away from this view.
- // While this shouldn't be necessary because any time we're preventing default movement we
- // should be restricting the focus to remain within this view, thus we'll also receive
- // the key up event, occasionally key up events will get dropped and we don't want to
- // prevent the user from traversing out of this on the next key down.
- if (event.getRepeatCount() == 0 && !KeyEvent.isModifierKey(keyCode)) {
- mPreventDefaultMovement = false;
- }
-
switch (keyCode) {
case KeyEvent.KEYCODE_ENTER:
if (event.hasNoModifiers()) {
@@ -7127,16 +7121,16 @@
}
if (doDown) {
if (mMovement.onKeyDown(this, (Spannable) mText, keyCode, event)) {
- if (event.getRepeatCount() == 0 && !KeyEvent.isModifierKey(keyCode)) {
- mPreventDefaultMovement = true;
- }
return KEY_DOWN_HANDLED_BY_MOVEMENT_METHOD;
}
}
+ // Consume arrows to prevent focus leaving the editor.
+ if (isDirectionalNavigationKey(keyCode)) {
+ return KEY_EVENT_HANDLED;
+ }
}
- return mPreventDefaultMovement && !KeyEvent.isModifierKey(keyCode)
- ? KEY_EVENT_HANDLED : KEY_EVENT_NOT_HANDLED;
+ return KEY_EVENT_NOT_HANDLED;
}
/**
@@ -7169,10 +7163,6 @@
return super.onKeyUp(keyCode, event);
}
- if (!KeyEvent.isModifierKey(keyCode)) {
- mPreventDefaultMovement = false;
- }
-
switch (keyCode) {
case KeyEvent.KEYCODE_DPAD_CENTER:
if (event.hasNoModifiers()) {
diff --git a/core/java/com/android/internal/os/BatteryStatsImpl.java b/core/java/com/android/internal/os/BatteryStatsImpl.java
index a0dafdd..b263657 100644
--- a/core/java/com/android/internal/os/BatteryStatsImpl.java
+++ b/core/java/com/android/internal/os/BatteryStatsImpl.java
@@ -114,7 +114,7 @@
private static final int MAGIC = 0xBA757475; // 'BATSTATS'
// Current on-disk Parcel version
- private static final int VERSION = 151 + (USE_OLD_HISTORY ? 1000 : 0);
+ private static final int VERSION = 152 + (USE_OLD_HISTORY ? 1000 : 0);
// Maximum number of items we will record in the history.
private static final int MAX_HISTORY_ITEMS = 2000;
diff --git a/core/jni/com_android_internal_os_FuseAppLoop.cpp b/core/jni/com_android_internal_os_FuseAppLoop.cpp
index e125150..2d5026f 100644
--- a/core/jni/com_android_internal_os_FuseAppLoop.cpp
+++ b/core/jni/com_android_internal_os_FuseAppLoop.cpp
@@ -53,13 +53,11 @@
mEnv(env), mSelf(self) {}
void OnLookup(uint64_t unique, uint64_t inode) override {
- mEnv->CallVoidMethod(mSelf, gOnCommandMethod, FUSE_LOOKUP, unique, inode, 0, 0, nullptr);
- CHECK(!mEnv->ExceptionCheck());
+ CallOnCommand(FUSE_LOOKUP, unique, inode, 0, 0, nullptr);
}
void OnGetAttr(uint64_t unique, uint64_t inode) override {
- mEnv->CallVoidMethod(mSelf, gOnCommandMethod, FUSE_GETATTR, unique, inode, 0, 0, nullptr);
- CHECK(!mEnv->ExceptionCheck());
+ CallOnCommand(FUSE_GETATTR, unique, inode, 0, 0, nullptr);
}
void OnOpen(uint64_t unique, uint64_t inode) override {
@@ -75,14 +73,12 @@
}
void OnFsync(uint64_t unique, uint64_t inode) override {
- mEnv->CallVoidMethod(mSelf, gOnCommandMethod, FUSE_FSYNC, unique, inode, 0, 0, nullptr);
- CHECK(!mEnv->ExceptionCheck());
+ CallOnCommand(FUSE_FSYNC, unique, inode, 0, 0, nullptr);
}
void OnRelease(uint64_t unique, uint64_t inode) override {
mBuffers.erase(inode);
- mEnv->CallVoidMethod(mSelf, gOnCommandMethod, FUSE_RELEASE, unique, inode, 0, 0, nullptr);
- CHECK(!mEnv->ExceptionCheck());
+ CallOnCommand(FUSE_RELEASE, unique, inode, 0, 0, nullptr);
}
void OnRead(uint64_t unique, uint64_t inode, uint64_t offset, uint32_t size) override {
@@ -91,10 +87,7 @@
auto it = mBuffers.find(inode);
CHECK(it != mBuffers.end());
- mEnv->CallVoidMethod(
- mSelf, gOnCommandMethod, FUSE_READ, unique, inode, offset, size,
- it->second->get());
- CHECK(!mEnv->ExceptionCheck());
+ CallOnCommand(FUSE_READ, unique, inode, offset, size, it->second->get());
}
void OnWrite(uint64_t unique, uint64_t inode, uint64_t offset, uint32_t size,
@@ -109,8 +102,14 @@
mEnv->SetByteArrayRegion(javaBuffer, 0, size, static_cast<const jbyte*>(buffer));
CHECK(!mEnv->ExceptionCheck());
- mEnv->CallVoidMethod(
- mSelf, gOnCommandMethod, FUSE_WRITE, unique, inode, offset, size, javaBuffer);
+ CallOnCommand(FUSE_WRITE, unique, inode, offset, size, javaBuffer);
+ }
+
+private:
+ // Helper function to make sure we invoke CallVoidMethod with correct size of integer arguments.
+ void CallOnCommand(jint command, jlong unique, jlong inode, jlong offset, jint size,
+ jobject bytes) {
+ mEnv->CallVoidMethod(mSelf, gOnCommandMethod, command, unique, inode, offset, size, bytes);
CHECK(!mEnv->ExceptionCheck());
}
};
diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml
index 536457b..362794e 100644
--- a/core/res/AndroidManifest.xml
+++ b/core/res/AndroidManifest.xml
@@ -3464,7 +3464,7 @@
android:theme="@style/Theme.NoDisplay"
android:excludeFromRecents="true">
<intent-filter>
- <action android:name="android.intent.action.ACTION_REQUEST_SHUTDOWN" />
+ <action android:name="com.android.internal.intent.action.REQUEST_SHUTDOWN" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
<intent-filter>
diff --git a/core/res/res/values/attrs.xml b/core/res/res/values/attrs.xml
index a3b2705..554f50c 100644
--- a/core/res/res/values/attrs.xml
+++ b/core/res/res/values/attrs.xml
@@ -2310,7 +2310,7 @@
<!-- Describes the content of a view so that a autofill service can fill in the appropriate
data. Multiple hints can be combined in a comma separated list or an array of strings
to mean e.g. emailAddress or postalAddress. -->
- <attr name="autofillHint" format="string|reference" />
+ <attr name="autofillHints" format="string|reference" />
<!-- Hints the Android System whether the view node associated with this View should be
included in a view structure used for autofill purposes. -->
diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml
index db234e7..bcd8a8a 100644
--- a/core/res/res/values/config.xml
+++ b/core/res/res/values/config.xml
@@ -784,9 +784,14 @@
-->
<integer name="config_defaultNightMode">1</integer>
+ <!-- Boolean indicating whether the HWC setColorTransform function can be performed efficiently
+ in hardware. -->
+ <bool name="config_setColorTransformAccelerated">false</bool>
+
<!-- Control whether Night display is available. This should only be enabled on devices
- with HWC 2.0 or higher. -->
- <bool name="config_nightDisplayAvailable">false</bool>
+ that have a HWC implementation that can apply the matrix passed to setColorTransform
+ without impacting power, performance, and app compatibility (e.g. protected content). -->
+ <bool name="config_nightDisplayAvailable">@bool/config_setColorTransformAccelerated</bool>
<!-- Default mode to control how Night display is automatically activated.
One of the following values (see NightDisplayController.java):
@@ -1880,8 +1885,16 @@
Takes effect only if the scrollbar drawables have no intrinsic size. -->
<dimen name="config_scrollbarSize">4dp</dimen>
- <!-- Distance that should be scrolled in response to a {@link MotionEvent#ACTION_SCROLL event}
- with an axis value of 1. -->
+ <!-- Distance that should be scrolled, per axis value, in response to a horizontal
+ {@link MotionEvent#ACTION_SCROLL} event. -->
+ <dimen name="config_horizontalScrollFactor">64dp</dimen>
+
+ <!-- Distance that should be scrolled, per axis value, in response to a vertical
+ {@link MotionEvent#ACTION_SCROLL} event. -->
+ <dimen name="config_verticalScrollFactor">64dp</dimen>
+
+ <!-- Obsolete. Distance that should be scrolled, per axis value, in response to a
+ {@link MotionEvent#ACTION_SCROLL} event. -->
<dimen name="config_scrollFactor">64dp</dimen>
<!-- Maximum number of grid columns permitted in the ResolverActivity
diff --git a/core/res/res/values/public.xml b/core/res/res/values/public.xml
index 6e20208..624eb59 100644
--- a/core/res/res/values/public.xml
+++ b/core/res/res/values/public.xml
@@ -2802,7 +2802,7 @@
<public name="secondaryContentAlpha" />
<public name="requiredFeature" />
<public name="requiredNotFeature" />
- <public name="autofillHint" />
+ <public name="autofillHints" />
<public name="fontProviderPackage" />
<public name="importantForAutofill" />
<public name="recycleEnabled"/>
diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml
index 92436f4..dfd18e7 100644
--- a/core/res/res/values/symbols.xml
+++ b/core/res/res/values/symbols.xml
@@ -434,6 +434,8 @@
<java-symbol type="dimen" name="config_viewMinFlingVelocity" />
<java-symbol type="dimen" name="config_viewMaxFlingVelocity" />
<java-symbol type="dimen" name="config_scrollbarSize" />
+ <java-symbol type="dimen" name="config_horizontalScrollFactor" />
+ <java-symbol type="dimen" name="config_verticalScrollFactor" />
<java-symbol type="dimen" name="config_scrollFactor" />
<java-symbol type="dimen" name="default_app_widget_padding_bottom" />
<java-symbol type="dimen" name="default_app_widget_padding_left" />
@@ -2774,6 +2776,7 @@
<java-symbol type="drawable" name="ic_doc_video" />
<java-symbol type="drawable" name="ic_doc_generic" />
+ <java-symbol type="bool" name="config_setColorTransformAccelerated" />
<java-symbol type="bool" name="config_nightDisplayAvailable" />
<java-symbol type="bool" name="config_allowDisablingAssistDisclosure" />
<java-symbol type="integer" name="config_defaultNightDisplayAutoMode" />
diff --git a/media/java/android/media/tv/TvContract.java b/media/java/android/media/tv/TvContract.java
index 7bf69c0..9739319 100644
--- a/media/java/android/media/tv/TvContract.java
+++ b/media/java/android/media/tv/TvContract.java
@@ -283,7 +283,7 @@
* @param name The {@link ComponentName} of the TV input service to build ID for.
* @return the ID for the given TV input service.
*/
- public static final String buildInputId(ComponentName name) {
+ public static String buildInputId(ComponentName name) {
return name.flattenToShortString();
}
@@ -292,7 +292,7 @@
*
* @param channelId The ID of the channel to point to.
*/
- public static final Uri buildChannelUri(long channelId) {
+ public static Uri buildChannelUri(long channelId) {
return ContentUris.withAppendedId(Channels.CONTENT_URI, channelId);
}
@@ -302,7 +302,7 @@
* @param inputId The ID of the pass-through input to build a channels URI for.
* @see TvInputInfo#isPassthroughInput()
*/
- public static final Uri buildChannelUriForPassthroughInput(String inputId) {
+ public static Uri buildChannelUriForPassthroughInput(String inputId) {
return new Uri.Builder().scheme(ContentResolver.SCHEME_CONTENT).authority(AUTHORITY)
.appendPath(PATH_PASSTHROUGH).appendPath(inputId).build();
}
@@ -312,7 +312,7 @@
*
* @param channelId The ID of the channel whose logo is pointed to.
*/
- public static final Uri buildChannelLogoUri(long channelId) {
+ public static Uri buildChannelLogoUri(long channelId) {
return buildChannelLogoUri(buildChannelUri(channelId));
}
@@ -321,7 +321,7 @@
*
* @param channelUri The URI of the channel whose logo is pointed to.
*/
- public static final Uri buildChannelLogoUri(Uri channelUri) {
+ public static Uri buildChannelLogoUri(Uri channelUri) {
if (!isChannelUriForTunerInput(channelUri)) {
throw new IllegalArgumentException("Not a channel: " + channelUri);
}
@@ -334,7 +334,7 @@
* @param inputId The ID of the TV input to build a channels URI for. If {@code null}, builds a
* URI for all the TV inputs.
*/
- public static final Uri buildChannelsUriForInput(@Nullable String inputId) {
+ public static Uri buildChannelsUriForInput(@Nullable String inputId) {
return buildChannelsUriForInput(inputId, false);
}
@@ -349,7 +349,7 @@
* @hide
*/
@SystemApi
- public static final Uri buildChannelsUriForInput(@Nullable String inputId,
+ public static Uri buildChannelsUriForInput(@Nullable String inputId,
boolean browsableOnly) {
Uri.Builder builder = Channels.CONTENT_URI.buildUpon();
if (inputId != null) {
@@ -372,7 +372,7 @@
* @hide
*/
@SystemApi
- public static final Uri buildChannelsUriForInput(@Nullable String inputId,
+ public static Uri buildChannelsUriForInput(@Nullable String inputId,
@Nullable String genre, boolean browsableOnly) {
if (genre == null) {
return buildChannelsUriForInput(inputId, browsableOnly);
@@ -389,7 +389,7 @@
*
* @param programId The ID of the program to point to.
*/
- public static final Uri buildProgramUri(long programId) {
+ public static Uri buildProgramUri(long programId) {
return ContentUris.withAppendedId(Programs.CONTENT_URI, programId);
}
@@ -398,7 +398,7 @@
*
* @param channelId The ID of the channel to return programs for.
*/
- public static final Uri buildProgramsUriForChannel(long channelId) {
+ public static Uri buildProgramsUriForChannel(long channelId) {
return Programs.CONTENT_URI.buildUpon()
.appendQueryParameter(PARAM_CHANNEL, String.valueOf(channelId)).build();
}
@@ -408,7 +408,7 @@
*
* @param channelUri The URI of the channel to return programs for.
*/
- public static final Uri buildProgramsUriForChannel(Uri channelUri) {
+ public static Uri buildProgramsUriForChannel(Uri channelUri) {
if (!isChannelUriForTunerInput(channelUri)) {
throw new IllegalArgumentException("Not a channel: " + channelUri);
}
@@ -425,7 +425,7 @@
* @param endTime The end time used to filter programs. The returned programs should have
* {@link Programs#COLUMN_START_TIME_UTC_MILLIS} that is less than this time.
*/
- public static final Uri buildProgramsUriForChannel(long channelId, long startTime,
+ public static Uri buildProgramsUriForChannel(long channelId, long startTime,
long endTime) {
Uri uri = buildProgramsUriForChannel(channelId);
return uri.buildUpon().appendQueryParameter(PARAM_START_TIME, String.valueOf(startTime))
@@ -442,7 +442,7 @@
* @param endTime The end time used to filter programs. The returned programs should have
* {@link Programs#COLUMN_START_TIME_UTC_MILLIS} that is less than this time.
*/
- public static final Uri buildProgramsUriForChannel(Uri channelUri, long startTime,
+ public static Uri buildProgramsUriForChannel(Uri channelUri, long startTime,
long endTime) {
if (!isChannelUriForTunerInput(channelUri)) {
throw new IllegalArgumentException("Not a channel: " + channelUri);
@@ -455,7 +455,7 @@
*
* @param recordedProgramId The ID of the recorded program to point to.
*/
- public static final Uri buildRecordedProgramUri(long recordedProgramId) {
+ public static Uri buildRecordedProgramUri(long recordedProgramId) {
return ContentUris.withAppendedId(RecordedPrograms.CONTENT_URI, recordedProgramId);
}
@@ -464,7 +464,7 @@
*
* @param previewProgramId The ID of the preview program to point to.
*/
- public static final Uri buildPreviewProgramUri(long previewProgramId) {
+ public static Uri buildPreviewProgramUri(long previewProgramId) {
return ContentUris.withAppendedId(PreviewPrograms.CONTENT_URI, previewProgramId);
}
@@ -473,7 +473,7 @@
*
* @param channelId The ID of the channel to return preview programs for.
*/
- public static final Uri buildPreviewProgramsUriForChannel(long channelId) {
+ public static Uri buildPreviewProgramsUriForChannel(long channelId) {
return PreviewPrograms.CONTENT_URI.buildUpon()
.appendQueryParameter(PARAM_CHANNEL, String.valueOf(channelId)).build();
}
@@ -483,7 +483,7 @@
*
* @param channelUri The URI of the channel to return preview programs for.
*/
- public static final Uri buildPreviewProgramsUriForChannel(Uri channelUri) {
+ public static Uri buildPreviewProgramsUriForChannel(Uri channelUri) {
if (!isChannelUriForTunerInput(channelUri)) {
throw new IllegalArgumentException("Not a channel: " + channelUri);
}
@@ -495,7 +495,7 @@
*
* @param watchNextProgramId The ID of the watch next program to point to.
*/
- public static final Uri buildWatchNextProgramUri(long watchNextProgramId) {
+ public static Uri buildWatchNextProgramUri(long watchNextProgramId) {
return ContentUris.withAppendedId(WatchNextPrograms.CONTENT_URI, watchNextProgramId);
}
@@ -505,7 +505,7 @@
* @param watchedProgramId The ID of the watched program to point to.
* @hide
*/
- public static final Uri buildWatchedProgramUri(long watchedProgramId) {
+ public static Uri buildWatchedProgramUri(long watchedProgramId) {
return ContentUris.withAppendedId(WatchedPrograms.CONTENT_URI, watchedProgramId);
}
@@ -522,28 +522,28 @@
/**
* Returns {@code true}, if {@code uri} is a channel URI.
*/
- public static final boolean isChannelUri(Uri uri) {
+ public static boolean isChannelUri(Uri uri) {
return isChannelUriForTunerInput(uri) || isChannelUriForPassthroughInput(uri);
}
/**
* Returns {@code true}, if {@code uri} is a channel URI for a tuner input.
*/
- public static final boolean isChannelUriForTunerInput(Uri uri) {
+ public static boolean isChannelUriForTunerInput(Uri uri) {
return isTvUri(uri) && isTwoSegmentUriStartingWith(uri, PATH_CHANNEL);
}
/**
* Returns {@code true}, if {@code uri} is a channel URI for a pass-through input.
*/
- public static final boolean isChannelUriForPassthroughInput(Uri uri) {
+ public static boolean isChannelUriForPassthroughInput(Uri uri) {
return isTvUri(uri) && isTwoSegmentUriStartingWith(uri, PATH_PASSTHROUGH);
}
/**
* Returns {@code true}, if {@code uri} is a program URI.
*/
- public static final boolean isProgramUri(Uri uri) {
+ public static boolean isProgramUri(Uri uri) {
return isTvUri(uri) && isTwoSegmentUriStartingWith(uri, PATH_PROGRAM);
}
@@ -580,7 +580,7 @@
*
* <p>Type: TEXT
*/
- public static final String COLUMN_TITLE = "title";
+ String COLUMN_TITLE = "title";
/**
* The season display number of this TV program for episodic TV shows.
@@ -592,7 +592,7 @@
*
* <p>Type: TEXT
*/
- public static final String COLUMN_SEASON_DISPLAY_NUMBER = "season_display_number";
+ String COLUMN_SEASON_DISPLAY_NUMBER = "season_display_number";
/**
* The title of the season for this TV program for episodic TV shows.
@@ -608,7 +608,7 @@
*
* <p>Type: TEXT
*/
- public static final String COLUMN_SEASON_TITLE = "season_title";
+ String COLUMN_SEASON_TITLE = "season_title";
/**
* The episode display number of this TV program for episodic TV shows.
@@ -620,7 +620,7 @@
*
* <p>Type: TEXT
*/
- public static final String COLUMN_EPISODE_DISPLAY_NUMBER = "episode_display_number";
+ String COLUMN_EPISODE_DISPLAY_NUMBER = "episode_display_number";
/**
* The episode title of this TV program for episodic TV shows.
@@ -629,7 +629,7 @@
*
* <p>Type: TEXT
*/
- public static final String COLUMN_EPISODE_TITLE = "episode_title";
+ String COLUMN_EPISODE_TITLE = "episode_title";
/**
* The comma-separated canonical genre string of this TV program.
@@ -643,7 +643,7 @@
* @see Genres#encode
* @see Genres#decode
*/
- public static final String COLUMN_CANONICAL_GENRE = "canonical_genre";
+ String COLUMN_CANONICAL_GENRE = "canonical_genre";
/**
* The short description of this TV program that is displayed to the user by default.
@@ -652,7 +652,7 @@
*
* <p>Type: TEXT
*/
- public static final String COLUMN_SHORT_DESCRIPTION = "short_description";
+ String COLUMN_SHORT_DESCRIPTION = "short_description";
/**
* The detailed, lengthy description of this TV program that is displayed only when the user
@@ -663,7 +663,7 @@
*
* <p>Type: TEXT
*/
- public static final String COLUMN_LONG_DESCRIPTION = "long_description";
+ String COLUMN_LONG_DESCRIPTION = "long_description";
/**
* The width of the video for this TV program, in the unit of pixels.
@@ -675,7 +675,7 @@
*
* <p>Type: INTEGER
*/
- public static final String COLUMN_VIDEO_WIDTH = "video_width";
+ String COLUMN_VIDEO_WIDTH = "video_width";
/**
* The height of the video for this TV program, in the unit of pixels.
@@ -687,7 +687,7 @@
*
* <p>Type: INTEGER
*/
- public static final String COLUMN_VIDEO_HEIGHT = "video_height";
+ String COLUMN_VIDEO_HEIGHT = "video_height";
/**
* The comma-separated audio languages of this TV program.
@@ -697,7 +697,7 @@
*
* <p>Type: TEXT
*/
- public static final String COLUMN_AUDIO_LANGUAGE = "audio_language";
+ String COLUMN_AUDIO_LANGUAGE = "audio_language";
/**
* The comma-separated content ratings of this TV program.
@@ -714,7 +714,7 @@
*
* <p>Type: TEXT
*/
- public static final String COLUMN_CONTENT_RATING = "content_rating";
+ String COLUMN_CONTENT_RATING = "content_rating";
/**
* The URI for the poster art of this TV program.
@@ -732,7 +732,7 @@
*
* <p>Type: TEXT
*/
- public static final String COLUMN_POSTER_ART_URI = "poster_art_uri";
+ String COLUMN_POSTER_ART_URI = "poster_art_uri";
/**
* The URI for the thumbnail of this TV program.
@@ -754,7 +754,7 @@
*
* <p>Type: TEXT
*/
- public static final String COLUMN_THUMBNAIL_URI = "thumbnail_uri";
+ String COLUMN_THUMBNAIL_URI = "thumbnail_uri";
/**
* The flag indicating whether this TV program is searchable or not.
@@ -769,7 +769,7 @@
*
* <p>Type: INTEGER (boolean)
*/
- public static final String COLUMN_SEARCHABLE = "searchable";
+ String COLUMN_SEARCHABLE = "searchable";
/**
* Internal data used by individual TV input services.
@@ -779,7 +779,7 @@
*
* <p>Type: BLOB
*/
- public static final String COLUMN_INTERNAL_PROVIDER_DATA = "internal_provider_data";
+ String COLUMN_INTERNAL_PROVIDER_DATA = "internal_provider_data";
/**
* Internal integer flag used by individual TV input services.
@@ -789,7 +789,7 @@
*
* <p>Type: INTEGER
*/
- public static final String COLUMN_INTERNAL_PROVIDER_FLAG1 = "internal_provider_flag1";
+ String COLUMN_INTERNAL_PROVIDER_FLAG1 = "internal_provider_flag1";
/**
* Internal integer flag used by individual TV input services.
@@ -799,7 +799,7 @@
*
* <p>Type: INTEGER
*/
- public static final String COLUMN_INTERNAL_PROVIDER_FLAG2 = "internal_provider_flag2";
+ String COLUMN_INTERNAL_PROVIDER_FLAG2 = "internal_provider_flag2";
/**
* Internal integer flag used by individual TV input services.
@@ -809,7 +809,7 @@
*
* <p>Type: INTEGER
*/
- public static final String COLUMN_INTERNAL_PROVIDER_FLAG3 = "internal_provider_flag3";
+ String COLUMN_INTERNAL_PROVIDER_FLAG3 = "internal_provider_flag3";
/**
* Internal integer flag used by individual TV input services.
@@ -819,7 +819,7 @@
*
* <p>Type: INTEGER
*/
- public static final String COLUMN_INTERNAL_PROVIDER_FLAG4 = "internal_provider_flag4";
+ String COLUMN_INTERNAL_PROVIDER_FLAG4 = "internal_provider_flag4";
/**
* The version number of this row entry used by TV input services.
@@ -831,7 +831,7 @@
*
* <p>Type: INTEGER
*/
- public static final String COLUMN_VERSION_NUMBER = "version_number";
+ String COLUMN_VERSION_NUMBER = "version_number";
}
/**
@@ -862,84 +862,84 @@
*
* @see #COLUMN_TYPE
*/
- public static final String TYPE_MOVIE = "TYPE_MOVIE";
+ String TYPE_MOVIE = "TYPE_MOVIE";
/**
* The program type for TV series.
*
* @see #COLUMN_TYPE
*/
- public static final String TYPE_TV_SERIES = "TYPE_TV_SERIES";
+ String TYPE_TV_SERIES = "TYPE_TV_SERIES";
/**
* The program type for TV season.
*
* @see #COLUMN_TYPE
*/
- public static final String TYPE_TV_SEASON = "TYPE_TV_SEASON";
+ String TYPE_TV_SEASON = "TYPE_TV_SEASON";
/**
* The program type for TV episode.
*
* @see #COLUMN_TYPE
*/
- public static final String TYPE_TV_EPISODE = "TYPE_TV_EPISODE";
+ String TYPE_TV_EPISODE = "TYPE_TV_EPISODE";
/**
* The program type for clip.
*
* @see #COLUMN_TYPE
*/
- public static final String TYPE_CLIP = "TYPE_CLIP";
+ String TYPE_CLIP = "TYPE_CLIP";
/**
* The program type for event.
*
* @see #COLUMN_TYPE
*/
- public static final String TYPE_EVENT = "TYPE_EVENT";
+ String TYPE_EVENT = "TYPE_EVENT";
/**
* The program type for channel.
*
* @see #COLUMN_TYPE
*/
- public static final String TYPE_CHANNEL = "TYPE_CHANNEL";
+ String TYPE_CHANNEL = "TYPE_CHANNEL";
/**
* The program type for track.
*
* @see #COLUMN_TYPE
*/
- public static final String TYPE_TRACK = "TYPE_TRACK";
+ String TYPE_TRACK = "TYPE_TRACK";
/**
* The program type for album.
*
* @see #COLUMN_TYPE
*/
- public static final String TYPE_ALBUM = "TYPE_ALBUM";
+ String TYPE_ALBUM = "TYPE_ALBUM";
/**
* The program type for artist.
*
* @see #COLUMN_TYPE
*/
- public static final String TYPE_ARTIST = "TYPE_ARTIST";
+ String TYPE_ARTIST = "TYPE_ARTIST";
/**
* The program type for playlist.
*
* @see #COLUMN_TYPE
*/
- public static final String TYPE_PLAYLIST = "TYPE_PLAYLIST";
+ String TYPE_PLAYLIST = "TYPE_PLAYLIST";
/**
* The program type for station.
*
* @see #COLUMN_TYPE
*/
- public static final String TYPE_STATION = "TYPE_STATION";
+ String TYPE_STATION = "TYPE_STATION";
/** @hide */
@StringDef({
@@ -957,7 +957,7 @@
* @see #COLUMN_POSTER_ART_ASPECT_RATIO
* @see #COLUMN_THUMBNAIL_ASPECT_RATIO
*/
- public static final String ASPECT_RATIO_16_9 = "ASPECT_RATIO_16_9";
+ String ASPECT_RATIO_16_9 = "ASPECT_RATIO_16_9";
/**
* The aspect ratio for 3:2.
@@ -965,7 +965,7 @@
* @see #COLUMN_POSTER_ART_ASPECT_RATIO
* @see #COLUMN_THUMBNAIL_ASPECT_RATIO
*/
- public static final String ASPECT_RATIO_3_2 = "ASPECT_RATIO_3_2";
+ String ASPECT_RATIO_3_2 = "ASPECT_RATIO_3_2";
/**
* The aspect ratio for 1:1.
@@ -973,7 +973,7 @@
* @see #COLUMN_POSTER_ART_ASPECT_RATIO
* @see #COLUMN_THUMBNAIL_ASPECT_RATIO
*/
- public static final String ASPECT_RATIO_1_1 = "ASPECT_RATIO_1_1";
+ String ASPECT_RATIO_1_1 = "ASPECT_RATIO_1_1";
/**
* The aspect ratio for 2:3.
@@ -981,7 +981,7 @@
* @see #COLUMN_POSTER_ART_ASPECT_RATIO
* @see #COLUMN_THUMBNAIL_ASPECT_RATIO
*/
- public static final String ASPECT_RATIO_2_3 = "ASPECT_RATIO_2_3";
+ String ASPECT_RATIO_2_3 = "ASPECT_RATIO_2_3";
/** @hide */
@StringDef({
@@ -997,14 +997,14 @@
*
* @see #COLUMN_AVAILABILITY
*/
- public static final String AVAILABILITY_AVAILABLE = "AVAILABILITY_AVAILABLE";
+ String AVAILABILITY_AVAILABLE = "AVAILABILITY_AVAILABLE";
/**
* The availability for "free with subscription".
*
* @see #COLUMN_AVAILABILITY
*/
- public static final String AVAILABILITY_FREE_WITH_SUBSCRIPTION =
+ String AVAILABILITY_FREE_WITH_SUBSCRIPTION =
"AVAILABILITY_FREE_WITH_SUBSCRIPTION";
/**
@@ -1013,7 +1013,7 @@
*
* @see #COLUMN_AVAILABILITY
*/
- public static final String AVAILABILITY_PAID_CONTENT = "AVAILABILITY_PAID_CONTENT";
+ String AVAILABILITY_PAID_CONTENT = "AVAILABILITY_PAID_CONTENT";
/** @hide */
@StringDef({
@@ -1033,49 +1033,49 @@
*
* @see #COLUMN_INTERACTION_TYPE
*/
- public static final String INTERACTION_TYPE_LISTENS = "INTERACTION_TYPE_LISTENS";
+ String INTERACTION_TYPE_LISTENS = "INTERACTION_TYPE_LISTENS";
/**
* The interaction type for "followers".
*
* @see #COLUMN_INTERACTION_TYPE
*/
- public static final String INTERACTION_TYPE_FOLLOWERS = "INTERACTION_TYPE_FOLLOWERS";
+ String INTERACTION_TYPE_FOLLOWERS = "INTERACTION_TYPE_FOLLOWERS";
/**
* The interaction type for "fans".
*
* @see #COLUMN_INTERACTION_TYPE
*/
- public static final String INTERACTION_TYPE_FANS = "INTERACTION_TYPE_FANS";
+ String INTERACTION_TYPE_FANS = "INTERACTION_TYPE_FANS";
/**
* The interaction type for "likes".
*
* @see #COLUMN_INTERACTION_TYPE
*/
- public static final String INTERACTION_TYPE_LIKES = "INTERACTION_TYPE_LIKES";
+ String INTERACTION_TYPE_LIKES = "INTERACTION_TYPE_LIKES";
/**
* The interaction type for "thumbs".
*
* @see #COLUMN_INTERACTION_TYPE
*/
- public static final String INTERACTION_TYPE_THUMBS = "INTERACTION_TYPE_THUMBS";
+ String INTERACTION_TYPE_THUMBS = "INTERACTION_TYPE_THUMBS";
/**
* The interaction type for "views".
*
* @see #COLUMN_INTERACTION_TYPE
*/
- public static final String INTERACTION_TYPE_VIEWS = "INTERACTION_TYPE_VIEWS";
+ String INTERACTION_TYPE_VIEWS = "INTERACTION_TYPE_VIEWS";
/**
* The interaction type for "viewers".
*
* @see #COLUMN_INTERACTION_TYPE
*/
- public static final String INTERACTION_TYPE_VIEWERS = "INTERACTION_TYPE_VIEWERS";
+ String INTERACTION_TYPE_VIEWERS = "INTERACTION_TYPE_VIEWERS";
/** @hide */
@StringDef({
@@ -1091,14 +1091,14 @@
*
* @see #COLUMN_REVIEW_RATING_STYLE
*/
- public static final String REVIEW_RATING_STYLE_STARS = "REVIEW_RATING_STYLE_STARS";
+ String REVIEW_RATING_STYLE_STARS = "REVIEW_RATING_STYLE_STARS";
/**
* The review rating style for thumbs-up and thumbs-down rating.
*
* @see #COLUMN_REVIEW_RATING_STYLE
*/
- public static final String REVIEW_RATING_STYLE_THUMBS_UP_DOWN =
+ String REVIEW_RATING_STYLE_THUMBS_UP_DOWN =
"REVIEW_RATING_STYLE_THUMBS_UP_DOWN";
/**
@@ -1106,7 +1106,7 @@
*
* @see #COLUMN_REVIEW_RATING_STYLE
*/
- public static final String REVIEW_RATING_STYLE_PERCENTAGE =
+ String REVIEW_RATING_STYLE_PERCENTAGE =
"REVIEW_RATING_STYLE_PERCENTAGE";
/**
@@ -1131,7 +1131,7 @@
*
* <p>Type: TEXT
*/
- public static final String COLUMN_TYPE = "type";
+ String COLUMN_TYPE = "type";
/**
* The aspect ratio of the poster art for this TV program.
@@ -1144,7 +1144,7 @@
*
* <p>Type: TEXT
*/
- public static final String COLUMN_POSTER_ART_ASPECT_RATIO = "poster_art_aspect_ratio";
+ String COLUMN_POSTER_ART_ASPECT_RATIO = "poster_art_aspect_ratio";
/**
* The aspect ratio of the thumbnail for this TV program.
@@ -1157,7 +1157,7 @@
*
* <p>Type: TEXT
*/
- public static final String COLUMN_THUMBNAIL_ASPECT_RATIO = "poster_thumbnail_aspect_ratio";
+ String COLUMN_THUMBNAIL_ASPECT_RATIO = "poster_thumbnail_aspect_ratio";
/**
* The URI for the logo of this TV program.
@@ -1178,7 +1178,7 @@
*
* <p>Type: TEXT
*/
- public static final String COLUMN_LOGO_URI = "logo_uri";
+ String COLUMN_LOGO_URI = "logo_uri";
/**
* The availability of this TV program.
@@ -1190,7 +1190,7 @@
*
* <p>Type: TEXT
*/
- public static final String COLUMN_AVAILABILITY = "availability";
+ String COLUMN_AVAILABILITY = "availability";
/**
* The starting price of this TV program.
@@ -1201,7 +1201,7 @@
* <p>Type: TEXT
* @see #COLUMN_OFFER_PRICE
*/
- public static final String COLUMN_STARTING_PRICE = "starting_price";
+ String COLUMN_STARTING_PRICE = "starting_price";
/**
* The offer price of this TV program.
@@ -1212,7 +1212,7 @@
* <p>Type: TEXT
* @see #COLUMN_STARTING_PRICE
*/
- public static final String COLUMN_OFFER_PRICE = "offer_price";
+ String COLUMN_OFFER_PRICE = "offer_price";
/**
* The release date of this TV program.
@@ -1221,7 +1221,7 @@
*
* <p>Type: TEXT
*/
- public static final String COLUMN_RELEASE_DATE = "release_date";
+ String COLUMN_RELEASE_DATE = "release_date";
/**
* The count of the items included in this TV program.
@@ -1231,7 +1231,7 @@
*
* <p>Type: INTEGER
*/
- public static final String COLUMN_ITEM_COUNT = "item_count";
+ String COLUMN_ITEM_COUNT = "item_count";
/**
* The flag indicating whether this TV program is live or not.
@@ -1242,7 +1242,7 @@
*
* <p>Type: INTEGER (boolean)
*/
- public static final String COLUMN_LIVE = "live";
+ String COLUMN_LIVE = "live";
/**
* The internal ID used by individual TV input services.
@@ -1254,7 +1254,7 @@
*
* <p>Type: TEXT
*/
- public static final String COLUMN_INTERNAL_PROVIDER_ID = "internal_provider_id";
+ String COLUMN_INTERNAL_PROVIDER_ID = "internal_provider_id";
/**
* The URI for the preview video.
@@ -1273,7 +1273,7 @@
*
* <p>Type: TEXT
*/
- public static final String COLUMN_PREVIEW_VIDEO_URI = "preview_video_uri";
+ String COLUMN_PREVIEW_VIDEO_URI = "preview_video_uri";
/**
* The last playback position (in milliseconds) of the preview video.
@@ -1284,7 +1284,7 @@
*
* <p>Type: INTEGER
*/
- public static final String COLUMN_LAST_PLAYBACK_POSITION_MILLIS =
+ String COLUMN_LAST_PLAYBACK_POSITION_MILLIS =
"last_playback_position_millis";
/**
@@ -1296,7 +1296,7 @@
*
* <p>Type: INTEGER
*/
- public static final String COLUMN_DURATION_MILLIS = "duration_millis";
+ String COLUMN_DURATION_MILLIS = "duration_millis";
/**
* The intent URI which is launched when the preview video is selected.
@@ -1309,7 +1309,7 @@
*
* <p>Type: TEXT
*/
- public static final String COLUMN_APP_LINK_INTENT_URI =
+ String COLUMN_APP_LINK_INTENT_URI =
"app_link_intent_uri";
/**
@@ -1322,7 +1322,7 @@
* <p>Type: INTEGER (boolean)
* @see Channels#COLUMN_TRANSIENT
*/
- public static final String COLUMN_TRANSIENT = "transient";
+ String COLUMN_TRANSIENT = "transient";
/**
* The type of interaction for this TV program.
@@ -1339,7 +1339,7 @@
* <p>Type: TEXT
* @see #COLUMN_INTERACTION_COUNT
*/
- public static final String COLUMN_INTERACTION_TYPE = "interaction_type";
+ String COLUMN_INTERACTION_TYPE = "interaction_type";
/**
* The interaction count for this program.
@@ -1349,14 +1349,14 @@
* <p>Type: INTEGER (long)
* @see #COLUMN_INTERACTION_TYPE
*/
- public static final String COLUMN_INTERACTION_COUNT = "interaction_count";
+ String COLUMN_INTERACTION_COUNT = "interaction_count";
/**
* The author or artist of this content.
*
* <p>Type: TEXT
*/
- public static final String COLUMN_AUTHOR = "author";
+ String COLUMN_AUTHOR = "author";
/**
* The review rating score style used for {@link #COLUMN_REVIEW_RATING}.
@@ -1367,7 +1367,7 @@
* <p>Type: TEXT
* @see #COLUMN_REVIEW_RATING
*/
- public static final String COLUMN_REVIEW_RATING_STYLE = "review_rating_style";
+ String COLUMN_REVIEW_RATING_STYLE = "review_rating_style";
/**
* The review rating score for this program.
@@ -1383,7 +1383,7 @@
* <p>Type: TEXT
* @see #COLUMN_REVIEW_RATING_STYLE
*/
- public static final String COLUMN_REVIEW_RATING = "review_rating";
+ String COLUMN_REVIEW_RATING = "review_rating";
/**
* The flag indicating whether this TV program is browsable or not.
@@ -1401,7 +1401,7 @@
*
* <p>Type: INTEGER (boolean)
*/
- public static final String COLUMN_BROWSABLE = "browsable";
+ String COLUMN_BROWSABLE = "browsable";
/**
* The content ID of this TV program.
@@ -1413,7 +1413,7 @@
*
* <p>Type: TEXT
*/
- public static final String COLUMN_CONTENT_ID = "content_id";
+ String COLUMN_CONTENT_ID = "content_id";
}
diff --git a/packages/SettingsLib/res/values-af/arrays.xml b/packages/SettingsLib/res/values-af/arrays.xml
index 6d6d2653..402dfbf 100644
--- a/packages/SettingsLib/res/values-af/arrays.xml
+++ b/packages/SettingsLib/res/values-af/arrays.xml
@@ -68,22 +68,10 @@
<item msgid="1913619118958233129">"avrcp15"</item>
<item msgid="7142710449249088270">"avrcp16"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="7065842274271279580">"Gebruik stelselkeuse (verstek)"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="686685526567131661">"AAC"</item>
- <item msgid="8910200421843557332">"aptX"</item>
- <item msgid="8434403964359457768">"aptX-HD"</item>
- <item msgid="6751080638867012696">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="5062108632402595000">"Gebruik stelselkeuse (verstek)"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="6839647709301342559">"AAC"</item>
- <item msgid="2279916056363477395">"aptX"</item>
- <item msgid="6641171061200063516">"aptX-HD"</item>
- <item msgid="7950781694447359344">"LDAC"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:6 (723675059572222462) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:7 (3304843301758635896) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (2209680154067241740) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (741805482892725657) -->
<string-array name="bluetooth_a2dp_codec_sample_rate_titles">
<item msgid="3093023430402746802">"Gebruik stelselkeuse (verstek)"</item>
<item msgid="8895532488906185219">"44,1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-am/arrays.xml b/packages/SettingsLib/res/values-am/arrays.xml
index 73dadec..2a2fc61 100644
--- a/packages/SettingsLib/res/values-am/arrays.xml
+++ b/packages/SettingsLib/res/values-am/arrays.xml
@@ -68,22 +68,10 @@
<item msgid="1913619118958233129">"avrcp15"</item>
<item msgid="7142710449249088270">"avrcp16"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="7065842274271279580">"የስርዓቱን ምርጫ (ነባሪ) ተጠቀም"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="686685526567131661">"AAC"</item>
- <item msgid="8910200421843557332">"aptX"</item>
- <item msgid="8434403964359457768">"aptX HD"</item>
- <item msgid="6751080638867012696">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="5062108632402595000">"የስርዓቱን ምርጫ (ነባሪ) ተጠቀም"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="6839647709301342559">"AAC"</item>
- <item msgid="2279916056363477395">"aptX"</item>
- <item msgid="6641171061200063516">"aptX HD"</item>
- <item msgid="7950781694447359344">"LDAC"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:6 (723675059572222462) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:7 (3304843301758635896) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (2209680154067241740) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (741805482892725657) -->
<string-array name="bluetooth_a2dp_codec_sample_rate_titles">
<item msgid="3093023430402746802">"የስርዓቱን ምርጫ (ነባሪ) ተጠቀም"</item>
<item msgid="8895532488906185219">"44.1 ኪኸ"</item>
diff --git a/packages/SettingsLib/res/values-ar/arrays.xml b/packages/SettingsLib/res/values-ar/arrays.xml
index 8fceb11..cfb1590 100644
--- a/packages/SettingsLib/res/values-ar/arrays.xml
+++ b/packages/SettingsLib/res/values-ar/arrays.xml
@@ -68,22 +68,10 @@
<item msgid="1913619118958233129">"avrcp15"</item>
<item msgid="7142710449249088270">"avrcp16"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="7065842274271279580">"استخدام اختيار النظام (افتراضي)"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="686685526567131661">"AAC"</item>
- <item msgid="8910200421843557332">"aptX"</item>
- <item msgid="8434403964359457768">"aptX HD"</item>
- <item msgid="6751080638867012696">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="5062108632402595000">"استخدام اختيار النظام (افتراضي)"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="6839647709301342559">"AAC"</item>
- <item msgid="2279916056363477395">"aptX"</item>
- <item msgid="6641171061200063516">"aptX HD"</item>
- <item msgid="7950781694447359344">"LDAC"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:6 (723675059572222462) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:7 (3304843301758635896) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (2209680154067241740) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (741805482892725657) -->
<string-array name="bluetooth_a2dp_codec_sample_rate_titles">
<item msgid="3093023430402746802">"استخدام اختيار النظام (افتراضي)"</item>
<item msgid="8895532488906185219">"44.1 كيلو هرتز"</item>
diff --git a/packages/SettingsLib/res/values-az/arrays.xml b/packages/SettingsLib/res/values-az/arrays.xml
index a4e0e17..a63598d 100644
--- a/packages/SettingsLib/res/values-az/arrays.xml
+++ b/packages/SettingsLib/res/values-az/arrays.xml
@@ -68,22 +68,10 @@
<item msgid="1913619118958233129">"avrcp15"</item>
<item msgid="7142710449249088270">"avrcp16"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="7065842274271279580">"Sistem Seçimini istifadə edin (Defolt)"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="686685526567131661">"AAC"</item>
- <item msgid="8910200421843557332">"aptX"</item>
- <item msgid="8434403964359457768">"aptX HD"</item>
- <item msgid="6751080638867012696">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="5062108632402595000">"Sistem Seçimini istifadə edin (Defolt)"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="6839647709301342559">"AAC"</item>
- <item msgid="2279916056363477395">"aptX"</item>
- <item msgid="6641171061200063516">"aptX HD"</item>
- <item msgid="7950781694447359344">"LDAC"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:6 (723675059572222462) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:7 (3304843301758635896) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (2209680154067241740) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (741805482892725657) -->
<string-array name="bluetooth_a2dp_codec_sample_rate_titles">
<item msgid="3093023430402746802">"Sistem Seçimini istifadə edin (Defolt)"</item>
<item msgid="8895532488906185219">"44.1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-bg/arrays.xml b/packages/SettingsLib/res/values-bg/arrays.xml
index 4840795..56a3d1f 100644
--- a/packages/SettingsLib/res/values-bg/arrays.xml
+++ b/packages/SettingsLib/res/values-bg/arrays.xml
@@ -68,22 +68,10 @@
<item msgid="1913619118958233129">"avrcp15"</item>
<item msgid="7142710449249088270">"avrcp16"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="7065842274271279580">"Използване на сист. избор (стандартно)"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="686685526567131661">"Разширено аудиокодиране (AAC)"</item>
- <item msgid="8910200421843557332">"aptX"</item>
- <item msgid="8434403964359457768">"aptX HD"</item>
- <item msgid="6751080638867012696">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="5062108632402595000">"Използване на сист. избор (стандартно)"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="6839647709301342559">"Разширено аудиокодиране (AAC)"</item>
- <item msgid="2279916056363477395">"aptX"</item>
- <item msgid="6641171061200063516">"aptX HD"</item>
- <item msgid="7950781694447359344">"LDAC"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:6 (723675059572222462) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:7 (3304843301758635896) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (2209680154067241740) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (741805482892725657) -->
<string-array name="bluetooth_a2dp_codec_sample_rate_titles">
<item msgid="3093023430402746802">"Използване на сист. избор (стандартно)"</item>
<item msgid="8895532488906185219">"44,1 кХц"</item>
diff --git a/packages/SettingsLib/res/values-bn/arrays.xml b/packages/SettingsLib/res/values-bn/arrays.xml
index cd40a63..e9d51a7 100644
--- a/packages/SettingsLib/res/values-bn/arrays.xml
+++ b/packages/SettingsLib/res/values-bn/arrays.xml
@@ -68,22 +68,10 @@
<item msgid="1913619118958233129">"avrcp15"</item>
<item msgid="7142710449249088270">"avrcp16"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="7065842274271279580">"সিস্টেমের নির্বাচন ব্যবহার করুন (ডিফল্ট)"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="686685526567131661">"AAC"</item>
- <item msgid="8910200421843557332">"aptX"</item>
- <item msgid="8434403964359457768">"aptX HD"</item>
- <item msgid="6751080638867012696">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="5062108632402595000">"সিস্টেমের নির্বাচন ব্যবহার করুন (ডিফল্ট)"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="6839647709301342559">"AAC"</item>
- <item msgid="2279916056363477395">"aptX"</item>
- <item msgid="6641171061200063516">"aptX HD"</item>
- <item msgid="7950781694447359344">"LDAC"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:6 (723675059572222462) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:7 (3304843301758635896) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (2209680154067241740) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (741805482892725657) -->
<string-array name="bluetooth_a2dp_codec_sample_rate_titles">
<item msgid="3093023430402746802">"সিস্টেমের নির্বাচন ব্যবহার করুন (ডিফল্ট)"</item>
<item msgid="8895532488906185219">"৪৪.১ kHz"</item>
diff --git a/packages/SettingsLib/res/values-ca/arrays.xml b/packages/SettingsLib/res/values-ca/arrays.xml
index 0d79a81..2ed899e 100644
--- a/packages/SettingsLib/res/values-ca/arrays.xml
+++ b/packages/SettingsLib/res/values-ca/arrays.xml
@@ -68,22 +68,10 @@
<item msgid="1913619118958233129">"avrcp15"</item>
<item msgid="7142710449249088270">"avrcp16"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="7065842274271279580">"Utilitza selecció del sistema (predeterminada)"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="686685526567131661">"AAC"</item>
- <item msgid="8910200421843557332">"aptX"</item>
- <item msgid="8434403964359457768">"aptX HD"</item>
- <item msgid="6751080638867012696">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="5062108632402595000">"Utilitza selecció del sistema (predeterminada)"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="6839647709301342559">"AAC"</item>
- <item msgid="2279916056363477395">"aptX"</item>
- <item msgid="6641171061200063516">"aptX HD"</item>
- <item msgid="7950781694447359344">"LDAC"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:6 (723675059572222462) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:7 (3304843301758635896) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (2209680154067241740) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (741805482892725657) -->
<string-array name="bluetooth_a2dp_codec_sample_rate_titles">
<item msgid="3093023430402746802">"Utilitza selecció del sistema (predeterminada)"</item>
<item msgid="8895532488906185219">"44,1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-cs/arrays.xml b/packages/SettingsLib/res/values-cs/arrays.xml
index 6ee90b4..b8fdf35 100644
--- a/packages/SettingsLib/res/values-cs/arrays.xml
+++ b/packages/SettingsLib/res/values-cs/arrays.xml
@@ -68,22 +68,10 @@
<item msgid="1913619118958233129">"avrcp15"</item>
<item msgid="7142710449249088270">"avrcp16"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="7065842274271279580">"Použít systémový výběr (výchozí)"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="686685526567131661">"AAC"</item>
- <item msgid="8910200421843557332">"aptX"</item>
- <item msgid="8434403964359457768">"aptX HD"</item>
- <item msgid="6751080638867012696">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="5062108632402595000">"Použít systémový výběr (výchozí)"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="6839647709301342559">"AAC"</item>
- <item msgid="2279916056363477395">"aptX"</item>
- <item msgid="6641171061200063516">"aptX HD"</item>
- <item msgid="7950781694447359344">"LDAC"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:6 (723675059572222462) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:7 (3304843301758635896) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (2209680154067241740) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (741805482892725657) -->
<string-array name="bluetooth_a2dp_codec_sample_rate_titles">
<item msgid="3093023430402746802">"Použít systémový výběr (výchozí)"</item>
<item msgid="8895532488906185219">"44,1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-da/arrays.xml b/packages/SettingsLib/res/values-da/arrays.xml
index 4e40a35..d66ef1d 100644
--- a/packages/SettingsLib/res/values-da/arrays.xml
+++ b/packages/SettingsLib/res/values-da/arrays.xml
@@ -68,22 +68,10 @@
<item msgid="1913619118958233129">"avrcp15"</item>
<item msgid="7142710449249088270">"avrcp16"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="7065842274271279580">"Brug systemvalg (standard)"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="686685526567131661">"AAC"</item>
- <item msgid="8910200421843557332">"aptX"</item>
- <item msgid="8434403964359457768">"aptX HD"</item>
- <item msgid="6751080638867012696">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="5062108632402595000">"Brug systemvalg (standard)"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="6839647709301342559">"AAC"</item>
- <item msgid="2279916056363477395">"aptX"</item>
- <item msgid="6641171061200063516">"aptX HD"</item>
- <item msgid="7950781694447359344">"LDAC"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:6 (723675059572222462) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:7 (3304843301758635896) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (2209680154067241740) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (741805482892725657) -->
<string-array name="bluetooth_a2dp_codec_sample_rate_titles">
<item msgid="3093023430402746802">"Brug systemvalg (standard)"</item>
<item msgid="8895532488906185219">"44,1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-de/arrays.xml b/packages/SettingsLib/res/values-de/arrays.xml
index 28dabb3..f5f5fef 100644
--- a/packages/SettingsLib/res/values-de/arrays.xml
+++ b/packages/SettingsLib/res/values-de/arrays.xml
@@ -68,22 +68,10 @@
<item msgid="1913619118958233129">"avrcp15"</item>
<item msgid="7142710449249088270">"avrcp16"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="7065842274271279580">"Systemauswahl verwenden (Standard)"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="686685526567131661">"AAC"</item>
- <item msgid="8910200421843557332">"aptX"</item>
- <item msgid="8434403964359457768">"aptX HD"</item>
- <item msgid="6751080638867012696">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="5062108632402595000">"Systemauswahl verwenden (Standard)"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="6839647709301342559">"AAC"</item>
- <item msgid="2279916056363477395">"aptX"</item>
- <item msgid="6641171061200063516">"aptX HD"</item>
- <item msgid="7950781694447359344">"LDAC"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:6 (723675059572222462) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:7 (3304843301758635896) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (2209680154067241740) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (741805482892725657) -->
<string-array name="bluetooth_a2dp_codec_sample_rate_titles">
<item msgid="3093023430402746802">"Systemauswahl verwenden (Standard)"</item>
<item msgid="8895532488906185219">"44,1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-el/arrays.xml b/packages/SettingsLib/res/values-el/arrays.xml
index 6987b9a..7271a34 100644
--- a/packages/SettingsLib/res/values-el/arrays.xml
+++ b/packages/SettingsLib/res/values-el/arrays.xml
@@ -68,22 +68,10 @@
<item msgid="1913619118958233129">"avrcp15"</item>
<item msgid="7142710449249088270">"avrcp16"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="7065842274271279580">"Χρήση επιλογής συστήματος (Προεπιλογή)"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="686685526567131661">"AAC"</item>
- <item msgid="8910200421843557332">"aptX"</item>
- <item msgid="8434403964359457768">"aptX HD"</item>
- <item msgid="6751080638867012696">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="5062108632402595000">"Χρήση επιλογής συστήματος (Προεπιλογή)"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="6839647709301342559">"AAC"</item>
- <item msgid="2279916056363477395">"aptX"</item>
- <item msgid="6641171061200063516">"aptX HD"</item>
- <item msgid="7950781694447359344">"LDAC"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:6 (723675059572222462) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:7 (3304843301758635896) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (2209680154067241740) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (741805482892725657) -->
<string-array name="bluetooth_a2dp_codec_sample_rate_titles">
<item msgid="3093023430402746802">"Χρήση επιλογής συστήματος (Προεπιλογή)"</item>
<item msgid="8895532488906185219">"44,1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-en-rAU/arrays.xml b/packages/SettingsLib/res/values-en-rAU/arrays.xml
index 1bc7b8c..1763a34 100644
--- a/packages/SettingsLib/res/values-en-rAU/arrays.xml
+++ b/packages/SettingsLib/res/values-en-rAU/arrays.xml
@@ -68,22 +68,10 @@
<item msgid="1913619118958233129">"avrcp15"</item>
<item msgid="7142710449249088270">"avrcp16"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="7065842274271279580">"Use System Selection (Default)"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="686685526567131661">"AAC"</item>
- <item msgid="8910200421843557332">"aptX"</item>
- <item msgid="8434403964359457768">"aptX HD"</item>
- <item msgid="6751080638867012696">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="5062108632402595000">"Use System Selection (Default)"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="6839647709301342559">"AAC"</item>
- <item msgid="2279916056363477395">"aptX"</item>
- <item msgid="6641171061200063516">"aptX HD"</item>
- <item msgid="7950781694447359344">"LDAC"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:6 (723675059572222462) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:7 (3304843301758635896) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (2209680154067241740) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (741805482892725657) -->
<string-array name="bluetooth_a2dp_codec_sample_rate_titles">
<item msgid="3093023430402746802">"Use System Selection (Default)"</item>
<item msgid="8895532488906185219">"44.1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-en-rGB/arrays.xml b/packages/SettingsLib/res/values-en-rGB/arrays.xml
index 1bc7b8c..1763a34 100644
--- a/packages/SettingsLib/res/values-en-rGB/arrays.xml
+++ b/packages/SettingsLib/res/values-en-rGB/arrays.xml
@@ -68,22 +68,10 @@
<item msgid="1913619118958233129">"avrcp15"</item>
<item msgid="7142710449249088270">"avrcp16"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="7065842274271279580">"Use System Selection (Default)"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="686685526567131661">"AAC"</item>
- <item msgid="8910200421843557332">"aptX"</item>
- <item msgid="8434403964359457768">"aptX HD"</item>
- <item msgid="6751080638867012696">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="5062108632402595000">"Use System Selection (Default)"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="6839647709301342559">"AAC"</item>
- <item msgid="2279916056363477395">"aptX"</item>
- <item msgid="6641171061200063516">"aptX HD"</item>
- <item msgid="7950781694447359344">"LDAC"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:6 (723675059572222462) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:7 (3304843301758635896) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (2209680154067241740) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (741805482892725657) -->
<string-array name="bluetooth_a2dp_codec_sample_rate_titles">
<item msgid="3093023430402746802">"Use System Selection (Default)"</item>
<item msgid="8895532488906185219">"44.1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-en-rIN/arrays.xml b/packages/SettingsLib/res/values-en-rIN/arrays.xml
index 1bc7b8c..1763a34 100644
--- a/packages/SettingsLib/res/values-en-rIN/arrays.xml
+++ b/packages/SettingsLib/res/values-en-rIN/arrays.xml
@@ -68,22 +68,10 @@
<item msgid="1913619118958233129">"avrcp15"</item>
<item msgid="7142710449249088270">"avrcp16"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="7065842274271279580">"Use System Selection (Default)"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="686685526567131661">"AAC"</item>
- <item msgid="8910200421843557332">"aptX"</item>
- <item msgid="8434403964359457768">"aptX HD"</item>
- <item msgid="6751080638867012696">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="5062108632402595000">"Use System Selection (Default)"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="6839647709301342559">"AAC"</item>
- <item msgid="2279916056363477395">"aptX"</item>
- <item msgid="6641171061200063516">"aptX HD"</item>
- <item msgid="7950781694447359344">"LDAC"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:6 (723675059572222462) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:7 (3304843301758635896) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (2209680154067241740) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (741805482892725657) -->
<string-array name="bluetooth_a2dp_codec_sample_rate_titles">
<item msgid="3093023430402746802">"Use System Selection (Default)"</item>
<item msgid="8895532488906185219">"44.1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-es-rUS/arrays.xml b/packages/SettingsLib/res/values-es-rUS/arrays.xml
index ed30bac..bf32e14 100644
--- a/packages/SettingsLib/res/values-es-rUS/arrays.xml
+++ b/packages/SettingsLib/res/values-es-rUS/arrays.xml
@@ -68,22 +68,10 @@
<item msgid="1913619118958233129">"avrcp15"</item>
<item msgid="7142710449249088270">"avrcp16"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="7065842274271279580">"Usar selección del sistema (predeterminado)"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="686685526567131661">"AAC"</item>
- <item msgid="8910200421843557332">"aptX"</item>
- <item msgid="8434403964359457768">"aptX HD"</item>
- <item msgid="6751080638867012696">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="5062108632402595000">"Usar selección del sistema (predeterminado)"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="6839647709301342559">"AAC"</item>
- <item msgid="2279916056363477395">"aptX"</item>
- <item msgid="6641171061200063516">"aptX HD"</item>
- <item msgid="7950781694447359344">"LDAC"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:6 (723675059572222462) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:7 (3304843301758635896) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (2209680154067241740) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (741805482892725657) -->
<string-array name="bluetooth_a2dp_codec_sample_rate_titles">
<item msgid="3093023430402746802">"Usar selección del sistema (predeterminado)"</item>
<item msgid="8895532488906185219">"44.1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-es/arrays.xml b/packages/SettingsLib/res/values-es/arrays.xml
index 7c1528f..1585efa 100644
--- a/packages/SettingsLib/res/values-es/arrays.xml
+++ b/packages/SettingsLib/res/values-es/arrays.xml
@@ -68,22 +68,10 @@
<item msgid="1913619118958233129">"avrcp15"</item>
<item msgid="7142710449249088270">"avrcp16"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="7065842274271279580">"Usar preferencia del sistema (predeter.)"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="686685526567131661">"AAC"</item>
- <item msgid="8910200421843557332">"aptX"</item>
- <item msgid="8434403964359457768">"aptX HD"</item>
- <item msgid="6751080638867012696">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="5062108632402595000">"Usar preferencia del sistema (predeter.)"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="6839647709301342559">"AAC"</item>
- <item msgid="2279916056363477395">"aptX"</item>
- <item msgid="6641171061200063516">"aptX HD"</item>
- <item msgid="7950781694447359344">"LDAC"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:6 (723675059572222462) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:7 (3304843301758635896) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (2209680154067241740) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (741805482892725657) -->
<string-array name="bluetooth_a2dp_codec_sample_rate_titles">
<item msgid="3093023430402746802">"Usar preferencia del sistema (predeter.)"</item>
<item msgid="8895532488906185219">"44,1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-es/strings.xml b/packages/SettingsLib/res/values-es/strings.xml
index 3506f62..a9a80dd 100644
--- a/packages/SettingsLib/res/values-es/strings.xml
+++ b/packages/SettingsLib/res/values-es/strings.xml
@@ -170,7 +170,7 @@
<string name="debug_networking_category" msgid="7044075693643009662">"Redes"</string>
<string name="wifi_display_certification" msgid="8611569543791307533">"Certificación de pantalla inalámbrica"</string>
<string name="wifi_verbose_logging" msgid="4203729756047242344">"Habilitar registro Wi-Fi detallado"</string>
- <string name="wifi_aggressive_handover" msgid="5309131983693661320">"Transferencia total de Wi-Fi a móvil"</string>
+ <string name="wifi_aggressive_handover" msgid="5309131983693661320">"Transferencia agresiva de Wi-Fi a móvil"</string>
<string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Permitir siempre búsquedas de Wi-Fi"</string>
<string name="mobile_data_always_on" msgid="8774857027458200434">"Datos móviles siempre activos"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Inhabilitar volumen absoluto"</string>
@@ -189,7 +189,7 @@
<string name="bluetooth_select_a2dp_codec_streaming_label" msgid="5347862512596240506">"Streaming: <xliff:g id="STREAMING_PARAMETER">%1$s</xliff:g>"</string>
<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="7266329646559808827">"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 es baja)"</string>
+ <string name="wifi_aggressive_handover_summary" msgid="7266329646559808827">"Si se activa esta opción, la conexión Wi-Fi será más agresiva al pasar la conexión a datos móviles (si la señal Wi-Fi es débil)"</string>
<string name="wifi_allow_scan_with_traffic_summary" msgid="2575101424972686310">"Permitir/No permitir búsquedas de Wi-Fi basadas en la cantidad de tráfico de datos presente en la interfaz"</string>
<string name="select_logd_size_title" msgid="7433137108348553508">"Tamaños de búfer de registrador"</string>
<string name="select_logd_size_dialog_title" msgid="1206769310236476760">"Elige el tamaño del Logger por búfer"</string>
diff --git a/packages/SettingsLib/res/values-et/arrays.xml b/packages/SettingsLib/res/values-et/arrays.xml
index f7a7000..e97eb42 100644
--- a/packages/SettingsLib/res/values-et/arrays.xml
+++ b/packages/SettingsLib/res/values-et/arrays.xml
@@ -68,22 +68,10 @@
<item msgid="1913619118958233129">"avrcp15"</item>
<item msgid="7142710449249088270">"avrcp16"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="7065842274271279580">"Süsteemi valiku kasutamine (vaikeseade)"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="686685526567131661">"AAC"</item>
- <item msgid="8910200421843557332">"aptX"</item>
- <item msgid="8434403964359457768">"aptX HD"</item>
- <item msgid="6751080638867012696">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="5062108632402595000">"Süsteemi valiku kasutamine (vaikeseade)"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="6839647709301342559">"AAC"</item>
- <item msgid="2279916056363477395">"aptX"</item>
- <item msgid="6641171061200063516">"aptX HD"</item>
- <item msgid="7950781694447359344">"LDAC"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:6 (723675059572222462) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:7 (3304843301758635896) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (2209680154067241740) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (741805482892725657) -->
<string-array name="bluetooth_a2dp_codec_sample_rate_titles">
<item msgid="3093023430402746802">"Süsteemi valiku kasutamine (vaikeseade)"</item>
<item msgid="8895532488906185219">"44,1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-eu/arrays.xml b/packages/SettingsLib/res/values-eu/arrays.xml
index 4214ea1..35d0251 100644
--- a/packages/SettingsLib/res/values-eu/arrays.xml
+++ b/packages/SettingsLib/res/values-eu/arrays.xml
@@ -68,22 +68,10 @@
<item msgid="1913619118958233129">"avrcp15"</item>
<item msgid="7142710449249088270">"avrcp16"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="7065842274271279580">"Erabili sistema-hautapena (lehenetsia)"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="686685526567131661">"AAC"</item>
- <item msgid="8910200421843557332">"aptX"</item>
- <item msgid="8434403964359457768">"aptX HD"</item>
- <item msgid="6751080638867012696">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="5062108632402595000">"Erabili sistema-hautapena (lehenetsia)"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="6839647709301342559">"AAC"</item>
- <item msgid="2279916056363477395">"aptX"</item>
- <item msgid="6641171061200063516">"aptX HD"</item>
- <item msgid="7950781694447359344">"LDAC"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:6 (723675059572222462) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:7 (3304843301758635896) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (2209680154067241740) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (741805482892725657) -->
<string-array name="bluetooth_a2dp_codec_sample_rate_titles">
<item msgid="3093023430402746802">"Erabili sistema-hautapena (lehenetsia)"</item>
<item msgid="8895532488906185219">"44,1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-fa/arrays.xml b/packages/SettingsLib/res/values-fa/arrays.xml
index 05bd6ca..4c274cb 100644
--- a/packages/SettingsLib/res/values-fa/arrays.xml
+++ b/packages/SettingsLib/res/values-fa/arrays.xml
@@ -68,22 +68,10 @@
<item msgid="1913619118958233129">"avrcp نسخه ۱۵"</item>
<item msgid="7142710449249088270">"avrcp نسخه ۱۶"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="7065842274271279580">"استفاده از انتخاب سیستم (پیشفرض)"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="686685526567131661">"AAC"</item>
- <item msgid="8910200421843557332">"aptX"</item>
- <item msgid="8434403964359457768">"aptX HD"</item>
- <item msgid="6751080638867012696">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="5062108632402595000">"استفاده از انتخاب سیستم (پیشفرض)"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="6839647709301342559">"AAC"</item>
- <item msgid="2279916056363477395">"aptX"</item>
- <item msgid="6641171061200063516">"aptX HD"</item>
- <item msgid="7950781694447359344">"LDAC"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:6 (723675059572222462) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:7 (3304843301758635896) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (2209680154067241740) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (741805482892725657) -->
<string-array name="bluetooth_a2dp_codec_sample_rate_titles">
<item msgid="3093023430402746802">"استفاده از انتخاب سیستم (پیشفرض)"</item>
<item msgid="8895532488906185219">"۴۴٫۱ کیلوهرتز"</item>
diff --git a/packages/SettingsLib/res/values-fi/arrays.xml b/packages/SettingsLib/res/values-fi/arrays.xml
index be638ba..371a41e 100644
--- a/packages/SettingsLib/res/values-fi/arrays.xml
+++ b/packages/SettingsLib/res/values-fi/arrays.xml
@@ -68,22 +68,10 @@
<item msgid="1913619118958233129">"avrcp15"</item>
<item msgid="7142710449249088270">"avrcp16"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="7065842274271279580">"Käytä järjestelmän valintaa (oletus)"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="686685526567131661">"AAC"</item>
- <item msgid="8910200421843557332">"aptX"</item>
- <item msgid="8434403964359457768">"aptX HD"</item>
- <item msgid="6751080638867012696">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="5062108632402595000">"Käytä järjestelmän valintaa (oletus)"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="6839647709301342559">"AAC"</item>
- <item msgid="2279916056363477395">"aptX"</item>
- <item msgid="6641171061200063516">"aptX HD"</item>
- <item msgid="7950781694447359344">"LDAC"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:6 (723675059572222462) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:7 (3304843301758635896) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (2209680154067241740) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (741805482892725657) -->
<string-array name="bluetooth_a2dp_codec_sample_rate_titles">
<item msgid="3093023430402746802">"Käytä järjestelmän valintaa (oletus)"</item>
<item msgid="8895532488906185219">"44,1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-fr-rCA/arrays.xml b/packages/SettingsLib/res/values-fr-rCA/arrays.xml
index 8a9fbdd..b143914 100644
--- a/packages/SettingsLib/res/values-fr-rCA/arrays.xml
+++ b/packages/SettingsLib/res/values-fr-rCA/arrays.xml
@@ -68,22 +68,10 @@
<item msgid="1913619118958233129">"avrcp15"</item>
<item msgid="7142710449249088270">"avrcp16"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="7065842274271279580">"Utiliser sélect. du système (par défaut)"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="686685526567131661">"AAC"</item>
- <item msgid="8910200421843557332">"aptX"</item>
- <item msgid="8434403964359457768">"aptX HD"</item>
- <item msgid="6751080638867012696">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="5062108632402595000">"Utiliser sélect. du système (par défaut)"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="6839647709301342559">"AAC"</item>
- <item msgid="2279916056363477395">"aptX"</item>
- <item msgid="6641171061200063516">"aptX HD"</item>
- <item msgid="7950781694447359344">"LDAC"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:6 (723675059572222462) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:7 (3304843301758635896) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (2209680154067241740) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (741805482892725657) -->
<string-array name="bluetooth_a2dp_codec_sample_rate_titles">
<item msgid="3093023430402746802">"Utiliser sélect. du système (par défaut)"</item>
<item msgid="8895532488906185219">"44,1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-fr/arrays.xml b/packages/SettingsLib/res/values-fr/arrays.xml
index 8b6fb04..a4bf33b 100644
--- a/packages/SettingsLib/res/values-fr/arrays.xml
+++ b/packages/SettingsLib/res/values-fr/arrays.xml
@@ -68,22 +68,10 @@
<item msgid="1913619118958233129">"avrcp15"</item>
<item msgid="7142710449249088270">"avrcp16"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="7065842274271279580">"Utiliser sélection système (par défaut)"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="686685526567131661">"AAC"</item>
- <item msgid="8910200421843557332">"aptX"</item>
- <item msgid="8434403964359457768">"aptX HD"</item>
- <item msgid="6751080638867012696">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="5062108632402595000">"Utiliser sélection système (par défaut)"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="6839647709301342559">"AAC"</item>
- <item msgid="2279916056363477395">"aptX"</item>
- <item msgid="6641171061200063516">"aptX HD"</item>
- <item msgid="7950781694447359344">"LDAC"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:6 (723675059572222462) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:7 (3304843301758635896) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (2209680154067241740) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (741805482892725657) -->
<string-array name="bluetooth_a2dp_codec_sample_rate_titles">
<item msgid="3093023430402746802">"Utiliser sélection système (par défaut)"</item>
<item msgid="8895532488906185219">"44,1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-gl/arrays.xml b/packages/SettingsLib/res/values-gl/arrays.xml
index 2e55bf4..249ea17 100644
--- a/packages/SettingsLib/res/values-gl/arrays.xml
+++ b/packages/SettingsLib/res/values-gl/arrays.xml
@@ -68,22 +68,10 @@
<item msgid="1913619118958233129">"avrcp15"</item>
<item msgid="7142710449249088270">"avrcp16"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="7065842274271279580">"Usar selección sistema (predeterminado)"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="686685526567131661">"AAC"</item>
- <item msgid="8910200421843557332">"aptX"</item>
- <item msgid="8434403964359457768">"aptX HD"</item>
- <item msgid="6751080638867012696">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="5062108632402595000">"Usa selección sistema (predeterminado)"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="6839647709301342559">"AAC"</item>
- <item msgid="2279916056363477395">"aptX"</item>
- <item msgid="6641171061200063516">"aptX HD"</item>
- <item msgid="7950781694447359344">"LDAC"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:6 (723675059572222462) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:7 (3304843301758635896) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (2209680154067241740) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (741805482892725657) -->
<string-array name="bluetooth_a2dp_codec_sample_rate_titles">
<item msgid="3093023430402746802">"Usar selección sistema (predeterminado)"</item>
<item msgid="8895532488906185219">"44,1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-gu/arrays.xml b/packages/SettingsLib/res/values-gu/arrays.xml
index ca821ca..f602c16 100644
--- a/packages/SettingsLib/res/values-gu/arrays.xml
+++ b/packages/SettingsLib/res/values-gu/arrays.xml
@@ -68,22 +68,10 @@
<item msgid="1913619118958233129">"avrcp15"</item>
<item msgid="7142710449249088270">"avrcp16"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="7065842274271279580">"સિસ્ટમ પસંદગીનો ઉપયોગ કરો (ડિફૉલ્ટ)"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="686685526567131661">"AAC"</item>
- <item msgid="8910200421843557332">"aptX"</item>
- <item msgid="8434403964359457768">"aptX HD"</item>
- <item msgid="6751080638867012696">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="5062108632402595000">"સિસ્ટમ પસંદગીનો ઉપયોગ કરો (ડિફૉલ્ટ)"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="6839647709301342559">"AAC"</item>
- <item msgid="2279916056363477395">"aptX"</item>
- <item msgid="6641171061200063516">"aptX HD"</item>
- <item msgid="7950781694447359344">"LDAC"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:6 (723675059572222462) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:7 (3304843301758635896) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (2209680154067241740) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (741805482892725657) -->
<string-array name="bluetooth_a2dp_codec_sample_rate_titles">
<item msgid="3093023430402746802">"સિસ્ટમ પસંદગીનો ઉપયોગ કરો (ડિફૉલ્ટ)"</item>
<item msgid="8895532488906185219">"44.1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-hi/arrays.xml b/packages/SettingsLib/res/values-hi/arrays.xml
index d1878a7..48a6540 100644
--- a/packages/SettingsLib/res/values-hi/arrays.xml
+++ b/packages/SettingsLib/res/values-hi/arrays.xml
@@ -58,28 +58,20 @@
<item msgid="3878793616631049349">"HDCP जांच का उपयोग केवल DRM सामग्री के लिए करें"</item>
<item msgid="45075631231212732">"हमेशा HDCP जांच का उपयोग करें"</item>
</string-array>
- <!-- no translation found for bluetooth_avrcp_versions:0 (5347678900838034763) -->
- <!-- no translation found for bluetooth_avrcp_versions:1 (2089555299377409443) -->
- <!-- no translation found for bluetooth_avrcp_versions:2 (2895327394279434278) -->
- <!-- no translation found for bluetooth_avrcp_version_values:0 (2838624067805073303) -->
- <!-- no translation found for bluetooth_avrcp_version_values:1 (1913619118958233129) -->
- <!-- no translation found for bluetooth_avrcp_version_values:2 (7142710449249088270) -->
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="7065842274271279580">"सिस्टम चयन का उपयोग करें (डिफ़ॉल्ट)"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="686685526567131661">"AAC"</item>
- <item msgid="8910200421843557332">"aptX"</item>
- <item msgid="8434403964359457768">"aptX HD"</item>
- <item msgid="6751080638867012696">"LDAC"</item>
+ <string-array name="bluetooth_avrcp_versions">
+ <item msgid="5347678900838034763">"AVRCP 1.4 (डिफ़ॉल्ट)"</item>
+ <item msgid="2089555299377409443">"AVRCP 1.5"</item>
+ <item msgid="2895327394279434278">"AVRCP 1.6"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="5062108632402595000">"सिस्टम चयन का उपयोग करें (डिफ़ॉल्ट)"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="6839647709301342559">"AAC"</item>
- <item msgid="2279916056363477395">"aptX"</item>
- <item msgid="6641171061200063516">"aptX HD"</item>
- <item msgid="7950781694447359344">"LDAC"</item>
+ <string-array name="bluetooth_avrcp_version_values">
+ <item msgid="2838624067805073303">"avrcp14"</item>
+ <item msgid="1913619118958233129">"avrcp15"</item>
+ <item msgid="7142710449249088270">"avrcp16"</item>
</string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:6 (723675059572222462) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:7 (3304843301758635896) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (2209680154067241740) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (741805482892725657) -->
<string-array name="bluetooth_a2dp_codec_sample_rate_titles">
<item msgid="3093023430402746802">"सिस्टम चयन का उपयोग करें (डिफ़ॉल्ट)"</item>
<item msgid="8895532488906185219">"44.1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-hi/strings.xml b/packages/SettingsLib/res/values-hi/strings.xml
index 8d4935f..0d89937 100644
--- a/packages/SettingsLib/res/values-hi/strings.xml
+++ b/packages/SettingsLib/res/values-hi/strings.xml
@@ -32,8 +32,7 @@
<string name="wifi_no_internet_no_reconnect" msgid="5724903347310541706">"अपने आप कनेक्ट नहीं होगा"</string>
<string name="wifi_no_internet" msgid="3880396223819116454">"कोई इंटरनेट एक्सेस नहीं"</string>
<string name="saved_network" msgid="4352716707126620811">"<xliff:g id="NAME">%1$s</xliff:g> के द्वारा सहेजा गया"</string>
- <!-- no translation found for connected_via_network_scorer (5713793306870815341) -->
- <skip />
+ <string name="connected_via_network_scorer" msgid="5713793306870815341">"%1$s के ज़रिए ऑटोमैटिक रूप से कनेक्ट है"</string>
<!-- no translation found for connected_via_network_scorer_default (7867260222020343104) -->
<skip />
<string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s के द्वारा उपलब्ध"</string>
@@ -171,16 +170,12 @@
<string name="debug_networking_category" msgid="7044075693643009662">"नेटवर्किंग"</string>
<string name="wifi_display_certification" msgid="8611569543791307533">"वायरलेस दिखाई देने के लिए प्रमाणन"</string>
<string name="wifi_verbose_logging" msgid="4203729756047242344">"वाई-फ़ाई वर्बोस प्रवेश सक्षम करें"</string>
- <!-- no translation found for wifi_aggressive_handover (5309131983693661320) -->
- <skip />
+ <string name="wifi_aggressive_handover" msgid="5309131983693661320">"वाई-फ़ाई से मोबाइल पर ज़्यादा तेज़ी से हैंडओवर"</string>
<string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"हमेशा वाई-फ़ाई रोम स्कैन करने दें"</string>
- <!-- no translation found for mobile_data_always_on (8774857027458200434) -->
- <skip />
+ <string name="mobile_data_always_on" msgid="8774857027458200434">"मोबाइल डेटा हमेशा सक्रिय"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"पूर्ण वॉल्यूम अक्षम करें"</string>
- <!-- no translation found for bluetooth_select_avrcp_version_string (3750059931120293633) -->
- <skip />
- <!-- no translation found for bluetooth_select_avrcp_version_dialog_title (7277329668298705702) -->
- <skip />
+ <string name="bluetooth_select_avrcp_version_string" msgid="3750059931120293633">"ब्लूटूथ AVRCP वर्शन"</string>
+ <string name="bluetooth_select_avrcp_version_dialog_title" msgid="7277329668298705702">"ब्लूटूथ AVRCP वर्शन चुनें"</string>
<string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"ब्लूटूथ ऑडियो कोडेक"</string>
<string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="4558347981670553665">"ब्लूटूथ ऑडियो कोडेक चुनें"</string>
<string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"ब्लूटूथ ऑडियो नमूना दर"</string>
@@ -194,8 +189,7 @@
<string name="bluetooth_select_a2dp_codec_streaming_label" msgid="5347862512596240506">"स्ट्रीम हो रहा है: <xliff:g id="STREAMING_PARAMETER">%1$s</xliff:g>"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"वायरलेस दिखाई देने के लिए प्रमाणन विकल्प दिखाएं"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"वाई-फ़ाई प्रवेश स्तर बढ़ाएं, वाई-फ़ाई पिकर में प्रति SSID RSSI दिखाएं"</string>
- <!-- no translation found for wifi_aggressive_handover_summary (7266329646559808827) -->
- <skip />
+ <string name="wifi_aggressive_handover_summary" msgid="7266329646559808827">"इसके सक्षम होने पर, जब वाई-फ़ाई संकेत कमज़ोर हों तो वाई-फ़ाई, डेटा कनेक्शन को मोबाइल पर ज़्यादा तेज़ी से भेजेगा"</string>
<string name="wifi_allow_scan_with_traffic_summary" msgid="2575101424972686310">"इंटरफ़ेस पर वर्तमान में मौजूद डेटा ट्रैफ़िक के आधार पर वाई-फ़ाई रोम स्कैन करने देता/नहीं देता है"</string>
<string name="select_logd_size_title" msgid="7433137108348553508">"लॉगर बफ़र आकार"</string>
<string name="select_logd_size_dialog_title" msgid="1206769310236476760">"प्रति लॉग बफ़र लॉगर आकार चुनें"</string>
@@ -326,21 +320,16 @@
<string name="daltonizer_type_overridden" msgid="3116947244410245916">"<xliff:g id="TITLE">%1$s</xliff:g> के द्वारा ओवरराइड किया गया"</string>
<string name="power_remaining_duration_only" msgid="4400068916452346544">"लगभग <xliff:g id="TIME">%1$s</xliff:g> शेष"</string>
<string name="power_remaining_duration_only_short" msgid="5329694252258605547">"<xliff:g id="TIME">%1$s</xliff:g> शेष"</string>
- <!-- no translation found for power_discharging_duration (2843747179907396142) -->
- <skip />
+ <string name="power_discharging_duration" msgid="2843747179907396142">"<xliff:g id="LEVEL">%1$s</xliff:g> - लगभग <xliff:g id="TIME">%2$s</xliff:g> शेष"</string>
<string name="power_discharging_duration_short" msgid="4192244429001842403">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="TIME">%2$s</xliff:g> शेष"</string>
<string name="power_charging" msgid="1779532561355864267">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATE">%2$s</xliff:g>"</string>
- <!-- no translation found for power_charging_duration (4676999980973411875) -->
- <skip />
+ <string name="power_charging_duration" msgid="4676999980973411875">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="TIME">%2$s</xliff:g> पूरी तरह से चार्ज होने तक"</string>
<string name="power_charging_duration_short" msgid="1098603958472207920">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="TIME">%2$s</xliff:g>"</string>
- <!-- no translation found for power_charging_duration_ac (7341243578143555689) -->
- <skip />
+ <string name="power_charging_duration_ac" msgid="7341243578143555689">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="TIME">%2$s</xliff:g> AC पर पूरी तरह से चार्ज होने तक"</string>
<string name="power_charging_duration_ac_short" msgid="7895864687218765582">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="TIME">%2$s</xliff:g>"</string>
- <!-- no translation found for power_charging_duration_usb (3720632890882121805) -->
- <skip />
+ <string name="power_charging_duration_usb" msgid="3720632890882121805">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="TIME">%2$s</xliff:g> USB पर पूरी तरह से चार्ज होने तक"</string>
<string name="power_charging_duration_usb_short" msgid="941854728040426399">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="TIME">%2$s</xliff:g>"</string>
- <!-- no translation found for power_charging_duration_wireless (5768338238751562058) -->
- <skip />
+ <string name="power_charging_duration_wireless" msgid="5768338238751562058">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="TIME">%2$s</xliff:g> वायरलेस से पूरी तरह से चार्ज होने तक"</string>
<string name="power_charging_duration_wireless_short" msgid="1642664799869599476">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="TIME">%2$s</xliff:g>"</string>
<string name="battery_info_status_unknown" msgid="196130600938058547">"अज्ञात"</string>
<string name="battery_info_status_charging" msgid="1705179948350365604">"चार्ज हो रही है"</string>
diff --git a/packages/SettingsLib/res/values-hr/arrays.xml b/packages/SettingsLib/res/values-hr/arrays.xml
index 641b9fb..093c3eb 100644
--- a/packages/SettingsLib/res/values-hr/arrays.xml
+++ b/packages/SettingsLib/res/values-hr/arrays.xml
@@ -68,22 +68,10 @@
<item msgid="1913619118958233129">"avrcp15"</item>
<item msgid="7142710449249088270">"avrcp16"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="7065842274271279580">"Upotreba odabira sustava (zadano)"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="686685526567131661">"AAC"</item>
- <item msgid="8910200421843557332">"aptX"</item>
- <item msgid="8434403964359457768">"aptX HD"</item>
- <item msgid="6751080638867012696">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="5062108632402595000">"Upotreba odabira sustava (zadano)"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="6839647709301342559">"AAC"</item>
- <item msgid="2279916056363477395">"aptX"</item>
- <item msgid="6641171061200063516">"aptX HD"</item>
- <item msgid="7950781694447359344">"LDAC"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:6 (723675059572222462) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:7 (3304843301758635896) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (2209680154067241740) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (741805482892725657) -->
<string-array name="bluetooth_a2dp_codec_sample_rate_titles">
<item msgid="3093023430402746802">"Upotreba odabira sustava (zadano)"</item>
<item msgid="8895532488906185219">"44,1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-hu/arrays.xml b/packages/SettingsLib/res/values-hu/arrays.xml
index e647f86..7c13e2e 100644
--- a/packages/SettingsLib/res/values-hu/arrays.xml
+++ b/packages/SettingsLib/res/values-hu/arrays.xml
@@ -68,22 +68,10 @@
<item msgid="1913619118958233129">"avrcp15"</item>
<item msgid="7142710449249088270">"avrcp16"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="7065842274271279580">"Rendszerérték (alapértelmezett)"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="686685526567131661">"AAC"</item>
- <item msgid="8910200421843557332">"aptX"</item>
- <item msgid="8434403964359457768">"aptX HD"</item>
- <item msgid="6751080638867012696">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="5062108632402595000">"Rendszerérték (alapértelmezett)"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="6839647709301342559">"AAC"</item>
- <item msgid="2279916056363477395">"aptX"</item>
- <item msgid="6641171061200063516">"aptX HD"</item>
- <item msgid="7950781694447359344">"LDAC"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:6 (723675059572222462) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:7 (3304843301758635896) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (2209680154067241740) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (741805482892725657) -->
<string-array name="bluetooth_a2dp_codec_sample_rate_titles">
<item msgid="3093023430402746802">"Rendszerérték (alapértelmezett)"</item>
<item msgid="8895532488906185219">"44,1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-hy/arrays.xml b/packages/SettingsLib/res/values-hy/arrays.xml
index 0138d2e..dbd3218 100644
--- a/packages/SettingsLib/res/values-hy/arrays.xml
+++ b/packages/SettingsLib/res/values-hy/arrays.xml
@@ -68,22 +68,10 @@
<item msgid="1913619118958233129">"avrcp15"</item>
<item msgid="7142710449249088270">"avrcp16"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="7065842274271279580">"Օգտագործել համակարգի կարգավորումը (կանխադրված)"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="686685526567131661">"AAC"</item>
- <item msgid="8910200421843557332">"aptX"</item>
- <item msgid="8434403964359457768">"aptX HD"</item>
- <item msgid="6751080638867012696">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="5062108632402595000">"Օգտագործել համակարգի կարգավորումը (կանխադրված)"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="6839647709301342559">"AAC"</item>
- <item msgid="2279916056363477395">"aptX"</item>
- <item msgid="6641171061200063516">"aptX HD"</item>
- <item msgid="7950781694447359344">"LDAC"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:6 (723675059572222462) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:7 (3304843301758635896) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (2209680154067241740) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (741805482892725657) -->
<string-array name="bluetooth_a2dp_codec_sample_rate_titles">
<item msgid="3093023430402746802">"Օգտագործել համակարգի կարգավորումը (կանխադրված)"</item>
<item msgid="8895532488906185219">"44,1 կՀց"</item>
diff --git a/packages/SettingsLib/res/values-in/arrays.xml b/packages/SettingsLib/res/values-in/arrays.xml
index 5289d26..8994d3f 100644
--- a/packages/SettingsLib/res/values-in/arrays.xml
+++ b/packages/SettingsLib/res/values-in/arrays.xml
@@ -68,22 +68,10 @@
<item msgid="1913619118958233129">"avrcp15"</item>
<item msgid="7142710449249088270">"avrcp16"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="7065842274271279580">"Gunakan Pilihan Sistem (Default)"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="686685526567131661">"AAC"</item>
- <item msgid="8910200421843557332">"aptX"</item>
- <item msgid="8434403964359457768">"aptX HD"</item>
- <item msgid="6751080638867012696">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="5062108632402595000">"Gunakan Pilihan Sistem (Default)"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="6839647709301342559">"AAC"</item>
- <item msgid="2279916056363477395">"aptX"</item>
- <item msgid="6641171061200063516">"aptX HD"</item>
- <item msgid="7950781694447359344">"LDAC"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:6 (723675059572222462) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:7 (3304843301758635896) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (2209680154067241740) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (741805482892725657) -->
<string-array name="bluetooth_a2dp_codec_sample_rate_titles">
<item msgid="3093023430402746802">"Gunakan Pilihan Sistem (Default)"</item>
<item msgid="8895532488906185219">"44,1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-is/arrays.xml b/packages/SettingsLib/res/values-is/arrays.xml
index 0a1e19e..39941b3 100644
--- a/packages/SettingsLib/res/values-is/arrays.xml
+++ b/packages/SettingsLib/res/values-is/arrays.xml
@@ -68,22 +68,10 @@
<item msgid="1913619118958233129">"avrcp15"</item>
<item msgid="7142710449249088270">"avrcp16"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="7065842274271279580">"Nota val kerfisins (sjálfgefið)"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="686685526567131661">"AAC"</item>
- <item msgid="8910200421843557332">"aptX"</item>
- <item msgid="8434403964359457768">"aptX HD"</item>
- <item msgid="6751080638867012696">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="5062108632402595000">"Nota val kerfisins (sjálfgefið)"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="6839647709301342559">"AAC"</item>
- <item msgid="2279916056363477395">"aptX"</item>
- <item msgid="6641171061200063516">"aptX HD"</item>
- <item msgid="7950781694447359344">"LDAC"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:6 (723675059572222462) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:7 (3304843301758635896) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (2209680154067241740) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (741805482892725657) -->
<string-array name="bluetooth_a2dp_codec_sample_rate_titles">
<item msgid="3093023430402746802">"Nota val kerfisins (sjálfgefið)"</item>
<item msgid="8895532488906185219">"44,1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-it/arrays.xml b/packages/SettingsLib/res/values-it/arrays.xml
index da6b885..cf46941 100644
--- a/packages/SettingsLib/res/values-it/arrays.xml
+++ b/packages/SettingsLib/res/values-it/arrays.xml
@@ -68,22 +68,10 @@
<item msgid="1913619118958233129">"avrcp15"</item>
<item msgid="7142710449249088270">"avrcp16"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="7065842274271279580">"Usa selezione di sistema (predefinita)"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="686685526567131661">"AAC"</item>
- <item msgid="8910200421843557332">"aptX"</item>
- <item msgid="8434403964359457768">"aptX HD"</item>
- <item msgid="6751080638867012696">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="5062108632402595000">"Usa selezione di sistema (predefinita)"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="6839647709301342559">"AAC"</item>
- <item msgid="2279916056363477395">"aptX"</item>
- <item msgid="6641171061200063516">"aptX HD"</item>
- <item msgid="7950781694447359344">"LDAC"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:6 (723675059572222462) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:7 (3304843301758635896) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (2209680154067241740) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (741805482892725657) -->
<string-array name="bluetooth_a2dp_codec_sample_rate_titles">
<item msgid="3093023430402746802">"Usa selezione di sistema (predefinita)"</item>
<item msgid="8895532488906185219">"44.1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-iw/arrays.xml b/packages/SettingsLib/res/values-iw/arrays.xml
index f106a34..e1355d2 100644
--- a/packages/SettingsLib/res/values-iw/arrays.xml
+++ b/packages/SettingsLib/res/values-iw/arrays.xml
@@ -68,22 +68,10 @@
<item msgid="1913619118958233129">"avrcp15"</item>
<item msgid="7142710449249088270">"avrcp16"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="7065842274271279580">"שימוש בבחירת המערכת (ברירת המחדל)"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="686685526567131661">"AAC"</item>
- <item msgid="8910200421843557332">"aptX"</item>
- <item msgid="8434403964359457768">"aptX HD"</item>
- <item msgid="6751080638867012696">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="5062108632402595000">"השתמש בבחירת המערכת (ברירת המחדל)"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="6839647709301342559">"AAC"</item>
- <item msgid="2279916056363477395">"aptX"</item>
- <item msgid="6641171061200063516">"aptX HD"</item>
- <item msgid="7950781694447359344">"LDAC"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:6 (723675059572222462) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:7 (3304843301758635896) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (2209680154067241740) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (741805482892725657) -->
<string-array name="bluetooth_a2dp_codec_sample_rate_titles">
<item msgid="3093023430402746802">"שימוש בבחירת המערכת (ברירת המחדל)"</item>
<item msgid="8895532488906185219">"44.1 קילו-הרץ"</item>
diff --git a/packages/SettingsLib/res/values-ja/arrays.xml b/packages/SettingsLib/res/values-ja/arrays.xml
index 18945ec..eff8c61 100644
--- a/packages/SettingsLib/res/values-ja/arrays.xml
+++ b/packages/SettingsLib/res/values-ja/arrays.xml
@@ -68,22 +68,10 @@
<item msgid="1913619118958233129">"avrcp15"</item>
<item msgid="7142710449249088270">"avrcp16"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="7065842274271279580">"システムの選択(デフォルト)を使用"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="686685526567131661">"AAC"</item>
- <item msgid="8910200421843557332">"aptX"</item>
- <item msgid="8434403964359457768">"aptX HD"</item>
- <item msgid="6751080638867012696">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="5062108632402595000">"システムの選択(デフォルト)を使用"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="6839647709301342559">"AAC"</item>
- <item msgid="2279916056363477395">"aptX"</item>
- <item msgid="6641171061200063516">"aptX HD"</item>
- <item msgid="7950781694447359344">"LDAC"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:6 (723675059572222462) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:7 (3304843301758635896) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (2209680154067241740) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (741805482892725657) -->
<string-array name="bluetooth_a2dp_codec_sample_rate_titles">
<item msgid="3093023430402746802">"システムの選択(デフォルト)を使用"</item>
<item msgid="8895532488906185219">"44.1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-ka/arrays.xml b/packages/SettingsLib/res/values-ka/arrays.xml
index 9c326a7..7c184ac 100644
--- a/packages/SettingsLib/res/values-ka/arrays.xml
+++ b/packages/SettingsLib/res/values-ka/arrays.xml
@@ -68,22 +68,10 @@
<item msgid="1913619118958233129">"avrcp15"</item>
<item msgid="7142710449249088270">"avrcp16"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="7065842274271279580">"სისტემის არჩეულის გამოყენება (ნაგულისხმევი)"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="686685526567131661">"AAC"</item>
- <item msgid="8910200421843557332">"aptX"</item>
- <item msgid="8434403964359457768">"aptX HD"</item>
- <item msgid="6751080638867012696">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="5062108632402595000">"სისტემის არჩეულის გამოყენება (ნაგულისხმევი)"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="6839647709301342559">"AAC"</item>
- <item msgid="2279916056363477395">"aptX"</item>
- <item msgid="6641171061200063516">"aptX HD"</item>
- <item msgid="7950781694447359344">"LDAC"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:6 (723675059572222462) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:7 (3304843301758635896) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (2209680154067241740) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (741805482892725657) -->
<string-array name="bluetooth_a2dp_codec_sample_rate_titles">
<item msgid="3093023430402746802">"სისტემის არჩეულის გამოყენება (ნაგულისხმევი)"</item>
<item msgid="8895532488906185219">"44,1 კჰც"</item>
diff --git a/packages/SettingsLib/res/values-kk/arrays.xml b/packages/SettingsLib/res/values-kk/arrays.xml
index d4e2353..c4ec580 100644
--- a/packages/SettingsLib/res/values-kk/arrays.xml
+++ b/packages/SettingsLib/res/values-kk/arrays.xml
@@ -68,22 +68,10 @@
<item msgid="1913619118958233129">"avrcp15"</item>
<item msgid="7142710449249088270">"avrcp16"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="7065842274271279580">"Жүйені таңдау (әдепкі)"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="686685526567131661">"AAC"</item>
- <item msgid="8910200421843557332">"aptX"</item>
- <item msgid="8434403964359457768">"aptX HD"</item>
- <item msgid="6751080638867012696">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="5062108632402595000">"Жүйені таңдау (әдепкі)"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="6839647709301342559">"AAC"</item>
- <item msgid="2279916056363477395">"aptX"</item>
- <item msgid="6641171061200063516">"aptX HD"</item>
- <item msgid="7950781694447359344">"LDAC"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:6 (723675059572222462) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:7 (3304843301758635896) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (2209680154067241740) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (741805482892725657) -->
<string-array name="bluetooth_a2dp_codec_sample_rate_titles">
<item msgid="3093023430402746802">"Жүйені таңдау (әдепкі)"</item>
<item msgid="8895532488906185219">"44,1 кГц"</item>
diff --git a/packages/SettingsLib/res/values-km/arrays.xml b/packages/SettingsLib/res/values-km/arrays.xml
index 5e6656b..7e1e98b 100644
--- a/packages/SettingsLib/res/values-km/arrays.xml
+++ b/packages/SettingsLib/res/values-km/arrays.xml
@@ -68,22 +68,10 @@
<item msgid="1913619118958233129">"avrcp15"</item>
<item msgid="7142710449249088270">"avrcp16"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="7065842274271279580">"ប្រើការជ្រើសរើសប្រព័ន្ធ (លំនាំដើម)"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="686685526567131661">"AAC"</item>
- <item msgid="8910200421843557332">"aptX"</item>
- <item msgid="8434403964359457768">"aptX HD"</item>
- <item msgid="6751080638867012696">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="5062108632402595000">"ប្រើការជ្រើសរើសប្រព័ន្ធ (លំនាំដើម)"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="6839647709301342559">"AAC"</item>
- <item msgid="2279916056363477395">"aptX"</item>
- <item msgid="6641171061200063516">"aptX HD"</item>
- <item msgid="7950781694447359344">"LDAC"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:6 (723675059572222462) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:7 (3304843301758635896) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (2209680154067241740) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (741805482892725657) -->
<string-array name="bluetooth_a2dp_codec_sample_rate_titles">
<item msgid="3093023430402746802">"ប្រើការជ្រើសរើសប្រព័ន្ធ (លំនាំដើម)"</item>
<item msgid="8895532488906185219">"44.1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-kn/arrays.xml b/packages/SettingsLib/res/values-kn/arrays.xml
index 2936bf0..d7bfbaf 100644
--- a/packages/SettingsLib/res/values-kn/arrays.xml
+++ b/packages/SettingsLib/res/values-kn/arrays.xml
@@ -68,22 +68,10 @@
<item msgid="1913619118958233129">"avrcp15"</item>
<item msgid="7142710449249088270">"avrcp16"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="7065842274271279580">"ಸಿಸ್ಟಂ ಆಯ್ಕೆಯನ್ನು ಬಳಸಿ (ಡಿಫಾಲ್ಟ್)"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="686685526567131661">"AAC"</item>
- <item msgid="8910200421843557332">"aptX"</item>
- <item msgid="8434403964359457768">"aptX HD"</item>
- <item msgid="6751080638867012696">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="5062108632402595000">"ಸಿಸ್ಟಂ ಆಯ್ಕೆಯನ್ನು ಬಳಸಿ (ಡಿಫಾಲ್ಟ್)"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="6839647709301342559">"AAC"</item>
- <item msgid="2279916056363477395">"aptX"</item>
- <item msgid="6641171061200063516">"aptX HD"</item>
- <item msgid="7950781694447359344">"LDAC"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:6 (723675059572222462) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:7 (3304843301758635896) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (2209680154067241740) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (741805482892725657) -->
<string-array name="bluetooth_a2dp_codec_sample_rate_titles">
<item msgid="3093023430402746802">"ಸಿಸ್ಟಂ ಆಯ್ಕೆಯನ್ನು ಬಳಸಿ (ಡಿಫಾಲ್ಟ್)"</item>
<item msgid="8895532488906185219">"44.1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-ko/arrays.xml b/packages/SettingsLib/res/values-ko/arrays.xml
index 62c0183..37e88c5 100644
--- a/packages/SettingsLib/res/values-ko/arrays.xml
+++ b/packages/SettingsLib/res/values-ko/arrays.xml
@@ -68,22 +68,10 @@
<item msgid="1913619118958233129">"avrcp15"</item>
<item msgid="7142710449249088270">"avrcp16"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="7065842274271279580">"시스템 설정 사용(기본)"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="686685526567131661">"AAC"</item>
- <item msgid="8910200421843557332">"aptX"</item>
- <item msgid="8434403964359457768">"aptX HD"</item>
- <item msgid="6751080638867012696">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="5062108632402595000">"시스템 설정 사용(기본)"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="6839647709301342559">"AAC"</item>
- <item msgid="2279916056363477395">"aptX"</item>
- <item msgid="6641171061200063516">"aptX HD"</item>
- <item msgid="7950781694447359344">"LDAC"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:6 (723675059572222462) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:7 (3304843301758635896) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (2209680154067241740) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (741805482892725657) -->
<string-array name="bluetooth_a2dp_codec_sample_rate_titles">
<item msgid="3093023430402746802">"시스템 설정 사용(기본)"</item>
<item msgid="8895532488906185219">"44.1kHz"</item>
diff --git a/packages/SettingsLib/res/values-ky/arrays.xml b/packages/SettingsLib/res/values-ky/arrays.xml
index 1d1480e..c58637e 100644
--- a/packages/SettingsLib/res/values-ky/arrays.xml
+++ b/packages/SettingsLib/res/values-ky/arrays.xml
@@ -68,22 +68,10 @@
<item msgid="1913619118958233129">"avrcp15"</item>
<item msgid="7142710449249088270">"avrcp16"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="7065842274271279580">"Тутум тандаганды колдонуу (демейки)"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="686685526567131661">"AAC"</item>
- <item msgid="8910200421843557332">"aptX"</item>
- <item msgid="8434403964359457768">"aptX HD"</item>
- <item msgid="6751080638867012696">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="5062108632402595000">"Тутум тандаганды колдонуу (демейки)"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="6839647709301342559">"AAC"</item>
- <item msgid="2279916056363477395">"aptX"</item>
- <item msgid="6641171061200063516">"aptX HD"</item>
- <item msgid="7950781694447359344">"LDAC"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:6 (723675059572222462) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:7 (3304843301758635896) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (2209680154067241740) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (741805482892725657) -->
<string-array name="bluetooth_a2dp_codec_sample_rate_titles">
<item msgid="3093023430402746802">"Тутум тандаганды колдонуу (демейки)"</item>
<item msgid="8895532488906185219">"44,1 кГц"</item>
diff --git a/packages/SettingsLib/res/values-lo/arrays.xml b/packages/SettingsLib/res/values-lo/arrays.xml
index 119779c..eef3647 100644
--- a/packages/SettingsLib/res/values-lo/arrays.xml
+++ b/packages/SettingsLib/res/values-lo/arrays.xml
@@ -68,22 +68,10 @@
<item msgid="1913619118958233129">"avrcp15"</item>
<item msgid="7142710449249088270">"avrcp16"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="7065842274271279580">"Use System Selection (Default)"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="686685526567131661">"AAC"</item>
- <item msgid="8910200421843557332">"aptX"</item>
- <item msgid="8434403964359457768">"aptX HD"</item>
- <item msgid="6751080638867012696">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="5062108632402595000">"Use System Selection (Default)"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="6839647709301342559">"AAC"</item>
- <item msgid="2279916056363477395">"aptX"</item>
- <item msgid="6641171061200063516">"aptX HD"</item>
- <item msgid="7950781694447359344">"LDAC"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:6 (723675059572222462) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:7 (3304843301758635896) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (2209680154067241740) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (741805482892725657) -->
<string-array name="bluetooth_a2dp_codec_sample_rate_titles">
<item msgid="3093023430402746802">"Use System Selection (Default)"</item>
<item msgid="8895532488906185219">"44.1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-lt/arrays.xml b/packages/SettingsLib/res/values-lt/arrays.xml
index 2c4c321..f6e485b 100644
--- a/packages/SettingsLib/res/values-lt/arrays.xml
+++ b/packages/SettingsLib/res/values-lt/arrays.xml
@@ -68,22 +68,10 @@
<item msgid="1913619118958233129">"avrcp15"</item>
<item msgid="7142710449249088270">"avrcp16"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="7065842274271279580">"Naudoti sistemos pasirink. (numatytasis)"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="686685526567131661">"AAC"</item>
- <item msgid="8910200421843557332">"aptX"</item>
- <item msgid="8434403964359457768">"aptX HD"</item>
- <item msgid="6751080638867012696">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="5062108632402595000">"Naudoti sistemos pasirink. (numatytasis)"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="6839647709301342559">"AAC"</item>
- <item msgid="2279916056363477395">"aptX"</item>
- <item msgid="6641171061200063516">"aptX HD"</item>
- <item msgid="7950781694447359344">"LDAC"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:6 (723675059572222462) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:7 (3304843301758635896) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (2209680154067241740) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (741805482892725657) -->
<string-array name="bluetooth_a2dp_codec_sample_rate_titles">
<item msgid="3093023430402746802">"Naudoti sistemos pasirink. (numatytasis)"</item>
<item msgid="8895532488906185219">"44,1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-lv/arrays.xml b/packages/SettingsLib/res/values-lv/arrays.xml
index 664b4cf..0d42ae7 100644
--- a/packages/SettingsLib/res/values-lv/arrays.xml
+++ b/packages/SettingsLib/res/values-lv/arrays.xml
@@ -68,22 +68,10 @@
<item msgid="1913619118958233129">"avrcp15"</item>
<item msgid="7142710449249088270">"avrcp16"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="7065842274271279580">"Sistēmas atlases izmantošana (nokl.)"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="686685526567131661">"AAC"</item>
- <item msgid="8910200421843557332">"aptX"</item>
- <item msgid="8434403964359457768">"aptX HD"</item>
- <item msgid="6751080638867012696">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="5062108632402595000">"Sistēmas atlases izmantošana (nokl.)"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="6839647709301342559">"AAC"</item>
- <item msgid="2279916056363477395">"aptX"</item>
- <item msgid="6641171061200063516">"aptX HD"</item>
- <item msgid="7950781694447359344">"LDAC"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:6 (723675059572222462) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:7 (3304843301758635896) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (2209680154067241740) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (741805482892725657) -->
<string-array name="bluetooth_a2dp_codec_sample_rate_titles">
<item msgid="3093023430402746802">"Sistēmas atlases izmantošana (nokl.)"</item>
<item msgid="8895532488906185219">"44,1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-mk/arrays.xml b/packages/SettingsLib/res/values-mk/arrays.xml
index 7a0c047..25ea47d 100644
--- a/packages/SettingsLib/res/values-mk/arrays.xml
+++ b/packages/SettingsLib/res/values-mk/arrays.xml
@@ -68,22 +68,10 @@
<item msgid="1913619118958233129">"avrcp15"</item>
<item msgid="7142710449249088270">"avrcp16"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="7065842274271279580">"Користи избор на системот (стандардно)"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="686685526567131661">"AAC"</item>
- <item msgid="8910200421843557332">"aptX"</item>
- <item msgid="8434403964359457768">"aptX HD"</item>
- <item msgid="6751080638867012696">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="5062108632402595000">"Користи избор на системот (стандардно)"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="6839647709301342559">"AAC"</item>
- <item msgid="2279916056363477395">"aptX"</item>
- <item msgid="6641171061200063516">"aptX HD"</item>
- <item msgid="7950781694447359344">"LDAC"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:6 (723675059572222462) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:7 (3304843301758635896) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (2209680154067241740) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (741805482892725657) -->
<string-array name="bluetooth_a2dp_codec_sample_rate_titles">
<item msgid="3093023430402746802">"Користи избор на системот (стандардно)"</item>
<item msgid="8895532488906185219">"44,1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-ml/arrays.xml b/packages/SettingsLib/res/values-ml/arrays.xml
index fe28f58..d7085ce 100644
--- a/packages/SettingsLib/res/values-ml/arrays.xml
+++ b/packages/SettingsLib/res/values-ml/arrays.xml
@@ -68,22 +68,10 @@
<item msgid="1913619118958233129">"avrcp15"</item>
<item msgid="7142710449249088270">"avrcp16"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="7065842274271279580">"സിസ്റ്റം സെലക്ഷൻ ഉപയോഗിക്കൂ (ഡിഫോൾട്ട്)"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="686685526567131661">"AAC"</item>
- <item msgid="8910200421843557332">"aptX"</item>
- <item msgid="8434403964359457768">"aptX HD"</item>
- <item msgid="6751080638867012696">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="5062108632402595000">"സിസ്റ്റം സെലക്ഷൻ ഉപയോഗിക്കൂ (ഡിഫോൾട്ട്)"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="6839647709301342559">"AAC"</item>
- <item msgid="2279916056363477395">"aptX"</item>
- <item msgid="6641171061200063516">"aptX HD"</item>
- <item msgid="7950781694447359344">"LDAC"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:6 (723675059572222462) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:7 (3304843301758635896) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (2209680154067241740) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (741805482892725657) -->
<string-array name="bluetooth_a2dp_codec_sample_rate_titles">
<item msgid="3093023430402746802">"സിസ്റ്റം സെലക്ഷൻ ഉപയോഗിക്കൂ (ഡിഫോൾട്ട്)"</item>
<item msgid="8895532488906185219">"44.1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-mn/arrays.xml b/packages/SettingsLib/res/values-mn/arrays.xml
index af033d2..f93d221 100644
--- a/packages/SettingsLib/res/values-mn/arrays.xml
+++ b/packages/SettingsLib/res/values-mn/arrays.xml
@@ -68,22 +68,10 @@
<item msgid="1913619118958233129">"avrcp15"</item>
<item msgid="7142710449249088270">"avrcp16"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="7065842274271279580">"Системийн сонголтыг ашиглах (Өгөгдмөл)"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="686685526567131661">"AAC"</item>
- <item msgid="8910200421843557332">"aptX"</item>
- <item msgid="8434403964359457768">"aptX HD"</item>
- <item msgid="6751080638867012696">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="5062108632402595000">"Системийн сонголтыг ашиглах (Өгөгдмөл)"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="6839647709301342559">"AAC"</item>
- <item msgid="2279916056363477395">"aptX"</item>
- <item msgid="6641171061200063516">"aptX HD"</item>
- <item msgid="7950781694447359344">"LDAC"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:6 (723675059572222462) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:7 (3304843301758635896) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (2209680154067241740) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (741805482892725657) -->
<string-array name="bluetooth_a2dp_codec_sample_rate_titles">
<item msgid="3093023430402746802">"Системийн сонголтыг ашиглах (Өгөгдмөл)"</item>
<item msgid="8895532488906185219">"44.1 кГц"</item>
diff --git a/packages/SettingsLib/res/values-mr/arrays.xml b/packages/SettingsLib/res/values-mr/arrays.xml
index 17a1b11..489a86a 100644
--- a/packages/SettingsLib/res/values-mr/arrays.xml
+++ b/packages/SettingsLib/res/values-mr/arrays.xml
@@ -68,22 +68,10 @@
<item msgid="1913619118958233129">"avrcp15"</item>
<item msgid="7142710449249088270">"avrcp16"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="7065842274271279580">"प्रणाली निवड वापरा (डीफॉल्ट)"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="686685526567131661">"AAC"</item>
- <item msgid="8910200421843557332">"aptX"</item>
- <item msgid="8434403964359457768">"aptX HD"</item>
- <item msgid="6751080638867012696">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="5062108632402595000">"प्रणाली निवड वापरा (डीफॉल्ट)"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="6839647709301342559">"AAC"</item>
- <item msgid="2279916056363477395">"aptX"</item>
- <item msgid="6641171061200063516">"aptX HD"</item>
- <item msgid="7950781694447359344">"LDAC"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:6 (723675059572222462) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:7 (3304843301758635896) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (2209680154067241740) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (741805482892725657) -->
<string-array name="bluetooth_a2dp_codec_sample_rate_titles">
<item msgid="3093023430402746802">"प्रणाली निवड वापरा (डीफॉल्ट)"</item>
<item msgid="8895532488906185219">"44.1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-ms/arrays.xml b/packages/SettingsLib/res/values-ms/arrays.xml
index a9d1561..1af9810 100644
--- a/packages/SettingsLib/res/values-ms/arrays.xml
+++ b/packages/SettingsLib/res/values-ms/arrays.xml
@@ -68,22 +68,10 @@
<item msgid="1913619118958233129">"avrcp15"</item>
<item msgid="7142710449249088270">"avrcp16"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="7065842274271279580">"Gunakan Pilihan Sistem (Lalai)"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="686685526567131661">"AAC"</item>
- <item msgid="8910200421843557332">"aptX"</item>
- <item msgid="8434403964359457768">"aptX HD"</item>
- <item msgid="6751080638867012696">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="5062108632402595000">"Gunakan Pilihan Sistem (Lalai)"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="6839647709301342559">"AAC"</item>
- <item msgid="2279916056363477395">"aptX"</item>
- <item msgid="6641171061200063516">"aptX HD"</item>
- <item msgid="7950781694447359344">"LDAC"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:6 (723675059572222462) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:7 (3304843301758635896) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (2209680154067241740) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (741805482892725657) -->
<string-array name="bluetooth_a2dp_codec_sample_rate_titles">
<item msgid="3093023430402746802">"Gunakan Pilihan Sistem (Lalai)"</item>
<item msgid="8895532488906185219">"44.1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-my/arrays.xml b/packages/SettingsLib/res/values-my/arrays.xml
index 22e91ac..81bfac6 100644
--- a/packages/SettingsLib/res/values-my/arrays.xml
+++ b/packages/SettingsLib/res/values-my/arrays.xml
@@ -68,22 +68,10 @@
<item msgid="1913619118958233129">"avrcp15"</item>
<item msgid="7142710449249088270">"avrcp16"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="7065842274271279580">"စနစ်ရွေးချယ်မှုကို အသုံးပြုပါ (မူရင်း)"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="686685526567131661">"AAC"</item>
- <item msgid="8910200421843557332">"aptX"</item>
- <item msgid="8434403964359457768">"aptX HD"</item>
- <item msgid="6751080638867012696">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="5062108632402595000">"စနစ်ရွေးချယ်မှုကို အသုံးပြုပါ (မူရင်း)"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="6839647709301342559">"AAC"</item>
- <item msgid="2279916056363477395">"aptX"</item>
- <item msgid="6641171061200063516">"aptX HD"</item>
- <item msgid="7950781694447359344">"LDAC"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:6 (723675059572222462) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:7 (3304843301758635896) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (2209680154067241740) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (741805482892725657) -->
<string-array name="bluetooth_a2dp_codec_sample_rate_titles">
<item msgid="3093023430402746802">"စနစ်ရွေးချယ်မှုကို အသုံးပြုပါ (မူရင်း)"</item>
<item msgid="8895532488906185219">"၄၄.၁ kHz"</item>
diff --git a/packages/SettingsLib/res/values-nb/arrays.xml b/packages/SettingsLib/res/values-nb/arrays.xml
index ba555bc..23e3c33 100644
--- a/packages/SettingsLib/res/values-nb/arrays.xml
+++ b/packages/SettingsLib/res/values-nb/arrays.xml
@@ -68,22 +68,10 @@
<item msgid="1913619118958233129">"avrcp15"</item>
<item msgid="7142710449249088270">"avrcp16"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="7065842274271279580">"Bruk systemvalg (standard)"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="686685526567131661">"AAC"</item>
- <item msgid="8910200421843557332">"aptX"</item>
- <item msgid="8434403964359457768">"aptX HD"</item>
- <item msgid="6751080638867012696">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="5062108632402595000">"Bruk systemvalg (standard)"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="6839647709301342559">"AAC"</item>
- <item msgid="2279916056363477395">"aptX"</item>
- <item msgid="6641171061200063516">"aptX HD"</item>
- <item msgid="7950781694447359344">"LDAC"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:6 (723675059572222462) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:7 (3304843301758635896) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (2209680154067241740) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (741805482892725657) -->
<string-array name="bluetooth_a2dp_codec_sample_rate_titles">
<item msgid="3093023430402746802">"Bruk systemvalg (standard)"</item>
<item msgid="8895532488906185219">"44,1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-ne/arrays.xml b/packages/SettingsLib/res/values-ne/arrays.xml
index d3e0cd6..25d4b20 100644
--- a/packages/SettingsLib/res/values-ne/arrays.xml
+++ b/packages/SettingsLib/res/values-ne/arrays.xml
@@ -68,22 +68,10 @@
<item msgid="1913619118958233129">"avrcp15"</item>
<item msgid="7142710449249088270">"avrcp16"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="7065842274271279580">"प्रणालीको चयन प्रयोग गर्नुहोस् (पूर्वनिर्धारित)"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="686685526567131661">"AAC"</item>
- <item msgid="8910200421843557332">"aptX"</item>
- <item msgid="8434403964359457768">"aptX HD"</item>
- <item msgid="6751080638867012696">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="5062108632402595000">"प्रणालीको चयन प्रयोग गर्नुहोस् (पूर्वनिर्धारित)"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="6839647709301342559">"AAC"</item>
- <item msgid="2279916056363477395">"aptX"</item>
- <item msgid="6641171061200063516">"aptX HD"</item>
- <item msgid="7950781694447359344">"LDAC"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:6 (723675059572222462) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:7 (3304843301758635896) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (2209680154067241740) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (741805482892725657) -->
<string-array name="bluetooth_a2dp_codec_sample_rate_titles">
<item msgid="3093023430402746802">"प्रणालीको चयन प्रयोग गर्नुहोस् (पूर्वनिर्धारित)"</item>
<item msgid="8895532488906185219">"४४.१ kHz"</item>
diff --git a/packages/SettingsLib/res/values-nl/arrays.xml b/packages/SettingsLib/res/values-nl/arrays.xml
index 1147c89..864eeae 100644
--- a/packages/SettingsLib/res/values-nl/arrays.xml
+++ b/packages/SettingsLib/res/values-nl/arrays.xml
@@ -68,22 +68,10 @@
<item msgid="1913619118958233129">"avrcp15"</item>
<item msgid="7142710449249088270">"avrcp16"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="7065842274271279580">"Systeemselectie gebruiken (standaard)"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="686685526567131661">"AAC"</item>
- <item msgid="8910200421843557332">"aptX"</item>
- <item msgid="8434403964359457768">"aptX HD"</item>
- <item msgid="6751080638867012696">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="5062108632402595000">"Systeemselectie gebruiken (standaard)"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="6839647709301342559">"AAC"</item>
- <item msgid="2279916056363477395">"aptX"</item>
- <item msgid="6641171061200063516">"aptX HD"</item>
- <item msgid="7950781694447359344">"LDAC"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:6 (723675059572222462) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:7 (3304843301758635896) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (2209680154067241740) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (741805482892725657) -->
<string-array name="bluetooth_a2dp_codec_sample_rate_titles">
<item msgid="3093023430402746802">"Systeemselectie gebruiken (standaard)"</item>
<item msgid="8895532488906185219">"44,1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-pa/arrays.xml b/packages/SettingsLib/res/values-pa/arrays.xml
index 7454776..6375576 100644
--- a/packages/SettingsLib/res/values-pa/arrays.xml
+++ b/packages/SettingsLib/res/values-pa/arrays.xml
@@ -68,22 +68,10 @@
<item msgid="1913619118958233129">"avrcp15"</item>
<item msgid="7142710449249088270">"avrcp16"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="7065842274271279580">"ਸਿਸਟਮ ਚੋਣ ਦੀ ਵਰਤੋਂ ਕਰੋ (ਪੂਰਵ-ਨਿਰਧਾਰਤ)"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="686685526567131661">"AAC"</item>
- <item msgid="8910200421843557332">"aptX"</item>
- <item msgid="8434403964359457768">"aptX HD"</item>
- <item msgid="6751080638867012696">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="5062108632402595000">"ਸਿਸਟਮ ਚੋਣ ਦੀ ਵਰਤੋਂ ਕਰੋ (ਪੂਰਵ-ਨਿਰਧਾਰਤ)"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="6839647709301342559">"AAC"</item>
- <item msgid="2279916056363477395">"aptX"</item>
- <item msgid="6641171061200063516">"aptX HD"</item>
- <item msgid="7950781694447359344">"LDAC"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:6 (723675059572222462) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:7 (3304843301758635896) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (2209680154067241740) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (741805482892725657) -->
<string-array name="bluetooth_a2dp_codec_sample_rate_titles">
<item msgid="3093023430402746802">"ਸਿਸਟਮ ਚੋਣ ਦੀ ਵਰਤੋਂ ਕਰੋ (ਪੂਰਵ-ਨਿਰਧਾਰਤ)"</item>
<item msgid="8895532488906185219">"44.1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-pl/arrays.xml b/packages/SettingsLib/res/values-pl/arrays.xml
index ca0a60d..f0d99bb 100644
--- a/packages/SettingsLib/res/values-pl/arrays.xml
+++ b/packages/SettingsLib/res/values-pl/arrays.xml
@@ -68,22 +68,10 @@
<item msgid="1913619118958233129">"avrcp15"</item>
<item msgid="7142710449249088270">"avrcp16"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="7065842274271279580">"Użyj wyboru systemu (domyślnie)"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="686685526567131661">"AAC"</item>
- <item msgid="8910200421843557332">"aptX"</item>
- <item msgid="8434403964359457768">"aptX HD"</item>
- <item msgid="6751080638867012696">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="5062108632402595000">"Użyj wyboru systemu (domyślnie)"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="6839647709301342559">"AAC"</item>
- <item msgid="2279916056363477395">"aptX"</item>
- <item msgid="6641171061200063516">"aptX HD"</item>
- <item msgid="7950781694447359344">"LDAC"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:6 (723675059572222462) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:7 (3304843301758635896) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (2209680154067241740) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (741805482892725657) -->
<string-array name="bluetooth_a2dp_codec_sample_rate_titles">
<item msgid="3093023430402746802">"Użyj wyboru systemu (domyślnie)"</item>
<item msgid="8895532488906185219">"44,1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-pt-rBR/arrays.xml b/packages/SettingsLib/res/values-pt-rBR/arrays.xml
index 7b17e6c..22af07b 100644
--- a/packages/SettingsLib/res/values-pt-rBR/arrays.xml
+++ b/packages/SettingsLib/res/values-pt-rBR/arrays.xml
@@ -68,22 +68,10 @@
<item msgid="1913619118958233129">"avrcp15"</item>
<item msgid="7142710449249088270">"avrcp16"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="7065842274271279580">"Usar seleção do sistema (padrão)"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="686685526567131661">"AAC"</item>
- <item msgid="8910200421843557332">"aptX"</item>
- <item msgid="8434403964359457768">"aptX HD"</item>
- <item msgid="6751080638867012696">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="5062108632402595000">"Usar seleção do sistema (padrão)"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="6839647709301342559">"AAC"</item>
- <item msgid="2279916056363477395">"aptX"</item>
- <item msgid="6641171061200063516">"aptX HD"</item>
- <item msgid="7950781694447359344">"LDAC"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:6 (723675059572222462) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:7 (3304843301758635896) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (2209680154067241740) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (741805482892725657) -->
<string-array name="bluetooth_a2dp_codec_sample_rate_titles">
<item msgid="3093023430402746802">"Usar seleção do sistema (padrão)"</item>
<item msgid="8895532488906185219">"44,1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-pt-rPT/arrays.xml b/packages/SettingsLib/res/values-pt-rPT/arrays.xml
index a575480..4cd7359 100644
--- a/packages/SettingsLib/res/values-pt-rPT/arrays.xml
+++ b/packages/SettingsLib/res/values-pt-rPT/arrays.xml
@@ -68,22 +68,10 @@
<item msgid="1913619118958233129">"avrcp15"</item>
<item msgid="7142710449249088270">"avrcp16"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="7065842274271279580">"Utilizar seleção do sistema (predef.)"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="686685526567131661">"AAC"</item>
- <item msgid="8910200421843557332">"aptX"</item>
- <item msgid="8434403964359457768">"aptX HD"</item>
- <item msgid="6751080638867012696">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="5062108632402595000">"Utilizar seleção do sistema (predef.)"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="6839647709301342559">"AAC"</item>
- <item msgid="2279916056363477395">"aptX"</item>
- <item msgid="6641171061200063516">"aptX HD"</item>
- <item msgid="7950781694447359344">"LDAC"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:6 (723675059572222462) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:7 (3304843301758635896) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (2209680154067241740) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (741805482892725657) -->
<string-array name="bluetooth_a2dp_codec_sample_rate_titles">
<item msgid="3093023430402746802">"Utilizar seleção do sistema (predef.)"</item>
<item msgid="8895532488906185219">"44,1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-pt/arrays.xml b/packages/SettingsLib/res/values-pt/arrays.xml
index 7b17e6c..22af07b 100644
--- a/packages/SettingsLib/res/values-pt/arrays.xml
+++ b/packages/SettingsLib/res/values-pt/arrays.xml
@@ -68,22 +68,10 @@
<item msgid="1913619118958233129">"avrcp15"</item>
<item msgid="7142710449249088270">"avrcp16"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="7065842274271279580">"Usar seleção do sistema (padrão)"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="686685526567131661">"AAC"</item>
- <item msgid="8910200421843557332">"aptX"</item>
- <item msgid="8434403964359457768">"aptX HD"</item>
- <item msgid="6751080638867012696">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="5062108632402595000">"Usar seleção do sistema (padrão)"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="6839647709301342559">"AAC"</item>
- <item msgid="2279916056363477395">"aptX"</item>
- <item msgid="6641171061200063516">"aptX HD"</item>
- <item msgid="7950781694447359344">"LDAC"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:6 (723675059572222462) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:7 (3304843301758635896) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (2209680154067241740) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (741805482892725657) -->
<string-array name="bluetooth_a2dp_codec_sample_rate_titles">
<item msgid="3093023430402746802">"Usar seleção do sistema (padrão)"</item>
<item msgid="8895532488906185219">"44,1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-ro/arrays.xml b/packages/SettingsLib/res/values-ro/arrays.xml
index 8ff8eb9..47e318c 100644
--- a/packages/SettingsLib/res/values-ro/arrays.xml
+++ b/packages/SettingsLib/res/values-ro/arrays.xml
@@ -68,22 +68,10 @@
<item msgid="1913619118958233129">"avrcp15"</item>
<item msgid="7142710449249088270">"avrcp16"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="7065842274271279580">"Folosiți selectarea sist. (prestabilit)"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="686685526567131661">"AAC"</item>
- <item msgid="8910200421843557332">"aptX"</item>
- <item msgid="8434403964359457768">"aptX HD"</item>
- <item msgid="6751080638867012696">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="5062108632402595000">"Folosiți selectarea sist. (prestabilit)"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="6839647709301342559">"AAC"</item>
- <item msgid="2279916056363477395">"aptX"</item>
- <item msgid="6641171061200063516">"aptX HD"</item>
- <item msgid="7950781694447359344">"LDAC"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:6 (723675059572222462) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:7 (3304843301758635896) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (2209680154067241740) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (741805482892725657) -->
<string-array name="bluetooth_a2dp_codec_sample_rate_titles">
<item msgid="3093023430402746802">"Folosiți selectarea sist. (prestabilit)"</item>
<item msgid="8895532488906185219">"44,1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-ru/arrays.xml b/packages/SettingsLib/res/values-ru/arrays.xml
index 0a7f8ac..67bac8a 100644
--- a/packages/SettingsLib/res/values-ru/arrays.xml
+++ b/packages/SettingsLib/res/values-ru/arrays.xml
@@ -68,22 +68,10 @@
<item msgid="1913619118958233129">"avrcp15"</item>
<item msgid="7142710449249088270">"avrcp16"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="7065842274271279580">"Выбор системы (по умолчанию)"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="686685526567131661">"AAC"</item>
- <item msgid="8910200421843557332">"aptX"</item>
- <item msgid="8434403964359457768">"aptX HD"</item>
- <item msgid="6751080638867012696">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="5062108632402595000">"Выбор системы (по умолчанию)"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="6839647709301342559">"AAC"</item>
- <item msgid="2279916056363477395">"aptX"</item>
- <item msgid="6641171061200063516">"aptX HD"</item>
- <item msgid="7950781694447359344">"LDAC"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:6 (723675059572222462) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:7 (3304843301758635896) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (2209680154067241740) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (741805482892725657) -->
<string-array name="bluetooth_a2dp_codec_sample_rate_titles">
<item msgid="3093023430402746802">"Выбор системы (по умолчанию)"</item>
<item msgid="8895532488906185219">"44,1 кГц"</item>
diff --git a/packages/SettingsLib/res/values-si/arrays.xml b/packages/SettingsLib/res/values-si/arrays.xml
index 89b9e80..dca050a 100644
--- a/packages/SettingsLib/res/values-si/arrays.xml
+++ b/packages/SettingsLib/res/values-si/arrays.xml
@@ -68,22 +68,10 @@
<item msgid="1913619118958233129">"avrcp15"</item>
<item msgid="7142710449249088270">"avrcp16"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="7065842274271279580">"පද්ධති තේරීම භාවිත කරන්න (පෙරනිමි)"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="686685526567131661">"AAC"</item>
- <item msgid="8910200421843557332">"aptX"</item>
- <item msgid="8434403964359457768">"aptX HD"</item>
- <item msgid="6751080638867012696">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="5062108632402595000">"පද්ධති තේරීම භාවිත කරන්න (පෙරනිමි)"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="6839647709301342559">"AAC"</item>
- <item msgid="2279916056363477395">"aptX"</item>
- <item msgid="6641171061200063516">"aptX HD"</item>
- <item msgid="7950781694447359344">"LDAC"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:6 (723675059572222462) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:7 (3304843301758635896) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (2209680154067241740) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (741805482892725657) -->
<string-array name="bluetooth_a2dp_codec_sample_rate_titles">
<item msgid="3093023430402746802">"පද්ධති තේරීම භාවිත කරන්න (පෙරනිමි)"</item>
<item msgid="8895532488906185219">"44.1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-sk/arrays.xml b/packages/SettingsLib/res/values-sk/arrays.xml
index a1c8c31..53e9340 100644
--- a/packages/SettingsLib/res/values-sk/arrays.xml
+++ b/packages/SettingsLib/res/values-sk/arrays.xml
@@ -68,22 +68,10 @@
<item msgid="1913619118958233129">"avrcp15"</item>
<item msgid="7142710449249088270">"avrcp16"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="7065842274271279580">"Použiť voľbu systému (predvolené)"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="686685526567131661">"AAC"</item>
- <item msgid="8910200421843557332">"aptX"</item>
- <item msgid="8434403964359457768">"aptX HD"</item>
- <item msgid="6751080638867012696">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="5062108632402595000">"Použiť voľbu systému (predvolené)"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="6839647709301342559">"AAC"</item>
- <item msgid="2279916056363477395">"aptX"</item>
- <item msgid="6641171061200063516">"aptX HD"</item>
- <item msgid="7950781694447359344">"LDAC"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:6 (723675059572222462) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:7 (3304843301758635896) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (2209680154067241740) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (741805482892725657) -->
<string-array name="bluetooth_a2dp_codec_sample_rate_titles">
<item msgid="3093023430402746802">"Použiť voľbu systému (predvolené)"</item>
<item msgid="8895532488906185219">"44,1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-sl/arrays.xml b/packages/SettingsLib/res/values-sl/arrays.xml
index 4438fdc..54e5194 100644
--- a/packages/SettingsLib/res/values-sl/arrays.xml
+++ b/packages/SettingsLib/res/values-sl/arrays.xml
@@ -68,22 +68,10 @@
<item msgid="1913619118958233129">"avrcp15"</item>
<item msgid="7142710449249088270">"avrcp16"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="7065842274271279580">"Uporabi sistemsko izbiro (privzeto)"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="686685526567131661">"AAC"</item>
- <item msgid="8910200421843557332">"aptX"</item>
- <item msgid="8434403964359457768">"aptX HD"</item>
- <item msgid="6751080638867012696">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="5062108632402595000">"Uporabi sistemsko izbiro (privzeto)"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="6839647709301342559">"AAC"</item>
- <item msgid="2279916056363477395">"aptX"</item>
- <item msgid="6641171061200063516">"aptX HD"</item>
- <item msgid="7950781694447359344">"LDAC"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:6 (723675059572222462) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:7 (3304843301758635896) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (2209680154067241740) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (741805482892725657) -->
<string-array name="bluetooth_a2dp_codec_sample_rate_titles">
<item msgid="3093023430402746802">"Uporabi sistemsko izbiro (privzeto)"</item>
<item msgid="8895532488906185219">"44,1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-sq/arrays.xml b/packages/SettingsLib/res/values-sq/arrays.xml
index 62bf99b..0e615ee 100644
--- a/packages/SettingsLib/res/values-sq/arrays.xml
+++ b/packages/SettingsLib/res/values-sq/arrays.xml
@@ -68,22 +68,10 @@
<item msgid="1913619118958233129">"avrcp15"</item>
<item msgid="7142710449249088270">"avrcp16"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="7065842274271279580">"Përdor përzgjedhjen e sistemit (e parazgjedhur)"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="686685526567131661">"AAC"</item>
- <item msgid="8910200421843557332">"aptX"</item>
- <item msgid="8434403964359457768">"aptX HD"</item>
- <item msgid="6751080638867012696">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="5062108632402595000">"Përdor përzgjedhjen e sistemit (e parazgjedhur)"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="6839647709301342559">"AAC"</item>
- <item msgid="2279916056363477395">"aptX"</item>
- <item msgid="6641171061200063516">"aptX HD"</item>
- <item msgid="7950781694447359344">"LDAC"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:6 (723675059572222462) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:7 (3304843301758635896) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (2209680154067241740) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (741805482892725657) -->
<string-array name="bluetooth_a2dp_codec_sample_rate_titles">
<item msgid="3093023430402746802">"Përdor përzgjedhjen e sistemit (e parazgjedhur)"</item>
<item msgid="8895532488906185219">"44,1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-sr/arrays.xml b/packages/SettingsLib/res/values-sr/arrays.xml
index 147f3db..c550420 100644
--- a/packages/SettingsLib/res/values-sr/arrays.xml
+++ b/packages/SettingsLib/res/values-sr/arrays.xml
@@ -68,22 +68,10 @@
<item msgid="1913619118958233129">"avrcp15"</item>
<item msgid="7142710449249088270">"avrcp16"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="7065842274271279580">"Користи избор система (подразумевано)"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="686685526567131661">"AAC"</item>
- <item msgid="8910200421843557332">"aptX"</item>
- <item msgid="8434403964359457768">"aptX HD"</item>
- <item msgid="6751080638867012696">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="5062108632402595000">"Користи избор система (подразумевано)"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="6839647709301342559">"AAC"</item>
- <item msgid="2279916056363477395">"aptX"</item>
- <item msgid="6641171061200063516">"aptX HD"</item>
- <item msgid="7950781694447359344">"LDAC"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:6 (723675059572222462) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:7 (3304843301758635896) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (2209680154067241740) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (741805482892725657) -->
<string-array name="bluetooth_a2dp_codec_sample_rate_titles">
<item msgid="3093023430402746802">"Користи избор система (подразумевано)"</item>
<item msgid="8895532488906185219">"44,1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-sv/arrays.xml b/packages/SettingsLib/res/values-sv/arrays.xml
index ea96617..f2bb2a8 100644
--- a/packages/SettingsLib/res/values-sv/arrays.xml
+++ b/packages/SettingsLib/res/values-sv/arrays.xml
@@ -68,22 +68,10 @@
<item msgid="1913619118958233129">"avrcp15"</item>
<item msgid="7142710449249088270">"avrcp16"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="7065842274271279580">"Använd systemval (standardinställning)"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="686685526567131661">"AAC"</item>
- <item msgid="8910200421843557332">"aptX"</item>
- <item msgid="8434403964359457768">"aptX HD"</item>
- <item msgid="6751080638867012696">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="5062108632402595000">"Använd systemval (standardinställning)"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="6839647709301342559">"AAC"</item>
- <item msgid="2279916056363477395">"aptX"</item>
- <item msgid="6641171061200063516">"aptX HD"</item>
- <item msgid="7950781694447359344">"LDAC"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:6 (723675059572222462) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:7 (3304843301758635896) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (2209680154067241740) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (741805482892725657) -->
<string-array name="bluetooth_a2dp_codec_sample_rate_titles">
<item msgid="3093023430402746802">"Använd systemval (standardinställning)"</item>
<item msgid="8895532488906185219">"44,1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-sw/arrays.xml b/packages/SettingsLib/res/values-sw/arrays.xml
index 7a2d277..4d5a80d 100644
--- a/packages/SettingsLib/res/values-sw/arrays.xml
+++ b/packages/SettingsLib/res/values-sw/arrays.xml
@@ -68,22 +68,10 @@
<item msgid="1913619118958233129">"avrcp15"</item>
<item msgid="7142710449249088270">"avrcp16"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="7065842274271279580">"Tumia Uteuzi wa Mfumo (Chaguo-msingi)"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="686685526567131661">"AAC"</item>
- <item msgid="8910200421843557332">"aptX"</item>
- <item msgid="8434403964359457768">"aptX HD"</item>
- <item msgid="6751080638867012696">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="5062108632402595000">"Tumia Uteuzi wa Mfumo (Chaguo-msingi)"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="6839647709301342559">"AAC"</item>
- <item msgid="2279916056363477395">"aptX"</item>
- <item msgid="6641171061200063516">"aptX HD"</item>
- <item msgid="7950781694447359344">"LDAC"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:6 (723675059572222462) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:7 (3304843301758635896) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (2209680154067241740) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (741805482892725657) -->
<string-array name="bluetooth_a2dp_codec_sample_rate_titles">
<item msgid="3093023430402746802">"Tumia Uteuzi wa Mfumo (Chaguo-msingi)"</item>
<item msgid="8895532488906185219">"kHz 44.1"</item>
diff --git a/packages/SettingsLib/res/values-ta/arrays.xml b/packages/SettingsLib/res/values-ta/arrays.xml
index 1dfcc4d..5eca7b7 100644
--- a/packages/SettingsLib/res/values-ta/arrays.xml
+++ b/packages/SettingsLib/res/values-ta/arrays.xml
@@ -58,28 +58,20 @@
<item msgid="3878793616631049349">"DRM உள்ளடக்கத்திற்கு மட்டும் HDCP சோதனையைப் பயன்படுத்து"</item>
<item msgid="45075631231212732">"HDCP சரிபார்ப்பை எப்போதும் பயன்படுத்து"</item>
</string-array>
- <!-- no translation found for bluetooth_avrcp_versions:0 (5347678900838034763) -->
- <!-- no translation found for bluetooth_avrcp_versions:1 (2089555299377409443) -->
- <!-- no translation found for bluetooth_avrcp_versions:2 (2895327394279434278) -->
- <!-- no translation found for bluetooth_avrcp_version_values:0 (2838624067805073303) -->
- <!-- no translation found for bluetooth_avrcp_version_values:1 (1913619118958233129) -->
- <!-- no translation found for bluetooth_avrcp_version_values:2 (7142710449249088270) -->
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="7065842274271279580">"சாதனத் தேர்வைப் பயன்படுத்து (இயல்பு)"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="686685526567131661">"AAC"</item>
- <item msgid="8910200421843557332">"aptX"</item>
- <item msgid="8434403964359457768">"aptX HD"</item>
- <item msgid="6751080638867012696">"LDAC"</item>
+ <string-array name="bluetooth_avrcp_versions">
+ <item msgid="5347678900838034763">"AVRCP 1.4 (இயல்பு)"</item>
+ <item msgid="2089555299377409443">"AVRCP 1.5"</item>
+ <item msgid="2895327394279434278">"AVRCP 1.6"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="5062108632402595000">"சாதனத் தேர்வைப் பயன்படுத்து (இயல்பு)"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="6839647709301342559">"AAC"</item>
- <item msgid="2279916056363477395">"aptX"</item>
- <item msgid="6641171061200063516">"aptX HD"</item>
- <item msgid="7950781694447359344">"LDAC"</item>
+ <string-array name="bluetooth_avrcp_version_values">
+ <item msgid="2838624067805073303">"avrcp14"</item>
+ <item msgid="1913619118958233129">"avrcp15"</item>
+ <item msgid="7142710449249088270">"avrcp16"</item>
</string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:6 (723675059572222462) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:7 (3304843301758635896) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (2209680154067241740) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (741805482892725657) -->
<string-array name="bluetooth_a2dp_codec_sample_rate_titles">
<item msgid="3093023430402746802">"சாதனத் தேர்வைப் பயன்படுத்து (இயல்பு)"</item>
<item msgid="8895532488906185219">"44.1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-ta/strings.xml b/packages/SettingsLib/res/values-ta/strings.xml
index 5c0cd9f..53bb172 100644
--- a/packages/SettingsLib/res/values-ta/strings.xml
+++ b/packages/SettingsLib/res/values-ta/strings.xml
@@ -32,8 +32,7 @@
<string name="wifi_no_internet_no_reconnect" msgid="5724903347310541706">"தானாக இணைக்கப்படாது"</string>
<string name="wifi_no_internet" msgid="3880396223819116454">"இணைய அணுகல் இல்லை"</string>
<string name="saved_network" msgid="4352716707126620811">"<xliff:g id="NAME">%1$s</xliff:g> சேமித்தது"</string>
- <!-- no translation found for connected_via_network_scorer (5713793306870815341) -->
- <skip />
+ <string name="connected_via_network_scorer" msgid="5713793306870815341">"%1$s மூலம் தானாக இணைக்கப்பட்டது"</string>
<!-- no translation found for connected_via_network_scorer_default (7867260222020343104) -->
<skip />
<string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s வழியாக இணைக்கப்பட்டது"</string>
@@ -171,16 +170,12 @@
<string name="debug_networking_category" msgid="7044075693643009662">"நெட்வொர்க்கிங்"</string>
<string name="wifi_display_certification" msgid="8611569543791307533">"வயர்லெஸ் காட்சிக்கான சான்றிதழ்"</string>
<string name="wifi_verbose_logging" msgid="4203729756047242344">"வைஃபை அதிவிவர நுழைவை இயக்கு"</string>
- <!-- no translation found for wifi_aggressive_handover (5309131983693661320) -->
- <skip />
+ <string name="wifi_aggressive_handover" msgid="5309131983693661320">"ஒத்துழைக்காத வைஃபையிலிருந்து மொபைல் தரவிற்கு மாறு"</string>
<string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"எப்போதும் வைஃபை ரோமிங் ஸ்கேன்களை அனுமதி"</string>
- <!-- no translation found for mobile_data_always_on (8774857027458200434) -->
- <skip />
+ <string name="mobile_data_always_on" msgid="8774857027458200434">"மொபைல் தரவை எப்போதும் இயக்கத்திலேயே வை"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"அப்சல்யூட் ஒலியளவு அம்சத்தை முடக்கு"</string>
- <!-- no translation found for bluetooth_select_avrcp_version_string (3750059931120293633) -->
- <skip />
- <!-- no translation found for bluetooth_select_avrcp_version_dialog_title (7277329668298705702) -->
- <skip />
+ <string name="bluetooth_select_avrcp_version_string" msgid="3750059931120293633">"புளூடூத் AVRCP பதிப்பு"</string>
+ <string name="bluetooth_select_avrcp_version_dialog_title" msgid="7277329668298705702">"புளூடூத் AVRCP பதிப்பைத் தேர்ந்தெடு"</string>
<string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"புளூடூத் ஆடியோ கோடெக்"</string>
<string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="4558347981670553665">"புளூடூத் ஆடியோ கோடெக்கைத் தேர்ந்தெடுக்கவும்"</string>
<string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"புளூடூத் ஆடியோ சாம்பிள் ரேட்"</string>
@@ -194,8 +189,7 @@
<string name="bluetooth_select_a2dp_codec_streaming_label" msgid="5347862512596240506">"ஸ்ட்ரீமிங்: <xliff:g id="STREAMING_PARAMETER">%1$s</xliff:g>"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"வயர்லெஸ் காட்சி சான்றுக்கான விருப்பங்களைக் காட்டு"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Wifi நுழைவு அளவை அதிகரித்து, வைஃபை தேர்வியில் ஒவ்வொன்றிற்கும் SSID RSSI ஐ காட்டுக"</string>
- <!-- no translation found for wifi_aggressive_handover_summary (7266329646559808827) -->
- <skip />
+ <string name="wifi_aggressive_handover_summary" msgid="7266329646559808827">"இயக்கப்பட்டதும், வைஃபை சிக்னல் குறையும் போது, வைஃபை முழுமையாக ஒத்துழைக்காமல் இருந்தால் மொபைல் தரவிற்கு மாறும்"</string>
<string name="wifi_allow_scan_with_traffic_summary" msgid="2575101424972686310">"இடைமுகத்தில் உள்ள ட்ராஃபிக் தரவின் அளவைப் பொறுத்து வைஃபை ரோமிங் ஸ்கேன்களை அனுமதி/அனுமதிக்காதே"</string>
<string name="select_logd_size_title" msgid="7433137108348553508">"லாகர் பஃபர் அளவுகள்"</string>
<string name="select_logd_size_dialog_title" msgid="1206769310236476760">"லாக் பஃபர் ஒன்றிற்கு லாகர் அளவுகளைத் தேர்வுசெய்க"</string>
@@ -326,21 +320,16 @@
<string name="daltonizer_type_overridden" msgid="3116947244410245916">"<xliff:g id="TITLE">%1$s</xliff:g> மூலம் மேலெழுதப்பட்டது"</string>
<string name="power_remaining_duration_only" msgid="4400068916452346544">"தோராயமாக <xliff:g id="TIME">%1$s</xliff:g> உள்ளது"</string>
<string name="power_remaining_duration_only_short" msgid="5329694252258605547">"<xliff:g id="TIME">%1$s</xliff:g> மீதமுள்ளது"</string>
- <!-- no translation found for power_discharging_duration (2843747179907396142) -->
- <skip />
+ <string name="power_discharging_duration" msgid="2843747179907396142">"<xliff:g id="LEVEL">%1$s</xliff:g> - கிட்டத்தட்ட <xliff:g id="TIME">%2$s</xliff:g> மீதமுள்ளது"</string>
<string name="power_discharging_duration_short" msgid="4192244429001842403">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="TIME">%2$s</xliff:g> மீதமுள்ளது"</string>
<string name="power_charging" msgid="1779532561355864267">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATE">%2$s</xliff:g>"</string>
- <!-- no translation found for power_charging_duration (4676999980973411875) -->
- <skip />
+ <string name="power_charging_duration" msgid="4676999980973411875">"<xliff:g id="LEVEL">%1$s</xliff:g> - முழு சார்ஜாக <xliff:g id="TIME">%2$s</xliff:g> ஆகும்"</string>
<string name="power_charging_duration_short" msgid="1098603958472207920">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="TIME">%2$s</xliff:g>"</string>
- <!-- no translation found for power_charging_duration_ac (7341243578143555689) -->
- <skip />
+ <string name="power_charging_duration_ac" msgid="7341243578143555689">"<xliff:g id="LEVEL">%1$s</xliff:g> - AC இல் முழு சார்ஜாக <xliff:g id="TIME">%2$s</xliff:g> ஆகும்"</string>
<string name="power_charging_duration_ac_short" msgid="7895864687218765582">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="TIME">%2$s</xliff:g>"</string>
- <!-- no translation found for power_charging_duration_usb (3720632890882121805) -->
- <skip />
+ <string name="power_charging_duration_usb" msgid="3720632890882121805">"<xliff:g id="LEVEL">%1$s</xliff:g> - USB மூலம் முழு சார்ஜாக <xliff:g id="TIME">%2$s</xliff:g> ஆகும்"</string>
<string name="power_charging_duration_usb_short" msgid="941854728040426399">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="TIME">%2$s</xliff:g>"</string>
- <!-- no translation found for power_charging_duration_wireless (5768338238751562058) -->
- <skip />
+ <string name="power_charging_duration_wireless" msgid="5768338238751562058">"<xliff:g id="LEVEL">%1$s</xliff:g> - வயர்லெஸ் மூலம் முழு சார்ஜாக <xliff:g id="TIME">%2$s</xliff:g> ஆகும்"</string>
<string name="power_charging_duration_wireless_short" msgid="1642664799869599476">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="TIME">%2$s</xliff:g>"</string>
<string name="battery_info_status_unknown" msgid="196130600938058547">"அறியப்படாத"</string>
<string name="battery_info_status_charging" msgid="1705179948350365604">"சார்ஜ் ஏற்றப்படுகிறது"</string>
diff --git a/packages/SettingsLib/res/values-te/arrays.xml b/packages/SettingsLib/res/values-te/arrays.xml
index 87919d2..554ca11 100644
--- a/packages/SettingsLib/res/values-te/arrays.xml
+++ b/packages/SettingsLib/res/values-te/arrays.xml
@@ -68,22 +68,10 @@
<item msgid="1913619118958233129">"avrcp15"</item>
<item msgid="7142710449249088270">"avrcp16"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="7065842274271279580">"సిస్టమ్ ఎంపికను ఉపయోగించండి (డిఫాల్ట్)"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="686685526567131661">"AAC"</item>
- <item msgid="8910200421843557332">"aptX"</item>
- <item msgid="8434403964359457768">"aptX HD"</item>
- <item msgid="6751080638867012696">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="5062108632402595000">"సిస్టమ్ ఎంపికను ఉపయోగించండి (డిఫాల్ట్)"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="6839647709301342559">"AAC"</item>
- <item msgid="2279916056363477395">"aptX"</item>
- <item msgid="6641171061200063516">"aptX HD"</item>
- <item msgid="7950781694447359344">"LDAC"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:6 (723675059572222462) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:7 (3304843301758635896) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (2209680154067241740) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (741805482892725657) -->
<string-array name="bluetooth_a2dp_codec_sample_rate_titles">
<item msgid="3093023430402746802">"సిస్టమ్ ఎంపికను ఉపయోగించండి (డిఫాల్ట్)"</item>
<item msgid="8895532488906185219">"44.1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-th/arrays.xml b/packages/SettingsLib/res/values-th/arrays.xml
index fc3fd97..e322122 100644
--- a/packages/SettingsLib/res/values-th/arrays.xml
+++ b/packages/SettingsLib/res/values-th/arrays.xml
@@ -68,22 +68,10 @@
<item msgid="1913619118958233129">"avrcp15"</item>
<item msgid="7142710449249088270">"avrcp16"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="7065842274271279580">"ใช้การเลือกระบบ (ค่าเริ่มต้น)"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="686685526567131661">"AAC"</item>
- <item msgid="8910200421843557332">"aptX"</item>
- <item msgid="8434403964359457768">"aptX HD"</item>
- <item msgid="6751080638867012696">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="5062108632402595000">"ใช้การเลือกระบบ (ค่าเริ่มต้น)"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="6839647709301342559">"AAC"</item>
- <item msgid="2279916056363477395">"aptX"</item>
- <item msgid="6641171061200063516">"aptX HD"</item>
- <item msgid="7950781694447359344">"LDAC"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:6 (723675059572222462) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:7 (3304843301758635896) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (2209680154067241740) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (741805482892725657) -->
<string-array name="bluetooth_a2dp_codec_sample_rate_titles">
<item msgid="3093023430402746802">"ใช้การเลือกระบบ (ค่าเริ่มต้น)"</item>
<item msgid="8895532488906185219">"44.1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-tl/arrays.xml b/packages/SettingsLib/res/values-tl/arrays.xml
index 414fca9..e7df487 100644
--- a/packages/SettingsLib/res/values-tl/arrays.xml
+++ b/packages/SettingsLib/res/values-tl/arrays.xml
@@ -68,22 +68,10 @@
<item msgid="1913619118958233129">"avrcp15"</item>
<item msgid="7142710449249088270">"avrcp16"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="7065842274271279580">"Gamitin ang Pagpili ng System (Default)"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="686685526567131661">"AAC"</item>
- <item msgid="8910200421843557332">"aptX"</item>
- <item msgid="8434403964359457768">"aptX HD"</item>
- <item msgid="6751080638867012696">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="5062108632402595000">"Gamitin ang Pagpili ng System (Default)"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="6839647709301342559">"AAC"</item>
- <item msgid="2279916056363477395">"aptX"</item>
- <item msgid="6641171061200063516">"aptX HD"</item>
- <item msgid="7950781694447359344">"LDAC"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:6 (723675059572222462) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:7 (3304843301758635896) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (2209680154067241740) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (741805482892725657) -->
<string-array name="bluetooth_a2dp_codec_sample_rate_titles">
<item msgid="3093023430402746802">"Gamitin ang Pagpili ng System (Default)"</item>
<item msgid="8895532488906185219">"44.1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-tr/arrays.xml b/packages/SettingsLib/res/values-tr/arrays.xml
index aea0525..0f56479 100644
--- a/packages/SettingsLib/res/values-tr/arrays.xml
+++ b/packages/SettingsLib/res/values-tr/arrays.xml
@@ -68,22 +68,10 @@
<item msgid="1913619118958233129">"avrcp15"</item>
<item msgid="7142710449249088270">"avrcp16"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="7065842274271279580">"Sistem Seçimini Kullan (Varsayılan)"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="686685526567131661">"AAC"</item>
- <item msgid="8910200421843557332">"aptX"</item>
- <item msgid="8434403964359457768">"aptX HD"</item>
- <item msgid="6751080638867012696">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="5062108632402595000">"Sistem Seçimini Kullan (Varsayılan)"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="6839647709301342559">"AAC"</item>
- <item msgid="2279916056363477395">"aptX"</item>
- <item msgid="6641171061200063516">"aptX HD"</item>
- <item msgid="7950781694447359344">"LDAC"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:6 (723675059572222462) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:7 (3304843301758635896) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (2209680154067241740) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (741805482892725657) -->
<string-array name="bluetooth_a2dp_codec_sample_rate_titles">
<item msgid="3093023430402746802">"Sistem Seçimini Kullan (Varsayılan)"</item>
<item msgid="8895532488906185219">"44,1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-uk/arrays.xml b/packages/SettingsLib/res/values-uk/arrays.xml
index 6bbae3d..5a286f0 100644
--- a/packages/SettingsLib/res/values-uk/arrays.xml
+++ b/packages/SettingsLib/res/values-uk/arrays.xml
@@ -68,22 +68,10 @@
<item msgid="1913619118958233129">"avrcp15"</item>
<item msgid="7142710449249088270">"avrcp16"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="7065842274271279580">"Використовувати вибір системи (за умовчанням)"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="686685526567131661">"AAC"</item>
- <item msgid="8910200421843557332">"aptX"</item>
- <item msgid="8434403964359457768">"aptX HD"</item>
- <item msgid="6751080638867012696">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="5062108632402595000">"Використовувати вибір системи (за умовчанням)"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="6839647709301342559">"AAC"</item>
- <item msgid="2279916056363477395">"aptX"</item>
- <item msgid="6641171061200063516">"aptX HD"</item>
- <item msgid="7950781694447359344">"LDAC"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:6 (723675059572222462) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:7 (3304843301758635896) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (2209680154067241740) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (741805482892725657) -->
<string-array name="bluetooth_a2dp_codec_sample_rate_titles">
<item msgid="3093023430402746802">"Використовувати вибір системи (за умовчанням)"</item>
<item msgid="8895532488906185219">"44,1 кГц"</item>
diff --git a/packages/SettingsLib/res/values-ur/arrays.xml b/packages/SettingsLib/res/values-ur/arrays.xml
index 432a6dc..986390c 100644
--- a/packages/SettingsLib/res/values-ur/arrays.xml
+++ b/packages/SettingsLib/res/values-ur/arrays.xml
@@ -68,22 +68,10 @@
<item msgid="1913619118958233129">"avrcp15"</item>
<item msgid="7142710449249088270">"avrcp16"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="7065842274271279580">"سسٹم انتخاب کا استعمال کریں (ڈیفالٹ)"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="686685526567131661">"AAC"</item>
- <item msgid="8910200421843557332">"aptX"</item>
- <item msgid="8434403964359457768">"aptX HD"</item>
- <item msgid="6751080638867012696">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="5062108632402595000">"سسٹم انتخاب کا استعمال کریں (ڈیفالٹ)"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="6839647709301342559">"AAC"</item>
- <item msgid="2279916056363477395">"aptX"</item>
- <item msgid="6641171061200063516">"aptX HD"</item>
- <item msgid="7950781694447359344">"LDAC"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:6 (723675059572222462) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:7 (3304843301758635896) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (2209680154067241740) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (741805482892725657) -->
<string-array name="bluetooth_a2dp_codec_sample_rate_titles">
<item msgid="3093023430402746802">"سسٹم انتخاب کا استعمال کریں (ڈیفالٹ)"</item>
<item msgid="8895532488906185219">"44.1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-uz/arrays.xml b/packages/SettingsLib/res/values-uz/arrays.xml
index 1ee2823..dcb8a70 100644
--- a/packages/SettingsLib/res/values-uz/arrays.xml
+++ b/packages/SettingsLib/res/values-uz/arrays.xml
@@ -68,22 +68,10 @@
<item msgid="1913619118958233129">"avrcp15"</item>
<item msgid="7142710449249088270">"avrcp16"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="7065842274271279580">"Tizim tanlovi (birlamchi)"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="686685526567131661">"AAC"</item>
- <item msgid="8910200421843557332">"aptX"</item>
- <item msgid="8434403964359457768">"aptX HD"</item>
- <item msgid="6751080638867012696">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="5062108632402595000">"Tizim tanlovi (birlamchi)"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="6839647709301342559">"AAC"</item>
- <item msgid="2279916056363477395">"aptX"</item>
- <item msgid="6641171061200063516">"aptX HD"</item>
- <item msgid="7950781694447359344">"LDAC"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:6 (723675059572222462) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:7 (3304843301758635896) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (2209680154067241740) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (741805482892725657) -->
<string-array name="bluetooth_a2dp_codec_sample_rate_titles">
<item msgid="3093023430402746802">"Tizim tanlovi (birlamchi)"</item>
<item msgid="8895532488906185219">"44.1 kGs"</item>
diff --git a/packages/SettingsLib/res/values-uz/strings.xml b/packages/SettingsLib/res/values-uz/strings.xml
index 93adf3b..fc9f7f6 100644
--- a/packages/SettingsLib/res/values-uz/strings.xml
+++ b/packages/SettingsLib/res/values-uz/strings.xml
@@ -172,7 +172,7 @@
<string name="wifi_verbose_logging" msgid="4203729756047242344">"Batafsil Wi-Fi jurnali"</string>
<string name="wifi_aggressive_handover" msgid="5309131983693661320">"Mobil internetga o‘tish"</string>
<string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Wi-Fi tarmoqlarini qidirishga doim ruxsat"</string>
- <string name="mobile_data_always_on" msgid="8774857027458200434">"Mobil internet o‘chirilmasin"</string>
+ <string name="mobile_data_always_on" msgid="8774857027458200434">"Mobil internet doim yoniq tursin"</string>
<string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Ovoz balangligining mutlaq darajasini o‘chirib qo‘yish"</string>
<string name="bluetooth_select_avrcp_version_string" msgid="3750059931120293633">"Bluetooth AVRCP versiyasi"</string>
<string name="bluetooth_select_avrcp_version_dialog_title" msgid="7277329668298705702">"Bluetooth AVRCP versiyasini tanlang"</string>
@@ -323,13 +323,13 @@
<string name="power_discharging_duration" msgid="2843747179907396142">"<xliff:g id="LEVEL">%1$s</xliff:g> – taxminan <xliff:g id="TIME">%2$s</xliff:g> qoldi"</string>
<string name="power_discharging_duration_short" msgid="4192244429001842403">"<xliff:g id="LEVEL">%1$s</xliff:g> – <xliff:g id="TIME">%2$s</xliff:g> qoldi"</string>
<string name="power_charging" msgid="1779532561355864267">"<xliff:g id="LEVEL">%1$s</xliff:g> – <xliff:g id="STATE">%2$s</xliff:g>"</string>
- <string name="power_charging_duration" msgid="4676999980973411875">"<xliff:g id="LEVEL">%1$s</xliff:g> – to‘liq quvvatlashga <xliff:g id="TIME">%2$s</xliff:g> ketadi"</string>
+ <string name="power_charging_duration" msgid="4676999980973411875">"<xliff:g id="LEVEL">%1$s</xliff:g> – <xliff:g id="TIME">%2$s</xliff:g> ichida to‘ladi"</string>
<string name="power_charging_duration_short" msgid="1098603958472207920">"<xliff:g id="LEVEL">%1$s</xliff:g> – <xliff:g id="TIME">%2$s</xliff:g>"</string>
- <string name="power_charging_duration_ac" msgid="7341243578143555689">"<xliff:g id="LEVEL">%1$s</xliff:g> – AC orqali to‘liq quvvatlashga <xliff:g id="TIME">%2$s</xliff:g> ketadi"</string>
+ <string name="power_charging_duration_ac" msgid="7341243578143555689">"<xliff:g id="LEVEL">%1$s</xliff:g> – <xliff:g id="TIME">%2$s</xliff:g> ichida to‘ladi (tarmoq orqali)"</string>
<string name="power_charging_duration_ac_short" msgid="7895864687218765582">"<xliff:g id="LEVEL">%1$s</xliff:g> – <xliff:g id="TIME">%2$s</xliff:g>"</string>
- <string name="power_charging_duration_usb" msgid="3720632890882121805">"<xliff:g id="LEVEL">%1$s</xliff:g> – USB orqali to‘liq quvvatlashga <xliff:g id="TIME">%2$s</xliff:g> ketadi"</string>
+ <string name="power_charging_duration_usb" msgid="3720632890882121805">"<xliff:g id="LEVEL">%1$s</xliff:g> – <xliff:g id="TIME">%2$s</xliff:g> ichida to‘ladi (USB orqali)"</string>
<string name="power_charging_duration_usb_short" msgid="941854728040426399">"<xliff:g id="LEVEL">%1$s</xliff:g> – <xliff:g id="TIME">%2$s</xliff:g>"</string>
- <string name="power_charging_duration_wireless" msgid="5768338238751562058">"<xliff:g id="LEVEL">%1$s</xliff:g> – simsiz to‘liq quvvatlashga <xliff:g id="TIME">%2$s</xliff:g> ketadi"</string>
+ <string name="power_charging_duration_wireless" msgid="5768338238751562058">"<xliff:g id="LEVEL">%1$s</xliff:g> – <xliff:g id="TIME">%2$s</xliff:g> ichida to‘ladi (simsiz quvvatlash)"</string>
<string name="power_charging_duration_wireless_short" msgid="1642664799869599476">"<xliff:g id="LEVEL">%1$s</xliff:g> – <xliff:g id="TIME">%2$s</xliff:g>"</string>
<string name="battery_info_status_unknown" msgid="196130600938058547">"Noma’lum"</string>
<string name="battery_info_status_charging" msgid="1705179948350365604">"Quvvat olmoqda"</string>
diff --git a/packages/SettingsLib/res/values-vi/arrays.xml b/packages/SettingsLib/res/values-vi/arrays.xml
index 3391f21..bc5c405 100644
--- a/packages/SettingsLib/res/values-vi/arrays.xml
+++ b/packages/SettingsLib/res/values-vi/arrays.xml
@@ -68,22 +68,10 @@
<item msgid="1913619118958233129">"avrcp15"</item>
<item msgid="7142710449249088270">"avrcp16"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="7065842274271279580">"Sử dụng lựa chọn hệ thống (Mặc định)"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="686685526567131661">"AAC"</item>
- <item msgid="8910200421843557332">"aptX"</item>
- <item msgid="8434403964359457768">"aptX HD"</item>
- <item msgid="6751080638867012696">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="5062108632402595000">"Sử dụng lựa chọn hệ thống (Mặc định)"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="6839647709301342559">"AAC"</item>
- <item msgid="2279916056363477395">"aptX"</item>
- <item msgid="6641171061200063516">"aptX HD"</item>
- <item msgid="7950781694447359344">"LDAC"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:6 (723675059572222462) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:7 (3304843301758635896) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (2209680154067241740) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (741805482892725657) -->
<string-array name="bluetooth_a2dp_codec_sample_rate_titles">
<item msgid="3093023430402746802">"Sử dụng lựa chọn hệ thống (Mặc định)"</item>
<item msgid="8895532488906185219">"44,1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-zh-rCN/arrays.xml b/packages/SettingsLib/res/values-zh-rCN/arrays.xml
index 7664328..4852f7d 100644
--- a/packages/SettingsLib/res/values-zh-rCN/arrays.xml
+++ b/packages/SettingsLib/res/values-zh-rCN/arrays.xml
@@ -68,22 +68,10 @@
<item msgid="1913619118958233129">"avrcp15"</item>
<item msgid="7142710449249088270">"avrcp16"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="7065842274271279580">"使用系统选择(默认)"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="686685526567131661">"AAC"</item>
- <item msgid="8910200421843557332">"aptX"</item>
- <item msgid="8434403964359457768">"aptX HD"</item>
- <item msgid="6751080638867012696">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="5062108632402595000">"使用系统选择(默认)"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="6839647709301342559">"AAC"</item>
- <item msgid="2279916056363477395">"aptX"</item>
- <item msgid="6641171061200063516">"aptX HD"</item>
- <item msgid="7950781694447359344">"LDAC"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:6 (723675059572222462) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:7 (3304843301758635896) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (2209680154067241740) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (741805482892725657) -->
<string-array name="bluetooth_a2dp_codec_sample_rate_titles">
<item msgid="3093023430402746802">"使用系统选择(默认)"</item>
<item msgid="8895532488906185219">"44.1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-zh-rHK/arrays.xml b/packages/SettingsLib/res/values-zh-rHK/arrays.xml
index a50a3d0..28518d6 100644
--- a/packages/SettingsLib/res/values-zh-rHK/arrays.xml
+++ b/packages/SettingsLib/res/values-zh-rHK/arrays.xml
@@ -68,22 +68,10 @@
<item msgid="1913619118958233129">"avrcp15"</item>
<item msgid="7142710449249088270">"avrcp16"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="7065842274271279580">"使用系統選擇 (預設)"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="686685526567131661">"AAC"</item>
- <item msgid="8910200421843557332">"aptX"</item>
- <item msgid="8434403964359457768">"aptX HD"</item>
- <item msgid="6751080638867012696">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="5062108632402595000">"使用系統選擇 (預設)"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="6839647709301342559">"AAC"</item>
- <item msgid="2279916056363477395">"aptX"</item>
- <item msgid="6641171061200063516">"aptX HD"</item>
- <item msgid="7950781694447359344">"LDAC"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:6 (723675059572222462) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:7 (3304843301758635896) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (2209680154067241740) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (741805482892725657) -->
<string-array name="bluetooth_a2dp_codec_sample_rate_titles">
<item msgid="3093023430402746802">"使用系統選擇 (預設)"</item>
<item msgid="8895532488906185219">"44.1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-zh-rTW/arrays.xml b/packages/SettingsLib/res/values-zh-rTW/arrays.xml
index db93cc9..a3854bb 100644
--- a/packages/SettingsLib/res/values-zh-rTW/arrays.xml
+++ b/packages/SettingsLib/res/values-zh-rTW/arrays.xml
@@ -68,22 +68,10 @@
<item msgid="1913619118958233129">"avrcp15"</item>
<item msgid="7142710449249088270">"avrcp16"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="7065842274271279580">"使用系統選擇 (預設)"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="686685526567131661">"AAC"</item>
- <item msgid="8910200421843557332">"aptX"</item>
- <item msgid="8434403964359457768">"aptX HD"</item>
- <item msgid="6751080638867012696">"LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="5062108632402595000">"使用系統選擇 (預設)"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="6839647709301342559">"AAC"</item>
- <item msgid="2279916056363477395">"aptX"</item>
- <item msgid="6641171061200063516">"aptX HD"</item>
- <item msgid="7950781694447359344">"LDAC"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:6 (723675059572222462) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:7 (3304843301758635896) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (2209680154067241740) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (741805482892725657) -->
<string-array name="bluetooth_a2dp_codec_sample_rate_titles">
<item msgid="3093023430402746802">"使用系統選擇 (預設)"</item>
<item msgid="8895532488906185219">"44.1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-zu/arrays.xml b/packages/SettingsLib/res/values-zu/arrays.xml
index 6a0cc42..84040ee 100644
--- a/packages/SettingsLib/res/values-zu/arrays.xml
+++ b/packages/SettingsLib/res/values-zu/arrays.xml
@@ -68,22 +68,10 @@
<item msgid="1913619118958233129">"I-avrcp15"</item>
<item msgid="7142710449249088270">"I-avrcp16"</item>
</string-array>
- <string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="7065842274271279580">"Sebenzisa ukukhetha kwesistimu (Okuzenzakalelayo)"</item>
- <item msgid="7539690996561263909">"SBC"</item>
- <item msgid="686685526567131661">"I-AAC"</item>
- <item msgid="8910200421843557332">"aptX"</item>
- <item msgid="8434403964359457768">"aptX HD"</item>
- <item msgid="6751080638867012696">"I-LDAC"</item>
- </string-array>
- <string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="5062108632402595000">"Sebenzisa ukukhetha kwesistimu (Okuzenzakalelayo)"</item>
- <item msgid="6898329690939802290">"SBC"</item>
- <item msgid="6839647709301342559">"I-AAC"</item>
- <item msgid="2279916056363477395">"aptX"</item>
- <item msgid="6641171061200063516">"aptX HD"</item>
- <item msgid="7950781694447359344">"I-LDAC"</item>
- </string-array>
+ <!-- no translation found for bluetooth_a2dp_codec_titles:6 (723675059572222462) -->
+ <!-- no translation found for bluetooth_a2dp_codec_titles:7 (3304843301758635896) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (2209680154067241740) -->
+ <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (741805482892725657) -->
<string-array name="bluetooth_a2dp_codec_sample_rate_titles">
<item msgid="3093023430402746802">"Sebenzisa ukukhetha kwesistimu (Okuzenzakalelayo)"</item>
<item msgid="8895532488906185219">"44.1 kHz"</item>
diff --git a/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java b/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java
index 45004c4..1ea4183 100644
--- a/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java
+++ b/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java
@@ -37,6 +37,7 @@
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.net.wifi.WifiNetworkScoreCache;
+import android.net.wifi.hotspot2.PasspointConfiguration;
import android.os.Bundle;
import android.os.RemoteException;
import android.os.ServiceManager;
@@ -100,6 +101,8 @@
static final String KEY_PSKTYPE = "key_psktype";
static final String KEY_SCANRESULTCACHE = "key_scanresultcache";
static final String KEY_CONFIG = "key_config";
+ static final String KEY_FQDN = "key_fqdn";
+ static final String KEY_PROVIDER_FRIENDLY_NAME = "key_provider_friendly_name";
static final AtomicInteger sLastId = new AtomicInteger(0);
/**
@@ -150,6 +153,13 @@
// used to co-relate internal vs returned accesspoint.
int mId;
+ /**
+ * Information associated with the {@link PasspointConfiguration}. Only maintaining
+ * the relevant info to preserve spaces.
+ */
+ private String mFqdn;
+ private String mProviderFriendlyName;
+
public AccessPoint(Context context, Bundle savedState) {
mContext = context;
mConfig = savedState.getParcelable(KEY_CONFIG);
@@ -177,21 +187,32 @@
mScanResultCache.put(result.BSSID, result);
}
}
+ if (savedState.containsKey(KEY_FQDN)) {
+ mFqdn = savedState.getString(KEY_FQDN);
+ }
+ if (savedState.containsKey(KEY_PROVIDER_FRIENDLY_NAME)) {
+ mProviderFriendlyName = savedState.getString(KEY_PROVIDER_FRIENDLY_NAME);
+ }
update(mConfig, mInfo, mNetworkInfo);
updateRssi();
updateSeen();
mId = sLastId.incrementAndGet();
}
- AccessPoint(Context context, ScanResult result) {
+ public AccessPoint(Context context, WifiConfiguration config) {
mContext = context;
- initWithScanResult(result);
+ loadConfig(config);
mId = sLastId.incrementAndGet();
}
- AccessPoint(Context context, WifiConfiguration config) {
+ /**
+ * Initialize an AccessPoint object for a {@link PasspointConfiguration}. This is mainly
+ * used by "Saved Networks" page for managing the saved {@link PasspointConfiguration}.
+ */
+ public AccessPoint(Context context, PasspointConfiguration config) {
mContext = context;
- loadConfig(config);
+ mFqdn = config.getHomeSp().getFqdn();
+ mProviderFriendlyName = config.getHomeSp().getFriendlyName();
mId = sLastId.incrementAndGet();
}
@@ -200,6 +221,12 @@
copyFrom(other);
}
+ AccessPoint(Context context, ScanResult result) {
+ mContext = context;
+ initWithScanResult(result);
+ mId = sLastId.incrementAndGet();
+ }
+
/**
* Copy accesspoint information. NOTE: We do not copy tag information because that is never
* set on the internal copy.
@@ -368,6 +395,10 @@
return mConfig;
}
+ public String getPasspointFqdn() {
+ return mFqdn;
+ }
+
public void clearConfig() {
mConfig = null;
networkId = WifiConfiguration.INVALID_NETWORK_ID;
@@ -504,6 +535,8 @@
public String getConfigName() {
if (mConfig != null && mConfig.isPasspoint()) {
return mConfig.providerFriendlyName;
+ } else if (mFqdn != null) {
+ return mProviderFriendlyName;
} else {
return ssid;
}
@@ -778,11 +811,21 @@
mNetworkInfo != null && mNetworkInfo.getState() != State.DISCONNECTED;
}
+ /**
+ * Return true if this AccessPoint represents a Passpoint AP.
+ */
public boolean isPasspoint() {
return mConfig != null && mConfig.isPasspoint();
}
/**
+ * Return true if this AccessPoint represents a Passpoint provider configuration.
+ */
+ public boolean isPasspointConfig() {
+ return mFqdn != null;
+ }
+
+ /**
* Return whether the given {@link WifiInfo} is for this access point.
* If the current AP does not have a network Id then the config is used to
* match based on SSID and security.
@@ -857,6 +900,12 @@
if (mNetworkInfo != null) {
savedState.putParcelable(KEY_NETWORKINFO, mNetworkInfo);
}
+ if (mFqdn != null) {
+ savedState.putString(KEY_FQDN, mFqdn);
+ }
+ if (mProviderFriendlyName != null) {
+ savedState.putString(KEY_PROVIDER_FRIENDLY_NAME, mProviderFriendlyName);
+ }
}
public void setListener(AccessPointListener listener) {
diff --git a/packages/SettingsLib/src/com/android/settingslib/wifi/WifiTracker.java b/packages/SettingsLib/src/com/android/settingslib/wifi/WifiTracker.java
index 1f86f8b..50f294c 100644
--- a/packages/SettingsLib/src/com/android/settingslib/wifi/WifiTracker.java
+++ b/packages/SettingsLib/src/com/android/settingslib/wifi/WifiTracker.java
@@ -67,6 +67,7 @@
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.
+ // TODO(b/36733768): Remove flag includeSaved and includePasspoints.
private static final String TAG = "WifiTracker";
private static final boolean DBG = Log.isLoggable(TAG, Log.DEBUG);
diff --git a/packages/SettingsLib/tests/integ/src/com/android/settingslib/wifi/AccessPointTest.java b/packages/SettingsLib/tests/integ/src/com/android/settingslib/wifi/AccessPointTest.java
index b9b4ef3..762d9f8 100644
--- a/packages/SettingsLib/tests/integ/src/com/android/settingslib/wifi/AccessPointTest.java
+++ b/packages/SettingsLib/tests/integ/src/com/android/settingslib/wifi/AccessPointTest.java
@@ -18,6 +18,8 @@
import static com.google.common.truth.Truth.assertThat;
import static com.google.common.truth.Truth.assertWithMessage;
+import static org.junit.Assert.assertTrue;
+
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
@@ -25,6 +27,8 @@
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiSsid;
+import android.net.wifi.hotspot2.PasspointConfiguration;
+import android.net.wifi.hotspot2.pps.HomeSp;
import android.os.Bundle;
import android.os.SystemClock;
import android.support.test.InstrumentationRegistry;
@@ -215,6 +219,17 @@
assertThat(ap.getRssi()).isEqualTo(expectedRssi);
}
+ @Test
+ public void testCreateFromPasspointConfig() {
+ PasspointConfiguration config = new PasspointConfiguration();
+ HomeSp homeSp = new HomeSp();
+ homeSp.setFqdn("test.com");
+ homeSp.setFriendlyName("Test Provider");
+ config.setHomeSp(homeSp);
+ AccessPoint ap = new AccessPoint(mContext, config);
+ assertTrue(ap.isPasspointConfig());
+ }
+
private AccessPoint createAccessPointWithScanResultCache() {
Bundle bundle = new Bundle();
ArrayList<ScanResult> scanResults = new ArrayList<>();
@@ -319,4 +334,15 @@
AccessPoint namedAp = new TestAccessPointBuilder(mContext).setSsid(name).build();
assertThat(namedAp.getSsidStr()).isEqualTo(name);
}
+
+ @Test
+ public void testBuilder_passpointConfig() {
+ String fqdn = "Test.com";
+ String providerFriendlyName = "Test Provider";
+ AccessPoint ap = new TestAccessPointBuilder(mContext).setFqdn(fqdn)
+ .setProviderFriendlyName(providerFriendlyName).build();
+ assertTrue(ap.isPasspointConfig());
+ assertThat(ap.getPasspointFqdn()).isEqualTo(fqdn);
+ assertThat(ap.getConfigName()).isEqualTo(providerFriendlyName);
+ }
}
diff --git a/packages/SettingsLib/tests/integ/src/com/android/settingslib/wifi/TestAccessPointBuilder.java b/packages/SettingsLib/tests/integ/src/com/android/settingslib/wifi/TestAccessPointBuilder.java
index 81bd723..a347203 100644
--- a/packages/SettingsLib/tests/integ/src/com/android/settingslib/wifi/TestAccessPointBuilder.java
+++ b/packages/SettingsLib/tests/integ/src/com/android/settingslib/wifi/TestAccessPointBuilder.java
@@ -39,6 +39,8 @@
private int networkId = WifiConfiguration.INVALID_NETWORK_ID;
private String ssid = "TestSsid";
private NetworkInfo mNetworkInfo = null;
+ private String mFqdn = null;
+ private String mProviderFriendlyName = null;
Context mContext;
@@ -55,6 +57,12 @@
bundle.putString(AccessPoint.KEY_SSID, ssid);
bundle.putParcelable(AccessPoint.KEY_CONFIG, wifiConig);
bundle.putParcelable(AccessPoint.KEY_NETWORKINFO, mNetworkInfo);
+ if (mFqdn != null) {
+ bundle.putString(AccessPoint.KEY_FQDN, mFqdn);
+ }
+ if (mProviderFriendlyName != null) {
+ bundle.putString(AccessPoint.KEY_PROVIDER_FRIENDLY_NAME, mProviderFriendlyName);
+ }
AccessPoint ap = new AccessPoint(mContext, bundle);
ap.setRssi(mRssi);
return ap;
@@ -128,4 +136,14 @@
ssid = newSsid;
return this;
}
+
+ public TestAccessPointBuilder setFqdn(String fqdn) {
+ mFqdn = fqdn;
+ return this;
+ }
+
+ public TestAccessPointBuilder setProviderFriendlyName(String friendlyName) {
+ mProviderFriendlyName = friendlyName;
+ return this;
+ }
}
diff --git a/packages/SystemUI/res/drawable-hdpi/pip_dismiss_scrim.9.png b/packages/SystemUI/res/drawable-hdpi/pip_dismiss_scrim.9.png
new file mode 100644
index 0000000..6737c80
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/pip_dismiss_scrim.9.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/pip_dismiss_scrim.9.png b/packages/SystemUI/res/drawable-mdpi/pip_dismiss_scrim.9.png
new file mode 100644
index 0000000..d9e33eb
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/pip_dismiss_scrim.9.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/pip_dismiss_scrim.9.png b/packages/SystemUI/res/drawable-xhdpi/pip_dismiss_scrim.9.png
new file mode 100644
index 0000000..64daf20
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/pip_dismiss_scrim.9.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xxhdpi/pip_dismiss_scrim.9.png b/packages/SystemUI/res/drawable-xxhdpi/pip_dismiss_scrim.9.png
new file mode 100644
index 0000000..49e0499
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xxhdpi/pip_dismiss_scrim.9.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xxxhdpi/pip_dismiss_scrim.9.png b/packages/SystemUI/res/drawable-xxxhdpi/pip_dismiss_scrim.9.png
new file mode 100644
index 0000000..0e6ca16
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xxxhdpi/pip_dismiss_scrim.9.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable/pip_dismiss_background.xml b/packages/SystemUI/res/drawable/pip_dismiss_background.xml
deleted file mode 100644
index 8f50231..0000000
--- a/packages/SystemUI/res/drawable/pip_dismiss_background.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<!--
- 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.
--->
-<shape xmlns:android="http://schemas.android.com/apk/res/android"
- android:shape="rectangle">
- <gradient
- android:startColor="#B3000000"
- android:endColor="#00000000"
- android:angle="90"/>
-</shape>
\ No newline at end of file
diff --git a/packages/SystemUI/res/layout/pip_dismiss_view.xml b/packages/SystemUI/res/layout/pip_dismiss_view.xml
index f02a56c..34228d9 100644
--- a/packages/SystemUI/res/layout/pip_dismiss_view.xml
+++ b/packages/SystemUI/res/layout/pip_dismiss_view.xml
@@ -15,43 +15,18 @@
limitations under the License.
-->
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/pip_dismiss_view"
android:layout_width="match_parent"
- android:layout_height="match_parent"
+ android:layout_height="@dimen/pip_dismiss_gradient_height"
+ android:background="@drawable/pip_dismiss_scrim"
android:alpha="0">
- <!-- The height of the below view needs to be animated from a window
- so it needs to be in a container to resize smoothly -->
- <View
- android:id="@+id/gradient_view"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:layout_gravity="bottom"
- android:background="@drawable/pip_dismiss_background" />
-
- <LinearLayout
- android:id="@+id/pip_dismiss_container"
+ <TextView
+ android:id="@+id/pip_dismiss_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|center_horizontal"
- android:orientation="horizontal"
- android:paddingBottom="32dp" >
-
- <ImageView
- android:id="@+id/pip_dismiss_icon"
- android:layout_width="24dp"
- android:layout_height="24dp"
- android:padding="2dp"
- android:src="@drawable/pip_dismiss"
- android:tint="#FFFFFFFF" />
-
- <TextView
- android:id="@+id/pip_dismiss_text"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="@string/pip_phone_close"
- android:textColor="#FFFFFFFF"
- android:textSize="16sp" />
- </LinearLayout>
+ android:text="@string/pip_phone_dismiss_hint"
+ android:textColor="#FFFFFFFF"
+ android:textSize="14sp" />
</FrameLayout>
\ No newline at end of file
diff --git a/packages/SystemUI/res/values/dimens.xml b/packages/SystemUI/res/values/dimens.xml
index 5ffc8f9..ac4bdfc 100644
--- a/packages/SystemUI/res/values/dimens.xml
+++ b/packages/SystemUI/res/values/dimens.xml
@@ -730,8 +730,11 @@
loading full resolution screenshots. -->
<dimen name="recents_fast_fling_velocity">600dp</dimen>
- <!-- The size of the PIP drag-to-dismiss target. -->
- <dimen name="pip_dismiss_target_size">48dp</dimen>
+ <!-- The height of the gradient indicating the dismiss edge when moving a PIP. -->
+ <dimen name="pip_dismiss_gradient_height">196dp</dimen>
+
+ <!-- The bottom margin of the PIP drag to dismiss info text shown when moving a PIP. -->
+ <dimen name="pip_dismiss_text_bottom_margin">36dp</dimen>
<!-- The shortest-edge size of the expanded PiP. -->
<dimen name="pip_expanded_shortest_edge_size">160dp</dimen>
diff --git a/packages/SystemUI/res/values/strings.xml b/packages/SystemUI/res/values/strings.xml
index a2ec804..ad39f54 100644
--- a/packages/SystemUI/res/values/strings.xml
+++ b/packages/SystemUI/res/values/strings.xml
@@ -1861,9 +1861,12 @@
<!-- Label for PIP action to Minimize the PIP [CHAR LIMIT=25] -->
<string name="pip_phone_minimize">Minimize</string>
- <!-- Label for PIP the drag to close zone [CHAR LIMIT=NONE]-->
+ <!-- Label for PIP close button [CHAR LIMIT=NONE]-->
<string name="pip_phone_close">Close</string>
+ <!-- Label for PIP the drag to dismiss hint [CHAR LIMIT=NONE]-->
+ <string name="pip_phone_dismiss_hint">Drag down to dismiss</string>
+
<!-- Title of menu shown over picture-in-picture. Used for accessibility. -->
<string name="pip_menu_title">Picture in picture menu</string>
diff --git a/packages/SystemUI/src/com/android/systemui/pip/phone/PipDismissViewController.java b/packages/SystemUI/src/com/android/systemui/pip/phone/PipDismissViewController.java
index 0259e3e..86bb0de 100644
--- a/packages/SystemUI/src/com/android/systemui/pip/phone/PipDismissViewController.java
+++ b/packages/SystemUI/src/com/android/systemui/pip/phone/PipDismissViewController.java
@@ -41,21 +41,9 @@
private static final int SHOW_TARGET_DELAY = 100;
private static final int SHOW_TARGET_DURATION = 200;
- private static final float DISMISS_TEXT_MAX_SCALE = 2f;
- private static final float DISMISS_GRADIENT_MIN_HEIGHT_PERCENT = 0.33f;
- private static final float DISMISS_GRADIENT_MAX_HEIGHT_PERCENT = 0.5f;
- private static final float DISMISS_THRESHOLD = 0.55f;
-
private Context mContext;
private WindowManager mWindowManager;
-
private View mDismissView;
- private Rect mDismissTargetScreenBounds = new Rect();
-
- private View mDismissContainer;
- private View mGradientView;
- private float mMinHeight;
- private float mMaxHeight;
public PipDismissViewController(Context context) {
mContext = context;
@@ -67,42 +55,29 @@
*/
public void createDismissTarget() {
if (mDismissView == null) {
- // Determine sizes for the gradient
+ // Determine sizes for the view
final Rect stableInsets = new Rect();
SystemServicesProxy.getInstance(mContext).getStableInsets(stableInsets);
final Point windowSize = new Point();
mWindowManager.getDefaultDisplay().getRealSize(windowSize);
- mMinHeight = windowSize.y * DISMISS_GRADIENT_MIN_HEIGHT_PERCENT;
- mMaxHeight = windowSize.y * DISMISS_GRADIENT_MAX_HEIGHT_PERCENT;
+ final int gradientHeight = mContext.getResources().getDimensionPixelSize(
+ R.dimen.pip_dismiss_gradient_height);
+ final int bottomMargin = mContext.getResources().getDimensionPixelSize(
+ R.dimen.pip_dismiss_text_bottom_margin);
// Create a new view for the dismiss target
LayoutInflater inflater = LayoutInflater.from(mContext);
mDismissView = inflater.inflate(R.layout.pip_dismiss_view, null);
- mGradientView = mDismissView.findViewById(R.id.gradient_view);
- FrameLayout.LayoutParams glp =
- (FrameLayout.LayoutParams) mGradientView.getLayoutParams();
- glp.height = (int) mMaxHeight;
- mGradientView.setLayoutParams(glp);
- mGradientView.setPivotY(windowSize.y);
- mGradientView.setScaleY(mMaxHeight / mMinHeight); // Set to min height via scaling
- mDismissContainer = mDismissView.findViewById(R.id.pip_dismiss_container);
- FrameLayout.LayoutParams clp =
- (FrameLayout.LayoutParams) mDismissContainer.getLayoutParams();
- clp.bottomMargin = stableInsets.bottom;
- mDismissContainer.addOnLayoutChangeListener(new OnLayoutChangeListener() {
- @Override
- public void onLayoutChange(View v, int left, int top, int right, int bottom,
- int oldLeft, int oldTop, int oldRight, int oldBottom) {
- if (mDismissContainer != null) {
- mDismissContainer.getBoundsOnScreen(mDismissTargetScreenBounds);
- }
- }
- });
+
+ // Adjust bottom margins of the text
+ View text = mDismissView.findViewById(R.id.pip_dismiss_text);
+ FrameLayout.LayoutParams tlp = (FrameLayout.LayoutParams) text.getLayoutParams();
+ tlp.bottomMargin = stableInsets.bottom + bottomMargin;
// Add the target to the window
LayoutParams lp = new LayoutParams(
- ViewGroup.LayoutParams.MATCH_PARENT, (int) mMaxHeight,
- 0, windowSize.y - (int) mMaxHeight,
+ ViewGroup.LayoutParams.MATCH_PARENT, gradientHeight,
+ 0, windowSize.y - gradientHeight,
LayoutParams.TYPE_SYSTEM_DIALOG,
LayoutParams.FLAG_LAYOUT_IN_SCREEN
| LayoutParams.FLAG_LAYOUT_NO_LIMITS
@@ -118,8 +93,7 @@
/**
* Shows the dismiss target.
*/
- public void showDismissTarget(Rect pinnedStack) {
- updateDismissTarget(pinnedStack);
+ public void showDismissTarget() {
mDismissView.animate()
.alpha(1f)
.setInterpolator(Interpolators.LINEAR_OUT_SLOW_IN)
@@ -148,48 +122,4 @@
.start();
}
}
-
- /**
- * Updates the appearance of the dismiss target based on how close the PIP is.
- */
- public void updateDismissTarget(Rect pinnedStack) {
- // As PIP moves over / away from delete target it grows / shrinks
- final float scalePercent = calculateDistancePercent(pinnedStack);
- final float newScale = 1 + (DISMISS_TEXT_MAX_SCALE - 1) * scalePercent;
- final float minGradientScale = mMinHeight / mMaxHeight;
- final float newHeight = Math.max(minGradientScale, scalePercent);
- mGradientView.setScaleY(newHeight);
- mDismissContainer.setScaleX(newScale);
- mDismissContainer.setScaleY(newScale);
- }
-
- /**
- * @return the percentage of distance the PIP is away from the dismiss target point.
- */
- private float calculateDistancePercent(Rect pinnedStack) {
- final int distance = mDismissTargetScreenBounds.height();
- final int textX = mDismissTargetScreenBounds.centerX();
- final int textY = mDismissTargetScreenBounds.bottom;
- final float pipCurrX = pinnedStack.centerX();
- final float pipCurrY = pinnedStack.bottom;
- final float currentDistance = PointF.length(pipCurrX - textX, pipCurrY - textY);
- if (currentDistance <= distance) {
- return 1 - (currentDistance / distance);
- }
- return 0;
- }
-
- /**
- * @return the dismiss target screen bounds.
- */
- public Rect getDismissBounds() {
- return mDismissTargetScreenBounds;
- }
-
- /**
- * @return whether the PIP is positioned on the dismiss target enough to be dismissed.
- */
- public boolean shouldDismiss(Rect pinnedStack) {
- return calculateDistancePercent(pinnedStack) >= DISMISS_THRESHOLD;
- }
}
diff --git a/packages/SystemUI/src/com/android/systemui/pip/phone/PipMenuActivity.java b/packages/SystemUI/src/com/android/systemui/pip/phone/PipMenuActivity.java
index 297fe67..17228b9 100644
--- a/packages/SystemUI/src/com/android/systemui/pip/phone/PipMenuActivity.java
+++ b/packages/SystemUI/src/com/android/systemui/pip/phone/PipMenuActivity.java
@@ -81,7 +81,7 @@
private static final long MENU_FADE_DURATION = 125;
private static final float MENU_BACKGROUND_ALPHA = 0.3f;
- private static final float DISMISS_BACKGROUND_ALPHA = 0.8f;
+ private static final float DISMISS_BACKGROUND_ALPHA = 0.6f;
private static final float DISABLED_ACTION_ALPHA = 0.54f;
diff --git a/packages/SystemUI/src/com/android/systemui/pip/phone/PipMotionHelper.java b/packages/SystemUI/src/com/android/systemui/pip/phone/PipMotionHelper.java
index c4cf28c..a14a712 100644
--- a/packages/SystemUI/src/com/android/systemui/pip/phone/PipMotionHelper.java
+++ b/packages/SystemUI/src/com/android/systemui/pip/phone/PipMotionHelper.java
@@ -67,7 +67,7 @@
// The fraction of the stack width that the user has to drag offscreen to minimize the PiP
private static final float MINIMIZE_OFFSCREEN_FRACTION = 0.3f;
// The fraction of the stack height that the user has to drag offscreen to dismiss the PiP
- private static final float DISMISS_OFFSCREEN_FRACTION = 0.15f;
+ private static final float DISMISS_OFFSCREEN_FRACTION = 0.3f;
private Context mContext;
private IActivityManager mActivityManager;
@@ -201,7 +201,7 @@
*/
boolean shouldDismissPip() {
Point displaySize = new Point();
- mContext.getDisplay().getRealSize(displaySize);
+ mContext.getDisplay().getSize(displaySize);
if (mBounds.bottom > displaySize.y) {
float offscreenFraction = (float) (mBounds.bottom - displaySize.y) / mBounds.height();
return offscreenFraction >= DISMISS_OFFSCREEN_FRACTION;
@@ -327,12 +327,14 @@
/**
* Animates the dismissal of the PiP off the edge of the screen.
*/
- Rect animateDragToEdgeDismiss(Rect pipBounds, AnimatorUpdateListener listener) {
+ Rect animateDismiss(Rect pipBounds, float velocityX, float velocityY,
+ AnimatorUpdateListener listener) {
cancelAnimations();
- Point displaySize = new Point();
- mContext.getDisplay().getRealSize(displaySize);
+ final float velocity = PointF.length(velocityX, velocityY);
+ final boolean isFling = velocity > mFlingAnimationUtils.getMinVelocityPxPerSecond();
+ Point p = getDismissEndPoint(pipBounds, velocityX, velocityY, isFling);
Rect toBounds = new Rect(pipBounds);
- toBounds.offset(0, displaySize.y - pipBounds.top);
+ toBounds.offsetTo(p.x, p.y);
mBoundsAnimator = createAnimationToBounds(mBounds, toBounds, DRAG_TO_DISMISS_STACK_DURATION,
FAST_OUT_LINEAR_IN, mUpdateBoundsListener);
mBoundsAnimator.addListener(new AnimatorListenerAdapter() {
@@ -341,6 +343,10 @@
dismissPip();
}
});
+ if (isFling) {
+ mFlingAnimationUtils.apply(mBoundsAnimator, 0,
+ distanceBetweenRectOffsets(mBounds, toBounds), velocity);
+ }
if (listener != null) {
mBoundsAnimator.addUpdateListener(listener);
}
@@ -349,28 +355,6 @@
}
/**
- * Animates the dismissal of the PiP over the dismiss target bounds.
- */
- Rect animateDragToTargetDismiss(Rect dismissBounds) {
- cancelAnimations();
- Rect toBounds = new Rect(dismissBounds.centerX(),
- dismissBounds.centerY(),
- dismissBounds.centerX() + 1,
- dismissBounds.centerY() + 1);
- mBoundsAnimator = createAnimationToBounds(mBounds, toBounds,
- DRAG_TO_TARGET_DISMISS_STACK_DURATION,
- FAST_OUT_LINEAR_IN, mUpdateBoundsListener);
- mBoundsAnimator.addListener(new AnimatorListenerAdapter() {
- @Override
- public void onAnimationEnd(Animator animation) {
- dismissPip();
- }
- });
- mBoundsAnimator.start();
- return toBounds;
- }
-
- /**
* Cancels all existing animations.
*/
void cancelAnimations() {
@@ -439,6 +423,30 @@
}
/**
+ * @return the coordinates the PIP should animate to based on the direction of velocity when
+ * dismissing.
+ */
+ private Point getDismissEndPoint(Rect pipBounds, float velX, float velY, boolean isFling) {
+ Point displaySize = new Point();
+ mContext.getDisplay().getRealSize(displaySize);
+ final float bottomBound = displaySize.y + pipBounds.height() * .1f;
+ if (isFling && velX != 0 && velY != 0) {
+ // Line is defined by: y = mx + b, m = slope, b = y-intercept
+ // Find the slope
+ final float slope = velY / velX;
+ // Sub in slope and PiP position to solve for y-intercept: b = y - mx
+ final float yIntercept = pipBounds.top - slope * pipBounds.left;
+ // Now find the point on this line when y = bottom bound: x = (y - b) / m
+ final float x = (bottomBound - yIntercept) / slope;
+ return new Point((int) x, (int) bottomBound);
+ } else {
+ // If it wasn't a fling the velocity on 'up' is not reliable for direction of movement,
+ // just animate downwards.
+ return new Point(pipBounds.left, (int) bottomBound);
+ }
+ }
+
+ /**
* @return the distance between points {@param p1} and {@param p2}.
*/
private float distanceBetweenRectOffsets(Rect r1, Rect r2) {
diff --git a/packages/SystemUI/src/com/android/systemui/pip/phone/PipTouchHandler.java b/packages/SystemUI/src/com/android/systemui/pip/phone/PipTouchHandler.java
index 0ce3210..6ade571 100644
--- a/packages/SystemUI/src/com/android/systemui/pip/phone/PipTouchHandler.java
+++ b/packages/SystemUI/src/com/android/systemui/pip/phone/PipTouchHandler.java
@@ -60,7 +60,6 @@
private static final int SHOW_DISMISS_AFFORDANCE_DELAY = 200;
// Allow dragging the PIP to a location to close it
- private static final boolean ENABLE_DISMISS_DRAG_TO_TARGET = false;
private static final boolean ENABLE_DISMISS_DRAG_TO_EDGE = true;
private final Context mContext;
@@ -88,8 +87,8 @@
private Runnable mShowDismissAffordance = new Runnable() {
@Override
public void run() {
- if (ENABLE_DISMISS_DRAG_TO_TARGET) {
- mDismissViewController.showDismissTarget(mMotionHelper.getBounds());
+ if (ENABLE_DISMISS_DRAG_TO_EDGE) {
+ mDismissViewController.showDismissTarget();
}
}
};
@@ -197,6 +196,7 @@
if (mIsMinimized) {
setMinimizedStateInternal(false);
}
+ mDismissViewController.destroyDismissTarget();
}
@Override
@@ -487,7 +487,7 @@
mMenuController.pokeMenu();
}
- if (ENABLE_DISMISS_DRAG_TO_TARGET) {
+ if (ENABLE_DISMISS_DRAG_TO_EDGE) {
mDismissViewController.createDismissTarget();
mHandler.postDelayed(mShowDismissAffordance, SHOW_DISMISS_AFFORDANCE_DELAY);
}
@@ -503,9 +503,9 @@
mSavedSnapFraction = -1f;
}
- if (touchState.startedDragging() && ENABLE_DISMISS_DRAG_TO_TARGET) {
+ if (touchState.startedDragging() && ENABLE_DISMISS_DRAG_TO_EDGE) {
mHandler.removeCallbacks(mShowDismissAffordance);
- mDismissViewController.showDismissTarget(mMotionHelper.getBounds());
+ mDismissViewController.showDismissTarget();
}
if (touchState.isDragging()) {
@@ -526,9 +526,6 @@
mTmpBounds.offsetTo((int) left, (int) top);
mMotionHelper.movePip(mTmpBounds);
- if (ENABLE_DISMISS_DRAG_TO_TARGET) {
- mDismissViewController.updateDismissTarget(mTmpBounds);
- }
if (ENABLE_DISMISS_DRAG_TO_EDGE) {
updateDismissFraction();
}
@@ -555,21 +552,22 @@
return false;
}
- if (ENABLE_DISMISS_DRAG_TO_TARGET) {
+ final PointF vel = touchState.getVelocity();
+ final boolean isHorizontal = Math.abs(vel.x) > Math.abs(vel.y);
+ final float velocity = PointF.length(vel.x, vel.y);
+ final boolean isFling = velocity > mFlingAnimationUtils.getMinVelocityPxPerSecond();
+ final boolean isFlingToBot = isFling
+ && !isHorizontal && mMovementWithinDismiss && vel.y > 0;
+ if (ENABLE_DISMISS_DRAG_TO_EDGE) {
try {
mHandler.removeCallbacks(mShowDismissAffordance);
- PointF vel = mTouchState.getVelocity();
- final float velocity = PointF.length(vel.x, vel.y);
- if (touchState.isDragging()
- && velocity < mFlingAnimationUtils.getMinVelocityPxPerSecond()) {
- if (mDismissViewController.shouldDismiss(mMotionHelper.getBounds())) {
- Rect dismissBounds = mDismissViewController.getDismissBounds();
- mMotionHelper.animateDragToTargetDismiss(dismissBounds);
- MetricsLogger.action(mContext,
- MetricsEvent.ACTION_PICTURE_IN_PICTURE_DISMISSED,
- METRIC_VALUE_DISMISSED_BY_DRAG);
- return true;
- }
+ if (mMotionHelper.shouldDismissPip() || isFlingToBot) {
+ mMotionHelper.animateDismiss(mMotionHelper.getBounds(), vel.x,
+ vel.y, mUpdateScrimListener);
+ MetricsLogger.action(mContext,
+ MetricsEvent.ACTION_PICTURE_IN_PICTURE_DISMISSED,
+ METRIC_VALUE_DISMISSED_BY_DRAG);
+ return true;
}
} finally {
mDismissViewController.destroyDismissTarget();
@@ -577,24 +575,9 @@
}
if (touchState.isDragging()) {
- final PointF vel = touchState.getVelocity();
- final float velocity = PointF.length(vel.x, vel.y);
- final boolean isFling = velocity > mFlingAnimationUtils.getMinVelocityPxPerSecond();
- final boolean isHorizontal = Math.abs(vel.x) > Math.abs(vel.y);
- final boolean isFlingToBot = isFling
- && !isHorizontal && mMovementWithinDismiss && vel.y > 0;
final boolean isFlingToEdge = isFling && isHorizontal && mMovementWithinMinimize
&& (mStartedOnLeft ? vel.x < 0 : vel.x > 0);
-
- if (ENABLE_DISMISS_DRAG_TO_EDGE
- && (mMotionHelper.shouldDismissPip() || isFlingToBot)) {
- mMotionHelper.animateDragToEdgeDismiss(mMotionHelper.getBounds(),
- mUpdateScrimListener);
- MetricsLogger.action(mContext,
- MetricsEvent.ACTION_PICTURE_IN_PICTURE_DISMISSED,
- METRIC_VALUE_DISMISSED_BY_DRAG);
- return true;
- } else if (mEnableMinimize &&
+ if (mEnableMinimize &&
!mIsMinimized && (mMotionHelper.shouldMinimizePip() || isFlingToEdge)) {
// Pip should be minimized
setMinimizedStateInternal(true);
@@ -664,7 +647,7 @@
pw.println(innerPrefix + "mIsImeShowing=" + mIsImeShowing);
pw.println(innerPrefix + "mImeHeight=" + mImeHeight);
pw.println(innerPrefix + "mSavedSnapFraction=" + mSavedSnapFraction);
- pw.println(innerPrefix + "mEnableDragToDismiss=" + ENABLE_DISMISS_DRAG_TO_TARGET);
+ pw.println(innerPrefix + "mEnableDragToEdgeDismiss=" + ENABLE_DISMISS_DRAG_TO_EDGE);
pw.println(innerPrefix + "mEnableMinimize=" + mEnableMinimize);
mSnapAlgorithm.dump(pw, innerPrefix);
mTouchState.dump(pw, innerPrefix);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java
index 1101701..b9c8a78 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java
@@ -455,8 +455,8 @@
CharSequence title = n.extras.getCharSequence(Notification.EXTRA_TITLE);
CharSequence ticker = n.tickerText;
- CharSequence desc = !TextUtils.isEmpty(ticker) ? ticker
- : !TextUtils.isEmpty(title) ? title : "";
+ CharSequence desc = !TextUtils.isEmpty(title) ? title
+ : !TextUtils.isEmpty(ticker) ? ticker : "";
return c.getString(R.string.accessibility_desc_notification_icon, appName, desc);
}
diff --git a/proto/src/system_messages.proto b/proto/src/system_messages.proto
index 74f5cf5..97099df 100644
--- a/proto/src/system_messages.proto
+++ b/proto/src/system_messages.proto
@@ -24,6 +24,9 @@
// System message IDs
// These are non-consecutive in order to preserve some existing, ad hoc IDs.
+ // It is OK to use skipped IDs.
+ // Prefer to add new IDs consecutively from zero, search for ADD_NEW_IDS_ABOVE_THIS_LINE.
+ // Most of these IDs only became meaningful with the O release.
enum ID {
// Unknown
NOTE_UNKNOWN = 0;
@@ -56,6 +59,112 @@
// Package: com.android.systemui
NOTE_INSTANT_APPS = 7;
+ // Notify the user that they should select an input method
+ // Package: android
+ NOTE_SELECT_INPUT_METHOD = 8;
+
+ // Notify the user about limited functionality before decryption
+ // Package: android
+ NOTE_FBE_ENCRYPTED_NOTIFICATION = 9;
+
+ // Give the user a way out of car mode
+ // Package: android
+ NOTE_CAR_MODE_DISABLE = 10;
+
+ // Notification to tell the user that a heavy-weight application is running.
+ // Package: android
+ NOTE_HEAVY_WEIGHT_NOTIFICATION = 11;
+
+ // Notification to tell the user that a process has exceeded its memory limit.
+ // Package: android
+ NOTE_DUMP_HEAP_NOTIFICATION = 12;
+
+ // Notification that is shown when finishing a system upgrade
+ // Package: android
+ NOTE_SYSTEM_UPGRADING = 13;
+
+ // Notify the user that tethering is active.
+ // Package: android
+ NOTE_TETHER_GENERAL = 14;
+ NOTE_TETHER_USB = 15;
+ NOTE_TETHER_BLUETOOTH = 16;
+
+ // Notify the user that always-on VPN has disconnected.
+ // Package: android
+ NOTE_VPN_DISCONNECTED = 17;
+
+ // Notify the user about a sync error.
+ // Package: android
+ NOTE_SYNC_ERROR = 18;
+
+ // Ask the user to select a keyboard language and layout
+ // Package: android
+ NOTE_SELECT_KEYBOARD_LAYOUT = 19;
+
+ // Update the user about the status of the VPN
+ // Package: android
+ NOTE_VPN_STATUS = 20;
+
+ // Package manager either installed or deleted a package
+ // Package: android
+ NOTE_PACKAGE_STATE = 21;
+
+ // Tell the user that storage space is low
+ // Package: android
+ NOTE_LOW_STORAGE = 23;
+
+ // Confirm that the user wants to reset out of retail demo mode
+ // Package: android
+ NOTE_RETAIL_RESET = 24;
+
+ // Entice the use to tap to share files
+ // Package: android
+ NOTE_USB_MTP_TAP = 25;
+
+ // Display the Android Debug Protocol status
+ // Package: android
+ NOTE_ADB_ACTIVE = 26;
+
+ // Inform that USB is configured for Media Transfer Protocol
+ // Package: android
+ NOTE_USB_MTP = 27;
+
+ // Inform that USB is configured for Picture Transfer Protocol
+ // Package: android
+ NOTE_USB_PTP = 28;
+
+ // Inform that USB is configured as a Musical Instrument Digital Interface
+ // Package: android
+ NOTE_USB_MIDI = 29;
+
+ // Inform that USB is configured in host mode
+ // Package: android
+ NOTE_USB_ACCESSORY = 30;
+
+ // Inform the user that the device is supplying power to another device.
+ // Package: android
+ NOTE_USB_SUPPLYING = 31;
+
+ // Inform the user that the device is consuming power from another device.
+ // Package: android
+ NOTE_USB_CHARGING = 32;
+
+ // Inform the user that a certificate authority is managing SSL
+ // Package: android
+ NOTE_SSL_CERT_INFO = 33;
+
+ // ADD_NEW_IDS_ABOVE_THIS_LINE
+ // Legacy IDs with arbitrary values appear below
+ // Legacy IDs existed as stable non-conflicting constants prior to the O release
+
+ // Notify the user that their work profile has been deleted
+ // Package: android
+ NOTE_PROFILE_WIPED = 1001;
+
+ // Warn the user that their org can monitor the network
+ // Package: android
+ NOTE_NETWORK_LOGGING = 1002;
+
// Confirm that the user wants to remove the guest account.
// Package: com.android.systemui
NOTE_REMOVE_GUEST = 1010;
@@ -64,9 +173,13 @@
// Package: com.android.systemui
NOTE_LOGOUT_USER = 1011;
+ // Communicate to the user about remote bugreports.
+ // Package: android
+ NOTE_REMOTE_BUGREPORT = 678432343;
+
// Notify the user about public volume state changes..
// Package: com.android.systemui
- NOTE_STORAGE_PUBLIC = 0x53505542;
+ NOTE_STORAGE_PUBLIC = 0x53505542; // 1397773634
// Notify the user about private volume state changes.
// Package: com.android.systemui
@@ -79,5 +192,9 @@
// Notify the user that data or apps are being moved to external storage.
// Package: com.android.systemui
NOTE_STORAGE_MOVE = 0x534d4f56;
+
+ // Account Manager allocates IDs sequentially, starting here.
+ // Package: android
+ ACCOUNT_MANAGER_BASE = 0x70000000;
}
}
diff --git a/services/autofill/java/com/android/server/autofill/Session.java b/services/autofill/java/com/android/server/autofill/Session.java
index 1093e9e..3d35247 100644
--- a/services/autofill/java/com/android/server/autofill/Session.java
+++ b/services/autofill/java/com/android/server/autofill/Session.java
@@ -63,6 +63,7 @@
import com.android.server.autofill.ui.AutoFillUI;
import java.io.PrintWriter;
+import java.util.ArrayList;
import java.util.Map;
import java.util.Map.Entry;
@@ -101,23 +102,25 @@
@GuardedBy("mLock")
private final Map<AutofillId, ViewState> mViewStates = new ArrayMap<>();
+ /**
+ * Id of the View currently being displayed.
+ */
@GuardedBy("mLock")
- @Nullable
- private ViewState mCurrentViewState;
+ @Nullable private AutofillId mCurrentViewId;
private final IAutoFillManagerClient mClient;
@GuardedBy("mLock")
RemoteFillService mRemoteFillService;
- // TODO(b/33197203): Get a response per view instead of per activity.
+ // TODO(b/33197203 , b/35707731): Use List once it supports partitioning
@GuardedBy("mLock")
private FillResponse mCurrentResponse;
/**
* Used to remember which {@link Dataset} filled the session.
*/
- // TODO(b/33197203): might need more than one once we support partitions
+ // TODO(b/33197203 , b/35707731): might need more than one once it supports partitioning
@GuardedBy("mLock")
private Dataset mAutoFilledDataset;
@@ -189,7 +192,7 @@
processResponseLocked(response);
}
- LogMaker log = (new LogMaker(MetricsEvent.AUTOFILL_REQUEST))
+ final LogMaker log = (new LogMaker(MetricsEvent.AUTOFILL_REQUEST))
.setType(MetricsEvent.TYPE_SUCCESS)
.setPackageName(mPackageName)
.addTaggedData(MetricsEvent.FIELD_AUTOFILL_NUM_DATASETS,
@@ -244,10 +247,10 @@
// FillServiceCallbacks
@Override
- public void authenticate(IntentSender intent) {
+ public void authenticate(IntentSender intent, Bundle extras) {
final Intent fillInIntent;
synchronized (mLock) {
- fillInIntent = createAuthFillInIntent(mStructure);
+ fillInIntent = createAuthFillInIntent(mStructure, extras);
}
mHandlerCaller.getHandler().post(() -> startAuthentication(intent, fillInIntent));
}
@@ -292,8 +295,9 @@
public void requestShowFillUi(AutofillId id, int width, int height,
IAutofillWindowPresenter presenter) {
try {
+ final ViewState currentView = mViewStates.get(mCurrentViewId);
mClient.requestShowFillUi(mWindowToken, id, width, height,
- mCurrentViewState.mVirtualBounds, presenter);
+ currentView.getVirtualBounds(), presenter);
} catch (RemoteException e) {
Slog.e(TAG, "Error requesting to show fill UI", e);
}
@@ -313,7 +317,7 @@
if (mCurrentResponse == null || data == null) {
removeSelf();
} else {
- Parcelable result = data.getParcelable(
+ final Parcelable result = data.getParcelable(
AutofillManager.EXTRA_AUTHENTICATION_RESULT);
if (result instanceof FillResponse) {
mMetricsLogger.action(MetricsEvent.AUTOFILL_AUTHENTICATED, mPackageName);
@@ -321,7 +325,7 @@
mCurrentResponse = (FillResponse) result;
processResponseLocked(mCurrentResponse);
} else if (result instanceof Dataset) {
- Dataset dataset = (Dataset) result;
+ final Dataset dataset = (Dataset) result;
final int index = mCurrentResponse.getDatasets().indexOf(mAutoFilledDataset);
if (index >= 0) {
mCurrentResponse.getDatasets().set(index, dataset);
@@ -376,13 +380,14 @@
return true;
}
+ // TODO(b/33197203 , b/35707731): refactor excessive calls to getCurrentValue()
boolean allRequiredAreNotEmpty = true;
boolean atLeastOneChanged = false;
for (int i = 0; i < requiredIds.length; i++) {
final AutofillId id = requiredIds[i];
final ViewState state = mViewStates.get(id);
- if (state == null || state.mAutofillValue == null
- || state.mAutofillValue.isEmpty()) {
+ if (state == null || state.getCurrentValue() == null
+ || state.getCurrentValue().isEmpty()) {
final ViewNode node = findViewNodeByIdLocked(id);
if (node == null) {
Slog.w(TAG, "Service passed invalid id on SavableInfo: " + id);
@@ -398,20 +403,20 @@
break;
}
}
- if (state.mValueUpdated) {
+ if (state.isChanged()) {
final AutofillValue filledValue = findValue(mAutoFilledDataset, id);
- if (!state.mAutofillValue.equals(filledValue)) {
+ if (!state.getCurrentValue().equals(filledValue)) {
if (DEBUG) {
Slog.d(TAG, "finishSessionLocked(): found a change on " + id + ": "
- + filledValue + " => " + state.mAutofillValue);
+ + filledValue + " => " + state.getCurrentValue());
}
atLeastOneChanged = true;
}
} else {
- if (state.mAutofillValue == null || state.mAutofillValue.isEmpty()) {
+ if (state.getCurrentValue() == null || state.getCurrentValue().isEmpty()) {
if (DEBUG) {
Slog.d(TAG, "finishSessionLocked(): empty value for " + id + ": "
- + state.mAutofillValue);
+ + state.getCurrentValue());
}
allRequiredAreNotEmpty = false;
break;
@@ -425,13 +430,13 @@
for (int i = 0; i < saveInfo.getOptionalIds().length; i++) {
final AutofillId id = saveInfo.getOptionalIds()[i];
final ViewState state = mViewStates.get(id);
- if (state != null && state.mAutofillValue != null && state.mValueUpdated) {
+ if (state != null && state.getCurrentValue() != null && state.isChanged()) {
final AutofillValue filledValue = findValue(mAutoFilledDataset, id);
- if (!state.mAutofillValue.equals(filledValue)) {
+ if (!state.getCurrentValue().equals(filledValue)) {
if (DEBUG) {
Slog.d(TAG, "finishSessionLocked(): found a change on optional "
+ id + ": " + filledValue + " => "
- + state.mAutofillValue);
+ + state.getCurrentValue());
}
atLeastOneChanged = true;
break;
@@ -464,7 +469,7 @@
final Bundle extras = this.mCurrentResponse.getExtras();
for (Entry<AutofillId, ViewState> entry : mViewStates.entrySet()) {
- final AutofillValue value = entry.getValue().mAutofillValue;
+ final AutofillValue value = entry.getValue().getCurrentValue();
if (value == null) {
if (VERBOSE) {
Slog.v(TAG, "callSaveLocked(): skipping " + entry.getKey());
@@ -498,39 +503,43 @@
void updateLocked(AutofillId id, Rect virtualBounds, AutofillValue value, int flags) {
if (mAutoFilledDataset != null && (flags & FLAG_VALUE_CHANGED) == 0) {
// TODO(b/33197203): ignoring because we don't support partitions yet
- Slog.d(TAG, "updateLocked(): ignoring " + flags + " after app was autofilled");
+ Slog.d(TAG, "updateLocked(): ignoring " + id + " after app was autofilled");
return;
}
ViewState viewState = mViewStates.get(id);
if (viewState == null) {
- viewState = new ViewState(this, id, this);
+ viewState = new ViewState(this, id, this, ViewState.STATE_INITIAL);
mViewStates.put(id, viewState);
}
if ((flags & FLAG_START_SESSION) != 0) {
// View is triggering autofill.
- mCurrentViewState = viewState;
+ mCurrentViewId = viewState.id;
viewState.update(value, virtualBounds);
+ viewState.setState(ViewState.STATE_STARTED_SESSION);
return;
}
if ((flags & FLAG_VALUE_CHANGED) != 0) {
- if (value != null && !value.equals(viewState.mAutofillValue)) {
- viewState.mValueUpdated = true;
+ if (value != null && !value.equals(viewState.getCurrentValue())) {
+
+ // TODO(b/33197203 , b/35707731): currently resets STATE_AUTOFILLED; should check
+ // first (doesn't make a difference now, but it will when it supports partitions)
+ viewState.setState(ViewState.STATE_CHANGED);
// Must check if this update was caused by autofilling the view, in which
// case we just update the value, but not the UI.
if (mAutoFilledDataset != null) {
final AutofillValue filledValue = findValue(mAutoFilledDataset, id);
if (value.equals(filledValue)) {
- viewState.mAutofillValue = value;
+ viewState.setCurrentValue(value);
return;
}
}
// Change value
- viewState.mAutofillValue = value;
+ viewState.setCurrentValue(value);
// Update the chooser UI
if (value.isText()) {
@@ -545,15 +554,14 @@
if ((flags & FLAG_VIEW_ENTERED) != 0) {
// Remove the UI if the ViewState has changed.
- if (mCurrentViewState != viewState) {
- mUi.hideFillUi(mCurrentViewState != null ? mCurrentViewState.mId : null);
- mCurrentViewState = viewState;
+ if (mCurrentViewId != viewState.id) {
+ mUi.hideFillUi(mCurrentViewId != null ? mCurrentViewId : null);
+ mCurrentViewId = viewState.id;
}
// If the ViewState is ready to be displayed, onReady() will be called.
viewState.update(value, virtualBounds);
- // TODO(b/33197203): Remove when there is a response per activity.
if (mCurrentResponse != null) {
viewState.setResponse(mCurrentResponse);
}
@@ -562,9 +570,9 @@
}
if ((flags & FLAG_VIEW_EXITED) != 0) {
- if (mCurrentViewState == viewState) {
- mUi.hideFillUi(viewState.mId);
- mCurrentViewState = null;
+ if (mCurrentViewId == viewState.id) {
+ mUi.hideFillUi(viewState.id);
+ mCurrentViewId = null;
}
return;
}
@@ -584,17 +592,17 @@
}
private void notifyUnavailableToClient() {
- if (mCurrentViewState == null) {
+ if (mCurrentViewId == null) {
// TODO(b/33197203): temporary sanity check; should never happen
- Slog.w(TAG, "notifyUnavailable(): mCurrentViewState is null");
+ Slog.w(TAG, "notifyUnavailable(): mCurrentViewId is null");
return;
}
if (!mHasCallback) return;
try {
- mClient.notifyNoFillUi(mWindowToken, mCurrentViewState.mId);
+ mClient.notifyNoFillUi(mWindowToken, mCurrentViewId);
} catch (RemoteException e) {
Slog.e(TAG, "Error notifying client no fill UI: windowToken=" + mWindowToken
- + " id=" + mCurrentViewState.mId, e);
+ + " id=" + mCurrentViewId, e);
}
}
@@ -604,20 +612,15 @@
+ "):" + response);
}
- if (mCurrentViewState == null) {
+ if (mCurrentViewId == null) {
// TODO(b/33197203): temporary sanity check; should never happen
- Slog.w(TAG, "processResponseLocked(): mCurrentViewState is null");
+ Slog.w(TAG, "processResponseLocked(): mCurrentViewId is null");
return;
}
mCurrentResponse = response;
- if (mCurrentResponse.getAuthentication() != null) {
- // Handle authentication.
- final Intent fillInIntent = createAuthFillInIntent(mStructure);
- mCurrentViewState.setResponse(mCurrentResponse, fillInIntent);
- return;
- }
+ setViewStatesLocked(response, ViewState.STATE_FILLABLE);
if ((mFlags & FLAG_MANUAL_REQUEST) != 0 && response.getDatasets() != null
&& response.getDatasets().size() == 1) {
@@ -626,7 +629,50 @@
return;
}
- mCurrentViewState.setResponse(mCurrentResponse);
+ // Updates the UI, if necessary.
+ final ViewState currentView = mViewStates.get(mCurrentViewId);
+ currentView.maybeCallOnFillReady();
+ }
+
+ /**
+ * Sets the state of all views in the given response.
+ */
+ private void setViewStatesLocked(FillResponse response, int state) {
+ final ArrayList<Dataset> datasets = response.getDatasets();
+ if (datasets != null) {
+ for (int i = 0; i < datasets.size(); i++) {
+ final Dataset dataset = datasets.get(i);
+ if (dataset == null) {
+ Slog.w(TAG, "Ignoring null dataset on " + datasets);
+ continue;
+ }
+ setViewStatesLocked(response, dataset, state);
+ }
+ }
+ }
+
+ /**
+ * Sets the state of all views in the given dataset and response.
+ */
+ private void setViewStatesLocked(@Nullable FillResponse response, @NonNull Dataset dataset,
+ int state) {
+ final ArrayList<AutofillId> ids = dataset.getFieldIds();
+ for (int j = 0; j < ids.size(); j++) {
+ final AutofillId id = ids.get(j);
+ ViewState viewState = mViewStates.get(id);
+ if (viewState != null) {
+ viewState.setState(state);
+ } else {
+ viewState = new ViewState(this, id, this, state);
+ if (DEBUG) { // TODO(b/33197203): change to VERBOSE once stable
+ Slog.d(TAG, "Adding autofillable view with id " + id + " and state " + state);
+ }
+ mViewStates.put(id, viewState);
+ }
+ if (response != null) {
+ viewState.setResponse(response);
+ }
+ }
}
void autoFill(Dataset dataset) {
@@ -640,7 +686,7 @@
}
// ...or handle authentication.
- Intent fillInIntent = createAuthFillInIntent(mStructure);
+ final Intent fillInIntent = createAuthFillInIntent(mStructure, null);
startAuthentication(dataset.getAuthentication(), fillInIntent);
}
}
@@ -649,9 +695,16 @@
return mService.getServiceName();
}
- private Intent createAuthFillInIntent(AssistStructure structure) {
- Intent fillInIntent = new Intent();
+ FillResponse getCurrentResponse() {
+ return mCurrentResponse;
+ }
+
+ private Intent createAuthFillInIntent(AssistStructure structure, Bundle extras) {
+ final Intent fillInIntent = new Intent();
fillInIntent.putExtra(AutofillManager.EXTRA_ASSIST_STRUCTURE, structure);
+ if (extras != null) {
+ fillInIntent.putExtra(AutofillManager.EXTRA_DATA_EXTRAS, extras);
+ }
return fillInIntent;
}
@@ -668,8 +721,8 @@
pw.print(prefix); pw.print("mFlags: "); pw.println(mFlags);
pw.print(prefix); pw.print("mCurrentResponse: "); pw.println(mCurrentResponse);
pw.print(prefix); pw.print("mAutoFilledDataset: "); pw.println(mAutoFilledDataset);
- pw.print(prefix); pw.print("mCurrentViewStates: "); pw.println(mCurrentViewState);
- pw.print(prefix); pw.print("mViewStates: "); pw.println(mViewStates.size());
+ pw.print(prefix); pw.print("mCurrentViewId: "); pw.println(mCurrentViewId);
+ pw.print(prefix); pw.print("mViewStates size: "); pw.println(mViewStates.size());
final String prefix2 = prefix + " ";
for (Map.Entry<AutofillId, ViewState> entry : mViewStates.entrySet()) {
pw.print(prefix); pw.print("State for id "); pw.println(entry.getKey());
@@ -696,6 +749,7 @@
Slog.d(TAG, "autoFillApp(): the buck is on the app: " + dataset);
}
mClient.autofill(mWindowToken, dataset.getFieldIds(), dataset.getFieldValues());
+ setViewStatesLocked(null, dataset, ViewState.STATE_AUTOFILLED);
} catch (RemoteException e) {
Slog.w(TAG, "Error autofilling activity: " + e);
}
diff --git a/services/autofill/java/com/android/server/autofill/ViewState.java b/services/autofill/java/com/android/server/autofill/ViewState.java
index d31dcfd..e3d9c1f 100644
--- a/services/autofill/java/com/android/server/autofill/ViewState.java
+++ b/services/autofill/java/com/android/server/autofill/ViewState.java
@@ -17,9 +17,9 @@
package com.android.server.autofill;
import android.annotation.Nullable;
-import android.content.Intent;
import android.graphics.Rect;
import android.service.autofill.FillResponse;
+import android.util.DebugUtils;
import android.view.autofill.AutofillId;
import android.view.autofill.AutofillValue;
@@ -40,55 +40,92 @@
@Nullable AutofillValue value);
}
- final AutofillId mId;
+ // NOTE: state constants must be public because of flagstoString().
+ public static final int STATE_UNKNOWN = 0x00;
+ /** Initial state. */
+ public static final int STATE_INITIAL = 0x01;
+ /** View id is present in a dataset returned by the service. */
+ public static final int STATE_FILLABLE = 0x02;
+ /** View was autofilled after user selected a dataset. */
+ public static final int STATE_AUTOFILLED = 0x04;
+ /** View value was changed, but not by the service. */
+ public static final int STATE_CHANGED = 0x08;
+ /** Set only in the View that started a session . */
+ public static final int STATE_STARTED_SESSION = 0x10;
+
+ public final AutofillId id;
private final Listener mListener;
- // TODO(b/33197203): would not need a reference to response and session if it was an inner
- // class of Session...
private final Session mSession;
private FillResponse mResponse;
- private Intent mAuthIntent;
- // TODO(b/33197203): encapsulate access so it's not called by UI
- AutofillValue mAutofillValue;
+ private AutofillValue mCurrentValue;
+ private Rect mVirtualBounds;
- // TODO(b/33197203): encapsulate access so it's not called by UI
- // Bounds if a virtual view, null otherwise
- Rect mVirtualBounds;
+ private int mState;
- boolean mValueUpdated;
-
- ViewState(Session session, AutofillId id, Listener listener) {
+ ViewState(Session session, AutofillId id, Listener listener, int state) {
mSession = session;
- mId = id;
+ this.id = id;
mListener = listener;
+ mState = state;
}
/**
- * Response should only be set once.
+ * Gets the boundaries of the virtual view, or {@code null} if the the view is not virtual.
*/
+ @Nullable
+ Rect getVirtualBounds() {
+ return mVirtualBounds;
+ }
+
+ /**
+ * Gets the current value of the view.
+ */
+ @Nullable
+ AutofillValue getCurrentValue() {
+ return mCurrentValue;
+ }
+
void setResponse(FillResponse response) {
mResponse = response;
- maybeCallOnFillReady();
}
- /**
- * Used when a {@link FillResponse} requires authentication to be unlocked.
- */
- void setResponse(FillResponse response, Intent authIntent) {
- mAuthIntent = authIntent;
- setResponse(response);
+ FillResponse getResponse() {
+ return mResponse;
}
CharSequence getServiceName() {
return mSession.getServiceName();
}
+ boolean isChanged() {
+ return (mState & STATE_CHANGED) != 0;
+ }
+
+ int getState() {
+ return mState;
+ }
+
+ String getStateAsString() {
+ return DebugUtils.flagsToString(ViewState.class, "STATE_", mState);
+ }
+
+ void setCurrentValue(AutofillValue value) {
+ mCurrentValue = value;
+ }
+
+ void setState(int state) {
+ // TODO(b/33197203 , b/35707731): currently it's always setting one state, but once it
+ // supports partitioning it will need to 'or' some of them..
+ mState = state;
+ }
+
// TODO(b/33197203): need to refactor / rename / document this method to make it clear that
// it can change the value and update the UI; similarly, should replace code that
// directly sets mAutoFilLValue to use encapsulation.
void update(@Nullable AutofillValue autofillValue, @Nullable Rect virtualBounds) {
if (autofillValue != null) {
- mAutofillValue = autofillValue;
+ mCurrentValue = autofillValue;
}
if (virtualBounds != null) {
mVirtualBounds = virtualBounds;
@@ -103,23 +140,31 @@
* fill UI is ready to be displayed (i.e. when response and bounds are set).
*/
void maybeCallOnFillReady() {
- if (mResponse != null && (mResponse.getAuthentication() != null
- || mResponse.getDatasets() != null)) {
- mListener.onFillReady(mResponse, mId, mAutofillValue);
+ // First try the current response associated with this View.
+ if (mResponse != null) {
+ if (mResponse.getDatasets() != null) {
+ mListener.onFillReady(mResponse, this.id, mCurrentValue);
+ }
+ return;
+ }
+ // Then checks if the session has a response waiting authentication; if so, uses it instead.
+ final FillResponse currentResponse = mSession.getCurrentResponse();
+ if (currentResponse.getAuthentication() != null) {
+ mListener.onFillReady(currentResponse, this.id, mCurrentValue);
}
}
@Override
public String toString() {
- return "ViewState: [id=" + mId + ", value=" + mAutofillValue + ", bounds=" + mVirtualBounds
- + ", updated = " + mValueUpdated + "]";
+ return "ViewState: [id=" + id + ", currentValue=" + mCurrentValue
+ + ", bounds=" + mVirtualBounds + ", state=" + getStateAsString() +"]";
}
void dump(String prefix, PrintWriter pw) {
- pw.print(prefix); pw.print("id:" ); pw.println(mId);
- pw.print(prefix); pw.print("value:" ); pw.println(mAutofillValue);
- pw.print(prefix); pw.print("updated:" ); pw.println(mValueUpdated);
+ pw.print(prefix); pw.print("id:" ); pw.println(this.id);
+ pw.print(prefix); pw.print("state:" ); pw.println(getStateAsString());
+ pw.print(prefix); pw.print("has response:" ); pw.println(mResponse != null);
+ pw.print(prefix); pw.print("currentValue:" ); pw.println(mCurrentValue);
pw.print(prefix); pw.print("virtualBounds:" ); pw.println(mVirtualBounds);
- pw.print(prefix); pw.print("authIntent:" ); pw.println(mAuthIntent);
}
}
\ No newline at end of file
diff --git a/services/autofill/java/com/android/server/autofill/ui/AutoFillUI.java b/services/autofill/java/com/android/server/autofill/ui/AutoFillUI.java
index 2555cee..832ff9a 100644
--- a/services/autofill/java/com/android/server/autofill/ui/AutoFillUI.java
+++ b/services/autofill/java/com/android/server/autofill/ui/AutoFillUI.java
@@ -22,6 +22,7 @@
import android.content.Context;
import android.content.IntentSender;
import android.metrics.LogMaker;
+import android.os.Bundle;
import android.os.Handler;
import android.service.autofill.Dataset;
import android.service.autofill.FillResponse;
@@ -63,7 +64,7 @@
private final MetricsLogger mMetricsLogger = new MetricsLogger();
public interface AutoFillUiCallback {
- void authenticate(@NonNull IntentSender intent);
+ void authenticate(@NonNull IntentSender intent, @Nullable Bundle extras);
void fill(@NonNull Dataset dataset);
void save();
void cancelSave();
@@ -156,7 +157,7 @@
log.setType(MetricsProto.MetricsEvent.TYPE_DETAIL);
hideFillUiUiThread();
if (mCallback != null) {
- mCallback.authenticate(response.getAuthentication());
+ mCallback.authenticate(response.getAuthentication(), response.getExtras());
}
}
diff --git a/services/core/java/com/android/server/InputMethodManagerService.java b/services/core/java/com/android/server/InputMethodManagerService.java
index 69e481f..c5f9599 100644
--- a/services/core/java/com/android/server/InputMethodManagerService.java
+++ b/services/core/java/com/android/server/InputMethodManagerService.java
@@ -28,6 +28,7 @@
import com.android.internal.inputmethod.InputMethodSubtypeSwitchingController.ImeSubtypeListItem;
import com.android.internal.inputmethod.InputMethodUtils;
import com.android.internal.inputmethod.InputMethodUtils.InputMethodSettings;
+import com.android.internal.messages.nano.SystemMessageProto.SystemMessage;
import com.android.internal.notification.SystemNotificationChannels;
import com.android.internal.os.HandlerCaller;
import com.android.internal.os.SomeArgs;
@@ -2192,7 +2193,7 @@
Slog.d(TAG, "--- show notification: label = " + summary);
}
mNotificationManager.notifyAsUser(null,
- com.android.internal.R.string.select_input_method,
+ SystemMessage.NOTE_SELECT_INPUT_METHOD,
mImeSwitcherNotification.build(), UserHandle.ALL);
mNotificationShown = true;
}
@@ -2204,7 +2205,7 @@
Slog.d(TAG, "--- hide notification");
}
mNotificationManager.cancelAsUser(null,
- com.android.internal.R.string.select_input_method, UserHandle.ALL);
+ SystemMessage.NOTE_SELECT_INPUT_METHOD, UserHandle.ALL);
mNotificationShown = false;
}
}
diff --git a/services/core/java/com/android/server/LockSettingsService.java b/services/core/java/com/android/server/LockSettingsService.java
index c0d1107..6f3ff10 100644
--- a/services/core/java/com/android/server/LockSettingsService.java
+++ b/services/core/java/com/android/server/LockSettingsService.java
@@ -76,6 +76,7 @@
import android.util.Slog;
import com.android.internal.annotations.VisibleForTesting;
+import com.android.internal.messages.nano.SystemMessageProto.SystemMessage;
import com.android.internal.notification.SystemNotificationChannels;
import com.android.internal.util.ArrayUtils;
import com.android.internal.widget.ICheckCredentialProgressCallback;
@@ -127,7 +128,6 @@
public class LockSettingsService extends ILockSettings.Stub {
private static final String TAG = "LockSettingsService";
private static final String PERMISSION = ACCESS_KEYGUARD_SECURE_STORAGE;
- private static final int FBE_ENCRYPTED_NOTIFICATION = 0;
private static final boolean DEBUG = false;
private static final int PROFILE_KEY_IV_SIZE = 12;
@@ -461,12 +461,14 @@
.setVisibility(Notification.VISIBILITY_PUBLIC)
.setContentIntent(intent)
.build();
- mNotificationManager.notifyAsUser(null, FBE_ENCRYPTED_NOTIFICATION, notification, user);
+ mNotificationManager.notifyAsUser(null, SystemMessage.NOTE_FBE_ENCRYPTED_NOTIFICATION,
+ notification, user);
}
private void hideEncryptionNotification(UserHandle userHandle) {
if (DEBUG) Slog.v(TAG, "hide encryption notification, user: " + userHandle.getIdentifier());
- mNotificationManager.cancelAsUser(null, FBE_ENCRYPTED_NOTIFICATION, userHandle);
+ mNotificationManager.cancelAsUser(null, SystemMessage.NOTE_FBE_ENCRYPTED_NOTIFICATION,
+ userHandle);
}
public void onCleanupUser(int userId) {
diff --git a/services/core/java/com/android/server/UiModeManagerService.java b/services/core/java/com/android/server/UiModeManagerService.java
index e4f4687..227e2a2 100644
--- a/services/core/java/com/android/server/UiModeManagerService.java
+++ b/services/core/java/com/android/server/UiModeManagerService.java
@@ -58,6 +58,7 @@
import com.android.internal.R;
import com.android.internal.app.DisableCarModeActivity;
+import com.android.internal.messages.nano.SystemMessageProto.SystemMessage;
import com.android.internal.notification.SystemNotificationChannels;
import com.android.server.power.ShutdownThread;
import com.android.server.twilight.TwilightListener;
@@ -710,10 +711,10 @@
PendingIntent.getActivityAsUser(context, 0, carModeOffIntent, 0,
null, UserHandle.CURRENT));
mNotificationManager.notifyAsUser(null,
- R.string.car_mode_disable_notification_title, n.build(), UserHandle.ALL);
+ SystemMessage.NOTE_CAR_MODE_DISABLE, n.build(), UserHandle.ALL);
} else {
mNotificationManager.cancelAsUser(null,
- R.string.car_mode_disable_notification_title, UserHandle.ALL);
+ SystemMessage.NOTE_CAR_MODE_DISABLE, UserHandle.ALL);
}
}
}
diff --git a/services/core/java/com/android/server/accounts/AccountManagerService.java b/services/core/java/com/android/server/accounts/AccountManagerService.java
index 625e4a5..ad2ed93 100644
--- a/services/core/java/com/android/server/accounts/AccountManagerService.java
+++ b/services/core/java/com/android/server/accounts/AccountManagerService.java
@@ -89,6 +89,7 @@
import com.android.internal.annotations.GuardedBy;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.content.PackageMonitor;
+import com.android.internal.messages.nano.SystemMessageProto.SystemMessage;
import com.android.internal.notification.SystemNotificationChannels;
import com.android.internal.util.ArrayUtils;
import com.android.internal.util.IndentingPrintWriter;
@@ -189,7 +190,8 @@
}
private final LinkedHashMap<String, Session> mSessions = new LinkedHashMap<String, Session>();
- private final AtomicInteger mNotificationIds = new AtomicInteger(1);
+ private final AtomicInteger mNotificationIds =
+ new AtomicInteger(SystemMessage.ACCOUNT_MANAGER_BASE);
static class UserAccounts {
private final int userId;
@@ -1407,14 +1409,10 @@
long identityToken = clearCallingIdentity();
try {
UserAccounts accounts = getUserAccounts(userId);
- synchronized (accounts.dbLock) {
- synchronized (accounts.cacheLock) {
- if (!accountExistsCacheLocked(accounts, account)) {
- return null;
- }
- return readUserDataInternalLocked(accounts, account, key);
- }
+ if (!accountExistsCache(accounts, account)) {
+ return null;
}
+ return readUserDataInternal(accounts, account, key);
} finally {
restoreCallingIdentity(identityToken);
}
@@ -2503,54 +2501,53 @@
long identityToken = clearCallingIdentity();
try {
UserAccounts accounts = getUserAccounts(userId);
- synchronized (accounts.dbLock) {
- synchronized (accounts.cacheLock) {
- if (!accountExistsCacheLocked(accounts, account)) {
- return;
- }
- setUserdataInternalLocked(accounts, account, key, value);
- }
+ if (!accountExistsCache(accounts, account)) {
+ return;
}
+ setUserdataInternal(accounts, account, key, value);
} finally {
restoreCallingIdentity(identityToken);
}
}
- private boolean accountExistsCacheLocked(UserAccounts accounts, Account account) {
- if (accounts.accountCache.containsKey(account.type)) {
- for (Account acc : accounts.accountCache.get(account.type)) {
- if (acc.name.equals(account.name)) {
- return true;
+ private boolean accountExistsCache(UserAccounts accounts, Account account) {
+ synchronized (accounts.cacheLock) {
+ if (accounts.accountCache.containsKey(account.type)) {
+ for (Account acc : accounts.accountCache.get(account.type)) {
+ if (acc.name.equals(account.name)) {
+ return true;
+ }
}
}
}
return false;
}
- private void setUserdataInternalLocked(UserAccounts accounts, Account account, String key,
+ private void setUserdataInternal(UserAccounts accounts, Account account, String key,
String value) {
- if (account == null || key == null) {
- return;
- }
- accounts.accountsDb.beginTransaction();
- try {
- long accountId = accounts.accountsDb.findDeAccountId(account);
- if (accountId < 0) {
- return;
- }
- long extrasId = accounts.accountsDb.findExtrasIdByAccountId(accountId, key);
- if (extrasId < 0) {
- extrasId = accounts.accountsDb.insertExtra(accountId, key, value);
- if (extrasId < 0) {
+ synchronized (accounts.dbLock) {
+ accounts.accountsDb.beginTransaction();
+ try {
+ long accountId = accounts.accountsDb.findDeAccountId(account);
+ if (accountId < 0) {
return;
}
- } else if (!accounts.accountsDb.updateExtra(extrasId, value)) {
- return;
+ long extrasId = accounts.accountsDb.findExtrasIdByAccountId(accountId, key);
+ if (extrasId < 0) {
+ extrasId = accounts.accountsDb.insertExtra(accountId, key, value);
+ if (extrasId < 0) {
+ return;
+ }
+ } else if (!accounts.accountsDb.updateExtra(extrasId, value)) {
+ return;
+ }
+ accounts.accountsDb.setTransactionSuccessful();
+ } finally {
+ accounts.accountsDb.endTransaction();
}
- writeUserDataIntoCacheLocked(accounts, account, key, value);
- accounts.accountsDb.setTransactionSuccessful();
- } finally {
- accounts.accountsDb.endTransaction();
+ synchronized (accounts.cacheLock) {
+ writeUserDataIntoCacheLocked(accounts, account, key, value);
+ }
}
}
@@ -5622,6 +5619,7 @@
}
}
+ /** protected by the {@code dbLock}, {@code cacheLock} */
protected void writeUserDataIntoCacheLocked(UserAccounts accounts,
Account account, String key, String value) {
Map<String, String> userDataForAccount = accounts.userDataCache.get(account);
@@ -5688,13 +5686,24 @@
}
}
- protected String readUserDataInternalLocked(
- UserAccounts accounts, Account account, String key) {
- Map<String, String> userDataForAccount = accounts.userDataCache.get(account);
+ private String readUserDataInternal(UserAccounts accounts, Account account, String key) {
+ Map<String, String> userDataForAccount;
+ // Fast path - check if data is already cached
+ synchronized (accounts.cacheLock) {
+ userDataForAccount = accounts.userDataCache.get(account);
+ }
+ // If not cached yet - do slow path and sync with db if necessary
if (userDataForAccount == null) {
- // need to populate the cache for this account
- userDataForAccount = accounts.accountsDb.findUserExtrasForAccount(account);
- accounts.userDataCache.put(account, userDataForAccount);
+ synchronized (accounts.dbLock) {
+ synchronized (accounts.cacheLock) {
+ userDataForAccount = accounts.userDataCache.get(account);
+ if (userDataForAccount == null) {
+ // need to populate the cache for this account
+ userDataForAccount = accounts.accountsDb.findUserExtrasForAccount(account);
+ accounts.userDataCache.put(account, userDataForAccount);
+ }
+ }
+ }
}
return userDataForAccount.get(key);
}
diff --git a/services/core/java/com/android/server/am/ActiveServices.java b/services/core/java/com/android/server/am/ActiveServices.java
index b4f8f61..8b0665c 100644
--- a/services/core/java/com/android/server/am/ActiveServices.java
+++ b/services/core/java/com/android/server/am/ActiveServices.java
@@ -17,7 +17,6 @@
package com.android.server.am;
import static android.content.pm.PackageManager.PERMISSION_GRANTED;
-import static android.Manifest.permission.INTERACT_ACROSS_USERS_FULL;
import static com.android.server.am.ActivityManagerDebugConfig.*;
import java.io.FileDescriptor;
@@ -96,6 +95,10 @@
// How long we wait for a service to finish executing.
static final int SERVICE_BACKGROUND_TIMEOUT = SERVICE_TIMEOUT * 10;
+ // How long the startForegroundService() grace period is to get around to
+ // calling startForeground() before we ANR + stop it.
+ static final int SERVICE_START_FOREGROUND_TIMEOUT = 5*1000;
+
// How long a service needs to be running until restarting its process
// is no longer considered to be a relaunch of the service.
static final int SERVICE_RESTART_DURATION = 1*1000;
@@ -307,8 +310,8 @@
}
ComponentName startServiceLocked(IApplicationThread caller, Intent service, String resolvedType,
- int id, Notification notification,
- int callingPid, int callingUid, String callingPackage, final int userId)
+ int id, Notification notification, int callingPid, int callingUid,
+ boolean fgRequired, String callingPackage, final int userId)
throws TransactionTooLargeException {
if (DEBUG_DELAYED_STARTS) Slog.v(TAG_SERVICE, "startService: " + service
+ " type=" + resolvedType + " args=" + service.getExtras());
@@ -345,8 +348,9 @@
return null;
}
- // Non-null notification means this is a start directly into the foreground
- if (!r.startRequested && notification == null) {
+ // If this isn't a direct-to-foreground start, check our ability to kick off an
+ // arbitrary service
+ if (!r.startRequested && !fgRequired) {
final long token = Binder.clearCallingIdentity();
try {
// Before going further -- if this app is not allowed to start services in the
@@ -392,12 +396,13 @@
r.lastActivity = SystemClock.uptimeMillis();
r.startRequested = true;
r.delayedStop = false;
+ r.fgRequired = fgRequired;
r.pendingStarts.add(new ServiceRecord.StartItem(r, false, r.makeNextStartId(),
service, neededGrants));
final ServiceMap smap = getServiceMapLocked(r.userId);
boolean addToStarting = false;
- if (!callerFg && r.app == null
+ if (!callerFg && !fgRequired && r.app == null
&& mAm.mUserController.hasStartedUserState(r.userId)) {
ProcessRecord proc = mAm.getProcessRecordLocked(r.processName, r.appInfo.uid, false);
if (proc == null || proc.curProcState > ActivityManager.PROCESS_STATE_RECEIVER) {
@@ -449,9 +454,9 @@
Slog.v(TAG_SERVICE, sb.toString());
}
} else if (DEBUG_DELAYED_STARTS) {
- if (callerFg) {
+ if (callerFg || fgRequired) {
Slog.v(TAG_SERVICE, "Not potential delay (callerFg=" + callerFg + " uid="
- + callingUid + " pid=" + callingPid + "): " + r);
+ + callingUid + " pid=" + callingPid + " fgRequired=" + fgRequired + "): " + r);
} else if (r.app != null) {
Slog.v(TAG_SERVICE, "Not potential delay (cur app=" + r.app + "): " + r);
} else {
@@ -461,6 +466,7 @@
}
ComponentName cmp = startServiceInnerLocked(smap, service, r, callerFg, addToStarting);
+ // STOPSHIP deprecated; remove when NotificationManager.startServiceInForeground is retired
if (notification != null) {
setServiceForegroundInnerLocked(r, id, notification, 0);
}
@@ -540,7 +546,7 @@
if (first) {
smap.rescheduleDelayedStartsLocked();
}
- } else if (callerFg) {
+ } else if (callerFg || r.fgRequired) {
smap.ensureNotStartingBackgroundLocked(r);
}
@@ -756,8 +762,17 @@
}
}
}
+ if (r.fgRequired) {
+ if (DEBUG_BACKGROUND_CHECK) {
+ Slog.i(TAG, "Service called startForeground() as required: " + r);
+ }
+ r.fgRequired = false;
+ r.fgWaiting = false;
+ mAm.mHandler.removeMessages(
+ ActivityManagerService.SERVICE_FOREGROUND_TIMEOUT_MSG, r);
+ }
if (r.foregroundId != id) {
- cancelForegroudNotificationLocked(r);
+ cancelForegroundNotificationLocked(r);
r.foregroundId = id;
}
notification.flags |= Notification.FLAG_FOREGROUND_SERVICE;
@@ -779,7 +794,7 @@
}
}
if ((flags & Service.STOP_FOREGROUND_REMOVE) != 0) {
- cancelForegroudNotificationLocked(r);
+ cancelForegroundNotificationLocked(r);
r.foregroundId = 0;
r.foregroundNoti = null;
} else if (r.appInfo.targetSdkVersion >= Build.VERSION_CODES.LOLLIPOP) {
@@ -792,7 +807,7 @@
}
}
- private void cancelForegroudNotificationLocked(ServiceRecord r) {
+ private void cancelForegroundNotificationLocked(ServiceRecord r) {
if (r.foregroundId != 0) {
// First check to see if this app has any other active foreground services
// with the same notification ID. If so, we shouldn't actually cancel it,
@@ -1631,7 +1646,7 @@
r.makeRestarting(mAm.mProcessStats.getMemFactorLocked(), now);
}
- cancelForegroudNotificationLocked(r);
+ cancelForegroundNotificationLocked(r);
mAm.mHandler.removeCallbacks(r.restarter);
mAm.mHandler.postAtTime(r.restarter, r.nextRestartTime);
@@ -1718,7 +1733,9 @@
return null;
}
- if (DEBUG_SERVICE) Slog.v(TAG_SERVICE, "Bringing up " + r + " " + r.intent);
+ if (DEBUG_SERVICE) {
+ Slog.v(TAG_SERVICE, "Bringing up " + r + " " + r.intent + " fg=" + r.fgRequired);
+ }
// We are now bringing the service up, so no longer in the
// restarting state.
@@ -1944,8 +1961,10 @@
ServiceRecord.StartItem si = null;
try {
si = r.pendingStarts.remove(0);
- if (DEBUG_SERVICE) Slog.v(TAG_SERVICE, "Sending arguments to: "
- + r + " " + r.intent + " args=" + si.intent);
+ if (DEBUG_SERVICE) {
+ Slog.v(TAG_SERVICE, "Sending arguments to: "
+ + r + " " + r.intent + " args=" + si.intent);
+ }
if (si.intent == null && N > 1) {
// If somehow we got a dummy null intent in the middle,
// then skip it. DO NOT skip a null intent when it is
@@ -1966,6 +1985,19 @@
oomAdjusted = true;
mAm.updateOomAdjLocked(r.app);
}
+ if (r.fgRequired && !r.fgWaiting) {
+ if (!r.isForeground) {
+ if (DEBUG_BACKGROUND_CHECK) {
+ Slog.i(TAG, "Launched service must call startForeground() within timeout: " + r);
+ }
+ scheduleServiceForegroundTransitionTimeoutLocked(r);
+ } else {
+ if (DEBUG_BACKGROUND_CHECK) {
+ Slog.i(TAG, "Service already foreground; no new timeout: " + r);
+ }
+ r.fgRequired = false;
+ }
+ }
int flags = 0;
if (si.deliveryCount > 1) {
flags |= Service.START_FLAG_RETRY;
@@ -2101,7 +2133,7 @@
}
}
- cancelForegroudNotificationLocked(r);
+ cancelForegroundNotificationLocked(r);
r.isForeground = false;
r.foregroundId = 0;
r.foregroundNoti = null;
@@ -2925,23 +2957,53 @@
}
}
+ void serviceForegroundTimeout(ServiceRecord r) {
+ ProcessRecord app;
+ synchronized (mAm) {
+ if (!r.fgRequired) {
+ return;
+ }
+
+ if (DEBUG_BACKGROUND_CHECK) {
+ Slog.i(TAG, "Service foreground-required timeout for " + r);
+ }
+ app = r.app;
+ r.fgWaiting = false;
+ stopServiceLocked(r);
+ }
+
+ if (app != null) {
+ mAm.mAppErrors.appNotResponding(app, null, null, false,
+ "Context.startForegroundService() did not then call Service.startForeground()");
+ }
+ }
+
void scheduleServiceTimeoutLocked(ProcessRecord proc) {
if (proc.executingServices.size() == 0 || proc.thread == null) {
return;
}
- long now = SystemClock.uptimeMillis();
Message msg = mAm.mHandler.obtainMessage(
ActivityManagerService.SERVICE_TIMEOUT_MSG);
msg.obj = proc;
- mAm.mHandler.sendMessageAtTime(msg,
- proc.execServicesFg ? (now+SERVICE_TIMEOUT) : (now+ SERVICE_BACKGROUND_TIMEOUT));
+ mAm.mHandler.sendMessageDelayed(msg,
+ proc.execServicesFg ? SERVICE_TIMEOUT : SERVICE_BACKGROUND_TIMEOUT);
+ }
+
+ void scheduleServiceForegroundTransitionTimeoutLocked(ServiceRecord r) {
+ if (r.app.executingServices.size() == 0 || r.app.thread == null) {
+ return;
+ }
+ Message msg = mAm.mHandler.obtainMessage(
+ ActivityManagerService.SERVICE_FOREGROUND_TIMEOUT_MSG);
+ msg.obj = r;
+ r.fgWaiting = true;
+ mAm.mHandler.sendMessageDelayed(msg, SERVICE_START_FOREGROUND_TIMEOUT);
}
final class ServiceDumper {
private final FileDescriptor fd;
private final PrintWriter pw;
private final String[] args;
- private final int opti;
private final boolean dumpAll;
private final String dumpPackage;
private final ItemMatcher matcher;
@@ -2962,7 +3024,6 @@
this.fd = fd;
this.pw = pw;
this.args = args;
- this.opti = opti;
this.dumpAll = dumpAll;
this.dumpPackage = dumpPackage;
matcher = new ItemMatcher();
diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java
index f602e43..c64204f 100644
--- a/services/core/java/com/android/server/am/ActivityManagerService.java
+++ b/services/core/java/com/android/server/am/ActivityManagerService.java
@@ -339,6 +339,7 @@
import com.android.internal.app.procstats.ProcessStats;
import com.android.internal.logging.MetricsLogger;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
+import com.android.internal.messages.nano.SystemMessageProto.SystemMessage;
import com.android.internal.os.BackgroundThread;
import com.android.internal.os.BatteryStatsImpl;
import com.android.internal.os.IResultReceiver;
@@ -573,10 +574,11 @@
// Determines whether to take full screen screenshots
static final boolean TAKE_FULLSCREEN_SCREENSHOTS = true;
+ // STOPSHIP: Update default to a smaller value.
/**
* Default value for {@link Settings.Global#NETWORK_ACCESS_TIMEOUT_MS}.
*/
- private static final long NETWORK_ACCESS_TIMEOUT_DEFAULT_MS = 0; // 0 sec
+ private static final long NETWORK_ACCESS_TIMEOUT_DEFAULT_MS = 2000; // 2 sec
/**
* State indicating that there is no need for any blocking for network.
@@ -1726,6 +1728,7 @@
static final int HANDLE_TRUST_STORAGE_UPDATE_MSG = 63;
static final int REPORT_LOCKED_BOOT_COMPLETE_MSG = 64;
static final int NOTIFY_VR_SLEEPING_MSG = 65;
+ static final int SERVICE_FOREGROUND_TIMEOUT_MSG = 66;
static final int START_USER_SWITCH_FG_MSG = 712;
static final int FIRST_ACTIVITY_STACK_MSG = 100;
@@ -1991,6 +1994,9 @@
}
mServices.serviceTimeout((ProcessRecord)msg.obj);
} break;
+ case SERVICE_FOREGROUND_TIMEOUT_MSG: {
+ mServices.serviceForegroundTimeout((ServiceRecord)msg.obj);
+ } break;
case UPDATE_TIME_ZONE: {
synchronized (ActivityManagerService.this) {
for (int i = mLruProcesses.size() - 1 ; i >= 0 ; i--) {
@@ -2117,7 +2123,7 @@
try {
int[] outId = new int[1];
inm.enqueueNotificationWithTag("android", "android", null,
- R.string.heavy_weight_notification,
+ SystemMessage.NOTE_HEAVY_WEIGHT_NOTIFICATION,
notification, outId, root.userId);
} catch (RuntimeException e) {
Slog.w(ActivityManagerService.TAG,
@@ -2135,7 +2141,7 @@
}
try {
inm.cancelNotificationWithTag("android", null,
- R.string.heavy_weight_notification, msg.arg1);
+ SystemMessage.NOTE_HEAVY_WEIGHT_NOTIFICATION, msg.arg1);
} catch (RuntimeException e) {
Slog.w(ActivityManagerService.TAG,
"Error canceling notification for service", e);
@@ -2372,7 +2378,7 @@
try {
int[] outId = new int[1];
inm.enqueueNotificationWithTag("android", "android", null,
- R.string.dump_heap_notification,
+ SystemMessage.NOTE_DUMP_HEAP_NOTIFICATION,
notification, outId, userId);
} catch (RuntimeException e) {
Slog.w(ActivityManagerService.TAG,
@@ -6552,6 +6558,7 @@
if (Arrays.binarySearch(mDeviceIdleTempWhitelist, UserHandle.getAppId(proc.uid)) >= 0) {
uidRec.setWhitelist = uidRec.curWhitelist = true;
}
+ uidRec.updateHasInternetPermission();
mActiveUids.put(proc.uid, uidRec);
noteUidProcessState(uidRec.uid, uidRec.curProcState);
enqueueUidChangeLocked(uidRec, -1, UidRecord.CHANGE_ACTIVE);
@@ -17898,7 +17905,7 @@
@Override
public ComponentName startService(IApplicationThread caller, Intent service,
- String resolvedType, int id, Notification notification,
+ String resolvedType, int id, Notification notification, boolean requireForeground,
String callingPackage, int userId)
throws TransactionTooLargeException {
enforceNotIsolatedCaller("startService");
@@ -17912,28 +17919,28 @@
}
if (DEBUG_SERVICE) Slog.v(TAG_SERVICE,
- "startService: " + service + " type=" + resolvedType);
+ "*** startService: " + service + " type=" + resolvedType + " fg=" + requireForeground);
synchronized(this) {
final int callingPid = Binder.getCallingPid();
final int callingUid = Binder.getCallingUid();
final long origId = Binder.clearCallingIdentity();
ComponentName res = mServices.startServiceLocked(caller, service,
- resolvedType, id, notification,
- callingPid, callingUid, callingPackage, userId);
+ resolvedType, id, notification, callingPid, callingUid,
+ requireForeground, callingPackage, userId);
Binder.restoreCallingIdentity(origId);
return res;
}
}
ComponentName startServiceInPackage(int uid, Intent service, String resolvedType,
- String callingPackage, int userId)
+ boolean fgRequired, String callingPackage, int userId)
throws TransactionTooLargeException {
synchronized(this) {
if (DEBUG_SERVICE) Slog.v(TAG_SERVICE,
"startServiceInPackage: " + service + " type=" + resolvedType);
final long origId = Binder.clearCallingIdentity();
ComponentName res = mServices.startServiceLocked(null, service,
- resolvedType, 0, null, -1, uid, callingPackage, userId);
+ resolvedType, 0, null, -1, uid, fgRequired, callingPackage, userId);
Binder.restoreCallingIdentity(origId);
return res;
}
@@ -18867,9 +18874,7 @@
}
switch (action) {
case Intent.ACTION_UID_REMOVED:
- final Bundle intentExtras = intent.getExtras();
- final int uid = intentExtras != null
- ? intentExtras.getInt(Intent.EXTRA_UID) : -1;
+ final int uid = getUidFromIntent(intent);
if (uid >= 0) {
mBatteryStatsService.removeUid(uid);
mAppOpsService.uidRemoved(uid);
@@ -19065,6 +19070,18 @@
mHandler.sendEmptyMessage(HANDLE_TRUST_STORAGE_UPDATE_MSG);
break;
}
+
+ if (Intent.ACTION_PACKAGE_ADDED.equals(action) ||
+ Intent.ACTION_PACKAGE_REMOVED.equals(action) ||
+ Intent.ACTION_PACKAGE_REPLACED.equals(action)) {
+ final int uid = getUidFromIntent(intent);
+ if (uid != -1) {
+ final UidRecord uidRec = mActiveUids.get(uid);
+ if (uidRec != null) {
+ uidRec.updateHasInternetPermission();
+ }
+ }
+ }
}
// Add to the sticky list if requested.
@@ -19331,6 +19348,18 @@
return ActivityManager.BROADCAST_SUCCESS;
}
+ /**
+ * @return uid from the extra field {@link Intent#EXTRA_UID} if present, Otherwise -1
+ */
+ private int getUidFromIntent(Intent intent) {
+ if (intent == null) {
+ return -1;
+ }
+ final Bundle intentExtras = intent.getExtras();
+ return intent.hasExtra(Intent.EXTRA_UID)
+ ? intentExtras.getInt(Intent.EXTRA_UID) : -1;
+ }
+
final void rotateBroadcastStatsIfNeededLocked() {
final long now = SystemClock.elapsedRealtime();
if (mCurBroadcastStats == null ||
@@ -22549,6 +22578,9 @@
if (!mInjector.isNetworkRestrictedForUid(uidRec.uid)) {
continue;
}
+ if (!UserHandle.isApp(uidRec.uid) || !uidRec.hasInternetPermission) {
+ continue;
+ }
// If process state is not changed, then there's nothing to do.
if (uidRec.setProcState == uidRec.curProcState) {
continue;
@@ -22559,7 +22591,7 @@
if (blockState == NETWORK_STATE_NO_CHANGE) {
continue;
}
- synchronized (uidRec.lock) {
+ synchronized (uidRec.networkStateLock) {
uidRec.curProcStateSeq = ++mProcStateSeqCounter;
if (blockState == NETWORK_STATE_BLOCK) {
if (blockingUids == null) {
@@ -22572,7 +22604,7 @@
+ " threads for uid: " + uidRec);
}
if (uidRec.waitingForNetwork) {
- uidRec.lock.notifyAll();
+ uidRec.networkStateLock.notifyAll();
}
}
}
@@ -23502,7 +23534,7 @@
return;
}
}
- synchronized (record.lock) {
+ synchronized (record.networkStateLock) {
if (record.lastNetworkUpdatedProcStateSeq >= procStateSeq) {
if (DEBUG_NETWORK) {
Slog.d(TAG_NETWORK, "procStateSeq: " + procStateSeq + " has already"
@@ -23524,7 +23556,7 @@
Slog.d(TAG_NETWORK, "Notifying all blocking threads for uid: " + uid
+ ", procStateSeq: " + procStateSeq);
}
- record.lock.notifyAll();
+ record.networkStateLock.notifyAll();
}
}
}
@@ -23549,7 +23581,7 @@
return;
}
}
- synchronized (record.lock) {
+ synchronized (record.networkStateLock) {
if (record.lastDispatchedProcStateSeq < procStateSeq) {
if (DEBUG_NETWORK) {
Slog.d(TAG_NETWORK, "Uid state change for seq no. " + procStateSeq + " is not "
@@ -23583,7 +23615,7 @@
}
final long startTime = SystemClock.uptimeMillis();
record.waitingForNetwork = true;
- record.lock.wait(mWaitForNetworkTimeoutMs);
+ record.networkStateLock.wait(mWaitForNetworkTimeoutMs);
record.waitingForNetwork = false;
final long totalTime = SystemClock.uptimeMillis() - startTime;
if (totalTime >= mWaitForNetworkTimeoutMs) {
diff --git a/services/core/java/com/android/server/am/ActivityManagerShellCommand.java b/services/core/java/com/android/server/am/ActivityManagerShellCommand.java
index 9b6d13a..748aa6f 100644
--- a/services/core/java/com/android/server/am/ActivityManagerShellCommand.java
+++ b/services/core/java/com/android/server/am/ActivityManagerShellCommand.java
@@ -145,7 +145,12 @@
return runStartActivity(pw);
case "startservice":
case "start-service":
- return runStartService(pw);
+ return runStartService(pw, false);
+ case "startforegroundservice":
+ case "startfgservice":
+ case "start-foreground-service":
+ case "start-fg-service":
+ return runStartService(pw, true);
case "stopservice":
case "stop-service":
return runStopService(pw);
@@ -504,7 +509,7 @@
return 0;
}
- int runStartService(PrintWriter pw) throws RemoteException {
+ int runStartService(PrintWriter pw, boolean asForeground) throws RemoteException {
final PrintWriter err = getErrPrintWriter();
Intent intent;
try {
@@ -519,7 +524,7 @@
pw.println("Starting service: " + intent);
pw.flush();
ComponentName cn = mInterface.startService(null, intent, intent.getType(),
- -1, null, SHELL_PACKAGE_NAME, mUserId);
+ -1, null, asForeground, SHELL_PACKAGE_NAME, mUserId);
if (cn == null) {
err.println("Error: Not found; no service started.");
return -1;
diff --git a/services/core/java/com/android/server/am/ActivityRecord.java b/services/core/java/com/android/server/am/ActivityRecord.java
index 2f61038..8f1aa0d 100644
--- a/services/core/java/com/android/server/am/ActivityRecord.java
+++ b/services/core/java/com/android/server/am/ActivityRecord.java
@@ -1827,7 +1827,8 @@
synchronized (service) {
anrActivity = getWaitingHistoryRecordLocked();
anrApp = app;
- windowFromSameProcessAsActivity = app == null || app.pid == windowPid;
+ windowFromSameProcessAsActivity =
+ app == null || app.pid == windowPid || windowPid == -1;
}
if (windowFromSameProcessAsActivity) {
return service.inputDispatchingTimedOut(anrApp, anrActivity, this, false, reason);
diff --git a/services/core/java/com/android/server/am/ActivityStarter.java b/services/core/java/com/android/server/am/ActivityStarter.java
index 9258539..e9b3e8d 100644
--- a/services/core/java/com/android/server/am/ActivityStarter.java
+++ b/services/core/java/com/android/server/am/ActivityStarter.java
@@ -966,7 +966,7 @@
mService.mWindowManager.continueSurfaceLayout();
}
- postStartActivityProcessing(r, result, mSupervisor.mFocusedStack.mStackId, mSourceRecord,
+ postStartActivityProcessing(r, result, mSupervisor.getLastStack().mStackId, mSourceRecord,
mTargetStack);
return result;
diff --git a/services/core/java/com/android/server/am/AppErrors.java b/services/core/java/com/android/server/am/AppErrors.java
index c10f77c..21c131c 100644
--- a/services/core/java/com/android/server/am/AppErrors.java
+++ b/services/core/java/com/android/server/am/AppErrors.java
@@ -829,6 +829,9 @@
if (r.persistent) {
firstPids.add(pid);
if (DEBUG_ANR) Slog.i(TAG, "Adding persistent proc: " + r);
+ } else if (r.treatLikeActivity) {
+ firstPids.add(pid);
+ if (DEBUG_ANR) Slog.i(TAG, "Adding likely IME: " + r);
} else {
lastPids.put(pid, Boolean.TRUE);
if (DEBUG_ANR) Slog.i(TAG, "Adding ANR proc: " + r);
diff --git a/services/core/java/com/android/server/am/BatteryStatsService.java b/services/core/java/com/android/server/am/BatteryStatsService.java
index 1712d48..d3935d1 100644
--- a/services/core/java/com/android/server/am/BatteryStatsService.java
+++ b/services/core/java/com/android/server/am/BatteryStatsService.java
@@ -149,9 +149,11 @@
case MSG_WRITE_TO_DISK:
updateExternalStatsSync("write", UPDATE_ALL);
+ Slog.d(TAG, "begin writeAsyncLocked");
synchronized (mStats) {
mStats.writeAsyncLocked();
}
+ Slog.d(TAG, "end writeAsyncLocked");
break;
}
}
@@ -191,19 +193,24 @@
@Override
public String getPlatformLowPowerStats() {
- mUtf8BufferStat.clear();
- mUtf16BufferStat.clear();
- mDecoderStat.reset();
- int bytesWritten = getPlatformLowPowerStats(mUtf8BufferStat);
- if (bytesWritten < 0) {
- return null;
- } else if (bytesWritten == 0) {
- return "Empty";
+ Slog.d(TAG, "begin getPlatformLowPowerStats");
+ try {
+ mUtf8BufferStat.clear();
+ mUtf16BufferStat.clear();
+ mDecoderStat.reset();
+ int bytesWritten = getPlatformLowPowerStats(mUtf8BufferStat);
+ if (bytesWritten < 0) {
+ return null;
+ } else if (bytesWritten == 0) {
+ return "Empty";
+ }
+ mUtf8BufferStat.limit(bytesWritten);
+ mDecoderStat.decode(mUtf8BufferStat, mUtf16BufferStat, true);
+ mUtf16BufferStat.flip();
+ return mUtf16BufferStat.toString();
+ } finally {
+ Slog.d(TAG, "end getPlatformLowPowerStats");
}
- mUtf8BufferStat.limit(bytesWritten);
- mDecoderStat.decode(mUtf8BufferStat, mUtf16BufferStat, true);
- mUtf16BufferStat.flip();
- return mUtf16BufferStat.toString();
}
BatteryStatsService(File systemDir, Handler handler) {
@@ -551,9 +558,11 @@
public void noteScreenState(int state) {
enforceCallingPermission();
+ Slog.d(TAG, "begin noteScreenState");
synchronized (mStats) {
mStats.noteScreenStateLocked(state);
}
+ Slog.d(TAG, "end noteScreenState");
}
public void noteScreenBrightness(int brightness) {
@@ -706,9 +715,11 @@
public void noteStartCamera(int uid) {
enforceCallingPermission();
+ Slog.d(TAG, "begin noteStartCamera");
synchronized (mStats) {
mStats.noteCameraOnLocked(uid);
}
+ Slog.d(TAG, "end noteStartCamera");
}
public void noteStopCamera(int uid) {
@@ -1009,24 +1020,32 @@
mHandler.post(new Runnable() {
@Override
public void run() {
- synchronized (mStats) {
- final boolean onBattery = plugType == BatteryStatsImpl.BATTERY_PLUGGED_NONE;
- if (mStats.isOnBattery() == onBattery) {
- // The battery state has not changed, so we don't need to sync external
- // stats immediately.
- mStats.setBatteryStateLocked(status, health, plugType, level, temp, volt,
- chargeUAh, chargeFullUAh);
- return;
+ Slog.d(TAG, "begin setBatteryStateLocked");
+ try {
+ synchronized (mStats) {
+ final boolean onBattery = plugType == BatteryStatsImpl.BATTERY_PLUGGED_NONE;
+ if (mStats.isOnBattery() == onBattery) {
+ // The battery state has not changed, so we don't need to sync external
+ // stats immediately.
+ mStats.setBatteryStateLocked(status, health, plugType, level, temp,
+ volt,
+ chargeUAh, chargeFullUAh);
+ return;
+ }
}
+ } finally {
+ Slog.d(TAG, "end setBatteryStateLocked");
}
// Sync external stats first as the battery has changed states. If we don't sync
// immediately here, we may not collect the relevant data later.
updateExternalStatsSync("battery-state", BatteryStatsImpl.ExternalStatsSync.UPDATE_ALL);
+ Slog.d(TAG, "begin setBatteryStateLocked");
synchronized (mStats) {
mStats.setBatteryStateLocked(status, health, plugType, level, temp, volt,
chargeUAh, chargeFullUAh);
}
+ Slog.d(TAG, "end setBatteryStateLocked");
}
});
}
@@ -1326,19 +1345,23 @@
}
}
}
+ Slog.d(TAG, "begin dumpCheckinLocked from UID " + Binder.getCallingUid());
synchronized (mStats) {
mStats.dumpCheckinLocked(mContext, pw, apps, flags, historyStart);
if (writeData) {
mStats.writeAsyncLocked();
}
}
+ Slog.d(TAG, "end dumpCheckinLocked");
} else {
+ Slog.d(TAG, "begin dumpLocked from UID " + Binder.getCallingUid());
synchronized (mStats) {
mStats.dumpLocked(mContext, pw, flags, reqUid, historyStart);
if (writeData) {
mStats.writeAsyncLocked();
}
}
+ Slog.d(TAG, "end dumpLocked");
}
}
@@ -1460,9 +1483,11 @@
SynchronousResultReceiver bluetoothReceiver = null;
SynchronousResultReceiver modemReceiver = null;
+ Slog.d(TAG, "begin updateExternalStatsSync reason=" + reason);
synchronized (mExternalStatsLock) {
if (mContext == null) {
// Don't do any work yet.
+ Slog.d(TAG, "end updateExternalStatsSync");
return;
}
@@ -1559,6 +1584,7 @@
}
}
}
+ Slog.d(TAG, "end updateExternalStatsSync");
}
/**
diff --git a/services/core/java/com/android/server/am/PendingIntentRecord.java b/services/core/java/com/android/server/am/PendingIntentRecord.java
index c494171..f05bfb6 100644
--- a/services/core/java/com/android/server/am/PendingIntentRecord.java
+++ b/services/core/java/com/android/server/am/PendingIntentRecord.java
@@ -175,6 +175,8 @@
return "broadcastIntent";
case ActivityManager.INTENT_SENDER_SERVICE:
return "startService";
+ case ActivityManager.INTENT_SENDER_FOREGROUND_SERVICE:
+ return "startForegroundService";
case ActivityManager.INTENT_SENDER_ACTIVITY_RESULT:
return "activityResult";
}
@@ -318,9 +320,11 @@
}
break;
case ActivityManager.INTENT_SENDER_SERVICE:
+ case ActivityManager.INTENT_SENDER_FOREGROUND_SERVICE:
try {
- owner.startServiceInPackage(uid, finalIntent,
- resolvedType, key.packageName, userId);
+ owner.startServiceInPackage(uid, finalIntent, resolvedType,
+ key.type == ActivityManager.INTENT_SENDER_FOREGROUND_SERVICE,
+ key.packageName, userId);
} catch (RuntimeException e) {
Slog.w(TAG, "Unable to send startService intent", e);
} catch (TransactionTooLargeException e) {
diff --git a/services/core/java/com/android/server/am/PreBootBroadcaster.java b/services/core/java/com/android/server/am/PreBootBroadcaster.java
index e0d3abd..3ea1147 100644
--- a/services/core/java/com/android/server/am/PreBootBroadcaster.java
+++ b/services/core/java/com/android/server/am/PreBootBroadcaster.java
@@ -35,6 +35,7 @@
import android.util.Slog;
import com.android.internal.R;
+import com.android.internal.messages.nano.SystemMessageProto.SystemMessage;
import com.android.internal.notification.SystemNotificationChannels;
import com.android.internal.util.ProgressReporter;
import com.android.server.UiThread;
@@ -159,11 +160,13 @@
.setVisibility(Notification.VISIBILITY_PUBLIC)
.setProgress(max, index, false)
.build();
- notifManager.notifyAsUser(TAG, 0, notif, UserHandle.of(mUserId));
+ notifManager.notifyAsUser(TAG, SystemMessage.NOTE_SYSTEM_UPGRADING, notif,
+ UserHandle.of(mUserId));
break;
case MSG_HIDE:
- notifManager.cancelAsUser(TAG, 0, UserHandle.of(mUserId));
+ notifManager.cancelAsUser(TAG, SystemMessage.NOTE_SYSTEM_UPGRADING,
+ UserHandle.of(mUserId));
break;
}
}
diff --git a/services/core/java/com/android/server/am/ServiceRecord.java b/services/core/java/com/android/server/am/ServiceRecord.java
index dfbe59f..44ebf50 100644
--- a/services/core/java/com/android/server/am/ServiceRecord.java
+++ b/services/core/java/com/android/server/am/ServiceRecord.java
@@ -92,6 +92,8 @@
ServiceState restartTracker; // tracking service restart
boolean whitelistManager; // any bindings to this service have BIND_ALLOW_WHITELIST_MANAGEMENT?
boolean delayed; // are we waiting to start this service in the background?
+ boolean fgRequired; // is the service required to go foreground after starting?
+ boolean fgWaiting; // is a timeout for going foreground already scheduled?
boolean isForeground; // is service currently in foreground mode?
int foregroundId; // Notification ID of last foreground req.
Notification foregroundNoti; // Notification record of foreground state.
diff --git a/services/core/java/com/android/server/am/UidRecord.java b/services/core/java/com/android/server/am/UidRecord.java
index 67b80f6..c0fb77f 100644
--- a/services/core/java/com/android/server/am/UidRecord.java
+++ b/services/core/java/com/android/server/am/UidRecord.java
@@ -16,7 +16,9 @@
package com.android.server.am;
+import android.Manifest;
import android.app.ActivityManager;
+import android.content.pm.PackageManager;
import android.os.SystemClock;
import android.os.UserHandle;
import android.util.TimeUtils;
@@ -43,30 +45,37 @@
* {@link ActivityManagerService#mProcStateSeqCounter}
* when {@link #curProcState} changes from background to foreground or vice versa.
*/
- @GuardedBy("lock")
+ @GuardedBy("networkStateUpdate")
long curProcStateSeq;
/**
* Last seq number for which NetworkPolicyManagerService notified ActivityManagerService that
* network policies rules were updated.
*/
- @GuardedBy("lock")
+ @GuardedBy("networkStateUpdate")
long lastNetworkUpdatedProcStateSeq;
/**
* Last seq number for which AcitivityManagerService dispatched uid state change to
* NetworkPolicyManagerService.
*/
- @GuardedBy("lock")
+ @GuardedBy("networkStateUpdate")
long lastDispatchedProcStateSeq;
/**
* Indicates if any thread is waiting for network rules to get updated for {@link #uid}.
*/
- @GuardedBy("lock")
- boolean waitingForNetwork;
+ volatile boolean waitingForNetwork;
- final Object lock = new Object();
+ /**
+ * Indicates whether this uid has internet permission or not.
+ */
+ volatile boolean hasInternetPermission;
+
+ /**
+ * This object is used for waiting for the network state to get updated.
+ */
+ final Object networkStateLock = new Object();
static final int CHANGE_PROCSTATE = 0;
static final int CHANGE_GONE = 1;
@@ -95,6 +104,11 @@
curProcState = ActivityManager.PROCESS_STATE_CACHED_EMPTY;
}
+ public void updateHasInternetPermission() {
+ hasInternetPermission = ActivityManager.checkUidPermission(Manifest.permission.INTERNET,
+ uid) == PackageManager.PERMISSION_GRANTED;
+ }
+
/**
* If the change being dispatched is neither CHANGE_GONE nor CHANGE_GONE_IDLE (not interested in
* these changes), then update the {@link #lastDispatchedProcStateSeq} with
diff --git a/services/core/java/com/android/server/connectivity/Tethering.java b/services/core/java/com/android/server/connectivity/Tethering.java
index be770a3..07ab067 100644
--- a/services/core/java/com/android/server/connectivity/Tethering.java
+++ b/services/core/java/com/android/server/connectivity/Tethering.java
@@ -66,6 +66,7 @@
import android.util.SparseArray;
import com.android.internal.annotations.VisibleForTesting;
+import com.android.internal.messages.nano.SystemMessageProto.SystemMessage;
import com.android.internal.notification.SystemNotificationChannels;
import com.android.internal.telephony.IccCardConstants;
import com.android.internal.telephony.TelephonyIntents;
@@ -618,30 +619,43 @@
if (usbTethered) {
if (wifiTethered || bluetoothTethered) {
- showTetheredNotification(com.android.internal.R.drawable.stat_sys_tether_general);
+ showTetheredNotification(SystemMessage.NOTE_TETHER_GENERAL);
} else {
- showTetheredNotification(com.android.internal.R.drawable.stat_sys_tether_usb);
+ showTetheredNotification(SystemMessage.NOTE_TETHER_USB);
}
} else if (wifiTethered) {
if (bluetoothTethered) {
- showTetheredNotification(com.android.internal.R.drawable.stat_sys_tether_general);
+ showTetheredNotification(SystemMessage.NOTE_TETHER_GENERAL);
} else {
/* We now have a status bar icon for WifiTethering, so drop the notification */
clearTetheredNotification();
}
} else if (bluetoothTethered) {
- showTetheredNotification(com.android.internal.R.drawable.stat_sys_tether_bluetooth);
+ showTetheredNotification(SystemMessage.NOTE_TETHER_BLUETOOTH);
} else {
clearTetheredNotification();
}
}
- private void showTetheredNotification(int icon) {
+ private void showTetheredNotification(int id) {
NotificationManager notificationManager =
(NotificationManager)mContext.getSystemService(Context.NOTIFICATION_SERVICE);
if (notificationManager == null) {
return;
}
+ int icon = 0;
+ switch(id) {
+ case SystemMessage.NOTE_TETHER_USB:
+ icon = com.android.internal.R.drawable.stat_sys_tether_usb;
+ break;
+ case SystemMessage.NOTE_TETHER_BLUETOOTH:
+ icon = com.android.internal.R.drawable.stat_sys_tether_bluetooth;
+ break;
+ case SystemMessage.NOTE_TETHER_GENERAL:
+ default:
+ icon = com.android.internal.R.drawable.stat_sys_tether_general;
+ break;
+ }
if (mLastNotificationId != 0) {
if (mLastNotificationId == icon) {
@@ -678,7 +692,7 @@
.setContentTitle(title)
.setContentText(message)
.setContentIntent(pi);
- mLastNotificationId = icon;
+ mLastNotificationId = id;
notificationManager.notifyAsUser(null, mLastNotificationId,
mTetheredNotificationBuilder.build(), UserHandle.ALL);
diff --git a/services/core/java/com/android/server/connectivity/Vpn.java b/services/core/java/com/android/server/connectivity/Vpn.java
index 9fc2fc7..2eb5557 100644
--- a/services/core/java/com/android/server/connectivity/Vpn.java
+++ b/services/core/java/com/android/server/connectivity/Vpn.java
@@ -81,6 +81,7 @@
import com.android.internal.R;
import com.android.internal.annotations.GuardedBy;
import com.android.internal.annotations.VisibleForTesting;
+import com.android.internal.messages.nano.SystemMessageProto.SystemMessage;
import com.android.internal.net.LegacyVpnInfo;
import com.android.internal.net.VpnConfig;
import com.android.internal.net.VpnInfo;
@@ -1304,7 +1305,8 @@
.setVisibility(Notification.VISIBILITY_PUBLIC)
.setOngoing(true)
.setColor(mContext.getColor(R.color.system_notification_accent_color));
- notificationManager.notifyAsUser(TAG, 0, builder.build(), user);
+ notificationManager.notifyAsUser(TAG, SystemMessage.NOTE_VPN_DISCONNECTED,
+ builder.build(), user);
} finally {
Binder.restoreCallingIdentity(token);
}
diff --git a/services/core/java/com/android/server/content/SyncManager.java b/services/core/java/com/android/server/content/SyncManager.java
index 1a27a39..1504538 100644
--- a/services/core/java/com/android/server/content/SyncManager.java
+++ b/services/core/java/com/android/server/content/SyncManager.java
@@ -81,6 +81,7 @@
import android.util.Pair;
import android.util.Slog;
+import com.android.internal.messages.nano.SystemMessageProto.SystemMessage;
import com.android.internal.notification.SystemNotificationChannels;
import com.android.internal.util.ArrayUtils;
import com.android.server.LocalServices;
@@ -3169,8 +3170,9 @@
info.provider, syncResult.stats.numDeletes,
info.userId);
} else {
- mNotificationMgr.cancelAsUser(null,
- info.account.hashCode() ^ info.provider.hashCode(),
+ mNotificationMgr.cancelAsUser(
+ Integer.toString(info.account.hashCode() ^ info.provider.hashCode()),
+ SystemMessage.NOTE_SYNC_ERROR,
new UserHandle(info.userId));
}
if (syncResult != null && syncResult.fullSyncRequested) {
@@ -3270,7 +3272,9 @@
.setContentIntent(pendingIntent)
.build();
notification.flags |= Notification.FLAG_ONGOING_EVENT;
- mNotificationMgr.notifyAsUser(null, account.hashCode() ^ authority.hashCode(),
+ mNotificationMgr.notifyAsUser(
+ Integer.toString(account.hashCode() ^ authority.hashCode()),
+ SystemMessage.NOTE_SYNC_ERROR,
notification, user);
}
diff --git a/services/core/java/com/android/server/input/InputManagerService.java b/services/core/java/com/android/server/input/InputManagerService.java
index 297d5bd..65a4604 100644
--- a/services/core/java/com/android/server/input/InputManagerService.java
+++ b/services/core/java/com/android/server/input/InputManagerService.java
@@ -23,6 +23,7 @@
import android.util.Log;
import android.view.Display;
import com.android.internal.inputmethod.InputMethodSubtypeHandle;
+import com.android.internal.messages.nano.SystemMessageProto.SystemMessage;
import com.android.internal.notification.SystemNotificationChannels;
import com.android.internal.os.SomeArgs;
import com.android.internal.R;
@@ -986,7 +987,7 @@
com.android.internal.R.color.system_notification_accent_color))
.build();
mNotificationManager.notifyAsUser(null,
- R.string.select_keyboard_layout_notification_title,
+ SystemMessage.NOTE_SELECT_KEYBOARD_LAYOUT,
notification, UserHandle.ALL);
mKeyboardLayoutNotificationShown = true;
}
@@ -997,7 +998,7 @@
if (mKeyboardLayoutNotificationShown) {
mKeyboardLayoutNotificationShown = false;
mNotificationManager.cancelAsUser(null,
- R.string.select_keyboard_layout_notification_title,
+ SystemMessage.NOTE_SELECT_KEYBOARD_LAYOUT,
UserHandle.ALL);
}
}
diff --git a/services/core/java/com/android/server/job/JobServiceContext.java b/services/core/java/com/android/server/job/JobServiceContext.java
index 1337046..618feb1 100644
--- a/services/core/java/com/android/server/job/JobServiceContext.java
+++ b/services/core/java/com/android/server/job/JobServiceContext.java
@@ -597,7 +597,8 @@
service.stopJob(mParams);
} catch (RemoteException e) {
Slog.e(TAG, "Error sending onStopJob to client.", e);
- closeAndCleanupJobH(false /* reschedule */);
+ // The job's host app apparently crashed during the job, so we should reschedule.
+ closeAndCleanupJobH(true /* reschedule */);
}
}
diff --git a/services/core/java/com/android/server/job/controllers/ConnectivityController.java b/services/core/java/com/android/server/job/controllers/ConnectivityController.java
index 94ca24c..b458d8b 100644
--- a/services/core/java/com/android/server/job/controllers/ConnectivityController.java
+++ b/services/core/java/com/android/server/job/controllers/ConnectivityController.java
@@ -17,18 +17,18 @@
package com.android.server.job.controllers;
import android.app.job.JobInfo;
-import android.content.BroadcastReceiver;
import android.content.Context;
-import android.content.Intent;
-import android.content.IntentFilter;
import android.net.ConnectivityManager;
+import android.net.ConnectivityManager.NetworkCallback;
import android.net.INetworkPolicyListener;
+import android.net.Network;
+import android.net.NetworkCapabilities;
import android.net.NetworkInfo;
import android.net.NetworkPolicyManager;
+import android.os.Process;
import android.os.UserHandle;
import android.util.Slog;
-import com.android.internal.os.BackgroundThread;
import com.android.internal.annotations.GuardedBy;
import com.android.server.job.JobSchedulerService;
import com.android.server.job.StateChangedListener;
@@ -46,9 +46,12 @@
public class ConnectivityController extends StateController implements
ConnectivityManager.OnNetworkActiveListener {
private static final String TAG = "JobScheduler.Conn";
+ private static final boolean DEBUG = false;
private final ConnectivityManager mConnManager;
private final NetworkPolicyManager mNetPolicyManager;
+ private boolean mConnected;
+ private boolean mValidated;
@GuardedBy("mLock")
private final ArrayList<JobStatus> mTrackedJobs = new ArrayList<JobStatus>();
@@ -73,10 +76,9 @@
mConnManager = mContext.getSystemService(ConnectivityManager.class);
mNetPolicyManager = mContext.getSystemService(NetworkPolicyManager.class);
- final IntentFilter intentFilter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
- mContext.registerReceiverAsUser(
- mConnectivityReceiver, UserHandle.SYSTEM, intentFilter, null, null);
+ mConnected = mValidated = false;
+ mConnManager.registerDefaultNetworkCallback(mNetworkCallback);
mNetPolicyManager.registerListener(mNetPolicyListener);
}
@@ -84,7 +86,7 @@
public void maybeStartTrackingJobLocked(JobStatus jobStatus, JobStatus lastJob) {
if (jobStatus.hasConnectivityConstraint() || jobStatus.hasUnmeteredConstraint()
|| jobStatus.hasNotRoamingConstraint()) {
- updateConstraintsSatisfied(jobStatus);
+ updateConstraintsSatisfied(jobStatus, null);
mTrackedJobs.add(jobStatus);
}
}
@@ -98,18 +100,43 @@
}
}
- private boolean updateConstraintsSatisfied(JobStatus jobStatus) {
+ private boolean updateConstraintsSatisfied(JobStatus jobStatus,
+ NetworkCapabilities capabilities) {
+ final int jobUid = jobStatus.getSourceUid();
final boolean ignoreBlocked = (jobStatus.getFlags() & JobInfo.FLAG_WILL_BE_FOREGROUND) != 0;
- final NetworkInfo info = mConnManager.getActiveNetworkInfoForUid(jobStatus.getSourceUid(),
- ignoreBlocked);
- final boolean connected = (info != null) && info.isConnected();
+ final NetworkInfo info = mConnManager.getActiveNetworkInfoForUid(jobUid, ignoreBlocked);
+ if (capabilities == null) {
+ final Network network = mConnManager.getActiveNetworkForUid(jobUid, ignoreBlocked);
+ capabilities = mConnManager.getNetworkCapabilities(network);
+ }
+
+ final boolean validated = capabilities != null
+ && capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED);
+ final boolean connected = info != null && info.isConnected();
+ final boolean connectionUsable = connected && validated;
final boolean unmetered = connected && !info.isMetered();
final boolean notRoaming = connected && !info.isRoaming();
boolean changed = false;
- changed |= jobStatus.setConnectivityConstraintSatisfied(connected);
+ changed |= jobStatus.setConnectivityConstraintSatisfied(connectionUsable);
changed |= jobStatus.setUnmeteredConstraintSatisfied(unmetered);
changed |= jobStatus.setNotRoamingConstraintSatisfied(notRoaming);
+
+ // Track system-uid connected/validated as a general reportable proxy for the
+ // overall state of connectivity constraint satisfiability.
+ if (jobUid == Process.SYSTEM_UID) {
+ mConnected = connected;
+ mValidated = validated;
+ }
+
+ if (DEBUG) {
+ Slog.i(TAG, "Connectivity " + (changed ? "CHANGED" : "unchanged")
+ + " for " + jobStatus + ": usable=" + connectionUsable
+ + " connected=" + connected
+ + " validated=" + validated
+ + " unmetered=" + unmetered
+ + " notRoaming=" + notRoaming);
+ }
return changed;
}
@@ -119,13 +146,13 @@
* @param uid only update jobs belonging to this UID, or {@code -1} to
* update all tracked jobs.
*/
- private void updateTrackedJobs(int uid) {
+ private void updateTrackedJobs(int uid, NetworkCapabilities capabilities) {
synchronized (mLock) {
boolean changed = false;
for (int i = 0; i < mTrackedJobs.size(); i++) {
final JobStatus js = mTrackedJobs.get(i);
if (uid == -1 || uid == js.getSourceUid()) {
- changed |= updateConstraintsSatisfied(js);
+ changed |= updateConstraintsSatisfied(js, capabilities);
}
}
if (changed) {
@@ -152,38 +179,61 @@
}
}
- private BroadcastReceiver mConnectivityReceiver = new BroadcastReceiver() {
+ private final NetworkCallback mNetworkCallback = new NetworkCallback() {
@Override
- public void onReceive(Context context, Intent intent) {
- updateTrackedJobs(-1);
+ public void onCapabilitiesChanged(Network network, NetworkCapabilities networkCapabilities) {
+ if (DEBUG) {
+ Slog.v(TAG, "onCapabilitiesChanged() : " + networkCapabilities);
+ }
+ updateTrackedJobs(-1, networkCapabilities);
+ }
+
+ @Override
+ public void onLost(Network network) {
+ if (DEBUG) {
+ Slog.v(TAG, "Network lost");
+ }
+ updateTrackedJobs(-1, null);
}
};
- private INetworkPolicyListener mNetPolicyListener = new INetworkPolicyListener.Stub() {
+ private final INetworkPolicyListener mNetPolicyListener = new INetworkPolicyListener.Stub() {
@Override
public void onUidRulesChanged(int uid, int uidRules) {
- updateTrackedJobs(uid);
+ if (DEBUG) {
+ Slog.v(TAG, "Uid rules changed for " + uid);
+ }
+ updateTrackedJobs(uid, null);
}
@Override
public void onMeteredIfacesChanged(String[] meteredIfaces) {
- updateTrackedJobs(-1);
+ // We track this via our NetworkCallback
}
@Override
public void onRestrictBackgroundChanged(boolean restrictBackground) {
- updateTrackedJobs(-1);
+ if (DEBUG) {
+ Slog.v(TAG, "Background restriction change to " + restrictBackground);
+ }
+ updateTrackedJobs(-1, null);
}
@Override
public void onUidPoliciesChanged(int uid, int uidPolicies) {
- updateTrackedJobs(uid);
+ if (DEBUG) {
+ Slog.v(TAG, "Uid policy changed for " + uid);
+ }
+ updateTrackedJobs(uid, null);
}
};
@Override
public void dumpControllerStateLocked(PrintWriter pw, int filterUid) {
- pw.println("Connectivity.");
+ pw.print("Connectivity: connected=");
+ pw.print(mConnected);
+ pw.print(" validated=");
+ pw.println(mValidated);
pw.print("Tracking ");
pw.print(mTrackedJobs.size());
pw.println(":");
diff --git a/services/core/java/com/android/server/net/LockdownVpnTracker.java b/services/core/java/com/android/server/net/LockdownVpnTracker.java
index a5e7d7c..5eb1277 100644
--- a/services/core/java/com/android/server/net/LockdownVpnTracker.java
+++ b/services/core/java/com/android/server/net/LockdownVpnTracker.java
@@ -45,6 +45,7 @@
import android.util.Slog;
import com.android.internal.R;
+import com.android.internal.messages.nano.SystemMessageProto.SystemMessage;
import com.android.internal.net.VpnConfig;
import com.android.internal.net.VpnProfile;
import com.android.internal.notification.SystemNotificationChannels;
@@ -344,10 +345,11 @@
.setColor(mContext.getColor(
com.android.internal.R.color.system_notification_accent_color));
- NotificationManager.from(mContext).notify(TAG, 0, builder.build());
+ NotificationManager.from(mContext).notify(null, SystemMessage.NOTE_VPN_STATUS,
+ builder.build());
}
private void hideNotification() {
- NotificationManager.from(mContext).cancel(TAG, 0);
+ NotificationManager.from(mContext).cancel(null, SystemMessage.NOTE_VPN_STATUS);
}
}
diff --git a/services/core/java/com/android/server/notification/NotificationManagerService.java b/services/core/java/com/android/server/notification/NotificationManagerService.java
index 7468b95..ede5a5e 100644
--- a/services/core/java/com/android/server/notification/NotificationManagerService.java
+++ b/services/core/java/com/android/server/notification/NotificationManagerService.java
@@ -90,7 +90,6 @@
import android.media.IRingtonePlayer;
import android.net.Uri;
import android.os.Binder;
-import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
@@ -3127,9 +3126,8 @@
+ ", incomingUserId=" + incomingUserId
+ ", notificationUid=" + notificationUid
+ ", notification=" + notification;
- if (Build.IS_DEBUGGABLE) {
- throw new IllegalArgumentException(noChannelStr);
- }
+ // STOPSHIP TODO: should throw instead of logging.
+ // throw new IllegalArgumentException(noChannelStr);
Log.e(TAG, noChannelStr);
return;
}
diff --git a/services/core/java/com/android/server/pm/PackageInstallerService.java b/services/core/java/com/android/server/pm/PackageInstallerService.java
index a317ca5..132ea2b 100644
--- a/services/core/java/com/android/server/pm/PackageInstallerService.java
+++ b/services/core/java/com/android/server/pm/PackageInstallerService.java
@@ -88,6 +88,7 @@
import com.android.internal.R;
import com.android.internal.annotations.GuardedBy;
import com.android.internal.content.PackageHelper;
+import com.android.internal.messages.nano.SystemMessageProto.SystemMessage;
import com.android.internal.notification.SystemNotificationChannels;
import com.android.internal.util.FastXmlSerializer;
import com.android.internal.util.ImageUtils;
@@ -995,7 +996,9 @@
if (PackageManager.DELETE_SUCCEEDED == returnCode && mNotification != null) {
NotificationManager notificationManager = (NotificationManager)
mContext.getSystemService(Context.NOTIFICATION_SERVICE);
- notificationManager.notify(basePackageName, 0, mNotification);
+ notificationManager.notify(basePackageName,
+ SystemMessage.NOTE_PACKAGE_STATE,
+ mNotification);
}
final Intent fillIn = new Intent();
fillIn.putExtra(PackageInstaller.EXTRA_PACKAGE_NAME, mPackageName);
@@ -1054,7 +1057,9 @@
if (notification != null) {
NotificationManager notificationManager = (NotificationManager)
mContext.getSystemService(Context.NOTIFICATION_SERVICE);
- notificationManager.notify(basePackageName, 0, notification);
+ notificationManager.notify(basePackageName,
+ SystemMessage.NOTE_PACKAGE_STATE,
+ notification);
}
}
final Intent fillIn = new Intent();
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java
index 899847f..2115f31 100644
--- a/services/core/java/com/android/server/pm/PackageManagerService.java
+++ b/services/core/java/com/android/server/pm/PackageManagerService.java
@@ -537,8 +537,7 @@
public static final int REASON_INSTALL = 2;
public static final int REASON_BACKGROUND_DEXOPT = 3;
public static final int REASON_AB_OTA = 4;
- public static final int REASON_SHARED_APK = 5;
- public static final int REASON_FORCED_DEXOPT = 6;
+ public static final int REASON_FORCED_DEXOPT = 5;
public static final int REASON_LAST = REASON_FORCED_DEXOPT;
@@ -1182,6 +1181,7 @@
// Stores a list of users whose package restrictions file needs to be updated
private ArraySet<Integer> mDirtyUsers = new ArraySet<Integer>();
+ static final long DEFAULT_CONTAINER_WHITELIST_DURATION = 10 * 60 * 1000;
final private DefaultContainerConnection mDefContainerConn =
new DefaultContainerConnection();
class DefaultContainerConnection implements ServiceConnection {
@@ -2381,59 +2381,6 @@
Slog.w(TAG, "No SYSTEMSERVERCLASSPATH found!");
}
- final List<String> allInstructionSets = InstructionSets.getAllInstructionSets();
- final String[] dexCodeInstructionSets =
- getDexCodeInstructionSets(
- allInstructionSets.toArray(new String[allInstructionSets.size()]));
-
- /**
- * Ensure all external libraries have had dexopt run on them.
- */
- if (mSharedLibraries.size() > 0) {
- Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER, "dexopt");
- // NOTE: For now, we're compiling these system "shared libraries"
- // (and framework jars) into all available architectures. It's possible
- // 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) {
- 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;
- }
- 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,
- PackageDexOptimizer.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());
- }
- }
- }
- }
- Trace.traceEnd(TRACE_TAG_PACKAGE_MANAGER);
- }
-
File frameworkDir = new File(Environment.getRootDirectory(), "framework");
final VersionInfo ver = mSettings.getInternalVersion();
@@ -12968,7 +12915,10 @@
IActivityManager am = ActivityManager.getService();
if (am != null) {
try {
- am.startService(null, intent, null, -1, null, mContext.getOpPackageName(),
+ getDeviceIdleController().addPowerSaveTempWhitelistApp(Process.SYSTEM_UID,
+ DEFAULT_CONTAINER_PACKAGE, DEFAULT_CONTAINER_WHITELIST_DURATION,
+ UserHandle.USER_SYSTEM, false, "cleaning packages");
+ am.startService(null, intent, null, -1, null, false, mContext.getOpPackageName(),
UserHandle.USER_SYSTEM);
} catch (RemoteException e) {
}
diff --git a/services/core/java/com/android/server/pm/PackageManagerServiceCompilerMapping.java b/services/core/java/com/android/server/pm/PackageManagerServiceCompilerMapping.java
index 987a801..f6872e4 100644
--- a/services/core/java/com/android/server/pm/PackageManagerServiceCompilerMapping.java
+++ b/services/core/java/com/android/server/pm/PackageManagerServiceCompilerMapping.java
@@ -26,7 +26,7 @@
public class PackageManagerServiceCompilerMapping {
// Names for compilation reasons.
static final String REASON_STRINGS[] = {
- "first-boot", "boot", "install", "bg-dexopt", "ab-ota", "shared-apk", "forced-dexopt"
+ "first-boot", "boot", "install", "bg-dexopt", "ab-ota", "forced-dexopt"
};
// Static block to ensure the strings array is of the right length.
@@ -56,7 +56,6 @@
// Ensure that some reasons are not mapped to profile-guided filters.
switch (reason) {
- case PackageManagerService.REASON_SHARED_APK:
case PackageManagerService.REASON_FORCED_DEXOPT:
if (DexFile.isProfileGuidedCompilerFilter(sysPropValue)) {
throw new IllegalStateException("\"" + sysPropValue + "\" is profile-guided, "
diff --git a/services/core/java/com/android/server/pm/Settings.java b/services/core/java/com/android/server/pm/Settings.java
index 7bd3424..8739089 100644
--- a/services/core/java/com/android/server/pm/Settings.java
+++ b/services/core/java/com/android/server/pm/Settings.java
@@ -4452,8 +4452,9 @@
ApplicationInfo.PRIVATE_FLAG_PARTIALLY_DIRECT_BOOT_AWARE, "PARTIALLY_DIRECT_BOOT_AWARE",
ApplicationInfo.PRIVATE_FLAG_INSTANT, "EPHEMERAL",
ApplicationInfo.PRIVATE_FLAG_REQUIRED_FOR_SYSTEM_USER, "REQUIRED_FOR_SYSTEM_USER",
- 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_ACTIVITIES_RESIZE_MODE_RESIZEABLE, "PRIVATE_FLAG_ACTIVITIES_RESIZE_MODE_RESIZEABLE",
+ ApplicationInfo.PRIVATE_FLAG_ACTIVITIES_RESIZE_MODE_UNRESIZEABLE, "PRIVATE_FLAG_ACTIVITIES_RESIZE_MODE_UNRESIZEABLE",
+ ApplicationInfo.PRIVATE_FLAG_ACTIVITIES_RESIZE_MODE_RESIZEABLE_VIA_SDK_VERSION, "PRIVATE_FLAG_ACTIVITIES_RESIZE_MODE_RESIZEABLE_VIA_SDK_VERSION",
ApplicationInfo.PRIVATE_FLAG_BACKUP_IN_FOREGROUND, "BACKUP_IN_FOREGROUND",
ApplicationInfo.PRIVATE_FLAG_STATIC_SHARED_LIBRARY, "STATIC_SHARED_LIBRARY",
};
diff --git a/services/core/java/com/android/server/storage/DeviceStorageMonitorService.java b/services/core/java/com/android/server/storage/DeviceStorageMonitorService.java
index ba160ba..a847a3c 100644
--- a/services/core/java/com/android/server/storage/DeviceStorageMonitorService.java
+++ b/services/core/java/com/android/server/storage/DeviceStorageMonitorService.java
@@ -17,6 +17,8 @@
package com.android.server.storage;
import android.app.NotificationChannel;
+
+import com.android.internal.messages.nano.SystemMessageProto.SystemMessage;
import com.android.internal.notification.SystemNotificationChannels;
import com.android.server.EventLogTags;
import com.android.server.SystemService;
@@ -93,7 +95,6 @@
static final int DEVICE_MEMORY_WHAT = 1;
static final int FORCE_MEMORY_WHAT = 2;
private static final int MONITOR_INTERVAL = 1; //in minutes
- private static final int LOW_MEMORY_NOTIFICATION_ID = 1;
private static final int DEFAULT_FREE_STORAGE_LOG_INTERVAL_IN_MINUTES = 12*60; //in minutes
private static final long DEFAULT_DISK_FREE_CHANGE_REPORTING_THRESHOLD = 2 * 1024 * 1024; // 2MB
@@ -669,7 +670,7 @@
.setChannel(TV_NOTIFICATION_CHANNEL_ID))
.build();
notification.flags |= Notification.FLAG_NO_CLEAR;
- notificationMgr.notifyAsUser(null, LOW_MEMORY_NOTIFICATION_ID, notification,
+ notificationMgr.notifyAsUser(null, SystemMessage.NOTE_LOW_STORAGE, notification,
UserHandle.ALL);
Intent broadcast = new Intent(mStorageLowIntent);
if (seq != 0) {
@@ -688,7 +689,7 @@
(NotificationManager)context.getSystemService(
Context.NOTIFICATION_SERVICE);
//cancel notification since memory has been freed
- mNotificationMgr.cancelAsUser(null, LOW_MEMORY_NOTIFICATION_ID, UserHandle.ALL);
+ mNotificationMgr.cancelAsUser(null, SystemMessage.NOTE_LOW_STORAGE, UserHandle.ALL);
context.removeStickyBroadcastAsUser(mStorageLowIntent, UserHandle.ALL);
Intent broadcast = new Intent(mStorageOkIntent);
diff --git a/services/core/java/com/android/server/wm/InputMonitor.java b/services/core/java/com/android/server/wm/InputMonitor.java
index aae216e..3caf89d7 100644
--- a/services/core/java/com/android/server/wm/InputMonitor.java
+++ b/services/core/java/com/android/server/wm/InputMonitor.java
@@ -259,7 +259,8 @@
// to abort dispatching or keep waiting.
final AppWindowContainerController controller = appWindowToken.getController();
final boolean abort = controller != null
- && controller.keyDispatchingTimedOut(reason, windowState.mSession.mPid);
+ && controller.keyDispatchingTimedOut(reason,
+ (windowState != null) ? windowState.mSession.mPid : -1);
if (!abort) {
// The activity manager declined to abort dispatching.
// Wait a bit longer and timeout again later.
diff --git a/services/core/jni/com_android_server_am_BatteryStatsService.cpp b/services/core/jni/com_android_server_am_BatteryStatsService.cpp
index ec36df1..57bb9fe 100644
--- a/services/core/jni/com_android_server_am_BatteryStatsService.cpp
+++ b/services/core/jni/com_android_server_am_BatteryStatsService.cpp
@@ -57,6 +57,8 @@
static bool wakeup_init = false;
static sem_t wakeup_sem;
extern sp<IPower> gPowerHal;
+extern std::mutex gPowerHalMutex;
+extern bool getPowerHal();
static void wakeup_callback(bool success)
{
@@ -191,41 +193,26 @@
return -1;
}
- if (gPowerHal == nullptr) {
- ALOGE("gPowerHal not loaded");
- return -1;
- }
+ {
+ std::lock_guard<std::mutex> lock(gPowerHalMutex);
+ if (!getPowerHal()) {
+ ALOGE("Power Hal not loaded");
+ return -1;
+ }
- gPowerHal->getPlatformLowPowerStats(
- [&offset, &remaining, &total_added](hidl_vec<PowerStatePlatformSleepState> states,
- Status status) {
- if (status != Status::SUCCESS)
- return;
- for (size_t i = 0; i < states.size(); i++) {
- int added;
- const PowerStatePlatformSleepState& state = states[i];
+ Return<void> ret = gPowerHal->getPlatformLowPowerStats(
+ [&offset, &remaining, &total_added](hidl_vec<PowerStatePlatformSleepState> states,
+ Status status) {
+ if (status != Status::SUCCESS)
+ return;
+ for (size_t i = 0; i < states.size(); i++) {
+ int added;
+ const PowerStatePlatformSleepState& state = states[i];
- added = snprintf(offset, remaining,
- "state_%zu name=%s time=%" PRIu64 " count=%" PRIu64 " ",
- i + 1, state.name.c_str(), state.residencyInMsecSinceBoot,
- state.totalTransitions);
- if (added < 0) {
- break;
- }
- if (added > remaining) {
- added = remaining;
- }
- offset += added;
- remaining -= added;
- total_added += added;
-
- for (size_t j = 0; j < state.voters.size(); j++) {
- const PowerStateVoter& voter = state.voters[j];
added = snprintf(offset, remaining,
- "voter_%zu name=%s time=%" PRIu64 " count=%" PRIu64 " ",
- j + 1, voter.name.c_str(),
- voter.totalTimeInMsecVotedForSinceBoot,
- voter.totalNumberOfTimesVotedSinceBoot);
+ "state_%zu name=%s time=%" PRIu64 " count=%" PRIu64 " ",
+ i + 1, state.name.c_str(), state.residencyInMsecSinceBoot,
+ state.totalTransitions);
if (added < 0) {
break;
}
@@ -235,18 +222,42 @@
offset += added;
remaining -= added;
total_added += added;
- }
- if (remaining <= 0) {
- /* rewrite NULL character*/
- offset--;
- total_added--;
- ALOGE("PowerHal: buffer not enough");
- break;
+ for (size_t j = 0; j < state.voters.size(); j++) {
+ const PowerStateVoter& voter = state.voters[j];
+ added = snprintf(offset, remaining,
+ "voter_%zu name=%s time=%" PRIu64 " count=%" PRIu64 " ",
+ j + 1, voter.name.c_str(),
+ voter.totalTimeInMsecVotedForSinceBoot,
+ voter.totalNumberOfTimesVotedSinceBoot);
+ if (added < 0) {
+ break;
+ }
+ if (added > remaining) {
+ added = remaining;
+ }
+ offset += added;
+ remaining -= added;
+ total_added += added;
+ }
+
+ if (remaining <= 0) {
+ /* rewrite NULL character*/
+ offset--;
+ total_added--;
+ ALOGE("PowerHal: buffer not enough");
+ break;
+ }
}
}
+ );
+
+ if (!ret.isOk()) {
+ ALOGE("getPlatformLowPowerStats() failed: power HAL service not available");
+ gPowerHal = nullptr;
+ return -1;
}
- );
+ }
*offset = 0;
total_added += 1;
return total_added;
diff --git a/services/core/jni/com_android_server_location_GnssLocationProvider.cpp b/services/core/jni/com_android_server_location_GnssLocationProvider.cpp
index 78d8b53..86662b9 100644
--- a/services/core/jni/com_android_server_location_GnssLocationProvider.cpp
+++ b/services/core/jni/com_android_server_location_GnssLocationProvider.cpp
@@ -1457,33 +1457,44 @@
/*
* TODO(b/33089503) : Create a jobject to represent GnssDebug.
*/
- if (gnssDebugIface != nullptr) {
+
+ std::stringstream internalState;
+
+ if (gnssDebugIface == nullptr) {
+ internalState << "Gnss Debug Interface not available" << std::endl;
+ } else {
IGnssDebug::DebugData data;
gnssDebugIface->getDebugData([&data](const IGnssDebug::DebugData& debugData) {
data = debugData;
});
- std::stringstream internalState;
- if (data.position.valid) {
- internalState << "Gnss Location Data:: LatitudeDegrees: " << data.position.latitudeDegrees
+ internalState << "Gnss Location Data:: ";
+ if (!data.position.valid) {
+ internalState << "not valid";
+ } else {
+ internalState << "LatitudeDegrees: " << data.position.latitudeDegrees
<< ", LongitudeDegrees: " << data.position.longitudeDegrees
<< ", altitudeMeters: " << data.position.altitudeMeters
<< ", speedMetersPerSecond: " << data.position.speedMetersPerSec
<< ", bearingDegrees: " << data.position.bearingDegrees
- << ", horizontalAccuracyMeters: " << data.position.horizontalAccuracyMeters
+ << ", horizontalAccuracyMeters: "
+ << data.position.horizontalAccuracyMeters
<< ", verticalAccuracyMeters: " << data.position.verticalAccuracyMeters
- << ", speedAccuracyMetersPerSecond: " << data.position.speedAccuracyMetersPerSecond
+ << ", speedAccuracyMetersPerSecond: "
+ << data.position.speedAccuracyMetersPerSecond
<< ", bearingAccuracyDegrees: " << data.position.bearingAccuracyDegrees
- << ", ageSeconds: " << data.position.ageSeconds << std::endl;
+ << ", ageSeconds: " << data.position.ageSeconds;
}
+ internalState << std::endl;
- if (data.time.valid) {
- internalState << "Gnss Time Data:: timeEstimate: " << data.time.timeEstimate
- << ", timeUncertaintyNs: " << data.time.timeUncertaintyNs << std::endl;
- }
+ internalState << "Gnss Time Data:: timeEstimate: " << data.time.timeEstimate
+ << ", timeUncertaintyNs: " << data.time.timeUncertaintyNs
+ << ", frequencyUncertaintyNsPerSec: "
+ << data.time.frequencyUncertaintyNsPerSec << std::endl;
if (data.satelliteDataArray.size() != 0) {
- internalState << "Satellite Data:: ";
+ internalState << "Satellite Data for " << data.satelliteDataArray.size()
+ << " satellites:: " << std::endl;
}
for (size_t i = 0; i < data.satelliteDataArray.size(); i++) {
@@ -1492,11 +1503,20 @@
<< static_cast<uint32_t>(data.satelliteDataArray[i].constellation)
<< ", ephemerisType: "
<< static_cast<uint32_t>(data.satelliteDataArray[i].ephemerisType)
+ << ", ephemerisSource: "
+ << static_cast<uint32_t>(data.satelliteDataArray[i].ephemerisSource)
+ << ", ephemerisHealth: "
+ << static_cast<uint32_t>(data.satelliteDataArray[i].ephemerisHealth)
+ << ", serverPredictionIsAvailable: "
+ << data.satelliteDataArray[i].serverPredictionIsAvailable
+ << ", serverPredictionAgeSeconds: "
+ << data.satelliteDataArray[i].serverPredictionAgeSeconds
<< ", ephemerisAgeSeconds: "
<< data.satelliteDataArray[i].ephemerisAgeSeconds << std::endl;
}
- result = env->NewStringUTF(internalState.str().c_str());
}
+
+ result = env->NewStringUTF(internalState.str().c_str());
return result;
}
diff --git a/services/core/jni/com_android_server_power_PowerManagerService.cpp b/services/core/jni/com_android_server_power_PowerManagerService.cpp
index fab309b..1bdcd7a 100644
--- a/services/core/jni/com_android_server_power_PowerManagerService.cpp
+++ b/services/core/jni/com_android_server_power_PowerManagerService.cpp
@@ -43,7 +43,7 @@
using android::hardware::power::V1_0::IPower;
using android::hardware::power::V1_0::PowerHint;
using android::hardware::power::V1_0::Feature;
-using android::hardware::hidl_vec;
+using android::String8;
namespace android {
@@ -56,7 +56,8 @@
// ----------------------------------------------------------------------------
static jobject gPowerManagerServiceObj;
-sp<IPower> gPowerHal;
+sp<IPower> gPowerHal = nullptr;
+std::mutex gPowerHalMutex;
static nsecs_t gLastEventTime[USER_ACTIVITY_EVENT_LAST + 1];
// Throttling interval for user activity calls.
@@ -74,11 +75,37 @@
return false;
}
+// Check validity of current handle to the power HAL service, and call getService() if necessary.
+// The caller must be holding gPowerHalMutex.
+bool getPowerHal() {
+ if (gPowerHal == nullptr) {
+ gPowerHal = IPower::getService();
+ if (gPowerHal != nullptr) {
+ ALOGI("Loaded power HAL service");
+ } else {
+ ALOGI("Couldn't load power HAL service");
+ }
+ }
+ return gPowerHal != nullptr;
+}
+
+// Check if a call to a power HAL function failed; if so, log the failure and invalidate the
+// current handle to the power HAL service. The caller must be holding gPowerHalMutex.
+static void processReturn(const Return<void> &ret, const char* functionName) {
+ if (!ret.isOk()) {
+ ALOGE("%s() failed: power HAL service not available.", functionName);
+ gPowerHal = nullptr;
+ }
+}
+
void android_server_PowerManagerService_userActivity(nsecs_t eventTime, int32_t eventType) {
// Tell the power HAL when user activity occurs.
- if (gPowerHal != nullptr) {
- gPowerHal->powerHint(PowerHint::INTERACTION, 0);
+ gPowerHalMutex.lock();
+ if (getPowerHal()) {
+ Return<void> ret = gPowerHal->powerHint(PowerHint::INTERACTION, 0);
+ processReturn(ret, "powerHint");
}
+ gPowerHalMutex.unlock();
if (gPowerManagerServiceObj) {
// Throttle calls into user activity by event type.
@@ -106,14 +133,13 @@
}
// ----------------------------------------------------------------------------
-//TODO(b/31632518)
+
static void nativeInit(JNIEnv* env, jobject obj) {
gPowerManagerServiceObj = env->NewGlobalRef(obj);
- gPowerHal = IPower::getService();
- if (gPowerHal == nullptr) {
- ALOGE("Couldn't load PowerHAL module");
- }
+ gPowerHalMutex.lock();
+ getPowerHal();
+ gPowerHalMutex.unlock();
}
static void nativeAcquireSuspendBlocker(JNIEnv *env, jclass /* clazz */, jstring nameStr) {
@@ -127,14 +153,12 @@
}
static void nativeSetInteractive(JNIEnv* /* env */, jclass /* clazz */, jboolean enable) {
- if (gPowerHal != nullptr) {
- if (enable) {
- ALOGD_IF_SLOW(20, "Excessive delay in setInteractive(true) while turning screen on");
- gPowerHal->setInteractive(true);
- } else {
- ALOGD_IF_SLOW(20, "Excessive delay in setInteractive(false) while turning screen off");
- gPowerHal->setInteractive(false);
- }
+ std::lock_guard<std::mutex> lock(gPowerHalMutex);
+ if (getPowerHal()) {
+ String8 err("Excessive delay in setInteractive(%s) while turning screen %s");
+ ALOGD_IF_SLOW(20, String8::format(err, enable ? "true" : "false", enable ? "on" : "off"));
+ Return<void> ret = gPowerHal->setInteractive(enable);
+ processReturn(ret, "setInteractive");
}
}
@@ -149,20 +173,18 @@
}
static void nativeSendPowerHint(JNIEnv *env, jclass clazz, jint hintId, jint data) {
- if (gPowerHal != nullptr) {
- if(data)
- gPowerHal->powerHint((PowerHint)hintId, data);
- else {
- gPowerHal->powerHint((PowerHint)hintId, 0);
- }
+ std::lock_guard<std::mutex> lock(gPowerHalMutex);
+ if (getPowerHal()) {
+ Return<void> ret = gPowerHal->powerHint((PowerHint)hintId, data);
+ processReturn(ret, "powerHint");
}
}
static void nativeSetFeature(JNIEnv *env, jclass clazz, jint featureId, jint data) {
- int data_param = data;
-
- if (gPowerHal != nullptr) {
- gPowerHal->setFeature((Feature)featureId, data_param ? true : false);
+ std::lock_guard<std::mutex> lock(gPowerHalMutex);
+ if (getPowerHal()) {
+ Return<void> ret = gPowerHal->setFeature((Feature)featureId, static_cast<bool>(data));
+ processReturn(ret, "setFeature");
}
}
@@ -217,7 +239,6 @@
gLastEventTime[i] = LLONG_MIN;
}
gPowerManagerServiceObj = NULL;
- gPowerHal = NULL;
return 0;
}
diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/CertificateMonitor.java b/services/devicepolicy/java/com/android/server/devicepolicy/CertificateMonitor.java
index a2bc195..4a456f7 100644
--- a/services/devicepolicy/java/com/android/server/devicepolicy/CertificateMonitor.java
+++ b/services/devicepolicy/java/com/android/server/devicepolicy/CertificateMonitor.java
@@ -39,6 +39,7 @@
import android.security.KeyChain.KeyChainConnection;
import android.util.Log;
+import com.android.internal.messages.nano.SystemMessageProto.SystemMessage;
import com.android.internal.notification.SystemNotificationChannels;
import com.android.internal.R;
@@ -52,7 +53,7 @@
public class CertificateMonitor {
protected static final String LOG_TAG = DevicePolicyManagerService.LOG_TAG;
- protected static final int MONITORING_CERT_NOTIFICATION_ID = R.plurals.ssl_ca_cert_warning;
+ protected static final int MONITORING_CERT_NOTIFICATION_ID = SystemMessage.NOTE_SSL_CERT_INFO;
private final DevicePolicyManagerService mService;
private final DevicePolicyManagerService.Injector mInjector;
diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
index ab86966..db7c99e 100644
--- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
+++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
@@ -165,6 +165,7 @@
import com.android.internal.annotations.GuardedBy;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.logging.MetricsLogger;
+import com.android.internal.messages.nano.SystemMessageProto.SystemMessage;
import com.android.internal.notification.SystemNotificationChannels;
import com.android.internal.os.BackgroundThread;
import com.android.internal.statusbar.IStatusBarService;
@@ -261,9 +262,6 @@
private static final String ACTION_EXPIRED_PASSWORD_NOTIFICATION
= "com.android.server.ACTION_EXPIRED_PASSWORD_NOTIFICATION";
- private static final int PROFILE_WIPED_NOTIFICATION_ID = 1001;
- private static final int NETWORK_LOGGING_NOTIFICATION_ID = 1002;
-
private static final String ATTR_PERMISSION_PROVIDER = "permission-provider";
private static final String ATTR_SETUP_COMPLETE = "setup-complete";
private static final String ATTR_PROVISIONING_STATE = "provisioning-state";
@@ -5301,11 +5299,11 @@
.setColor(mContext.getColor(R.color.system_notification_accent_color))
.setStyle(new Notification.BigTextStyle().bigText(contentText))
.build();
- mInjector.getNotificationManager().notify(PROFILE_WIPED_NOTIFICATION_ID, notification);
+ mInjector.getNotificationManager().notify(SystemMessage.NOTE_PROFILE_WIPED, notification);
}
private void clearWipeProfileNotification() {
- mInjector.getNotificationManager().cancel(PROFILE_WIPED_NOTIFICATION_ID);
+ mInjector.getNotificationManager().cancel(SystemMessage.NOTE_PROFILE_WIPED);
}
@Override
@@ -10624,7 +10622,7 @@
+ " service not being available yet.");
}
mNetworkLogger = null;
- mInjector.getNotificationManager().cancel(NETWORK_LOGGING_NOTIFICATION_ID);
+ mInjector.getNotificationManager().cancel(SystemMessage.NOTE_NETWORK_LOGGING);
}
} finally {
mInjector.binderRestoreCallingIdentity(callingIdentity);
@@ -10751,7 +10749,7 @@
.setStyle(new Notification.BigTextStyle()
.bigText(mContext.getString(R.string.network_logging_notification_text)))
.build();
- mInjector.getNotificationManager().notify(NETWORK_LOGGING_NOTIFICATION_ID, notification);
+ mInjector.getNotificationManager().notify(SystemMessage.NOTE_NETWORK_LOGGING, notification);
saveSettingsLocked(mOwners.getDeviceOwnerUserId());
}
diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/RemoteBugreportUtils.java b/services/devicepolicy/java/com/android/server/devicepolicy/RemoteBugreportUtils.java
index 969c89e..344077c 100644
--- a/services/devicepolicy/java/com/android/server/devicepolicy/RemoteBugreportUtils.java
+++ b/services/devicepolicy/java/com/android/server/devicepolicy/RemoteBugreportUtils.java
@@ -28,6 +28,7 @@
import android.text.format.DateUtils;
import com.android.internal.R;
+import com.android.internal.messages.nano.SystemMessageProto.SystemMessage;
import com.android.internal.notification.SystemNotificationChannels;
import java.lang.annotation.Retention;
@@ -38,7 +39,7 @@
*/
class RemoteBugreportUtils {
- static final int NOTIFICATION_ID = 678432343;
+ static final int NOTIFICATION_ID = SystemMessage.NOTE_REMOTE_BUGREPORT;
@Retention(RetentionPolicy.SOURCE)
@IntDef({
diff --git a/services/retaildemo/java/com/android/server/retaildemo/RetailDemoModeService.java b/services/retaildemo/java/com/android/server/retaildemo/RetailDemoModeService.java
index 43c38a6..d9a937a 100644
--- a/services/retaildemo/java/com/android/server/retaildemo/RetailDemoModeService.java
+++ b/services/retaildemo/java/com/android/server/retaildemo/RetailDemoModeService.java
@@ -61,6 +61,8 @@
import android.text.TextUtils;
import android.util.KeyValueListParser;
import android.util.Slog;
+
+import com.android.internal.messages.nano.SystemMessageProto.SystemMessage;
import com.android.internal.notification.SystemNotificationChannels;
import com.android.internal.os.BackgroundThread;
import com.android.internal.R;
@@ -621,8 +623,8 @@
if (!mIsCarrierDemoMode) {
// Show reset notification (except in carrier demo mode).
- mInjector.getNotificationManager().notifyAsUser(TAG,
- 1, mInjector.createResetNotification(), UserHandle.of(userId));
+ mInjector.getNotificationManager().notifyAsUser(TAG, SystemMessage.NOTE_RETAIL_RESET,
+ mInjector.createResetNotification(), UserHandle.of(userId));
synchronized (mActivityLock) {
mUserUntouched = true;
diff --git a/services/tests/servicestests/src/com/android/server/am/ActivityManagerInternalTest.java b/services/tests/servicestests/src/com/android/server/am/ActivityManagerInternalTest.java
index e7c91c0..bce87dc 100644
--- a/services/tests/servicestests/src/com/android/server/am/ActivityManagerInternalTest.java
+++ b/services/tests/servicestests/src/com/android/server/am/ActivityManagerInternalTest.java
@@ -105,9 +105,9 @@
final UidRecord record2 = addActiveUidRecord(TEST_UID2, curProcStateSeq,
lastNetworkUpdatedProcStateSeq);
- final CustomThread thread1 = new CustomThread(record1.lock);
+ final CustomThread thread1 = new CustomThread(record1.networkStateLock);
thread1.startAndWait("Unexpected state for " + record1);
- final CustomThread thread2 = new CustomThread(record2.lock);
+ final CustomThread thread2 = new CustomThread(record2.networkStateLock);
thread2.startAndWait("Unexpected state for " + record2);
mAmi.notifyNetworkPolicyRulesUpdated(TEST_UID1, expectedProcStateSeq);
diff --git a/services/tests/servicestests/src/com/android/server/am/ActivityManagerServiceTest.java b/services/tests/servicestests/src/com/android/server/am/ActivityManagerServiceTest.java
index 1e038df..092c60b 100644
--- a/services/tests/servicestests/src/com/android/server/am/ActivityManagerServiceTest.java
+++ b/services/tests/servicestests/src/com/android/server/am/ActivityManagerServiceTest.java
@@ -105,7 +105,7 @@
public class ActivityManagerServiceTest {
private static final String TAG = ActivityManagerServiceTest.class.getSimpleName();
- private static final int TEST_UID = 111;
+ private static final int TEST_UID = 11111;
private static final long TEST_PROC_STATE_SEQ1 = 555;
private static final long TEST_PROC_STATE_SEQ2 = 556;
@@ -121,6 +121,7 @@
@Mock private Context mContext;
@Mock private AppOpsService mAppOpsService;
@Mock private PackageManager mPackageManager;
+ @Mock private BatteryStatsImpl mBatteryStatsImpl;
private TestInjector mInjector;
private ActivityManagerService mAms;
@@ -149,20 +150,9 @@
@MediumTest
@Test
public void incrementProcStateSeqAndNotifyAppsLocked() throws Exception {
- final UidRecord uidRec = new UidRecord(TEST_UID);
- uidRec.waitingForNetwork = true;
- mAms.mActiveUids.put(TEST_UID, uidRec);
- final BatteryStatsImpl batteryStats = Mockito.mock(BatteryStatsImpl.class);
- final ProcessRecord appRec = new ProcessRecord(batteryStats,
- new ApplicationInfo(), TAG, TEST_UID);
- appRec.thread = Mockito.mock(IApplicationThread.class);
- mAms.mLruProcesses.add(appRec);
-
- final ProcessRecord appRec2 = new ProcessRecord(batteryStats,
- new ApplicationInfo(), TAG, TEST_UID + 1);
- appRec2.thread = Mockito.mock(IApplicationThread.class);
- mAms.mLruProcesses.add(appRec2);
+ final UidRecord uidRec = addUidRecord(TEST_UID);
+ addUidRecord(TEST_UID + 1);
// Uid state is not moving from background to foreground or vice versa.
verifySeqCounterAndInteractions(uidRec,
@@ -235,12 +225,51 @@
44, // exptectedCurProcStateSeq
-1, // expectedBlockState, -1 to verify there are no interactions with main thread.
false); // expectNotify
+
+ // Verify when the uid doesn't have internet permission, then procStateSeq is not
+ // incremented.
+ uidRec.hasInternetPermission = false;
+ mAms.mWaitForNetworkTimeoutMs = 111;
+ mInjector.setNetworkRestrictedForUid(true);
+ verifySeqCounterAndInteractions(uidRec,
+ PROCESS_STATE_CACHED_ACTIVITY, // prevState
+ PROCESS_STATE_FOREGROUND_SERVICE, // curState
+ 44, // expectedGlobalCounter
+ 44, // exptectedCurProcStateSeq
+ -1, // expectedBlockState, -1 to verify there are no interactions with main thread.
+ false); // expectNotify
+
+ // Verify procStateSeq is not incremented when the uid is not an application, regardless
+ // of the process state.
+ final int notAppUid = 111;
+ final UidRecord uidRec2 = addUidRecord(notAppUid);
+ verifySeqCounterAndInteractions(uidRec2,
+ PROCESS_STATE_CACHED_EMPTY, // prevState
+ PROCESS_STATE_TOP, // curState
+ 44, // expectedGlobalCounter
+ 0, // exptectedCurProcStateSeq
+ -1, // expectedBlockState, -1 to verify there are no interactions with main thread.
+ false); // expectNotify
+ }
+
+ private UidRecord addUidRecord(int uid) {
+ final UidRecord uidRec = new UidRecord(uid);
+ uidRec.waitingForNetwork = true;
+ uidRec.hasInternetPermission = true;
+ mAms.mActiveUids.put(uid, uidRec);
+
+ final ProcessRecord appRec = new ProcessRecord(mBatteryStatsImpl,
+ new ApplicationInfo(), TAG, uid);
+ appRec.thread = Mockito.mock(IApplicationThread.class);
+ mAms.mLruProcesses.add(appRec);
+
+ return uidRec;
}
private void verifySeqCounterAndInteractions(UidRecord uidRec, int prevState, int curState,
int expectedGlobalCounter, int expectedCurProcStateSeq, int expectedBlockState,
boolean expectNotify) throws Exception {
- CustomThread thread = new CustomThread(uidRec.lock);
+ CustomThread thread = new CustomThread(uidRec.networkStateLock);
thread.startAndWait("Unexpected state for " + uidRec);
uidRec.setProcState = prevState;
@@ -720,7 +749,7 @@
record.lastNetworkUpdatedProcStateSeq = lastNetworkUpdatedProcStateSeq;
mAms.mActiveUids.put(Process.myUid(), record);
- CustomThread thread = new CustomThread(record.lock, new Runnable() {
+ CustomThread thread = new CustomThread(record.networkStateLock, new Runnable() {
@Override
public void run() {
mAms.waitForNetworkStateUpdate(procStateSeqToWait);
@@ -730,8 +759,8 @@
if (expectWait) {
thread.startAndWait(errMsg, true);
thread.assertTimedWaiting(errMsg);
- synchronized (record.lock) {
- record.lock.notifyAll();
+ synchronized (record.networkStateLock) {
+ record.networkStateLock.notifyAll();
}
thread.assertTerminated(errMsg);
assertTrue(thread.mNotified);
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 b410400..7c37027 100644
--- a/services/tests/servicestests/src/com/android/server/pm/BaseShortcutManagerTest.java
+++ b/services/tests/servicestests/src/com/android/server/pm/BaseShortcutManagerTest.java
@@ -15,6 +15,8 @@
*/
package com.android.server.pm;
+import static com.android.server.pm.shortcutmanagertest.ShortcutManagerTestUtils.anyOrNull;
+import static com.android.server.pm.shortcutmanagertest.ShortcutManagerTestUtils.anyStringOrNull;
import static com.android.server.pm.shortcutmanagertest.ShortcutManagerTestUtils.cloneShortcutList;
import static com.android.server.pm.shortcutmanagertest.ShortcutManagerTestUtils.hashSet;
import static com.android.server.pm.shortcutmanagertest.ShortcutManagerTestUtils.list;
@@ -884,7 +886,7 @@
entryName = ShortcutInfo.getResourceEntryName(entryName);
}
return Integer.parseInt(entryName.substring(1)) + ressIdOffset;
- }).when(res).getIdentifier(anyString(), anyString(), anyString());
+ }).when(res).getIdentifier(anyStringOrNull(), anyStringOrNull(), anyStringOrNull());
return res;
}).when(mMockPackageManager).getResourcesForApplicationAsUser(anyString(), anyInt());
}
@@ -1612,7 +1614,7 @@
eq(packageName),
eq(userId),
intentsCaptor.capture(),
- any(Bundle.class));
+ anyOrNull(Bundle.class));
return intentsCaptor.getValue();
}
@@ -1671,7 +1673,7 @@
anyString(),
anyInt(),
any(Intent[].class),
- any(Bundle.class));
+ anyOrNull(Bundle.class));
}
protected void assertStartShortcutThrowsException(@NonNull String packageName,
diff --git a/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest1.java b/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest1.java
index 4b3c2f8..796cc16 100644
--- a/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest1.java
+++ b/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest1.java
@@ -15,6 +15,8 @@
*/
package com.android.server.pm;
+import static com.android.server.pm.shortcutmanagertest.ShortcutManagerTestUtils.anyOrNull;
+import static com.android.server.pm.shortcutmanagertest.ShortcutManagerTestUtils.anyStringOrNull;
import static com.android.server.pm.shortcutmanagertest.ShortcutManagerTestUtils.assertAllChooser;
import static com.android.server.pm.shortcutmanagertest.ShortcutManagerTestUtils.assertAllDisabled;
import static com.android.server.pm.shortcutmanagertest.ShortcutManagerTestUtils.assertAllDynamic;
@@ -2832,7 +2834,8 @@
// Not launchable.
doReturn(ActivityManager.START_CLASS_NOT_FOUND)
.when(mMockActivityManagerInternal).startActivitiesAsPackage(
- anyString(), anyInt(), any(Intent[].class), any(Bundle.class));
+ anyStringOrNull(), anyInt(),
+ anyOrNull(Intent[].class), anyOrNull(Bundle.class));
assertStartShortcutThrowsException(CALLING_PACKAGE_1, "s1", USER_0,
ActivityNotFoundException.class);
@@ -2840,7 +2843,8 @@
doReturn(ActivityManager.START_CLASS_NOT_FOUND)
.when(mMockActivityManagerInternal)
.startActivitiesAsPackage(
- anyString(), anyInt(), any(Intent[].class), any(Bundle.class));
+ anyStringOrNull(), anyInt(),
+ anyOrNull(Intent[].class), anyOrNull(Bundle.class));
assertStartShortcutThrowsException(CALLING_PACKAGE_1, "s1", USER_0,
ActivityNotFoundException.class);
});
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 0310e16..e9a329c 100644
--- a/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest8.java
+++ b/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest8.java
@@ -15,6 +15,7 @@
*/
package com.android.server.pm;
+import static com.android.server.pm.shortcutmanagertest.ShortcutManagerTestUtils.anyOrNull;
import static com.android.server.pm.shortcutmanagertest.ShortcutManagerTestUtils.assertExpectException;
import static com.android.server.pm.shortcutmanagertest.ShortcutManagerTestUtils.assertForLauncherCallbackNoThrow;
import static com.android.server.pm.shortcutmanagertest.ShortcutManagerTestUtils.assertWith;
@@ -775,7 +776,7 @@
/* resultIntent=*/ null));
// The intent should be sent right away.
- verify(mServiceContext, times(1)).sendIntentSender(any(IntentSender.class));
+ verify(mServiceContext, times(1)).sendIntentSender(anyOrNull(IntentSender.class));
});
}
diff --git a/services/tests/shortcutmanagerutils/src/com/android/server/pm/shortcutmanagertest/ShortcutManagerTestUtils.java b/services/tests/shortcutmanagerutils/src/com/android/server/pm/shortcutmanagertest/ShortcutManagerTestUtils.java
index f2bae4c..132ed98 100644
--- a/services/tests/shortcutmanagerutils/src/com/android/server/pm/shortcutmanagertest/ShortcutManagerTestUtils.java
+++ b/services/tests/shortcutmanagerutils/src/com/android/server/pm/shortcutmanagertest/ShortcutManagerTestUtils.java
@@ -58,6 +58,8 @@
import org.json.JSONException;
import org.json.JSONObject;
import org.mockito.ArgumentCaptor;
+import org.mockito.ArgumentMatcher;
+import org.mockito.ArgumentMatchers;
import org.mockito.Mockito;
import org.mockito.hamcrest.MockitoHamcrest;
@@ -733,6 +735,14 @@
fail("Timed out for: " + message);
}
+ public static final <T> T anyOrNull(Class<T> clazz) {
+ return ArgumentMatchers.argThat(value -> true);
+ }
+
+ public static final String anyStringOrNull() {
+ return ArgumentMatchers.argThat(value -> true);
+ }
+
public static ShortcutListAsserter assertWith(List<ShortcutInfo> list) {
return new ShortcutListAsserter(list);
}
diff --git a/services/usb/java/com/android/server/usb/MtpNotificationManager.java b/services/usb/java/com/android/server/usb/MtpNotificationManager.java
index db7b385..462ee19 100644
--- a/services/usb/java/com/android/server/usb/MtpNotificationManager.java
+++ b/services/usb/java/com/android/server/usb/MtpNotificationManager.java
@@ -31,6 +31,7 @@
import android.hardware.usb.UsbManager;
import android.os.UserHandle;
+import com.android.internal.messages.nano.SystemMessageProto.SystemMessage;
import com.android.internal.notification.SystemNotificationChannels;
/**
@@ -101,11 +102,13 @@
notification.flags |= Notification.FLAG_LOCAL_ONLY;
mContext.getSystemService(NotificationManager.class).notify(
- TAG, device.getDeviceId(), notification);
+ Integer.toString(device.getDeviceId()), SystemMessage.NOTE_USB_MTP_TAP,
+ notification);
}
void hideNotification(int deviceId) {
- mContext.getSystemService(NotificationManager.class).cancel(TAG, deviceId);
+ mContext.getSystemService(NotificationManager.class).cancel(
+ Integer.toString(deviceId), SystemMessage.NOTE_USB_MTP_TAP);
}
private class Receiver extends BroadcastReceiver {
diff --git a/services/usb/java/com/android/server/usb/UsbDeviceManager.java b/services/usb/java/com/android/server/usb/UsbDeviceManager.java
index d69f933..b5a87ca 100644
--- a/services/usb/java/com/android/server/usb/UsbDeviceManager.java
+++ b/services/usb/java/com/android/server/usb/UsbDeviceManager.java
@@ -51,6 +51,7 @@
import android.util.Slog;
import com.android.internal.annotations.GuardedBy;
+import com.android.internal.messages.nano.SystemMessageProto.SystemMessage;
import com.android.internal.notification.SystemNotificationChannels;
import com.android.internal.os.SomeArgs;
import com.android.internal.util.IndentingPrintWriter;
@@ -60,8 +61,6 @@
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.HashMap;
-import java.util.LinkedList;
-import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Scanner;
@@ -946,35 +945,46 @@
return;
}
int id = 0;
+ int titleRes = 0;
Resources r = mContext.getResources();
if (mConnected) {
if (!mUsbDataUnlocked) {
if (mSourcePower) {
- id = com.android.internal.R.string.usb_supplying_notification_title;
+ titleRes = com.android.internal.R.string.usb_supplying_notification_title;
+ id = SystemMessage.NOTE_USB_SUPPLYING;
} else {
- id = com.android.internal.R.string.usb_charging_notification_title;
+ titleRes = com.android.internal.R.string.usb_charging_notification_title;
+ id = SystemMessage.NOTE_USB_CHARGING;
}
} else if (UsbManager.containsFunction(mCurrentFunctions,
UsbManager.USB_FUNCTION_MTP)) {
- id = com.android.internal.R.string.usb_mtp_notification_title;
+ titleRes = com.android.internal.R.string.usb_mtp_notification_title;
+ id = SystemMessage.NOTE_USB_MTP;
} else if (UsbManager.containsFunction(mCurrentFunctions,
UsbManager.USB_FUNCTION_PTP)) {
- id = com.android.internal.R.string.usb_ptp_notification_title;
+ titleRes = com.android.internal.R.string.usb_ptp_notification_title;
+ id = SystemMessage.NOTE_USB_PTP;
} else if (UsbManager.containsFunction(mCurrentFunctions,
UsbManager.USB_FUNCTION_MIDI)) {
- id = com.android.internal.R.string.usb_midi_notification_title;
+ titleRes = com.android.internal.R.string.usb_midi_notification_title;
+ id = SystemMessage.NOTE_USB_MIDI;
} else if (UsbManager.containsFunction(mCurrentFunctions,
UsbManager.USB_FUNCTION_ACCESSORY)) {
- id = com.android.internal.R.string.usb_accessory_notification_title;
+ titleRes = com.android.internal.R.string.usb_accessory_notification_title;
+ id = SystemMessage.NOTE_USB_ACCESSORY;
} else if (mSourcePower) {
- id = com.android.internal.R.string.usb_supplying_notification_title;
+ titleRes = com.android.internal.R.string.usb_supplying_notification_title;
+ id = SystemMessage.NOTE_USB_SUPPLYING;
} else {
- id = com.android.internal.R.string.usb_charging_notification_title;
+ titleRes = com.android.internal.R.string.usb_charging_notification_title;
+ id = SystemMessage.NOTE_USB_CHARGING;
}
} else if (mSourcePower) {
- id = com.android.internal.R.string.usb_supplying_notification_title;
+ titleRes = com.android.internal.R.string.usb_supplying_notification_title;
+ id = SystemMessage.NOTE_USB_SUPPLYING;
} else if (mHostConnected && mSinkPower && mUsbCharging) {
- id = com.android.internal.R.string.usb_charging_notification_title;
+ titleRes = com.android.internal.R.string.usb_charging_notification_title;
+ id = SystemMessage.NOTE_USB_CHARGING;
}
if (id != mUsbNotificationId) {
// clear notification if title needs changing
@@ -986,7 +996,7 @@
if (id != 0) {
CharSequence message = r.getText(
com.android.internal.R.string.usb_notification_message);
- CharSequence title = r.getText(id);
+ CharSequence title = r.getText(titleRes);
Intent intent = Intent.makeRestartActivityTask(
new ComponentName("com.android.settings",
@@ -1018,13 +1028,14 @@
private void updateAdbNotification() {
if (mNotificationManager == null) return;
- final int id = com.android.internal.R.string.adb_active_notification_title;
+ final int id = SystemMessage.NOTE_ADB_ACTIVE;
+ final int titleRes = com.android.internal.R.string.adb_active_notification_title;
if (mAdbEnabled && mConnected) {
if ("0".equals(SystemProperties.get("persist.adb.notify"))) return;
if (!mAdbNotificationShown) {
Resources r = mContext.getResources();
- CharSequence title = r.getText(id);
+ CharSequence title = r.getText(titleRes);
CharSequence message = r.getText(
com.android.internal.R.string.adb_active_notification_message);
diff --git a/telecomm/java/android/telecom/Connection.java b/telecomm/java/android/telecom/Connection.java
index 833affa..7998359 100644
--- a/telecomm/java/android/telecom/Connection.java
+++ b/telecomm/java/android/telecom/Connection.java
@@ -436,6 +436,18 @@
"android.telecom.extra.ANSWERING_DROPS_FG_CALL";
/**
+ * String connection extra key set on a {@link Connection} in {@link Connection#STATE_RINGING}
+ * state to indicate the name of the third-party app which is responsible for the current
+ * foreground call.
+ * <p>
+ * Used when {@link #EXTRA_ANSWERING_DROPS_FG_CALL} is true to ensure that the default Phone app
+ * is able to inform the user that answering the new incoming call will cause a call owned by
+ * another app to be dropped when the incoming call is answered.
+ */
+ public static final String EXTRA_ANSWERING_DROPS_FG_CALL_APP_NAME =
+ "android.telecom.extra.ANSWERING_DROPS_FG_CALL_APP_NAME";
+
+ /**
* Boolean connection extra key on a {@link Connection} which indicates that adding an
* additional call is disallowed.
* @hide
diff --git a/telecomm/java/android/telecom/PhoneAccount.java b/telecomm/java/android/telecom/PhoneAccount.java
index 3926e20..c42a835 100644
--- a/telecomm/java/android/telecom/PhoneAccount.java
+++ b/telecomm/java/android/telecom/PhoneAccount.java
@@ -310,6 +310,18 @@
}
/**
+ * Sets the label. See {@link PhoneAccount#getLabel()}.
+ *
+ * @param label The label of the phone account.
+ * @return The builder.
+ * @hide
+ */
+ public Builder setLabel(CharSequence label) {
+ this.mLabel = label;
+ return this;
+ }
+
+ /**
* Sets the address. See {@link PhoneAccount#getAddress}.
*
* @param value The address of the phone account.
diff --git a/telecomm/java/android/telecom/TelecomManager.java b/telecomm/java/android/telecom/TelecomManager.java
index 359dcb1..8bfe413 100644
--- a/telecomm/java/android/telecom/TelecomManager.java
+++ b/telecomm/java/android/telecom/TelecomManager.java
@@ -181,6 +181,18 @@
"android.telecom.extra.START_CALL_WITH_VIDEO_STATE";
/**
+ * Optional extra for {@link #addNewIncomingCall(PhoneAccountHandle, Bundle)} containing an
+ * integer that determines the requested video state for an incoming call.
+ * Valid options:
+ * {@link VideoProfile#STATE_AUDIO_ONLY},
+ * {@link VideoProfile#STATE_BIDIRECTIONAL},
+ * {@link VideoProfile#STATE_RX_ENABLED},
+ * {@link VideoProfile#STATE_TX_ENABLED}.
+ */
+ public static final String EXTRA_INCOMING_VIDEO_STATE =
+ "android.telecom.extra.INCOMING_VIDEO_STATE";
+
+ /**
* The extra used with an {@link android.content.Intent#ACTION_CALL} and
* {@link android.content.Intent#ACTION_DIAL} {@code Intent} to specify a
* {@link PhoneAccountHandle} to use when making the call.
@@ -383,7 +395,11 @@
* <p>
* An {@link InCallService} which receives self-managed calls is free to view and control the
* state of calls in the self-managed {@link ConnectionService}. An example use-case is
- * exposing these calls to a wearable or automotive device via its companion app.
+ * exposing these calls to an automotive device via its companion app.
+ * <p>
+ * This meta-data can only be set for an {@link InCallService} which also sets
+ * {@link #METADATA_IN_CALL_SERVICE_UI}. Only the default phone/dialer app, or a car-mode
+ * {@link InCallService} can see self-managed calls.
* <p>
* See also {@link Connection#PROPERTY_SELF_MANAGED}.
*/
@@ -1285,6 +1301,10 @@
* {@link #getPhoneAccount}. Self-managed {@link ConnectionService}s must have
* {@link android.Manifest.permission#MANAGE_OWN_CALLS} to add a new incoming call.
* <p>
+ * The incoming call you are adding is assumed to have a video state of
+ * {@link VideoProfile#STATE_AUDIO_ONLY}, unless the extra value
+ * {@link #EXTRA_INCOMING_VIDEO_STATE} is specified.
+ * <p>
* Once invoked, this method will cause the system to bind to the {@link ConnectionService}
* associated with the {@link PhoneAccountHandle} and request additional information about the
* call (See {@link ConnectionService#onCreateIncomingConnection}) before starting the incoming
diff --git a/telephony/java/android/telephony/CarrierConfigManager.java b/telephony/java/android/telephony/CarrierConfigManager.java
index 7a226a0..bb83633 100644
--- a/telephony/java/android/telephony/CarrierConfigManager.java
+++ b/telephony/java/android/telephony/CarrierConfigManager.java
@@ -1390,6 +1390,13 @@
public static final String KEY_BOOSTED_LTE_EARFCNS_STRING_ARRAY =
"boosted_lte_earfcns_string_array";
+ /**
+ * Key identifying if voice call barring notification is required to be shown to the user.
+ * @hide
+ */
+ public static final String KEY_DISABLE_VOICE_BARRING_NOTIFICATION_BOOL =
+ "disable_voice_barring_notification_bool";
+
/** The default value for every variable. */
private final static PersistableBundle sDefaults;
@@ -1625,6 +1632,7 @@
null);
sDefaults.putInt(KEY_LTE_EARFCNS_RSRP_BOOST_INT, 0);
sDefaults.putStringArray(KEY_BOOSTED_LTE_EARFCNS_STRING_ARRAY, null);
+ sDefaults.putBoolean(KEY_DISABLE_VOICE_BARRING_NOTIFICATION_BOOL, false);
}
/**
diff --git a/test-runner/src/android/test/mock/MockContext.java b/test-runner/src/android/test/mock/MockContext.java
index da1d998..dca74ff 100644
--- a/test-runner/src/android/test/mock/MockContext.java
+++ b/test-runner/src/android/test/mock/MockContext.java
@@ -526,6 +526,12 @@
}
@Override
+ public ComponentName startForegroundService(Intent service) {
+ throw new UnsupportedOperationException();
+ }
+
+ /** STOPSHIP remove when trial API is turned down */
+ @Override
public ComponentName startServiceInForeground(Intent service,
int id, Notification notification) {
throw new UnsupportedOperationException();
@@ -544,6 +550,12 @@
/** @hide */
@Override
+ public ComponentName startForegroundServiceAsUser(Intent service, UserHandle user) {
+ throw new UnsupportedOperationException();
+ }
+
+ /** @hide STOPSHIP removed when trial API is turned down */
+ @Override
public ComponentName startServiceInForegroundAsUser(Intent service,
int id, Notification notification, UserHandle user) {
throw new UnsupportedOperationException();
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 5c28150..06272c8 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
@@ -1853,6 +1853,18 @@
}
@Override
+ public ComponentName startForegroundService(Intent service) {
+ // pass
+ return null;
+ }
+
+ @Override
+ public ComponentName startForegroundServiceAsUser(Intent service, UserHandle user) {
+ // pass
+ return null;
+ }
+
+ @Override
public ComponentName startServiceInForeground(Intent service,
int id, Notification notification) {
// pass
diff --git a/wifi/java/android/net/wifi/WifiManager.java b/wifi/java/android/net/wifi/WifiManager.java
index 9ee772a..7268ee5 100644
--- a/wifi/java/android/net/wifi/WifiManager.java
+++ b/wifi/java/android/net/wifi/WifiManager.java
@@ -82,6 +82,34 @@
public static final int ERROR_AUTHENTICATING = 1;
/**
+ * The reason code if there is no error during authentication.
+ * It could also imply that there no authentication in progress,
+ * this reason code also serves as a reset value.
+ * @hide
+ */
+ public static final int ERROR_AUTH_FAILURE_NONE = 0;
+
+ /**
+ * The reason code if there was a timeout authenticating.
+ * @hide
+ */
+ public static final int ERROR_AUTH_FAILURE_TIMEOUT = 1;
+
+ /**
+ * The reason code if there was a wrong password while
+ * authenticating.
+ * @hide
+ */
+ public static final int ERROR_AUTH_FAILURE_WRONG_PSWD = 2;
+
+ /**
+ * The reason code if there was EAP failure while
+ * authenticating.
+ * @hide
+ */
+ public static final int ERROR_AUTH_FAILURE_EAP_FAILURE = 3;
+
+ /**
* Broadcast intent action indicating whether Wi-Fi scanning is allowed currently
* @hide
*/
@@ -497,6 +525,16 @@
public static final String EXTRA_SUPPLICANT_ERROR = "supplicantError";
/**
+ * The lookup key for a {@link SupplicantState} describing the supplicant
+ * error reason if any
+ * Retrieve with
+ * {@link android.content.Intent#getIntExtra(String, int)}.
+ * @see #ERROR_AUTH_FAILURE_#REASON_CODE
+ * @hide
+ */
+ public static final String EXTRA_SUPPLICANT_ERROR_REASON = "supplicantErrorReason";
+
+ /**
* Broadcast intent action indicating that the configured networks changed.
* This can be as a result of adding/updating/deleting a network. If
* {@link #EXTRA_MULTIPLE_NETWORKS_CHANGED} is set to true the new configuration