diff options
178 files changed, 1845 insertions, 1140 deletions
diff --git a/api/current.txt b/api/current.txt index 115c1c1e1701..6f2568824da4 100644 --- a/api/current.txt +++ b/api/current.txt @@ -23461,6 +23461,7 @@ package android.media { } public class ExifInterface { + ctor public ExifInterface(java.io.File) throws java.io.IOException; ctor public ExifInterface(java.lang.String) throws java.io.IOException; ctor public ExifInterface(java.io.FileDescriptor) throws java.io.IOException; ctor public ExifInterface(java.io.InputStream) throws java.io.IOException; @@ -23468,11 +23469,13 @@ package android.media { method public java.lang.String getAttribute(java.lang.String); method public double getAttributeDouble(java.lang.String, double); method public int getAttributeInt(java.lang.String, int); + method public long[] getAttributeRange(java.lang.String); method public boolean getLatLong(float[]); method public byte[] getThumbnail(); method public android.graphics.Bitmap getThumbnailBitmap(); method public byte[] getThumbnailBytes(); method public long[] getThumbnailRange(); + method public boolean hasAttribute(java.lang.String); method public boolean hasThumbnail(); method public boolean isThumbnailCompressed(); method public void saveAttributes() throws java.io.IOException; @@ -55489,6 +55492,7 @@ package android.widget { method public java.lang.CharSequence getText(); method public android.view.textclassifier.TextClassifier getTextClassifier(); method public final android.content.res.ColorStateList getTextColors(); + method public android.text.TextDirectionHeuristic getTextDirectionHeuristic(); method public java.util.Locale getTextLocale(); method public android.os.LocaleList getTextLocales(); method public android.text.PrecomputedText.Params getTextMetricsParams(); diff --git a/api/system-current.txt b/api/system-current.txt index a53ab3ecdaf1..53e819dfa289 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -1820,9 +1820,19 @@ package android.hardware.location { field public static final android.os.Parcelable.Creator<android.hardware.location.ContextHubInfo> CREATOR; } + public class ContextHubIntentEvent { + method public static android.hardware.location.ContextHubIntentEvent fromIntent(android.content.Intent); + method public android.hardware.location.ContextHubInfo getContextHubInfo(); + method public int getEventType(); + method public int getNanoAppAbortCode(); + method public long getNanoAppId(); + method public android.hardware.location.NanoAppMessage getNanoAppMessage(); + } + public final class ContextHubManager { method public android.hardware.location.ContextHubClient createClient(android.hardware.location.ContextHubInfo, android.hardware.location.ContextHubClientCallback, java.util.concurrent.Executor); method public android.hardware.location.ContextHubClient createClient(android.hardware.location.ContextHubInfo, android.hardware.location.ContextHubClientCallback); + method public android.hardware.location.ContextHubClient createClient(android.hardware.location.ContextHubInfo, android.app.PendingIntent, long); method public android.hardware.location.ContextHubTransaction<java.lang.Void> disableNanoApp(android.hardware.location.ContextHubInfo, long); method public android.hardware.location.ContextHubTransaction<java.lang.Void> enableNanoApp(android.hardware.location.ContextHubInfo, long); method public deprecated int[] findNanoAppOnHub(int, android.hardware.location.NanoAppFilter); @@ -1839,6 +1849,18 @@ package android.hardware.location { method public deprecated int unloadNanoApp(int); method public android.hardware.location.ContextHubTransaction<java.lang.Void> unloadNanoApp(android.hardware.location.ContextHubInfo, long); method public deprecated int unregisterCallback(android.hardware.location.ContextHubManager.Callback); + field public static final int EVENT_HUB_RESET = 6; // 0x6 + field public static final int EVENT_NANOAPP_ABORTED = 4; // 0x4 + field public static final int EVENT_NANOAPP_DISABLED = 3; // 0x3 + field public static final int EVENT_NANOAPP_ENABLED = 2; // 0x2 + field public static final int EVENT_NANOAPP_LOADED = 0; // 0x0 + field public static final int EVENT_NANOAPP_MESSAGE = 5; // 0x5 + field public static final int EVENT_NANOAPP_UNLOADED = 1; // 0x1 + field public static final java.lang.String EXTRA_CONTEXT_HUB_INFO = "android.hardware.location.extra.CONTEXT_HUB_INFO"; + field public static final java.lang.String EXTRA_EVENT_TYPE = "android.hardware.location.extra.EVENT_TYPE"; + field public static final java.lang.String EXTRA_MESSAGE = "android.hardware.location.extra.MESSAGE"; + field public static final java.lang.String EXTRA_NANOAPP_ABORT_CODE = "android.hardware.location.extra.NANOAPP_ABORT_CODE"; + field public static final java.lang.String EXTRA_NANOAPP_ID = "android.hardware.location.extra.NANOAPP_ID"; } public static abstract deprecated class ContextHubManager.Callback { diff --git a/cmds/statsd/src/atoms.proto b/cmds/statsd/src/atoms.proto index e97d6c3e22e1..2fc7e03ca91f 100644 --- a/cmds/statsd/src/atoms.proto +++ b/cmds/statsd/src/atoms.proto @@ -34,6 +34,8 @@ import "frameworks/base/core/proto/android/stats/launcher/launcher.proto"; import "frameworks/base/core/proto/android/telecomm/enums.proto"; import "frameworks/base/core/proto/android/telephony/enums.proto"; import "frameworks/base/core/proto/android/view/enums.proto"; +import "frameworks/base/core/proto/android/stats/devicepolicy/device_policy_enums.proto"; +import "frameworks/base/core/proto/android/stats/devicepolicy/device_policy.proto"; /** * The master atom class. This message defines all of the available @@ -156,6 +158,7 @@ message Atom { ServiceLaunchReported service_launch_reported = 100; PhenotypeFlagStateChanged phenotype_flag_state_changed = 101; BinaryPushStateChanged binary_push_state_changed = 102; + DevicePolicyEvent device_policy_event = 103; } // Pulled events will start at field 10000. @@ -3424,3 +3427,25 @@ message DeviceCalculatedPowerBlameOther { // (i.e. roughly since device was last significantly charged). optional float power_milli_amp_hours = 2; } + +/** + * Logs device policy features. + * + * Logged from: + * frameworks/base/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java + * packages/apps/ManagedProvisioning/src/com/android/managedprovisioning/ + */ +message DevicePolicyEvent { + // The event id - unique for each event. + optional android.stats.devicepolicy.EventId event_id = 1; + // The admin package name. + optional string admin_package_name = 2; + // A generic integer parameter. + optional int32 integer_value = 3; + // A generic boolean parameter. + optional bool boolean_value = 4; + // A parameter specifying a time period in milliseconds. + optional uint64 time_period_millis = 5; + // A parameter specifying a list of package names, bundle extras or string parameters. + optional android.stats.devicepolicy.StringList string_list_value = 6 [(log_mode) = MODE_BYTES]; +} diff --git a/config/boot-image-profile.txt b/config/boot-image-profile.txt index 33742261108c..c2e441b35f48 100644 --- a/config/boot-image-profile.txt +++ b/config/boot-image-profile.txt @@ -24296,7 +24296,8 @@ HSPLandroid/icu/util/CodePointMap;->get(I)I HSPLandroid/icu/util/CodePointMap;->getRange(ILandroid/icu/util/CodePointMap$RangeOption;ILandroid/icu/util/CodePointMap$ValueFilter;Landroid/icu/util/CodePointMap$Range;)Z HSPLandroid/icu/util/CodePointMap;->getRange(ILandroid/icu/util/CodePointMap$ValueFilter;Landroid/icu/util/CodePointMap$Range;)Z HSPLandroid/icu/util/CodePointMap;->iterator()Ljava/util/Iterator; -HSPLandroid/icu/util/CodePointMap;->stringIterator(Ljava/lang/CharSequence;I)Landroid/icu/util/CodePointMap$StringIterator;HSPLandroid/icu/util/Currency$1;-><init>()V +HSPLandroid/icu/util/CodePointMap;->stringIterator(Ljava/lang/CharSequence;I)Landroid/icu/util/CodePointMap$StringIterator; +HSPLandroid/icu/util/Currency$1;-><init>()V HSPLandroid/icu/util/Currency$1;->createInstance(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLandroid/icu/util/Currency$1;->createInstance(Ljava/lang/String;Ljava/lang/Void;)Landroid/icu/util/Currency; HSPLandroid/icu/util/Currency$CurrencyUsage;-><init>(Ljava/lang/String;I)V @@ -51954,6 +51955,22 @@ HSPLlibcore/timezone/TimeZoneFinder;->parseLongAttribute(Lorg/xmlpull/v1/XmlPull HSPLlibcore/timezone/TimeZoneFinder;->parseTimeZoneMappings(Lorg/xmlpull/v1/XmlPullParser;)Ljava/util/List; HSPLlibcore/timezone/TimeZoneFinder;->processCountryZones(Lorg/xmlpull/v1/XmlPullParser;Llibcore/timezone/TimeZoneFinder$TimeZonesProcessor;)Z HSPLlibcore/timezone/TimeZoneFinder;->processXml(Llibcore/timezone/TimeZoneFinder$TimeZonesProcessor;)V +HSPLlibcore/timezone/ZoneInfoDB$TzData$1;->create(Ljava/lang/Object;)Ljava/lang/Object; +HSPLlibcore/timezone/ZoneInfoDB$TzData$1;->create(Ljava/lang/String;)Llibcore/util/ZoneInfo; +HSPLlibcore/timezone/ZoneInfoDB$TzData;->close()V +HSPLlibcore/timezone/ZoneInfoDB$TzData;->finalize()V +HSPLlibcore/timezone/ZoneInfoDB$TzData;->getAvailableIDs()[Ljava/lang/String; +HSPLlibcore/timezone/ZoneInfoDB$TzData;->getBufferIterator(Ljava/lang/String;)Llibcore/io/BufferIterator; +HSPLlibcore/timezone/ZoneInfoDB$TzData;->hasTimeZone(Ljava/lang/String;)Z +HSPLlibcore/timezone/ZoneInfoDB$TzData;->loadData(Ljava/lang/String;)Z +HSPLlibcore/timezone/ZoneInfoDB$TzData;->loadTzDataWithFallback([Ljava/lang/String;)Llibcore/timezone/ZoneInfoDB$TzData; +HSPLlibcore/timezone/ZoneInfoDB$TzData;->makeTimeZone(Ljava/lang/String;)Llibcore/util/ZoneInfo; +HSPLlibcore/timezone/ZoneInfoDB$TzData;->makeTimeZoneUncached(Ljava/lang/String;)Llibcore/util/ZoneInfo; +HSPLlibcore/timezone/ZoneInfoDB$TzData;->readHeader()V +HSPLlibcore/timezone/ZoneInfoDB$TzData;->readIndex(Llibcore/io/BufferIterator;II)V +HSPLlibcore/timezone/ZoneInfoDB$TzData;->readZoneTab(Llibcore/io/BufferIterator;II)V +HSPLlibcore/timezone/ZoneInfoDB$TzData;->validateOffset(II)V +HSPLlibcore/timezone/ZoneInfoDB;->getInstance()Llibcore/timezone/ZoneInfoDB$TzData; HSPLlibcore/util/BasicLruCache;-><init>(I)V HSPLlibcore/util/BasicLruCache;->create(Ljava/lang/Object;)Ljava/lang/Object; HSPLlibcore/util/BasicLruCache;->entryEvicted(Ljava/lang/Object;Ljava/lang/Object;)V @@ -52007,22 +52024,6 @@ HSPLlibcore/util/ZoneInfo;->hasSameRules(Ljava/util/TimeZone;)Z HSPLlibcore/util/ZoneInfo;->hashCode()I HSPLlibcore/util/ZoneInfo;->inDaylightTime(Ljava/util/Date;)Z HSPLlibcore/util/ZoneInfo;->readTimeZone(Ljava/lang/String;Llibcore/io/BufferIterator;J)Llibcore/util/ZoneInfo; -HSPLlibcore/util/ZoneInfoDB$TzData$1;->create(Ljava/lang/Object;)Ljava/lang/Object; -HSPLlibcore/util/ZoneInfoDB$TzData$1;->create(Ljava/lang/String;)Llibcore/util/ZoneInfo; -HSPLlibcore/util/ZoneInfoDB$TzData;->close()V -HSPLlibcore/util/ZoneInfoDB$TzData;->finalize()V -HSPLlibcore/util/ZoneInfoDB$TzData;->getAvailableIDs()[Ljava/lang/String; -HSPLlibcore/util/ZoneInfoDB$TzData;->getBufferIterator(Ljava/lang/String;)Llibcore/io/BufferIterator; -HSPLlibcore/util/ZoneInfoDB$TzData;->hasTimeZone(Ljava/lang/String;)Z -HSPLlibcore/util/ZoneInfoDB$TzData;->loadData(Ljava/lang/String;)Z -HSPLlibcore/util/ZoneInfoDB$TzData;->loadTzDataWithFallback([Ljava/lang/String;)Llibcore/util/ZoneInfoDB$TzData; -HSPLlibcore/util/ZoneInfoDB$TzData;->makeTimeZone(Ljava/lang/String;)Llibcore/util/ZoneInfo; -HSPLlibcore/util/ZoneInfoDB$TzData;->makeTimeZoneUncached(Ljava/lang/String;)Llibcore/util/ZoneInfo; -HSPLlibcore/util/ZoneInfoDB$TzData;->readHeader()V -HSPLlibcore/util/ZoneInfoDB$TzData;->readIndex(Llibcore/io/BufferIterator;II)V -HSPLlibcore/util/ZoneInfoDB$TzData;->readZoneTab(Llibcore/io/BufferIterator;II)V -HSPLlibcore/util/ZoneInfoDB$TzData;->validateOffset(II)V -HSPLlibcore/util/ZoneInfoDB;->getInstance()Llibcore/util/ZoneInfoDB$TzData; HSPLorg/apache/harmony/dalvik/ddmc/Chunk;-><init>(ILjava/nio/ByteBuffer;)V HSPLorg/apache/harmony/dalvik/ddmc/ChunkHandler;->putString(Ljava/nio/ByteBuffer;Ljava/lang/String;)V HSPLorg/apache/harmony/dalvik/ddmc/ChunkHandler;->type(Ljava/lang/String;)I @@ -63464,6 +63465,9 @@ Llibcore/timezone/TimeZoneFinder$ReaderSupplier; Llibcore/timezone/TimeZoneFinder$SelectiveCountryTimeZonesExtractor; Llibcore/timezone/TimeZoneFinder$TimeZonesProcessor; Llibcore/timezone/TimeZoneFinder; +Llibcore/timezone/ZoneInfoDB$TzData$1; +Llibcore/timezone/ZoneInfoDB$TzData; +Llibcore/timezone/ZoneInfoDB; Llibcore/util/BasicLruCache; Llibcore/util/CharsetUtils; Llibcore/util/CollectionUtils; @@ -63478,9 +63482,6 @@ Llibcore/util/ZoneInfo$CheckedArithmeticException; Llibcore/util/ZoneInfo$OffsetInterval; Llibcore/util/ZoneInfo$WallTime; Llibcore/util/ZoneInfo; -Llibcore/util/ZoneInfoDB$TzData$1; -Llibcore/util/ZoneInfoDB$TzData; -Llibcore/util/ZoneInfoDB; Lorg/apache/harmony/dalvik/NativeTestTarget; Lorg/apache/harmony/dalvik/ddmc/Chunk; Lorg/apache/harmony/dalvik/ddmc/ChunkHandler; diff --git a/config/hiddenapi-light-greylist.txt b/config/hiddenapi-light-greylist.txt index 69d3cff0793e..0bfcadd04553 100644 --- a/config/hiddenapi-light-greylist.txt +++ b/config/hiddenapi-light-greylist.txt @@ -4662,7 +4662,6 @@ Llibcore/util/BasicLruCache;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lan Llibcore/util/EmptyArray;->BYTE:[B Llibcore/util/EmptyArray;->INT:[I Llibcore/util/EmptyArray;->OBJECT:[Ljava/lang/Object; -Llibcore/util/ZoneInfoDB$TzData;-><init>()V Lorg/apache/harmony/dalvik/ddmc/Chunk;-><init>(ILjava/nio/ByteBuffer;)V Lorg/apache/harmony/dalvik/ddmc/ChunkHandler;->CHUNK_ORDER:Ljava/nio/ByteOrder; Lorg/apache/harmony/dalvik/ddmc/DdmServer;->broadcast(I)V diff --git a/config/preloaded-classes b/config/preloaded-classes index 550e795bd1e6..5940c45466fb 100644 --- a/config/preloaded-classes +++ b/config/preloaded-classes @@ -6172,6 +6172,9 @@ libcore.reflect.TypeVariableImpl libcore.reflect.Types libcore.reflect.WildcardTypeImpl libcore.timezone.TimeZoneDataFiles +libcore.timezone.ZoneInfoDB +libcore.timezone.ZoneInfoDB$TzData +libcore.timezone.ZoneInfoDB$TzData$1 libcore.util.BasicLruCache libcore.util.CharsetUtils libcore.util.CollectionUtils @@ -6184,9 +6187,6 @@ libcore.util.SneakyThrow libcore.util.ZoneInfo libcore.util.ZoneInfo$CheckedArithmeticException libcore.util.ZoneInfo$WallTime -libcore.util.ZoneInfoDB -libcore.util.ZoneInfoDB$TzData -libcore.util.ZoneInfoDB$TzData$1 org.apache.harmony.dalvik.NativeTestTarget org.apache.harmony.dalvik.ddmc.Chunk org.apache.harmony.dalvik.ddmc.ChunkHandler diff --git a/core/java/android/app/AlarmManager.java b/core/java/android/app/AlarmManager.java index 9b134208cb80..2f0f14aab75a 100644 --- a/core/java/android/app/AlarmManager.java +++ b/core/java/android/app/AlarmManager.java @@ -35,7 +35,7 @@ import android.util.ArrayMap; import android.util.Log; import android.util.proto.ProtoOutputStream; -import libcore.util.ZoneInfoDB; +import libcore.timezone.ZoneInfoDB; import java.io.IOException; import java.lang.annotation.Retention; diff --git a/core/java/android/hardware/location/ContextHubIntentEvent.java b/core/java/android/hardware/location/ContextHubIntentEvent.java index 539c49408c8f..d1190ab28ed5 100644 --- a/core/java/android/hardware/location/ContextHubIntentEvent.java +++ b/core/java/android/hardware/location/ContextHubIntentEvent.java @@ -17,6 +17,7 @@ package android.hardware.location; import android.annotation.NonNull; import android.annotation.Nullable; +import android.annotation.SystemApi; import android.app.PendingIntent; import android.content.Intent; @@ -30,6 +31,7 @@ import com.android.internal.util.Preconditions; * * @hide */ +@SystemApi public class ContextHubIntentEvent { @ContextHubManager.Event private final int mEventType; diff --git a/core/java/android/hardware/location/ContextHubManager.java b/core/java/android/hardware/location/ContextHubManager.java index 88fb3de24c91..76393022ef2f 100644 --- a/core/java/android/hardware/location/ContextHubManager.java +++ b/core/java/android/hardware/location/ContextHubManager.java @@ -56,38 +56,28 @@ public final class ContextHubManager { /** * An extra of type {@link ContextHubInfo} describing the source of the event. - * - * @hide */ public static final String EXTRA_CONTEXT_HUB_INFO = "android.hardware.location.extra.CONTEXT_HUB_INFO"; /** * An extra of type {@link ContextHubManager.Event} describing the event type. - * - * @hide */ public static final String EXTRA_EVENT_TYPE = "android.hardware.location.extra.EVENT_TYPE"; /** * An extra of type long describing the ID of the nanoapp an event is for. - * - * @hide */ public static final String EXTRA_NANOAPP_ID = "android.hardware.location.extra.NANOAPP_ID"; /** * An extra of type int describing the nanoapp-specific abort code. - * - * @hide */ public static final String EXTRA_NANOAPP_ABORT_CODE = "android.hardware.location.extra.NANOAPP_ABORT_CODE"; /** * An extra of type {@link NanoAppMessage} describing contents of a message from a nanoapp. - * - * @hide */ public static final String EXTRA_MESSAGE = "android.hardware.location.extra.MESSAGE"; @@ -109,56 +99,41 @@ public final class ContextHubManager { /** * An event describing that a nanoapp has been loaded. Contains the EXTRA_NANOAPP_ID extra. - * - * @hide */ public static final int EVENT_NANOAPP_LOADED = 0; /** * An event describing that a nanoapp has been unloaded. Contains the EXTRA_NANOAPP_ID extra. - * - * @hide */ public static final int EVENT_NANOAPP_UNLOADED = 1; /** * An event describing that a nanoapp has been enabled. Contains the EXTRA_NANOAPP_ID extra. - * - * @hide */ public static final int EVENT_NANOAPP_ENABLED = 2; /** * An event describing that a nanoapp has been disabled. Contains the EXTRA_NANOAPP_ID extra. - * - * @hide */ public static final int EVENT_NANOAPP_DISABLED = 3; /** * An event describing that a nanoapp has aborted. Contains the EXTRA_NANOAPP_ID and * EXTRA_NANOAPP_ABORT_CODE extras. - * - * @hide */ public static final int EVENT_NANOAPP_ABORTED = 4; /** * An event containing a message sent from a nanoapp. Contains the EXTRA_NANOAPP_ID and * EXTRA_NANOAPP_MESSAGE extras. - * - * @hide */ public static final int EVENT_NANOAPP_MESSAGE = 5; /** * An event describing that the Context Hub has reset. - * - * @hide */ public static final int EVENT_HUB_RESET = 6; - private final Looper mMainLooper; private final IContextHubService mService; private Callback mCallback; @@ -797,14 +772,14 @@ public final class ContextHubManager { * Creates a ContextHubClient that will receive notifications based on Intent events. * * This method should be used instead of {@link #createClient(ContextHubInfo, - * ContextHubClientCallback)} and the equivalent API if the caller wants to preserve the - * messaging endpoint of a ContextHubClient, even after a process exits. If the PendingIntent - * with the provided nanoapp has already been registered at the service previously, then the - * same ContextHubClient will be regenerated without creating a new client connection at the - * service. Note that the PendingIntent, nanoapp, and Context Hub must all match in identifying - * a previously registered ContextHubClient. If a client is regenerated, it can be treated as - * the same endpoint entity from a nanoapp's perspective, and can be continued to be - * used to send messages even if the original process has exited. + * ContextHubClientCallback)} or {@link #createClient(ContextHubInfo, ContextHubClientCallback, + * Executor)} if the caller wants to preserve the messaging endpoint of a ContextHubClient, even + * after a process exits. If the PendingIntent with the provided nanoapp has already been + * registered at the service, then the same ContextHubClient will be regenerated without + * creating a new client connection at the service. Note that the PendingIntent, nanoapp, and + * Context Hub must all match in identifying a previously registered ContextHubClient. + * If a client is regenerated, the host endpoint identifier attached to messages sent to the + * nanoapp remains consistent, even if the original process has exited. * * If registered successfully, intents will be delivered regarding events or messages from the * specified nanoapp from the attached Context Hub. The intent will have an extra @@ -815,10 +790,11 @@ public final class ContextHubManager { * each event type, along with event-specific extra fields. The client can also use * {@link ContextHubIntentEvent.fromIntent(Intent)} to parse the Intent generated by the event. * - * Intent events will be delivered until it is unregistered through - * {@link ContextHubClient.close()}. Note that the registration of this - * ContextHubClient at the Context Hub Service will continued to be maintained until - * {@link ContextHubClient.close()} is called. + * Intent events will be delivered until {@link ContextHubClient.close()} is called. Note that + * the registration of this ContextHubClient at the Context Hub Service will be maintained until + * {@link ContextHubClient.close()} is called. If {@link PendingIntent.cancel()} is called + * on the provided PendingIntent, then the client will be automatically unregistered by the + * service. * * @param hubInfo the hub to attach this client to * @param pendingIntent the PendingIntent to register to the client @@ -828,8 +804,6 @@ public final class ContextHubManager { * @throws IllegalArgumentException if hubInfo does not represent a valid hub * @throws IllegalStateException if there were too many registered clients at the service * @throws NullPointerException if pendingIntent or hubInfo is null - * - * @hide */ @RequiresPermission(android.Manifest.permission.LOCATION_HARDWARE) @NonNull public ContextHubClient createClient( diff --git a/core/java/android/os/PowerManager.java b/core/java/android/os/PowerManager.java index 1c1db68babc3..894015ff5a92 100644 --- a/core/java/android/os/PowerManager.java +++ b/core/java/android/os/PowerManager.java @@ -1008,7 +1008,8 @@ public final class PowerManager { * progress, does nothing. Unlike {@link #nap(long)}, this does not put device to sleep when * dream ends. * </p><p> - * Requires the {@link android.Manifest.permission#WRITE_DREAM_STATE} permission. + * Requires the {@link android.Manifest.permission#READ_DREAM_STATE} and + * {@link android.Manifest.permission#WRITE_DREAM_STATE} permissions. * </p> * * @param time The time when the request to nap was issued, in the @@ -1019,7 +1020,9 @@ public final class PowerManager { * @hide */ @SystemApi - @RequiresPermission(android.Manifest.permission.WRITE_DREAM_STATE) + @RequiresPermission(allOf = { + android.Manifest.permission.READ_DREAM_STATE, + android.Manifest.permission.WRITE_DREAM_STATE }) public void dream(long time) { Sandman.startDreamByUserRequest(mContext); } diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java index 848b041007c2..4369ea2a6693 100644 --- a/core/java/android/provider/Settings.java +++ b/core/java/android/provider/Settings.java @@ -13753,6 +13753,15 @@ public final class Settings { */ public static final String LAST_ACTIVE_USER_ID = "last_active_persistent_user_id"; + + /** + * Whether we've enabled native flags health check on this device. Takes effect on + * reboot. The value "1" enables native flags health check; otherwise it's disabled. + * @hide + */ + public static final String NATIVE_FLAGS_HEALTH_CHECK_ENABLED = + "native_flags_health_check_enabled"; + } /** diff --git a/core/java/android/text/format/Time.java b/core/java/android/text/format/Time.java index 562ae7ada90a..bab4bc362c0d 100644 --- a/core/java/android/text/format/Time.java +++ b/core/java/android/text/format/Time.java @@ -18,8 +18,8 @@ package android.text.format; import android.util.TimeFormatException; +import libcore.timezone.ZoneInfoDB; import libcore.util.ZoneInfo; -import libcore.util.ZoneInfoDB; import java.io.IOException; import java.util.Locale; diff --git a/core/java/android/util/TimeUtils.java b/core/java/android/util/TimeUtils.java index 21c4252a0a7e..57d55bf31375 100644 --- a/core/java/android/util/TimeUtils.java +++ b/core/java/android/util/TimeUtils.java @@ -24,7 +24,7 @@ import android.os.SystemClock; import libcore.timezone.CountryTimeZones; import libcore.timezone.CountryTimeZones.TimeZoneMapping; import libcore.timezone.TimeZoneFinder; -import libcore.util.ZoneInfoDB; +import libcore.timezone.ZoneInfoDB; import java.io.PrintWriter; import java.text.SimpleDateFormat; diff --git a/core/java/android/view/InputApplicationHandle.java b/core/java/android/view/InputApplicationHandle.java index dc1e505ef36d..5f6bc2352131 100644 --- a/core/java/android/view/InputApplicationHandle.java +++ b/core/java/android/view/InputApplicationHandle.java @@ -16,6 +16,8 @@ package android.view; +import android.os.IBinder; + /** * Functions as a handle for an application that can receive input. * Enables the native input dispatcher to refer indirectly to the window manager's @@ -28,19 +30,18 @@ public final class InputApplicationHandle { @SuppressWarnings("unused") private long ptr; - // The window manager's application window token. - public final Object appWindowToken; - // Application name. public String name; // Dispatching timeout. public long dispatchingTimeoutNanos; + public IBinder token; + private native void nativeDispose(); - public InputApplicationHandle(Object appWindowToken) { - this.appWindowToken = appWindowToken; + public InputApplicationHandle(IBinder token) { + this.token = token; } @Override diff --git a/core/java/android/view/InputWindowHandle.java b/core/java/android/view/InputWindowHandle.java index 621ee89fac45..92e0009bc21a 100644 --- a/core/java/android/view/InputWindowHandle.java +++ b/core/java/android/view/InputWindowHandle.java @@ -17,6 +17,7 @@ package android.view; import android.graphics.Region; +import android.os.IBinder; import android.view.IWindow; import android.view.InputChannel; @@ -37,8 +38,8 @@ public final class InputWindowHandle { // The client window. public final IWindow clientWindow; - // The input channel associated with the window. - public InputChannel inputChannel; + // The token assosciated with the window. + public IBinder token; // The window name. public String name; @@ -56,6 +57,8 @@ public final class InputWindowHandle { public int frameRight; public int frameBottom; + public int surfaceInset; + // Global scaling factor applied to touch events when they are dispatched // to the window public float scaleFactor; diff --git a/core/java/android/view/intelligence/IIntelligenceManager.aidl b/core/java/android/view/intelligence/IIntelligenceManager.aidl index 2f128de1f53d..7518ff53b638 100644 --- a/core/java/android/view/intelligence/IIntelligenceManager.aidl +++ b/core/java/android/view/intelligence/IIntelligenceManager.aidl @@ -38,7 +38,8 @@ oneway interface IIntelligenceManager { /** * Finishes a session. */ - void finishSession(int userId, in InteractionSessionId sessionId); + void finishSession(int userId, in InteractionSessionId sessionId, + in List<ContentCaptureEvent> events); /** * Sends a batch of events diff --git a/core/java/android/view/intelligence/IntelligenceManager.java b/core/java/android/view/intelligence/IntelligenceManager.java index 755c54c5d25b..2f3b4ef56aa1 100644 --- a/core/java/android/view/intelligence/IntelligenceManager.java +++ b/core/java/android/view/intelligence/IntelligenceManager.java @@ -39,7 +39,6 @@ import android.view.ViewStructure; import android.view.autofill.AutofillId; import android.view.intelligence.ContentCaptureEvent.EventType; -import com.android.internal.annotations.GuardedBy; import com.android.internal.os.IResultReceiver; import com.android.internal.util.Preconditions; @@ -47,10 +46,18 @@ import java.io.PrintWriter; import java.util.ArrayList; import java.util.List; import java.util.Set; +import java.util.concurrent.atomic.AtomicBoolean; /** * TODO(b/111276913): add javadocs / implement */ +/* + * NOTE: all methods in this class should return right away, or do the real work in a handler + * thread. + * + * Hence, the only field that must be thread-safe is mEnabled, which is called at the beginning + * of every method. + */ @SystemService(Context.INTELLIGENCE_MANAGER_SERVICE) public final class IntelligenceManager { @@ -97,48 +104,48 @@ public final class IntelligenceManager { private static final String BG_THREAD_NAME = "intel_svc_streamer_thread"; /** - * Maximum number of events that are delayed for an app. - * - * <p>If the session is not started after the limit is reached, it's discarded. + * Maximum number of events that are buffered before sent to the app. */ - private static final int MAX_DELAYED_SIZE = 20; + // TODO(b/111276913): use settings + private static final int MAX_BUFFER_SIZE = 100; + @NonNull + private final AtomicBoolean mDisabled = new AtomicBoolean(); + + @NonNull private final Context mContext; @Nullable private final IIntelligenceManager mService; - private final Object mLock = new Object(); - @Nullable - @GuardedBy("mLock") private InteractionSessionId mId; - @GuardedBy("mLock") private int mState = STATE_UNKNOWN; - @GuardedBy("mLock") + @Nullable private IBinder mApplicationToken; - // TODO(b/111276913): replace by an interface name implemented by Activity, similar to - // AutofillClient - @GuardedBy("mLock") + @Nullable private ComponentName mComponentName; - // TODO(b/111276913): create using maximum batch size as capacity /** * List of events held to be sent as a batch. */ - @GuardedBy("mLock") - private final ArrayList<ContentCaptureEvent> mEvents = new ArrayList<>(); + @Nullable + private ArrayList<ContentCaptureEvent> mEvents; + // TODO(b/111276913): use UI Thread directly (as calls are one-way) or a shared thread / handler + // held at the Application level private final Handler mHandler; /** @hide */ public IntelligenceManager(@NonNull Context context, @Nullable IIntelligenceManager service) { mContext = Preconditions.checkNotNull(context, "context cannot be null"); + if (VERBOSE) { + Log.v(TAG, "Constructor for " + context.getPackageName()); + } mService = service; - // TODO(b/111276913): use an existing bg thread instead... final HandlerThread bgThread = new HandlerThread(BG_THREAD_NAME); bgThread.start(); @@ -149,102 +156,100 @@ public final class IntelligenceManager { public void onActivityCreated(@NonNull IBinder token, @NonNull ComponentName componentName) { if (!isContentCaptureEnabled()) return; - synchronized (mLock) { - if (mState != STATE_UNKNOWN) { - // TODO(b/111276913): revisit this scenario - Log.w(TAG, "ignoring onActivityStarted(" + token + ") while on state " - + getStateAsString(mState)); - return; - } - mState = STATE_WAITING_FOR_SERVER; - mId = new InteractionSessionId(); - mApplicationToken = token; - mComponentName = componentName; + mHandler.sendMessage(obtainMessage(IntelligenceManager::handleStartSession, this, + token, componentName)); + } - if (VERBOSE) { - Log.v(TAG, "onActivityCreated(): token=" + token + ", act=" - + getActivityDebugNameLocked() + ", id=" + mId); - } - final int flags = 0; // TODO(b/111276913): get proper flags - - try { - mService.startSession(mContext.getUserId(), mApplicationToken, componentName, - mId, flags, new IResultReceiver.Stub() { - @Override - public void send(int resultCode, Bundle resultData) - throws RemoteException { - synchronized (mLock) { - mState = resultCode; - if (VERBOSE) { - Log.v(TAG, "onActivityStarted() result: code=" + resultCode - + ", id=" + mId - + ", state=" + getStateAsString(mState)); - } - } - } - }); - } catch (RemoteException e) { - throw e.rethrowFromSystemServer(); - } + private void handleStartSession(@NonNull IBinder token, @NonNull ComponentName componentName) { + if (mState != STATE_UNKNOWN) { + // TODO(b/111276913): revisit this scenario + Log.w(TAG, "ignoring handleStartSession(" + token + ") while on state " + + getStateAsString(mState)); + return; } - } + mState = STATE_WAITING_FOR_SERVER; + mId = new InteractionSessionId(); + mApplicationToken = token; + mComponentName = componentName; - //TODO(b/111276913): should buffer event (and call service on handler thread), instead of - // calling right away - private void sendEvent(@NonNull ContentCaptureEvent event) { - mHandler.sendMessage(obtainMessage(IntelligenceManager::handleSendEvent, this, event)); + if (VERBOSE) { + Log.v(TAG, "handleStartSession(): token=" + token + ", act=" + + getActivityDebugName() + ", id=" + mId); + } + final int flags = 0; // TODO(b/111276913): get proper flags + + try { + mService.startSession(mContext.getUserId(), mApplicationToken, componentName, + mId, flags, new IResultReceiver.Stub() { + @Override + public void send(int resultCode, Bundle resultData) { + handleSessionStarted(resultCode); + } + }); + } catch (RemoteException e) { + Log.w(TAG, "Error starting session for " + componentName.flattenToShortString() + ": " + + e); + } } - private void handleSendEvent(@NonNull ContentCaptureEvent event) { - - //TODO(b/111276913): make a copy and don't use lock - synchronized (mLock) { - mEvents.add(event); - final int numberEvents = mEvents.size(); - if (mState != STATE_ACTIVE) { - if (numberEvents >= MAX_DELAYED_SIZE) { - // Typically happens on system apps that are started before the system service - // is ready (like com.android.settings/.FallbackHome) - //TODO(b/111276913): try to ignore session while system is not ready / boot - // not complete instead. Similarly, the manager service should return right away - // when the user does not have a service set - if (VERBOSE) { - Log.v(TAG, "Closing session for " + getActivityDebugNameLocked() - + " after " + numberEvents + " delayed events and state " - + getStateAsString(mState)); - } - // TODO(b/111276913): blacklist activity / use special flag to indicate that - // when it's launched again - resetStateLocked(); - return; - } + private void handleSessionStarted(int resultCode) { + mState = resultCode; + mDisabled.set(mState == STATE_DISABLED); + if (VERBOSE) { + Log.v(TAG, "onActivityStarted() result: code=" + resultCode + ", id=" + mId + + ", state=" + getStateAsString(mState) + ", disabled=" + mDisabled.get()); + } + } - if (VERBOSE) { - Log.v(TAG, "Delaying " + numberEvents + " events for " - + getActivityDebugNameLocked() + " while on state " - + getStateAsString(mState)); - } - return; + private void handleSendEvent(@NonNull ContentCaptureEvent event, boolean forceFlush) { + if (mEvents == null) { + if (VERBOSE) { + Log.v(TAG, "Creating buffer for " + MAX_BUFFER_SIZE + " events"); } + mEvents = new ArrayList<>(MAX_BUFFER_SIZE); + } + mEvents.add(event); + final int numberEvents = mEvents.size(); + if (numberEvents < MAX_BUFFER_SIZE && !forceFlush) { + // Buffering events, return right away... + return; + } - if (mId == null) { - // Sanity check - should not happen - Log.wtf(TAG, "null session id for " + mComponentName); - return; + if (mState != STATE_ACTIVE) { + // Callback from startSession hasn't been called yet - typically happens on system + // apps that are started before the system service + // TODO(b/111276913): try to ignore session while system is not ready / boot + // not complete instead. Similarly, the manager service should return right away + // when the user does not have a service set + if (VERBOSE) { + Log.v(TAG, "Closing session for " + getActivityDebugName() + + " after " + numberEvents + " delayed events and state " + + getStateAsString(mState)); } + handleResetState(); + // TODO(b/111276913): blacklist activity / use special flag to indicate that + // when it's launched again + return; + } - //TODO(b/111276913): right now we're sending sending right away (unless not ready), but - // we should hold the events and flush later. - try { - if (DEBUG) { - Log.d(TAG, "Sending " + numberEvents + " event(s) for " - + getActivityDebugNameLocked()); - } - mService.sendEvents(mContext.getUserId(), mId, mEvents); - mEvents.clear(); - } catch (RemoteException e) { - throw e.rethrowFromSystemServer(); + if (mId == null) { + // Sanity check - should not happen + Log.wtf(TAG, "null session id for " + getActivityDebugName()); + return; + } + + try { + if (DEBUG) { + Log.d(TAG, "Flushing " + numberEvents + " event(s) for " + getActivityDebugName()); } + mService.sendEvents(mContext.getUserId(), mId, mEvents); + // TODO(b/111276913): decide whether we should clear or set it to null, as each has + // its own advantages: clearing will save extra allocations while the session is + // active, while setting to null would save memory if there's no more event coming. + mEvents.clear(); + } catch (RemoteException e) { + Log.w(TAG, "Error sending " + numberEvents + " for " + getActivityDebugName() + + ": " + e); } } @@ -256,41 +261,54 @@ public final class IntelligenceManager { public void onActivityLifecycleEvent(@EventType int type) { if (!isContentCaptureEnabled()) return; if (VERBOSE) { - Log.v(TAG, "onActivityLifecycleEvent() for " + getActivityDebugNameLocked() + Log.v(TAG, "onActivityLifecycleEvent() for " + getActivityDebugName() + ": " + ContentCaptureEvent.getTypeAsString(type)); } - sendEvent(new ContentCaptureEvent(type)); + mHandler.sendMessage(obtainMessage(IntelligenceManager::handleSendEvent, this, + new ContentCaptureEvent(type), /* forceFlush= */ true)); } /** @hide */ public void onActivityDestroyed() { if (!isContentCaptureEnabled()) return; - synchronized (mLock) { - //TODO(b/111276913): check state (for example, how to handle if it's waiting for remote - // id) and send it to the cache of batched commands + //TODO(b/111276913): check state (for example, how to handle if it's waiting for remote + // id) and send it to the cache of batched commands + if (VERBOSE) { + Log.v(TAG, "onActivityDestroyed(): state=" + getStateAsString(mState) + + ", mId=" + mId); + } - if (VERBOSE) { - Log.v(TAG, "onActivityDestroyed(): state=" + getStateAsString(mState) - + ", mId=" + mId); - } + mHandler.sendMessage(obtainMessage(IntelligenceManager::handleFinishSession, this)); + } - try { - mService.finishSession(mContext.getUserId(), mId); - resetStateLocked(); - } catch (RemoteException e) { - throw e.rethrowFromSystemServer(); + private void handleFinishSession() { + //TODO(b/111276913): right now both the ContentEvents and lifecycle sessions are sent + // to system_server, so it's ok to call both in sequence here. But once we split + // them so the events are sent directly to the service, we need to make sure they're + // sent in order. + try { + if (DEBUG) { + Log.d(TAG, "Finishing session " + mId + " with " + + (mEvents == null ? 0 : mEvents.size()) + " event(s) for " + + getActivityDebugName()); } + + mService.finishSession(mContext.getUserId(), mId, mEvents); + } catch (RemoteException e) { + Log.e(TAG, "Error finishing session " + mId + " for " + getActivityDebugName() + + ": " + e); + } finally { + handleResetState(); } } - @GuardedBy("mLock") - private void resetStateLocked() { + private void handleResetState() { mState = STATE_UNKNOWN; mId = null; mApplicationToken = null; mComponentName = null; - mEvents.clear(); + mEvents = null; } /** @@ -309,8 +327,11 @@ public final class IntelligenceManager { if (!(node instanceof ViewNode.ViewStructureImpl)) { throw new IllegalArgumentException("Invalid node class: " + node.getClass()); } - sendEvent(new ContentCaptureEvent(TYPE_VIEW_APPEARED) - .setViewNode(((ViewNode.ViewStructureImpl) node).mNode)); + + mHandler.sendMessage(obtainMessage(IntelligenceManager::handleSendEvent, this, + new ContentCaptureEvent(TYPE_VIEW_APPEARED) + .setViewNode(((ViewNode.ViewStructureImpl) node).mNode), + /* forceFlush= */ false)); } /** @@ -325,7 +346,9 @@ public final class IntelligenceManager { Preconditions.checkNotNull(id); if (!isContentCaptureEnabled()) return; - sendEvent(new ContentCaptureEvent(TYPE_VIEW_DISAPPEARED).setAutofillId(id)); + mHandler.sendMessage(obtainMessage(IntelligenceManager::handleSendEvent, this, + new ContentCaptureEvent(TYPE_VIEW_DISAPPEARED).setAutofillId(id), + /* forceFlush= */ false)); } /** @@ -339,10 +362,12 @@ public final class IntelligenceManager { public void notifyViewTextChanged(@NonNull AutofillId id, @Nullable CharSequence text, int flags) { Preconditions.checkNotNull(id); + if (!isContentCaptureEnabled()) return; - sendEvent(new ContentCaptureEvent(TYPE_VIEW_TEXT_CHANGED, flags).setAutofillId(id) - .setText(text)); + mHandler.sendMessage(obtainMessage(IntelligenceManager::handleSendEvent, this, + new ContentCaptureEvent(TYPE_VIEW_TEXT_CHANGED, flags).setAutofillId(id) + .setText(text), /* forceFlush= */ false)); } /** @@ -384,10 +409,7 @@ public final class IntelligenceManager { * Checks whether content capture is enabled for this activity. */ public boolean isContentCaptureEnabled() { - //TODO(b/111276913): properly implement by checking if it was explicitly disabled by - // service, or if service is not set - // (and probably renamign to isEnabledLocked() - return mService != null && mState != STATE_DISABLED; + return mService != null && !mDisabled.get(); } /** @@ -504,25 +526,36 @@ public final class IntelligenceManager { public void dump(String prefix, PrintWriter pw) { pw.print(prefix); pw.println("IntelligenceManager"); final String prefix2 = prefix + " "; - synchronized (mLock) { - pw.print(prefix2); pw.print("mContext: "); pw.println(mContext); + pw.print(prefix2); pw.print("mContext: "); pw.println(mContext); + pw.print(prefix2); pw.print("user: "); pw.println(mContext.getUserId()); + if (mService != null) { pw.print(prefix2); pw.print("mService: "); pw.println(mService); - pw.print(prefix2); pw.print("user: "); pw.println(mContext.getUserId()); - pw.print(prefix2); pw.print("enabled: "); pw.println(isContentCaptureEnabled()); + } + pw.print(prefix2); pw.print("mDisabled: "); pw.println(mDisabled.get()); + pw.print(prefix2); pw.print("isEnabled(): "); pw.println(isContentCaptureEnabled()); + if (mId != null) { pw.print(prefix2); pw.print("id: "); pw.println(mId); - pw.print(prefix2); pw.print("state: "); pw.print(mState); pw.print(" ("); - pw.print(getStateAsString(mState)); pw.println(")"); + } + pw.print(prefix2); pw.print("state: "); pw.print(mState); pw.print(" ("); + pw.print(getStateAsString(mState)); pw.println(")"); + if (mApplicationToken != null) { pw.print(prefix2); pw.print("app token: "); pw.println(mApplicationToken); + } + if (mComponentName != null) { pw.print(prefix2); pw.print("component name: "); - pw.println(mComponentName == null ? "null" : mComponentName.flattenToShortString()); + pw.println(mComponentName.flattenToShortString()); + } + if (mEvents != null) { final int numberEvents = mEvents.size(); - pw.print(prefix2); pw.print("batched events: "); pw.println(numberEvents); - if (numberEvents > 0) { + pw.print(prefix2); pw.print("batched events: "); pw.print(numberEvents); + pw.print('/'); pw.println(MAX_BUFFER_SIZE); + if (VERBOSE && numberEvents > 0) { + final String prefix3 = prefix2 + " "; for (int i = 0; i < numberEvents; i++) { final ContentCaptureEvent event = mEvents.get(i); - pw.println(i); pw.print(": "); event.dump(pw); pw.println(); + pw.print(prefix3); pw.print(i); pw.print(": "); event.dump(pw); + pw.println(); } - } } } @@ -530,8 +563,7 @@ public final class IntelligenceManager { /** * Gets a string that can be used to identify the activity on logging statements. */ - @GuardedBy("mLock") - private String getActivityDebugNameLocked() { + private String getActivityDebugName() { return mComponentName == null ? mContext.getPackageName() : mComponentName.flattenToShortString(); } diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java index 4ed9924f0d51..85d851a3116c 100644 --- a/core/java/android/widget/TextView.java +++ b/core/java/android/widget/TextView.java @@ -12268,13 +12268,13 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener } /** - * Returns the current {@link TextDirectionHeuristic}. - * - * @return the current {@link TextDirectionHeuristic}. - * @hide + * Returns resolved {@link TextDirectionHeuristic} that will be used for text layout. + * The {@link TextDirectionHeuristic} that is used by TextView is only available after + * {@link #getTextDirection()} and {@link #getLayoutDirection()} is resolved. Therefore the + * return value may not be the same as the one TextView uses if the View's layout direction is + * not resolved or detached from parent root view. */ - @UnsupportedAppUsage - protected TextDirectionHeuristic getTextDirectionHeuristic() { + public TextDirectionHeuristic getTextDirectionHeuristic() { if (hasPasswordTransformationMethod()) { // passwords fields should be LTR return TextDirectionHeuristics.LTR; diff --git a/core/java/com/android/internal/util/XmlUtils.java b/core/java/com/android/internal/util/XmlUtils.java index 5da587bea22e..344d7ef8c83f 100644 --- a/core/java/com/android/internal/util/XmlUtils.java +++ b/core/java/com/android/internal/util/XmlUtils.java @@ -63,7 +63,7 @@ public class XmlUtils { public static final int convertValueToList(CharSequence value, String[] options, int defaultValue) { - if (null != value) { + if (!TextUtils.isEmpty(value)) { for (int i = 0; i < options.length; i++) { if (value.equals(options[i])) return i; @@ -79,8 +79,9 @@ public class XmlUtils { { boolean result = false; - if (null == value) + if (TextUtils.isEmpty(value)) { return defaultValue; + } if (value.equals("1") || value.equals("true") @@ -94,8 +95,9 @@ public class XmlUtils { public static final int convertValueToInt(CharSequence charSeq, int defaultValue) { - if (null == charSeq) + if (TextUtils.isEmpty(charSeq)) { return defaultValue; + } String nm = charSeq.toString(); @@ -138,7 +140,7 @@ public class XmlUtils { } public static int convertValueToUnsignedInt(String value, int defaultValue) { - if (null == value) { + if (TextUtils.isEmpty(value)) { return defaultValue; } @@ -1674,7 +1676,7 @@ public class XmlUtils { public static boolean readBooleanAttribute(XmlPullParser in, String name, boolean defaultValue) { final String value = in.getAttributeValue(null, name); - if (value == null) { + if (TextUtils.isEmpty(value)) { return defaultValue; } else { return Boolean.parseBoolean(value); @@ -1711,7 +1713,7 @@ public class XmlUtils { public static byte[] readByteArrayAttribute(XmlPullParser in, String name) { final String value = in.getAttributeValue(null, name); - if (value != null) { + if (!TextUtils.isEmpty(value)) { return Base64.decode(value, Base64.DEFAULT); } else { return null; diff --git a/core/jni/android/graphics/Shader.cpp b/core/jni/android/graphics/Shader.cpp index 68f5bef18de1..ed6a84b35670 100644 --- a/core/jni/android/graphics/Shader.cpp +++ b/core/jni/android/graphics/Shader.cpp @@ -64,11 +64,10 @@ static jlong BitmapShader_constructor(JNIEnv* env, jobject o, jlong matrixPtr, j jint tileModeX, jint tileModeY) { const SkMatrix* matrix = reinterpret_cast<const SkMatrix*>(matrixPtr); sk_sp<SkImage> image; - sk_sp<SkColorFilter> colorFilter; if (jbitmap) { // Only pass a valid SkBitmap object to the constructor if the Bitmap exists. Otherwise, // we'll pass an empty SkBitmap to avoid crashing/excepting for compatibility. - image = android::bitmap::toBitmap(env, jbitmap).makeImage(&colorFilter); + image = android::bitmap::toBitmap(env, jbitmap).makeImage(); } if (!image.get()) { @@ -81,9 +80,6 @@ static jlong BitmapShader_constructor(JNIEnv* env, jobject o, jlong matrixPtr, j if (matrix) { shader = shader->makeWithLocalMatrix(*matrix); } - if(colorFilter) { - shader = shader->makeWithColorFilter(colorFilter); - } ThrowIAE_IfNull(env, shader.get()); return reinterpret_cast<jlong>(shader.release()); diff --git a/core/jni/android_hardware_input_InputApplicationHandle.cpp b/core/jni/android_hardware_input_InputApplicationHandle.cpp index 5887fa7a0841..10005ddcb5ef 100644 --- a/core/jni/android_hardware_input_InputApplicationHandle.cpp +++ b/core/jni/android_hardware_input_InputApplicationHandle.cpp @@ -22,6 +22,7 @@ #include <utils/threads.h> #include "android_hardware_input_InputApplicationHandle.h" +#include "android_util_Binder.h" namespace android { @@ -29,6 +30,7 @@ static struct { jfieldID ptr; jfieldID name; jfieldID dispatchingTimeoutNanos; + jfieldID token; } gInputApplicationHandleClassInfo; static Mutex gHandleMutex; @@ -75,6 +77,15 @@ bool NativeInputApplicationHandle::updateInfo() { mInfo->dispatchingTimeout = env->GetLongField(obj, gInputApplicationHandleClassInfo.dispatchingTimeoutNanos); + jobject tokenObj = env->GetObjectField(obj, + gInputApplicationHandleClassInfo.token); + if (tokenObj) { + mInfo->token = ibinderForJavaObject(env, tokenObj); + env->DeleteLocalRef(tokenObj); + } else { + mInfo->token.clear(); + } + env->DeleteLocalRef(obj); return true; } @@ -153,6 +164,9 @@ int register_android_server_InputApplicationHandle(JNIEnv* env) { clazz, "dispatchingTimeoutNanos", "J"); + GET_FIELD_ID(gInputApplicationHandleClassInfo.token, clazz, + "token", "Landroid/os/IBinder;"); + return 0; } diff --git a/core/jni/android_hardware_input_InputWindowHandle.cpp b/core/jni/android_hardware_input_InputWindowHandle.cpp index 6ecb5de35ae1..76920f57ed08 100644 --- a/core/jni/android_hardware_input_InputWindowHandle.cpp +++ b/core/jni/android_hardware_input_InputWindowHandle.cpp @@ -21,19 +21,19 @@ #include <android_runtime/AndroidRuntime.h> #include <utils/threads.h> -#include <android_view_InputChannel.h> #include <android/graphics/Region.h> #include <ui/Region.h> #include "android_hardware_input_InputWindowHandle.h" #include "android_hardware_input_InputApplicationHandle.h" +#include "android_util_Binder.h" namespace android { static struct { jfieldID ptr; jfieldID inputApplicationHandle; - jfieldID inputChannel; + jfieldID token; jfieldID name; jfieldID layoutParamsFlags; jfieldID layoutParamsType; @@ -42,6 +42,7 @@ static struct { jfieldID frameTop; jfieldID frameRight; jfieldID frameBottom; + jfieldID surfaceInset; jfieldID scaleFactor; jfieldID touchableRegion; jfieldID visible; @@ -61,9 +62,7 @@ static Mutex gHandleMutex; // --- NativeInputWindowHandle --- -NativeInputWindowHandle::NativeInputWindowHandle( - const sp<InputApplicationHandle>& inputApplicationHandle, jweak objWeak) : - InputWindowHandle(inputApplicationHandle), +NativeInputWindowHandle::NativeInputWindowHandle(jweak objWeak) : mObjWeak(objWeak) { } @@ -86,13 +85,12 @@ bool NativeInputWindowHandle::updateInfo() { mInfo.touchableRegion.clear(); - jobject inputChannelObj = env->GetObjectField(obj, - gInputWindowHandleClassInfo.inputChannel); - if (inputChannelObj) { - mInfo.inputChannel = android_view_InputChannel_getInputChannel(env, inputChannelObj); - env->DeleteLocalRef(inputChannelObj); + jobject tokenObj = env->GetObjectField(obj, + gInputWindowHandleClassInfo.token); + if (tokenObj) { + mInfo.token = ibinderForJavaObject(env, tokenObj); } else { - mInfo.inputChannel.clear(); + mInfo.token.clear(); } jstring nameObj = jstring(env->GetObjectField(obj, @@ -120,7 +118,9 @@ bool NativeInputWindowHandle::updateInfo() { gInputWindowHandleClassInfo.frameRight); mInfo.frameBottom = env->GetIntField(obj, gInputWindowHandleClassInfo.frameBottom); - mInfo.scaleFactor = env->GetFloatField(obj, + mInfo.surfaceInset = env->GetIntField(obj, + gInputWindowHandleClassInfo.surfaceInset); + mInfo.globalScaleFactor = env->GetFloatField(obj, gInputWindowHandleClassInfo.scaleFactor); jobject regionObj = env->GetObjectField(obj, @@ -155,6 +155,18 @@ bool NativeInputWindowHandle::updateInfo() { mInfo.displayId = env->GetIntField(obj, gInputWindowHandleClassInfo.displayId); + jobject inputApplicationHandleObj = env->GetObjectField(obj, + gInputWindowHandleClassInfo.inputApplicationHandle); + if (inputApplicationHandleObj) { + sp<InputApplicationHandle> inputApplicationHandle = + android_server_InputApplicationHandle_getHandle(env, inputApplicationHandleObj); + if (inputApplicationHandle != nullptr) { + inputApplicationHandle->updateInfo(); + mInfo.applicationInfo = *(inputApplicationHandle->getInfo()); + } + env->DeleteLocalRef(inputApplicationHandleObj); + } + env->DeleteLocalRef(obj); return true; } @@ -175,14 +187,8 @@ sp<NativeInputWindowHandle> android_server_InputWindowHandle_getHandle( if (ptr) { handle = reinterpret_cast<NativeInputWindowHandle*>(ptr); } else { - jobject inputApplicationHandleObj = env->GetObjectField(inputWindowHandleObj, - gInputWindowHandleClassInfo.inputApplicationHandle); - sp<InputApplicationHandle> inputApplicationHandle = - android_server_InputApplicationHandle_getHandle(env, inputApplicationHandleObj); - env->DeleteLocalRef(inputApplicationHandleObj); - jweak objWeak = env->NewWeakGlobalRef(inputWindowHandleObj); - handle = new NativeInputWindowHandle(inputApplicationHandle, objWeak); + handle = new NativeInputWindowHandle(objWeak); handle->incStrong((void*)android_server_InputWindowHandle_getHandle); env->SetLongField(inputWindowHandleObj, gInputWindowHandleClassInfo.ptr, reinterpret_cast<jlong>(handle)); @@ -236,8 +242,8 @@ int register_android_server_InputWindowHandle(JNIEnv* env) { clazz, "inputApplicationHandle", "Landroid/view/InputApplicationHandle;"); - GET_FIELD_ID(gInputWindowHandleClassInfo.inputChannel, clazz, - "inputChannel", "Landroid/view/InputChannel;"); + GET_FIELD_ID(gInputWindowHandleClassInfo.token, clazz, + "token", "Landroid/os/IBinder;"); GET_FIELD_ID(gInputWindowHandleClassInfo.name, clazz, "name", "Ljava/lang/String;"); @@ -263,6 +269,9 @@ int register_android_server_InputWindowHandle(JNIEnv* env) { GET_FIELD_ID(gInputWindowHandleClassInfo.frameBottom, clazz, "frameBottom", "I"); + GET_FIELD_ID(gInputWindowHandleClassInfo.surfaceInset, clazz, + "surfaceInset", "I"); + GET_FIELD_ID(gInputWindowHandleClassInfo.scaleFactor, clazz, "scaleFactor", "F"); diff --git a/core/jni/android_hardware_input_InputWindowHandle.h b/core/jni/android_hardware_input_InputWindowHandle.h index 2be267e958ec..54b89f5b7918 100644 --- a/core/jni/android_hardware_input_InputWindowHandle.h +++ b/core/jni/android_hardware_input_InputWindowHandle.h @@ -26,8 +26,7 @@ namespace android { class NativeInputWindowHandle : public InputWindowHandle { public: - NativeInputWindowHandle(const sp<InputApplicationHandle>& inputApplicationHandle, - jweak objWeak); + NativeInputWindowHandle(jweak objWeak); virtual ~NativeInputWindowHandle(); jobject getInputWindowHandleObjLocalRef(JNIEnv* env); diff --git a/core/proto/android/providers/settings/global.proto b/core/proto/android/providers/settings/global.proto index 7de8020c4d32..d917536b1715 100644 --- a/core/proto/android/providers/settings/global.proto +++ b/core/proto/android/providers/settings/global.proto @@ -550,6 +550,10 @@ message GlobalSettingsProto { } optional MultiSim multi_sim = 76; + // Whether we've enabled native flags health check on this device. Takes effect on + // reboot. The value "1" enables native flags health check; otherwise it's disabled. + optional SettingProto native_flags_health_check_enabled = 144 [ (android.privacy).dest = DEST_AUTOMATIC ]; + message Netstats { option (android.msg_privacy).dest = DEST_EXPLICIT; @@ -987,5 +991,5 @@ message GlobalSettingsProto { // Please insert fields in alphabetical order and group them into messages // if possible (to avoid reaching the method limit). - // Next tag = 144; + // Next tag = 145; } diff --git a/core/proto/android/stats/devicepolicy/Android.bp b/core/proto/android/stats/devicepolicy/Android.bp new file mode 100644 index 000000000000..6ae54e23117d --- /dev/null +++ b/core/proto/android/stats/devicepolicy/Android.bp @@ -0,0 +1,33 @@ +// Copyright (C) 2018 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. + +java_library_static { + name: "devicepolicyprotosnano", + proto: { + type: "nano", + }, + srcs: [ + "*.proto", + ], + java_version: "1.8", + target: { + android: { + jarjar_rules: "jarjar-rules.txt", + }, + host: { + static_libs: ["libprotobuf-java-nano"], + } + }, + no_framework_libs: true, +} diff --git a/core/proto/android/stats/devicepolicy/device_policy.proto b/core/proto/android/stats/devicepolicy/device_policy.proto new file mode 100644 index 000000000000..af30cf3f9941 --- /dev/null +++ b/core/proto/android/stats/devicepolicy/device_policy.proto @@ -0,0 +1,24 @@ +/* + * Copyright (C) 2018 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +syntax = "proto2"; + +package android.stats.devicepolicy; +option java_multiple_files = true; + +message StringList { + repeated string string_value = 1; +} diff --git a/core/proto/android/stats/devicepolicy/device_policy_enums.proto b/core/proto/android/stats/devicepolicy/device_policy_enums.proto new file mode 100644 index 000000000000..8fbea12a8fb9 --- /dev/null +++ b/core/proto/android/stats/devicepolicy/device_policy_enums.proto @@ -0,0 +1,137 @@ +/* + * Copyright (C) 2018 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +syntax = "proto2"; + +package android.stats.devicepolicy; +option java_multiple_files = true; + +/** + * Id for device policy features. + */ +enum EventId { + SET_PASSWORD_QUALITY = 1; + SET_PASSWORD_MINIMUM_LENGTH = 2; + SET_PASSWORD_MINIMUM_NUMERIC = 3; + SET_PASSWORD_MINIMUM_NON_LETTER = 4; + SET_PASSWORD_MINIMUM_LETTERS = 5; + SET_PASSWORD_MINIMUM_LOWER_CASE = 6; + SET_PASSWORD_MINIMUM_UPPER_CASE = 7; + SET_PASSWORD_MINIMUM_SYMBOLS = 8; + SET_KEYGUARD_DISABLED_FEATURES = 9; + LOCK_NOW = 10; + WIPE_DATA_WITH_REASON = 11; + ADD_USER_RESTRICTION = 12; + REMOVE_USER_RESTRICTION = 13; + SET_SECURE_SETTING = 14; + SET_SECURITY_LOGGING_ENABLED = 15; + RETRIEVE_SECURITY_LOGS = 16; + RETRIEVE_PRE_REBOOT_SECURITY_LOGS = 17; + SET_PERMISSION_POLICY = 18; + SET_PERMISSION_GRANT_STATE = 19; + INSTALL_KEY_PAIR = 20; + INSTALL_CA_CERT = 21; + ON_CHOOSE_KEY_ALIAS = 22; + REMOVE_KEY_PAIR = 23; + UNINSTALL_CA_CERTS = 24; + SET_CERT_INSTALLER_PACKAGE = 25; + SET_ALWAYS_ON_VPN_PACKAGE = 26; + SET_PERMITTED_INPUT_METHODS = 27; + SET_PERMITTED_ACCESSIBILITY_SERVICES = 28; + SET_SCREEN_CAPTURE_DISABLE = 29; + SET_CAMERA_DISABLED = 30; + QUERY_SUMMARY_FOR_USER = 31; + QUERY_SUMMARY = 32; + QUERY_DETAILS = 33; + REBOOT = 34; + SET_MASTER_VOLUME_MUTED = 35; + SET_AUTO_TIME_REQUIRED = 36; + SET_KEYGUARD_DISABLED = 37; + SET_STATUS_BAR_DISABLED = 38; + SET_ORGANIZATION_COLOR = 39; + SET_PROFILE_NAME = 40; + SET_USER_ICON = 41; + SET_DEVICE_OWNER_LOCKSCREEN_INFO = 42; + SET_SHORT_SUPPORT_MESSAGE = 43; + SET_LONG_SUPPORT_MESSAGE = 44; + SET_CROSS_PROFILE_CONTACTS_SEARCH_DISABLED = 45; + SET_CROSS_PROFILE_CALLER_DISABLED = 46; + SET_BLUETOOTH_CONTACT_SHARING_DISABLED = 47; + ADD_CROSS_PROFILE_INTENT_FILTER = 48; + ADD_CROSS_PROFILE_WIDGET_PROVIDER = 49; + SET_SYSTEM_UPDATE_POLICY = 50; + SET_LOCKTASK_PACKAGES = 51; + ADD_PERSISTENT_PREFERRED_ACTIVITY = 52; + REQUEST_BUGREPORT = 53; + GET_WIFI_MAC_ADDRESS = 54; + REQUEST_QUIET_MODE_ENABLED = 55; + WORK_PROFILE_LOCATION_CHANGED = 56; + DO_USER_INFO_CLICKED = 57; + TRANSFER_OWNERSHIP = 58; + GENERATE_KEY_PAIR = 59; + SET_KEY_PAIR_CERTIFICATE = 60; + SET_KEEP_UNINSTALLED_PACKAGES = 61; + SET_APPLICATION_RESTRICTIONS = 62; + SET_APPLICATION_HIDDEN = 63; + ENABLE_SYSTEM_APP = 64; + ENABLE_SYSTEM_APP_WITH_INTENT = 65; + INSTALL_EXISTING_PACKAGE = 66; + SET_UNINSTALL_BLOCKED = 67; + SET_PACKAGES_SUSPENDED = 68; + ON_LOCK_TASK_MODE_ENTERING = 69; + ADD_CROSS_PROFILE_CALENDAR_PACKAGE = 70; + REMOVE_CROSS_PROFILE_CALENDAR_PACKAGE = 71; + GET_USER_PASSWORD_COMPLEXITY_LEVEL = 72; + INSTALL_SYSTEM_UPDATE = 73; + INSTALL_SYSTEM_UPDATE_ERROR = 74; + IS_MANAGED_KIOSK = 75; + IS_UNATTENDED_MANAGED_KIOSK = 76; + PROVISIONING_TO_COMP = 77; + PROVISIONING_FORCED_DO = 78; + + // existing Tron logs to be migrated to WestWorld + PROVISIONING_ENTRY_POINT_NFC = 79; + PROVISIONING_ENTRY_POINT_QR_CODE = 80; + PROVISIONING_ENTRY_POINT_ZERO_TOUCH = 81; + PROVISIONING_ENTRY_POINT_ADB = 82; + PROVISIONING_ENTRY_POINT_TRUSTED_SOURCE = 83; + PROVISIONING_DPC_PACKAGE_NAME = 84; + PROVISIONING_DPC_INSTALLED_BY_PACKAGE = 85; + PROVISIONING_PROVISIONING_ACTIVITY_TIME_MS = 86; + PROVISIONING_PREPROVISIONING_ACTIVITY_TIME_MS = 87; + PROVISIONING_ENCRYPT_DEVICE_ACTIVITY_TIME_MS = 88; + PROVISIONING_WEB_ACTIVITY_TIME_MS = 89; + PROVISIONING_TRAMPOLINE_ACTIVITY_TIME_MS = 90; + PROVISIONING_POST_ENCRYPTION_ACTIVITY_TIME_MS = 91; + PROVISIONING_FINALIZATION_ACTIVITY_TIME_MS = 92; + PROVISIONING_NETWORK_TYPE = 93; + PROVISIONING_ACTION = 94; + PROVISIONING_EXTRAS = 95; + PROVISIONING_COPY_ACCOUNT_TASK_MS = 96; + PROVISIONING_CREATE_PROFILE_TASK_MS = 97; + PROVISIONING_START_PROFILE_TASK_MS = 98; + PROVISIONING_DOWNLOAD_PACKAGE_TASK_MS = 99; + PROVISIONING_INSTALL_PACKAGE_TASK_MS = 100; + PROVISIONING_CANCELLED = 101; + PROVISIONING_ERROR = 102; + PROVISIONING_COPY_ACCOUNT_STATUS = 103; + PROVISIONING_TOTAL_TASK_TIME_MS = 104; + PROVISIONING_SESSION_STARTED = 105; + PROVISIONING_SESSION_COMPLETED = 106; + PROVISIONING_TERMS_ACTIVITY_TIME_MS = 107; + PROVISIONING_TERMS_COUNT = 108; + PROVISIONING_TERMS_READ = 109; +} diff --git a/core/proto/android/stats/devicepolicy/jarjar-rules.txt b/core/proto/android/stats/devicepolicy/jarjar-rules.txt new file mode 100644 index 000000000000..40043a861ceb --- /dev/null +++ b/core/proto/android/stats/devicepolicy/jarjar-rules.txt @@ -0,0 +1 @@ +rule com.google.protobuf.nano.** com.android.framework.protobuf.nano.@1 diff --git a/core/tests/coretests/src/android/provider/SettingsBackupTest.java b/core/tests/coretests/src/android/provider/SettingsBackupTest.java index 8f583307adab..5e669e4f82b9 100644 --- a/core/tests/coretests/src/android/provider/SettingsBackupTest.java +++ b/core/tests/coretests/src/android/provider/SettingsBackupTest.java @@ -314,6 +314,7 @@ public class SettingsBackupTest { Settings.Global.MULTI_SIM_SMS_SUBSCRIPTION, Settings.Global.MULTI_SIM_VOICE_CALL_SUBSCRIPTION, Settings.Global.MULTI_SIM_VOICE_PROMPT, + Settings.Global.NATIVE_FLAGS_HEALTH_CHECK_ENABLED, Settings.Global.NETSTATS_DEV_BUCKET_DURATION, Settings.Global.NETSTATS_DEV_DELETE_AGE, Settings.Global.NETSTATS_DEV_PERSIST_BYTES, diff --git a/core/tests/coretests/src/android/view/textclassifier/TextClassifierTest.java b/core/tests/coretests/src/android/view/textclassifier/TextClassifierTest.java index 2ec35e9281ba..fbcb629f043f 100644 --- a/core/tests/coretests/src/android/view/textclassifier/TextClassifierTest.java +++ b/core/tests/coretests/src/android/view/textclassifier/TextClassifierTest.java @@ -23,6 +23,7 @@ import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; import android.content.Context; +import android.content.Intent; import android.os.LocaleList; import android.support.test.InstrumentationRegistry; import android.support.test.filters.SmallTest; @@ -64,6 +65,8 @@ public class TextClassifierTest { @Parameterized.Parameter public String mTextClassifierType; + private static final TextClassificationConstants TC_CONSTANTS = + TextClassificationConstants.loadFromString(""); private static final LocaleList LOCALES = LocaleList.forLanguageTags("en-US"); private static final String NO_TYPE = null; @@ -80,7 +83,7 @@ public class TextClassifierTest { } @Test - public void testSmartSelection() { + public void testSuggestSelection() { if (isTextClassifierDisabled()) return; String text = "Contact me at droid@android.com"; @@ -101,7 +104,7 @@ public class TextClassifierTest { } @Test - public void testSmartSelection_url() { + public void testSuggestSelection_url() { if (isTextClassifierDisabled()) return; String text = "Visit http://www.android.com for more information"; @@ -157,7 +160,7 @@ public class TextClassifierTest { } @Test - public void testTextClassifyText_url() { + public void testClassifyText_url() { if (isTextClassifierDisabled()) return; String text = "Visit www.android.com for more information"; @@ -174,7 +177,7 @@ public class TextClassifierTest { } @Test - public void testTextClassifyText_address() { + public void testClassifyText_address() { if (isTextClassifierDisabled()) return; String text = "Brandschenkestrasse 110, Zürich, Switzerland"; @@ -188,7 +191,7 @@ public class TextClassifierTest { } @Test - public void testTextClassifyText_url_inCaps() { + public void testClassifyText_url_inCaps() { if (isTextClassifierDisabled()) return; String text = "Visit HTTP://ANDROID.COM for more information"; @@ -205,7 +208,7 @@ public class TextClassifierTest { } @Test - public void testTextClassifyText_date() { + public void testClassifyText_date() { if (isTextClassifierDisabled()) return; String text = "Let's meet on January 9, 2018."; @@ -222,7 +225,7 @@ public class TextClassifierTest { } @Test - public void testTextClassifyText_datetime() { + public void testClassifyText_datetime() { if (isTextClassifierDisabled()) return; String text = "Let's meet 2018/01/01 10:30:20."; @@ -240,6 +243,30 @@ public class TextClassifierTest { } @Test + public void testClassifyText_foreignText() { + LocaleList originalLocales = LocaleList.getDefault(); + LocaleList.setDefault(LocaleList.forLanguageTags("en")); + String foreignText = "これは日本語のテキストです"; + + Context context = new FakeContextBuilder() + .setIntentComponent(Intent.ACTION_TRANSLATE, FakeContextBuilder.DEFAULT_COMPONENT) + .build(); + TextClassifier classifier = new TextClassifierImpl(context, TC_CONSTANTS); + TextClassification.Request request = new TextClassification.Request.Builder( + foreignText, 0, foreignText.length()) + .setDefaultLocales(LOCALES) + .build(); + + TextClassification classification = classifier.classifyText(request); + assertEquals(1, classification.getActions().size()); + assertEquals( + context.getString(com.android.internal.R.string.translate), + classification.getActions().get(0).getTitle()); + + LocaleList.setDefault(originalLocales); + } + + @Test public void testGenerateLinks_phone() { if (isTextClassifierDisabled()) return; String text = "The number is +12122537077. See you tonight!"; diff --git a/libs/hwui/DeferredLayerUpdater.cpp b/libs/hwui/DeferredLayerUpdater.cpp index b772e5b87f2a..3bee3018d36e 100644 --- a/libs/hwui/DeferredLayerUpdater.cpp +++ b/libs/hwui/DeferredLayerUpdater.cpp @@ -85,19 +85,18 @@ void DeferredLayerUpdater::apply() { mUpdateTexImage = false; sk_sp<SkImage> layerImage; SkMatrix textureTransform; - android_dataspace dataSpace; bool queueEmpty = true; // If the SurfaceTexture queue is in synchronous mode, need to discard all // but latest frame. Since we can't tell which mode it is in, // do this unconditionally. do { - layerImage = mSurfaceTexture->dequeueImage(textureTransform, dataSpace, &queueEmpty, + layerImage = mSurfaceTexture->dequeueImage(textureTransform, &queueEmpty, mRenderState); } while (layerImage.get() && (!queueEmpty)); if (layerImage.get()) { // force filtration if buffer size != layer size bool forceFilter = mWidth != layerImage->width() || mHeight != layerImage->height(); - updateLayer(forceFilter, textureTransform, dataSpace, layerImage); + updateLayer(forceFilter, textureTransform, layerImage); } } @@ -109,12 +108,11 @@ void DeferredLayerUpdater::apply() { } void DeferredLayerUpdater::updateLayer(bool forceFilter, const SkMatrix& textureTransform, - android_dataspace dataspace, const sk_sp<SkImage>& layerImage) { + const sk_sp<SkImage>& layerImage) { mLayer->setBlend(mBlend); mLayer->setForceFilter(forceFilter); mLayer->setSize(mWidth, mHeight); mLayer->getTexTransform() = textureTransform; - mLayer->setDataSpace(dataspace); mLayer->setImage(layerImage); } diff --git a/libs/hwui/DeferredLayerUpdater.h b/libs/hwui/DeferredLayerUpdater.h index b2c5131dd613..a91c111933c4 100644 --- a/libs/hwui/DeferredLayerUpdater.h +++ b/libs/hwui/DeferredLayerUpdater.h @@ -95,7 +95,7 @@ public: void detachSurfaceTexture(); void updateLayer(bool forceFilter, const SkMatrix& textureTransform, - android_dataspace dataspace, const sk_sp<SkImage>& layerImage); + const sk_sp<SkImage>& layerImage); void destroyLayer(); diff --git a/libs/hwui/Layer.cpp b/libs/hwui/Layer.cpp index 32aaa54e696c..d0df200d2fa6 100644 --- a/libs/hwui/Layer.cpp +++ b/libs/hwui/Layer.cpp @@ -33,7 +33,6 @@ Layer::Layer(RenderState& renderState, sk_sp<SkColorFilter> colorFilter, int alp // TODO: This is a violation of Android's typical ref counting, but it // preserves the old inc/dec ref locations. This should be changed... incStrong(nullptr); - buildColorSpaceWithFilter(); renderState.registerLayer(this); texTransform.setIdentity(); transform.setIdentity(); @@ -43,36 +42,6 @@ Layer::~Layer() { mRenderState.unregisterLayer(this); } -void Layer::setColorFilter(sk_sp<SkColorFilter> filter) { - if (filter != mColorFilter) { - mColorFilter = filter; - buildColorSpaceWithFilter(); - } -} - -void Layer::setDataSpace(android_dataspace dataspace) { - if (dataspace != mCurrentDataspace) { - mCurrentDataspace = dataspace; - buildColorSpaceWithFilter(); - } -} - -void Layer::buildColorSpaceWithFilter() { - sk_sp<SkColorFilter> colorSpaceFilter; - sk_sp<SkColorSpace> colorSpace = DataSpaceToColorSpace(mCurrentDataspace); - if (colorSpace && !colorSpace->isSRGB()) { - colorSpaceFilter = SkToSRGBColorFilter::Make(colorSpace); - } - - if (mColorFilter && colorSpaceFilter) { - mColorSpaceWithFilter = mColorFilter->makeComposed(colorSpaceFilter); - } else if (colorSpaceFilter) { - mColorSpaceWithFilter = colorSpaceFilter; - } else { - mColorSpaceWithFilter = mColorFilter; - } -} - void Layer::postDecStrong() { mRenderState.postDecStrong(this); } diff --git a/libs/hwui/Layer.h b/libs/hwui/Layer.h index e4f96e914c36..98600dbf1eea 100644 --- a/libs/hwui/Layer.h +++ b/libs/hwui/Layer.h @@ -69,15 +69,9 @@ public: SkBlendMode getMode() const; - inline SkColorFilter* getColorFilter() const { return mColorFilter.get(); } + inline sk_sp<SkColorFilter> getColorFilter() const { return mColorFilter; } - void setColorFilter(sk_sp<SkColorFilter> filter); - - void setDataSpace(android_dataspace dataspace); - - void setColorSpace(sk_sp<SkColorSpace> colorSpace); - - inline sk_sp<SkColorFilter> getColorSpaceWithFilter() const { return mColorSpaceWithFilter; } + void setColorFilter(sk_sp<SkColorFilter> filter) { mColorFilter = filter; }; inline SkMatrix& getTexTransform() { return texTransform; } @@ -98,24 +92,12 @@ protected: RenderState& mRenderState; private: - void buildColorSpaceWithFilter(); - /** * Color filter used to draw this layer. Optional. */ sk_sp<SkColorFilter> mColorFilter; /** - * Colorspace of the contents of the layer. Optional. - */ - android_dataspace mCurrentDataspace = HAL_DATASPACE_UNKNOWN; - - /** - * A color filter that is the combination of the mColorFilter and mColorSpace. Optional. - */ - sk_sp<SkColorFilter> mColorSpaceWithFilter; - - /** * Indicates raster data backing the layer is scaled, requiring filtration. */ bool forceFilter = false; diff --git a/libs/hwui/Readback.cpp b/libs/hwui/Readback.cpp index 80f2b5714659..2a488378e3a8 100644 --- a/libs/hwui/Readback.cpp +++ b/libs/hwui/Readback.cpp @@ -66,13 +66,10 @@ CopyResult Readback::copySurfaceInto(Surface& surface, const Rect& srcRect, SkBi sk_sp<SkColorSpace> colorSpace = DataSpaceToColorSpace(static_cast<android_dataspace>(surface.getBuffersDataSpace())); - sk_sp<SkColorFilter> colorSpaceFilter; - if (colorSpace && !colorSpace->isSRGB()) { - colorSpaceFilter = SkToSRGBColorFilter::Make(colorSpace); - } sk_sp<SkImage> image = SkImage::MakeFromAHardwareBuffer( - reinterpret_cast<AHardwareBuffer*>(sourceBuffer.get()), kPremul_SkAlphaType); - return copyImageInto(image, colorSpaceFilter, texTransform, srcRect, bitmap); + reinterpret_cast<AHardwareBuffer*>(sourceBuffer.get()), + kPremul_SkAlphaType, colorSpace); + return copyImageInto(image, texTransform, srcRect, bitmap); } CopyResult Readback::copyHWBitmapInto(Bitmap* hwBitmap, SkBitmap* bitmap) { @@ -83,20 +80,7 @@ CopyResult Readback::copyHWBitmapInto(Bitmap* hwBitmap, SkBitmap* bitmap) { transform.loadScale(1, -1, 1); transform.translate(0, -1); - // TODO: Try to take and reuse the image inside HW bitmap with "hwBitmap->makeImage". - // TODO: When this was attempted, it resulted in instability. - sk_sp<SkColorFilter> colorSpaceFilter; - sk_sp<SkColorSpace> colorSpace = hwBitmap->info().refColorSpace(); - if (colorSpace && !colorSpace->isSRGB()) { - colorSpaceFilter = SkToSRGBColorFilter::Make(colorSpace); - } - sk_sp<SkImage> image = SkImage::MakeFromAHardwareBuffer( - reinterpret_cast<AHardwareBuffer*>(hwBitmap->graphicBuffer()), kPremul_SkAlphaType); - - // HW Bitmap currently can only attach to a GraphicBuffer with PIXEL_FORMAT_RGBA_8888 format - // and SRGB color space. ImageDecoder can create a new HW Bitmap with non-SRGB color space: for - // example see android.graphics.cts.BitmapColorSpaceTest#testEncodeP3hardware test. - return copyImageInto(image, colorSpaceFilter, transform, srcRect, bitmap); + return copyImageInto(hwBitmap->makeImage(), transform, srcRect, bitmap); } CopyResult Readback::copyLayerInto(DeferredLayerUpdater* deferredLayer, SkBitmap* bitmap) { @@ -118,8 +102,7 @@ CopyResult Readback::copyLayerInto(DeferredLayerUpdater* deferredLayer, SkBitmap return copyResult; } -CopyResult Readback::copyImageInto(const sk_sp<SkImage>& image, - sk_sp<SkColorFilter>& colorSpaceFilter, Matrix4& texTransform, +CopyResult Readback::copyImageInto(const sk_sp<SkImage>& image, Matrix4& texTransform, const Rect& srcRect, SkBitmap* bitmap) { if (Properties::getRenderPipelineType() == RenderPipelineType::SkiaGL) { mRenderThread.requireGlContext(); @@ -157,11 +140,7 @@ CopyResult Readback::copyImageInto(const sk_sp<SkImage>& image, return copyResult; } - // See Readback::copyLayerInto for an overview of color space conversion. - // HW Bitmap are allowed to be in a non-SRGB color space (for example coming from ImageDecoder). - // For Surface and HW Bitmap readback flows we pass colorSpaceFilter, which does the conversion. - // TextureView readback is using Layer::setDataSpace, which creates a SkColorFilter internally. - Layer layer(mRenderThread.renderState(), colorSpaceFilter, 255, SkBlendMode::kSrc); + Layer layer(mRenderThread.renderState(), nullptr, 255, SkBlendMode::kSrc); bool disableFilter = MathUtils::areEqual(skiaSrcRect.width(), skiaDestRect.width()) && MathUtils::areEqual(skiaSrcRect.height(), skiaDestRect.height()); layer.setForceFilter(!disableFilter); @@ -177,38 +156,6 @@ CopyResult Readback::copyImageInto(const sk_sp<SkImage>& image, bool Readback::copyLayerInto(Layer* layer, const SkRect* srcRect, const SkRect* dstRect, SkBitmap* bitmap) { - /* - * In the past only TextureView readback was setting the temporary surface color space to null. - * Now all 3 readback flows are drawing into a SkSurface with null color space. - * At readback there are 3 options to convert the source image color space to the destination - * color space requested in "bitmap->info().colorSpace()": - * 1. Set color space for temporary surface render target to null (disables color management), - * colorspace tag from source SkImage is ignored by Skia, - * convert SkImage to SRGB at draw time with SkColorFilter/SkToSRGBColorFilter, - * do a readback from temporary SkSurface to a temporary SRGB SkBitmap "bitmap2", - * read back from SRGB "bitmap2" into non-SRGB "bitmap" which will do a CPU color conversion. - * - * 2. Set color space for temporary surface render target to SRGB (not nullptr), - * colorspace tag on the source SkImage is used by Skia to enable conversion, - * convert SkImage to SRGB at draw time with drawImage (no filters), - * do a readback from temporary SkSurface, which will do a color conversion from SRGB to - * bitmap->info().colorSpace() on the CPU. - * - * 3. Set color space for temporary surface render target to bitmap->info().colorSpace(), - * colorspace tag on the source SkImage is used by Skia to enable conversion, - * convert SkImage to bitmap->info().colorSpace() at draw time with drawImage (no filters), - * do a readback from SkSurface, which will not do any color conversion, because - * surface was created with the same color space as the "bitmap". - * - * Option 1 is used for all readback flows. - * Options 2 and 3 are new, because skia added support for non-SRGB render targets without - * linear blending. - * TODO: evaluate if options 2 or 3 for color space conversion are better. - */ - - // drop the colorSpace from the temporary surface. - SkImageInfo surfaceInfo = bitmap->info().makeColorSpace(nullptr); - /* This intermediate surface is present to work around a bug in SwiftShader that * prevents us from reading the contents of the layer's texture directly. The * workaround involves first rendering that texture into an intermediate buffer and @@ -217,70 +164,44 @@ bool Readback::copyLayerInto(Layer* layer, const SkRect* srcRect, const SkRect* * with reading incorrect data from EGLImage backed SkImage (likely a driver bug). */ sk_sp<SkSurface> tmpSurface = SkSurface::MakeRenderTarget(mRenderThread.getGrContext(), - SkBudgeted::kYes, surfaceInfo); + SkBudgeted::kYes, bitmap->info()); + // if we can't generate a GPU surface that matches the destination bitmap (e.g. 565) then we + // attempt to do the intermediate rendering step in 8888 if (!tmpSurface.get()) { - surfaceInfo = surfaceInfo.makeColorType(SkColorType::kN32_SkColorType); + SkImageInfo tmpInfo = bitmap->info().makeColorType(SkColorType::kN32_SkColorType); tmpSurface = SkSurface::MakeRenderTarget(mRenderThread.getGrContext(), SkBudgeted::kYes, - surfaceInfo); + tmpInfo); if (!tmpSurface.get()) { - ALOGW("Unable to readback GPU contents into the provided bitmap"); + ALOGW("Unable to generate GPU buffer in a format compatible with the provided bitmap"); return false; } } - if (skiapipeline::LayerDrawable::DrawLayer(mRenderThread.getGrContext(), - tmpSurface->getCanvas(), layer, srcRect, dstRect, - false)) { - // If bitmap->info().colorSpace() is non-SRGB, convert the data from SRGB to non-SRGB on - // CPU. We can't just pass bitmap->info() to SkSurface::readPixels, because "tmpSurface" has - // disabled color conversion. - SkColorSpace* destColorSpace = bitmap->info().colorSpace(); - SkBitmap tempSRGBBitmap; - SkBitmap tmpN32Bitmap; - SkBitmap* bitmapInSRGB; - if (destColorSpace && !destColorSpace->isSRGB()) { - tempSRGBBitmap.allocPixels(bitmap->info().makeColorSpace(SkColorSpace::MakeSRGB())); - bitmapInSRGB = &tempSRGBBitmap; // Need to convert latter from SRGB to non-SRGB. - } else { - bitmapInSRGB = bitmap; // No need for color conversion - write directly into output. - } - bool success = false; - - // TODO: does any of the readbacks below clamp F16 exSRGB? - // Readback into a SRGB SkBitmap. - if (tmpSurface->readPixels(bitmapInSRGB->info(), bitmapInSRGB->getPixels(), - bitmapInSRGB->rowBytes(), 0, 0)) { - success = true; - } else { - // if we fail to readback from the GPU directly (e.g. 565) then we attempt to read into - // 8888 and then convert that into the destination format before giving up. - SkImageInfo bitmapInfo = - SkImageInfo::MakeN32(bitmap->width(), bitmap->height(), bitmap->alphaType(), - SkColorSpace::MakeSRGB()); - if (tmpN32Bitmap.tryAllocPixels(bitmapInfo) && - tmpSurface->readPixels(bitmapInfo, tmpN32Bitmap.getPixels(), - tmpN32Bitmap.rowBytes(), 0, 0)) { - success = true; - bitmapInSRGB = &tmpN32Bitmap; - } - } - - if (success) { - if (bitmapInSRGB != bitmap) { - // Convert from SRGB to non-SRGB color space if needed. Convert from N32 to - // destination bitmap color format if needed. - if (!bitmapInSRGB->readPixels(bitmap->info(), bitmap->getPixels(), - bitmap->rowBytes(), 0, 0)) { - return false; - } - } - bitmap->notifyPixelsChanged(); - return true; + if (!skiapipeline::LayerDrawable::DrawLayer(mRenderThread.getGrContext(), + tmpSurface->getCanvas(), layer, srcRect, dstRect, + false)) { + ALOGW("Unable to draw content from GPU into the provided bitmap"); + return false; + } + + if (!tmpSurface->readPixels(*bitmap, 0, 0)) { + // if we fail to readback from the GPU directly (e.g. 565) then we attempt to read into + // 8888 and then convert that into the destination format before giving up. + SkBitmap tmpBitmap; + SkImageInfo tmpInfo = bitmap->info().makeColorType(SkColorType::kN32_SkColorType); + if (bitmap->info().colorType() == SkColorType::kN32_SkColorType || + !tmpBitmap.tryAllocPixels(tmpInfo) || + !tmpSurface->readPixels(tmpBitmap, 0, 0) || + !tmpBitmap.readPixels(bitmap->info(), bitmap->getPixels(), + bitmap->rowBytes(), 0, 0)) { + ALOGW("Unable to convert content into the provided bitmap"); + return false; } } - return false; + bitmap->notifyPixelsChanged(); + return true; } } /* namespace uirenderer */ diff --git a/libs/hwui/Readback.h b/libs/hwui/Readback.h index d9e10cedc0e8..e86a8136cfa3 100644 --- a/libs/hwui/Readback.h +++ b/libs/hwui/Readback.h @@ -54,8 +54,8 @@ public: CopyResult copyLayerInto(DeferredLayerUpdater* layer, SkBitmap* bitmap); private: - CopyResult copyImageInto(const sk_sp<SkImage>& image, sk_sp<SkColorFilter>& colorSpaceFilter, - Matrix4& texTransform, const Rect& srcRect, SkBitmap* bitmap); + CopyResult copyImageInto(const sk_sp<SkImage>& image, Matrix4& texTransform, + const Rect& srcRect, SkBitmap* bitmap); bool copyLayerInto(Layer* layer, const SkRect* srcRect, const SkRect* dstRect, SkBitmap* bitmap); diff --git a/libs/hwui/SkiaCanvas.cpp b/libs/hwui/SkiaCanvas.cpp index 9a15ff2de463..ba343841d760 100644 --- a/libs/hwui/SkiaCanvas.cpp +++ b/libs/hwui/SkiaCanvas.cpp @@ -27,7 +27,6 @@ #include <SkAnimatedImage.h> #include <SkCanvasStateUtils.h> #include <SkColorFilter.h> -#include <SkColorSpaceXformCanvas.h> #include <SkDeque.h> #include <SkDrawable.h> #include <SkFont.h> @@ -61,19 +60,8 @@ SkiaCanvas::SkiaCanvas() {} SkiaCanvas::SkiaCanvas(SkCanvas* canvas) : mCanvas(canvas) {} SkiaCanvas::SkiaCanvas(const SkBitmap& bitmap) { - sk_sp<SkColorSpace> cs = bitmap.refColorSpace(); - mCanvasOwned = - std::unique_ptr<SkCanvas>(new SkCanvas(bitmap, SkCanvas::ColorBehavior::kLegacy)); - if (cs.get() == nullptr || cs->isSRGB()) { - mCanvas = mCanvasOwned.get(); - } else { - /** The wrapper is needed if we are drawing into a non-sRGB destination, since - * we need to transform all colors (not just bitmaps via filters) into the - * destination's colorspace. - */ - mCanvasWrapper = SkCreateColorSpaceXformCanvas(mCanvasOwned.get(), std::move(cs)); - mCanvas = mCanvasWrapper.get(); - } + mCanvasOwned = std::unique_ptr<SkCanvas>(new SkCanvas(bitmap)); + mCanvas = mCanvasOwned.get(); } SkiaCanvas::~SkiaCanvas() {} @@ -82,7 +70,6 @@ void SkiaCanvas::reset(SkCanvas* skiaCanvas) { if (mCanvas != skiaCanvas) { mCanvas = skiaCanvas; mCanvasOwned.reset(); - mCanvasWrapper.reset(); } mSaveStack.reset(nullptr); } @@ -92,18 +79,9 @@ void SkiaCanvas::reset(SkCanvas* skiaCanvas) { // ---------------------------------------------------------------------------- void SkiaCanvas::setBitmap(const SkBitmap& bitmap) { - sk_sp<SkColorSpace> cs = bitmap.refColorSpace(); - std::unique_ptr<SkCanvas> newCanvas = - std::unique_ptr<SkCanvas>(new SkCanvas(bitmap, SkCanvas::ColorBehavior::kLegacy)); - std::unique_ptr<SkCanvas> newCanvasWrapper; - if (cs.get() != nullptr && !cs->isSRGB()) { - newCanvasWrapper = SkCreateColorSpaceXformCanvas(newCanvas.get(), std::move(cs)); - } - // deletes the previously owned canvas (if any) - mCanvasOwned = std::move(newCanvas); - mCanvasWrapper = std::move(newCanvasWrapper); - mCanvas = mCanvasWrapper ? mCanvasWrapper.get() : mCanvasOwned.get(); + mCanvasOwned.reset(new SkCanvas(bitmap)); + mCanvas = mCanvasOwned.get(); // clean up the old save stack mSaveStack.reset(nullptr); @@ -548,40 +526,14 @@ void SkiaCanvas::drawVertices(const SkVertices* vertices, SkBlendMode mode, cons // Canvas draw operations: Bitmaps // ---------------------------------------------------------------------------- -SkiaCanvas::PaintCoW&& SkiaCanvas::filterBitmap(PaintCoW&& paint, - sk_sp<SkColorFilter> colorSpaceFilter) const { - /* We don't apply the colorSpace filter if this canvas is already wrapped with - * a SkColorSpaceXformCanvas since it already takes care of converting the - * contents of the bitmap into the appropriate colorspace. The mCanvasWrapper - * should only be used if this canvas is backed by a surface/bitmap that is known - * to have a non-sRGB colorspace. - */ - if (!mCanvasWrapper && colorSpaceFilter) { - SkPaint& tmpPaint = paint.writeable(); - if (tmpPaint.getColorFilter()) { - tmpPaint.setColorFilter(SkColorFilter::MakeComposeFilter(tmpPaint.refColorFilter(), - std::move(colorSpaceFilter))); - LOG_ALWAYS_FATAL_IF(!tmpPaint.getColorFilter()); - } else { - tmpPaint.setColorFilter(std::move(colorSpaceFilter)); - } - } - return filterPaint(std::move(paint)); -} - void SkiaCanvas::drawBitmap(Bitmap& bitmap, float left, float top, const SkPaint* paint) { - sk_sp<SkColorFilter> colorFilter; - sk_sp<SkImage> image = bitmap.makeImage(&colorFilter); - mCanvas->drawImage(image, left, top, filterBitmap(paint, std::move(colorFilter))); + mCanvas->drawImage(bitmap.makeImage(), left, top, filterPaint(paint)); } void SkiaCanvas::drawBitmap(Bitmap& bitmap, const SkMatrix& matrix, const SkPaint* paint) { SkAutoCanvasRestore acr(mCanvas, true); mCanvas->concat(matrix); - - sk_sp<SkColorFilter> colorFilter; - sk_sp<SkImage> image = bitmap.makeImage(&colorFilter); - mCanvas->drawImage(image, 0, 0, filterBitmap(paint, std::move(colorFilter))); + mCanvas->drawImage(bitmap.makeImage(), 0, 0, filterPaint(paint)); } void SkiaCanvas::drawBitmap(Bitmap& bitmap, float srcLeft, float srcTop, float srcRight, @@ -590,9 +542,7 @@ void SkiaCanvas::drawBitmap(Bitmap& bitmap, float srcLeft, float srcTop, float s SkRect srcRect = SkRect::MakeLTRB(srcLeft, srcTop, srcRight, srcBottom); SkRect dstRect = SkRect::MakeLTRB(dstLeft, dstTop, dstRight, dstBottom); - sk_sp<SkColorFilter> colorFilter; - sk_sp<SkImage> image = bitmap.makeImage(&colorFilter); - mCanvas->drawImageRect(image, srcRect, dstRect, filterBitmap(paint, std::move(colorFilter)), + mCanvas->drawImageRect(bitmap.makeImage(), srcRect, dstRect, filterPaint(paint), SkCanvas::kFast_SrcRectConstraint); } @@ -674,13 +624,9 @@ void SkiaCanvas::drawBitmapMesh(Bitmap& bitmap, int meshWidth, int meshHeight, PaintCoW paintCoW(paint); SkPaint& tmpPaint = paintCoW.writeable(); - sk_sp<SkColorFilter> colorFilter; - sk_sp<SkImage> image = bitmap.makeImage(&colorFilter); + sk_sp<SkImage> image = bitmap.makeImage(); sk_sp<SkShader> shader = image->makeShader(SkShader::kClamp_TileMode, SkShader::kClamp_TileMode); - if (colorFilter) { - shader = shader->makeWithColorFilter(std::move(colorFilter)); - } tmpPaint.setShader(std::move(shader)); mCanvas->drawVertices(builder.detach(), SkBlendMode::kModulate, @@ -711,10 +657,7 @@ void SkiaCanvas::drawNinePatch(Bitmap& bitmap, const Res_png_9patch& chunk, floa lattice.fBounds = nullptr; SkRect dst = SkRect::MakeLTRB(dstLeft, dstTop, dstRight, dstBottom); - sk_sp<SkColorFilter> colorFilter; - sk_sp<SkImage> image = bitmap.makeImage(&colorFilter); - mCanvas->drawImageLattice(image.get(), lattice, dst, - filterBitmap(paint, std::move(colorFilter))); + mCanvas->drawImageLattice(bitmap.makeImage().get(), lattice, dst, filterPaint(paint)); } double SkiaCanvas::drawAnimatedImage(AnimatedImageDrawable* imgDrawable) { diff --git a/libs/hwui/SkiaCanvas.h b/libs/hwui/SkiaCanvas.h index 3a877cf84010..24d9c08ec1c6 100644 --- a/libs/hwui/SkiaCanvas.h +++ b/libs/hwui/SkiaCanvas.h @@ -232,7 +232,6 @@ private: class Clip; - std::unique_ptr<SkCanvas> mCanvasWrapper; // might own a wrapper on the canvas std::unique_ptr<SkCanvas> mCanvasOwned; // might own a canvas we allocated SkCanvas* mCanvas; // we do NOT own this canvas, it must survive us // unless it is the same as mCanvasOwned.get() diff --git a/libs/hwui/hwui/Bitmap.cpp b/libs/hwui/hwui/Bitmap.cpp index 75a6e722dd8a..6c77f9ee1845 100644 --- a/libs/hwui/hwui/Bitmap.cpp +++ b/libs/hwui/hwui/Bitmap.cpp @@ -32,7 +32,6 @@ #include <SkCanvas.h> #include <SkImagePriv.h> -#include <SkToSRGBColorFilter.h> #include <SkHighContrastFilter.h> #include <limits> @@ -287,14 +286,8 @@ void Bitmap::setAlphaType(SkAlphaType alphaType) { void Bitmap::getSkBitmap(SkBitmap* outBitmap) { if (isHardware()) { - outBitmap->allocPixels(SkImageInfo::Make(info().width(), info().height(), - info().colorType(), info().alphaType(), nullptr)); + outBitmap->allocPixels(mInfo); uirenderer::renderthread::RenderProxy::copyHWBitmapInto(this, outBitmap); - if (mInfo.colorSpace()) { - sk_sp<SkPixelRef> pixelRef = sk_ref_sp(outBitmap->pixelRef()); - outBitmap->setInfo(mInfo); - outBitmap->setPixelRef(std::move(pixelRef), 0, 0); - } return; } outBitmap->setInfo(mInfo, rowBytes()); @@ -313,7 +306,7 @@ GraphicBuffer* Bitmap::graphicBuffer() { return nullptr; } -sk_sp<SkImage> Bitmap::makeImage(sk_sp<SkColorFilter>* outputColorFilter) { +sk_sp<SkImage> Bitmap::makeImage() { sk_sp<SkImage> image = mImage; if (!image) { SkASSERT(!isHardware()); @@ -325,9 +318,6 @@ sk_sp<SkImage> Bitmap::makeImage(sk_sp<SkColorFilter>* outputColorFilter) { // TODO: refactor Bitmap to not derive from SkPixelRef, which would allow caching here. image = SkMakeImageFromRasterBitmap(skiaBitmap, kNever_SkCopyPixelsMode); } - if (image->colorSpace() != nullptr && !image->colorSpace()->isSRGB()) { - *outputColorFilter = SkToSRGBColorFilter::Make(image->refColorSpace()); - } return image; } diff --git a/libs/hwui/hwui/Bitmap.h b/libs/hwui/hwui/Bitmap.h index 238c764cdea6..d446377ec1d9 100644 --- a/libs/hwui/hwui/Bitmap.h +++ b/libs/hwui/hwui/Bitmap.h @@ -105,14 +105,8 @@ public: * Creates or returns a cached SkImage and is safe to be invoked from either * the UI or RenderThread. * - * @param outputColorFilter is a required param that will be populated by - * this function if the bitmap's colorspace is not sRGB. If populated the - * filter will convert colors from the bitmaps colorspace into sRGB. It - * is the callers responsibility to use this colorFilter when drawing - * this image into any destination that is presumed to be sRGB (i.e. a - * buffer that has no colorspace defined). */ - sk_sp<SkImage> makeImage(sk_sp<SkColorFilter>* outputColorFilter); + sk_sp<SkImage> makeImage(); static BitmapPalette computePalette(const SkImageInfo& info, const void* addr, size_t rowBytes); diff --git a/libs/hwui/pipeline/skia/LayerDrawable.cpp b/libs/hwui/pipeline/skia/LayerDrawable.cpp index 0cd64069bc5c..9b408fbc95ca 100644 --- a/libs/hwui/pipeline/skia/LayerDrawable.cpp +++ b/libs/hwui/pipeline/skia/LayerDrawable.cpp @@ -89,7 +89,7 @@ bool LayerDrawable::DrawLayer(GrContext* context, SkCanvas* canvas, Layer* layer SkPaint paint; paint.setAlpha(layer->getAlpha()); paint.setBlendMode(layer->getMode()); - paint.setColorFilter(layer->getColorSpaceWithFilter()); + paint.setColorFilter(layer->getColorFilter()); const bool nonIdentityMatrix = !matrix.isIdentity(); if (nonIdentityMatrix) { canvas->save(); diff --git a/libs/hwui/pipeline/skia/SkiaOpenGLPipeline.cpp b/libs/hwui/pipeline/skia/SkiaOpenGLPipeline.cpp index 6ae59990d0ab..142bca95e598 100644 --- a/libs/hwui/pipeline/skia/SkiaOpenGLPipeline.cpp +++ b/libs/hwui/pipeline/skia/SkiaOpenGLPipeline.cpp @@ -97,7 +97,7 @@ bool SkiaOpenGLPipeline::draw(const Frame& frame, const SkRect& screenDirty, con SkASSERT(mRenderThread.getGrContext() != nullptr); sk_sp<SkSurface> surface(SkSurface::MakeFromBackendRenderTarget( mRenderThread.getGrContext(), backendRT, kBottomLeft_GrSurfaceOrigin, colorType, - nullptr, &props)); + mSurfaceColorSpace, &props)); SkiaPipeline::updateLighting(lightGeometry, lightInfo); renderFrame(*layerUpdateQueue, dirty, renderNodes, opaque, contentDrawBounds, surface); @@ -176,6 +176,7 @@ bool SkiaOpenGLPipeline::setSurface(Surface* surface, SwapBehavior swapBehavior, } else if (colorMode == ColorMode::WideColorGamut) { mSurfaceColorType = SkColorType::kRGBA_F16_SkColorType; } + mSurfaceColorSpace = SkColorSpace::MakeSRGB(); if (mEglSurface != EGL_NO_SURFACE) { const bool preserveBuffer = (swapBehavior != SwapBehavior::kSwap_discardBuffer); diff --git a/libs/hwui/pipeline/skia/SkiaPipeline.cpp b/libs/hwui/pipeline/skia/SkiaPipeline.cpp index 2dfe7c71ca1b..7a255c15bf5f 100644 --- a/libs/hwui/pipeline/skia/SkiaPipeline.cpp +++ b/libs/hwui/pipeline/skia/SkiaPipeline.cpp @@ -169,7 +169,7 @@ bool SkiaPipeline::createOrUpdateLayer(RenderNode* node, const DamageAccumulator if (!layer || layer->width() != surfaceWidth || layer->height() != surfaceHeight) { SkImageInfo info; info = SkImageInfo::Make(surfaceWidth, surfaceHeight, getSurfaceColorType(), - kPremul_SkAlphaType); + kPremul_SkAlphaType, getSurfaceColorSpace()); SkSurfaceProps props(0, kUnknown_SkPixelGeometry); SkASSERT(mRenderThread.getGrContext() != nullptr); node->setLayerSurface(SkSurface::MakeRenderTarget(mRenderThread.getGrContext(), @@ -204,8 +204,7 @@ void SkiaPipeline::prepareToDraw(const RenderThread& thread, Bitmap* bitmap) { GrContext* context = thread.getGrContext(); if (context) { ATRACE_FORMAT("Bitmap#prepareToDraw %dx%d", bitmap->width(), bitmap->height()); - sk_sp<SkColorFilter> colorFilter; - auto image = bitmap->makeImage(&colorFilter); + auto image = bitmap->makeImage(); if (image.get() && !bitmap->isHardware()) { SkImage_pinAsTexture(image.get(), context); SkImage_unpinAsTexture(image.get(), context); diff --git a/libs/hwui/pipeline/skia/SkiaRecordingCanvas.cpp b/libs/hwui/pipeline/skia/SkiaRecordingCanvas.cpp index 45022e733979..f5de1c8adfaf 100644 --- a/libs/hwui/pipeline/skia/SkiaRecordingCanvas.cpp +++ b/libs/hwui/pipeline/skia/SkiaRecordingCanvas.cpp @@ -179,9 +179,8 @@ SkiaCanvas::PaintCoW&& SkiaRecordingCanvas::filterBitmap(PaintCoW&& paint, } void SkiaRecordingCanvas::drawBitmap(Bitmap& bitmap, float left, float top, const SkPaint* paint) { - sk_sp<SkColorFilter> colorFilter; - sk_sp<SkImage> image = bitmap.makeImage(&colorFilter); - mRecorder.drawImage(image, left, top, filterBitmap(paint, std::move(colorFilter)), bitmap.palette()); + sk_sp<SkImage> image = bitmap.makeImage(); + mRecorder.drawImage(image, left, top, filterPaint(paint), bitmap.palette()); // if image->unique() is true, then mRecorder.drawImage failed for some reason. It also means // it is not safe to store a raw SkImage pointer, because the image object will be destroyed // when this function ends. @@ -194,9 +193,8 @@ void SkiaRecordingCanvas::drawBitmap(Bitmap& bitmap, const SkMatrix& matrix, con SkAutoCanvasRestore acr(&mRecorder, true); concat(matrix); - sk_sp<SkColorFilter> colorFilter; - sk_sp<SkImage> image = bitmap.makeImage(&colorFilter); - mRecorder.drawImage(image, 0, 0, filterBitmap(paint, std::move(colorFilter)), bitmap.palette()); + sk_sp<SkImage> image = bitmap.makeImage(); + mRecorder.drawImage(image, 0, 0, filterPaint(paint), bitmap.palette()); if (!bitmap.isImmutable() && image.get() && !image->unique()) { mDisplayList->mMutableImages.push_back(image.get()); } @@ -208,9 +206,8 @@ void SkiaRecordingCanvas::drawBitmap(Bitmap& bitmap, float srcLeft, float srcTop SkRect srcRect = SkRect::MakeLTRB(srcLeft, srcTop, srcRight, srcBottom); SkRect dstRect = SkRect::MakeLTRB(dstLeft, dstTop, dstRight, dstBottom); - sk_sp<SkColorFilter> colorFilter; - sk_sp<SkImage> image = bitmap.makeImage(&colorFilter); - mRecorder.drawImageRect(image, srcRect, dstRect, filterBitmap(paint, std::move(colorFilter)), + sk_sp<SkImage> image = bitmap.makeImage(); + mRecorder.drawImageRect(image, srcRect, dstRect, filterPaint(paint), SkCanvas::kFast_SrcRectConstraint, bitmap.palette()); if (!bitmap.isImmutable() && image.get() && !image->unique() && !srcRect.isEmpty() && !dstRect.isEmpty()) { @@ -247,10 +244,9 @@ void SkiaRecordingCanvas::drawNinePatch(Bitmap& bitmap, const Res_png_9patch& ch if (!filteredPaint || filteredPaint->getFilterQuality() != kLow_SkFilterQuality) { filteredPaint.writeable().setFilterQuality(kLow_SkFilterQuality); } - sk_sp<SkColorFilter> colorFilter; - sk_sp<SkImage> image = bitmap.makeImage(&colorFilter); + sk_sp<SkImage> image = bitmap.makeImage(); mRecorder.drawImageLattice(image, lattice, dst, - filterBitmap(std::move(filteredPaint), std::move(colorFilter)), + filterPaint(std::move(filteredPaint)), bitmap.palette()); if (!bitmap.isImmutable() && image.get() && !image->unique() && !dst.isEmpty()) { mDisplayList->mMutableImages.push_back(image.get()); diff --git a/libs/hwui/surfacetexture/ImageConsumer.cpp b/libs/hwui/surfacetexture/ImageConsumer.cpp index 9ffccfb4d340..15aec9f291a4 100644 --- a/libs/hwui/surfacetexture/ImageConsumer.cpp +++ b/libs/hwui/surfacetexture/ImageConsumer.cpp @@ -22,6 +22,7 @@ #include "renderthread/EglManager.h" #include "renderthread/RenderThread.h" #include "renderthread/VulkanManager.h" +#include "utils/Color.h" // Macro for including the SurfaceTexture name in log messages #define IMG_LOGE(x, ...) ALOGE("[%s] " x, st.mName.string(), ##__VA_ARGS__) @@ -44,13 +45,16 @@ void ImageConsumer::onReleaseBufferLocked(int buf) { mImageSlots[buf].mEglFence = EGL_NO_SYNC_KHR; } -void ImageConsumer::ImageSlot::createIfNeeded(sp<GraphicBuffer> graphicBuffer) { - if (!mImage.get()) { +void ImageConsumer::ImageSlot::createIfNeeded(sp<GraphicBuffer> graphicBuffer, + android_dataspace dataspace) { + if (!mImage.get() || dataspace != mDataspace) { mImage = graphicBuffer.get() ? SkImage::MakeFromAHardwareBuffer( reinterpret_cast<AHardwareBuffer*>(graphicBuffer.get()), - kPremul_SkAlphaType) + kPremul_SkAlphaType, + uirenderer::DataSpaceToColorSpace(dataspace)) : nullptr; + mDataspace = dataspace; } } @@ -66,7 +70,7 @@ sk_sp<SkImage> ImageConsumer::dequeueImage(bool* queueEmpty, SurfaceTexture& st, int slot = st.mCurrentTexture; if (slot != BufferItem::INVALID_BUFFER_SLOT) { *queueEmpty = true; - mImageSlots[slot].createIfNeeded(st.mSlots[slot].mGraphicBuffer); + mImageSlots[slot].createIfNeeded(st.mSlots[slot].mGraphicBuffer, item.mDataSpace); return mImageSlots[slot].mImage; } } @@ -145,7 +149,7 @@ sk_sp<SkImage> ImageConsumer::dequeueImage(bool* queueEmpty, SurfaceTexture& st, st.computeCurrentTransformMatrixLocked(); *queueEmpty = false; - mImageSlots[slot].createIfNeeded(st.mSlots[slot].mGraphicBuffer); + mImageSlots[slot].createIfNeeded(st.mSlots[slot].mGraphicBuffer, item.mDataSpace); return mImageSlots[slot].mImage; } diff --git a/libs/hwui/surfacetexture/ImageConsumer.h b/libs/hwui/surfacetexture/ImageConsumer.h index 31ee8db52874..5bab0ef58a9a 100644 --- a/libs/hwui/surfacetexture/ImageConsumer.h +++ b/libs/hwui/surfacetexture/ImageConsumer.h @@ -68,18 +68,21 @@ private: * ImageConsumer maintains about a BufferQueue buffer slot. */ struct ImageSlot { - ImageSlot() : mEglFence(EGL_NO_SYNC_KHR) {} + ImageSlot() : mDataspace(HAL_DATASPACE_UNKNOWN), mEglFence(EGL_NO_SYNC_KHR) {} // mImage is the SkImage created from mGraphicBuffer. sk_sp<SkImage> mImage; + // the dataspace associated with the current image + android_dataspace mDataspace; + /** * mEglFence is the EGL sync object that must signal before the buffer * associated with this buffer slot may be dequeued. */ EGLSyncKHR mEglFence; - void createIfNeeded(sp<GraphicBuffer> graphicBuffer); + void createIfNeeded(sp<GraphicBuffer> graphicBuffer, android_dataspace dataspace); }; /** diff --git a/libs/hwui/surfacetexture/SurfaceTexture.cpp b/libs/hwui/surfacetexture/SurfaceTexture.cpp index 4bff715822e8..90f891265572 100644 --- a/libs/hwui/surfacetexture/SurfaceTexture.cpp +++ b/libs/hwui/surfacetexture/SurfaceTexture.cpp @@ -470,8 +470,7 @@ void SurfaceTexture::dumpLocked(String8& result, const char* prefix) const { ConsumerBase::dumpLocked(result, prefix); } -sk_sp<SkImage> SurfaceTexture::dequeueImage(SkMatrix& transformMatrix, android_dataspace& dataSpace, - bool* queueEmpty, +sk_sp<SkImage> SurfaceTexture::dequeueImage(SkMatrix& transformMatrix, bool* queueEmpty, uirenderer::RenderState& renderState) { Mutex::Autolock _l(mMutex); @@ -488,7 +487,6 @@ sk_sp<SkImage> SurfaceTexture::dequeueImage(SkMatrix& transformMatrix, android_d auto image = mImageConsumer.dequeueImage(queueEmpty, *this, renderState); if (image.get()) { uirenderer::mat4(mCurrentTransformMatrix).copyTo(transformMatrix); - dataSpace = mCurrentDataSpace; } return image; } diff --git a/libs/hwui/surfacetexture/SurfaceTexture.h b/libs/hwui/surfacetexture/SurfaceTexture.h index db392a9f8476..96afd82b0d40 100644 --- a/libs/hwui/surfacetexture/SurfaceTexture.h +++ b/libs/hwui/surfacetexture/SurfaceTexture.h @@ -258,8 +258,8 @@ public: */ status_t attachToContext(uint32_t tex); - sk_sp<SkImage> dequeueImage(SkMatrix& transformMatrix, android_dataspace& dataSpace, - bool* queueEmpty, uirenderer::RenderState& renderState); + sk_sp<SkImage> dequeueImage(SkMatrix& transformMatrix, bool* queueEmpty, + uirenderer::RenderState& renderState); /** * attachToView attaches a SurfaceTexture that is currently in the diff --git a/libs/hwui/tests/common/TestUtils.cpp b/libs/hwui/tests/common/TestUtils.cpp index 66b9b85bdbe7..8a1bc4d2f7f2 100644 --- a/libs/hwui/tests/common/TestUtils.cpp +++ b/libs/hwui/tests/common/TestUtils.cpp @@ -72,9 +72,7 @@ sp<DeferredLayerUpdater> TestUtils::createTextureLayerUpdater( layerUpdater->setTransform(&transform); // updateLayer so it's ready to draw - SkMatrix identity; - identity.setIdentity(); - layerUpdater->updateLayer(true, identity, HAL_DATASPACE_UNKNOWN, nullptr); + layerUpdater->updateLayer(true, SkMatrix::I(), nullptr); return layerUpdater; } diff --git a/libs/hwui/tests/common/scenes/BitmapShaders.cpp b/libs/hwui/tests/common/scenes/BitmapShaders.cpp index 15039b5fa976..ad11a1d32310 100644 --- a/libs/hwui/tests/common/scenes/BitmapShaders.cpp +++ b/libs/hwui/tests/common/scenes/BitmapShaders.cpp @@ -44,8 +44,7 @@ public: }); SkPaint paint; - sk_sp<SkColorFilter> colorFilter; - sk_sp<SkImage> image = hwuiBitmap->makeImage(&colorFilter); + sk_sp<SkImage> image = hwuiBitmap->makeImage(); sk_sp<SkShader> repeatShader = image->makeShader(SkShader::TileMode::kRepeat_TileMode, SkShader::TileMode::kRepeat_TileMode, nullptr); diff --git a/libs/hwui/tests/common/scenes/HwBitmapInCompositeShader.cpp b/libs/hwui/tests/common/scenes/HwBitmapInCompositeShader.cpp index f137562e7c73..448408d19eb1 100644 --- a/libs/hwui/tests/common/scenes/HwBitmapInCompositeShader.cpp +++ b/libs/hwui/tests/common/scenes/HwBitmapInCompositeShader.cpp @@ -72,8 +72,7 @@ public: void doFrame(int frameNr) override {} sk_sp<SkShader> createBitmapShader(Bitmap& bitmap) { - sk_sp<SkColorFilter> colorFilter; - sk_sp<SkImage> image = bitmap.makeImage(&colorFilter); + sk_sp<SkImage> image = bitmap.makeImage(); return image->makeShader(SkShader::TileMode::kClamp_TileMode, SkShader::TileMode::kClamp_TileMode); } diff --git a/libs/hwui/tests/unit/CacheManagerTests.cpp b/libs/hwui/tests/unit/CacheManagerTests.cpp index c235715073f5..210fced574e9 100644 --- a/libs/hwui/tests/unit/CacheManagerTests.cpp +++ b/libs/hwui/tests/unit/CacheManagerTests.cpp @@ -54,8 +54,7 @@ RENDERTHREAD_SKIA_PIPELINE_TEST(CacheManager, trimMemory) { // create an image and pin it so that we have something with a unique key in the cache sk_sp<Bitmap> bitmap = Bitmap::allocateHeapBitmap(SkImageInfo::MakeA8(displayInfo.w, displayInfo.h)); - sk_sp<SkColorFilter> filter; - sk_sp<SkImage> image = bitmap->makeImage(&filter); + sk_sp<SkImage> image = bitmap->makeImage(); ASSERT_TRUE(SkImage_pinAsTexture(image.get(), grContext)); // attempt to trim all memory while we still hold strong refs diff --git a/libs/hwui/tests/unit/DeferredLayerUpdaterTests.cpp b/libs/hwui/tests/unit/DeferredLayerUpdaterTests.cpp index 6c8775b1bdbb..a6869791a915 100644 --- a/libs/hwui/tests/unit/DeferredLayerUpdaterTests.cpp +++ b/libs/hwui/tests/unit/DeferredLayerUpdaterTests.cpp @@ -43,7 +43,7 @@ RENDERTHREAD_TEST(DeferredLayerUpdater, updateLayer) { SkBitmap bitmap; bitmap.allocN32Pixels(16, 16); sk_sp<SkImage> layerImage = SkImage::MakeFromBitmap(bitmap); - layerUpdater->updateLayer(true, scaledMatrix, HAL_DATASPACE_UNKNOWN, layerImage); + layerUpdater->updateLayer(true, scaledMatrix, layerImage); // the backing layer should now have all the properties applied. EXPECT_EQ(100u, layerUpdater->backingLayer()->getWidth()); diff --git a/libs/hwui/tests/unit/SkiaCanvasTests.cpp b/libs/hwui/tests/unit/SkiaCanvasTests.cpp index 634ceffe0741..f3a764874e2b 100644 --- a/libs/hwui/tests/unit/SkiaCanvasTests.cpp +++ b/libs/hwui/tests/unit/SkiaCanvasTests.cpp @@ -53,12 +53,12 @@ TEST(SkiaCanvas, colorSpaceXform) { adobeBitmap->getSkBitmap(&adobeSkBitmap); *adobeSkBitmap.getAddr32(0, 0) = 0xFF0000F0; // Opaque, almost fully-red - SkImageInfo info = adobeInfo.makeColorSpace(nullptr); + SkImageInfo info = adobeInfo.makeColorSpace(SkColorSpace::MakeSRGB()); sk_sp<Bitmap> bitmap = Bitmap::allocateHeapBitmap(info); SkBitmap skBitmap; bitmap->getSkBitmap(&skBitmap); - // Create a software canvas. + // Create a software sRGB canvas. SkiaCanvas canvas(skBitmap); canvas.drawBitmap(*adobeBitmap, 0, 0, nullptr); // The result should be fully red, since we convert to sRGB at draw time. @@ -77,7 +77,7 @@ TEST(SkiaCanvas, colorSpaceXform) { picCanvas.drawBitmap(*adobeBitmap, 0, 0, nullptr); sk_sp<SkPicture> picture = recorder.finishRecordingAsPicture(); - // Playback to an software canvas. The result should be fully red. + // Playback to a software sRGB canvas. The result should be fully red. canvas.asSkCanvas()->drawPicture(picture); ASSERT_EQ(0xFF0000FF, *skBitmap.getAddr32(0, 0)); } diff --git a/media/java/android/media/CallbackDataSourceDesc.java b/media/java/android/media/CallbackDataSourceDesc.java index 82273da7097d..e22203dab4bc 100644 --- a/media/java/android/media/CallbackDataSourceDesc.java +++ b/media/java/android/media/CallbackDataSourceDesc.java @@ -20,9 +20,11 @@ import android.annotation.NonNull; /** * @hide - * Structure for file data source descriptor. + * Structure of data source descriptor for sources using callback. * - * Used by {@link MediaPlayer2#setDataSource(CallbackDataSourceDesc)} + * Used by {@link MediaPlayer2#setDataSource(DataSourceDesc)}, + * {@link MediaPlayer2#setNextDataSource(DataSourceDesc)} and + * {@link MediaPlayer2#setNextDataSources(List<DataSourceDesc>)} * to set data source for playback. * * <p>Users should use {@link Builder} to create {@link CallbackDataSourceDesc}. diff --git a/media/java/android/media/DataSourceDesc.java b/media/java/android/media/DataSourceDesc.java index 360af34bc722..702034e987ca 100644 --- a/media/java/android/media/DataSourceDesc.java +++ b/media/java/android/media/DataSourceDesc.java @@ -22,7 +22,9 @@ import android.annotation.NonNull; * @hide * Base class of data source descriptor. * - * Used by {@link MediaPlayer2#setDataSource(DataSourceDesc)} + * Used by {@link MediaPlayer2#setDataSource(DataSourceDesc)}, + * {@link MediaPlayer2#setNextDataSource(DataSourceDesc)} and + * {@link MediaPlayer2#setNextDataSources(List<DataSourceDesc>)} * to set data source for playback. * * <p>Users should use subclasses' builder to change {@link DataSourceDesc}. @@ -30,7 +32,7 @@ import android.annotation.NonNull; */ public class DataSourceDesc { // intentionally less than long.MAX_VALUE - public static final long LONG_MAX = 0x7ffffffffffffffL; + static final long LONG_MAX = 0x7ffffffffffffffL; // keep consistent with native code public static final long LONG_MAX_TIME_MS = LONG_MAX / 1000; @@ -46,6 +48,19 @@ public class DataSourceDesc { } /** + * Releases the resources held by this {@code DataSourceDesc} object. + */ + void close() { + } + + // Have to declare protected for finalize() since it is protected + // in the base class Object. + @Override + protected void finalize() throws Throwable { + close(); + } + + /** * Return the media Id of data source. * @return the media Id of data source */ diff --git a/media/java/android/media/ExifInterface.java b/media/java/android/media/ExifInterface.java index b96a5853b9dc..01a0cb619bf0 100644 --- a/media/java/android/media/ExifInterface.java +++ b/media/java/android/media/ExifInterface.java @@ -16,7 +16,10 @@ package android.media; +import android.annotation.CurrentTimeMillisLong; +import android.annotation.IntDef; import android.annotation.NonNull; +import android.annotation.Nullable; import android.annotation.UnsupportedAppUsage; import android.content.res.AssetManager; import android.graphics.Bitmap; @@ -26,12 +29,14 @@ import android.system.Os; import android.system.OsConstants; import android.util.Log; import android.util.Pair; -import android.annotation.IntDef; + +import libcore.io.IoUtils; +import libcore.io.Streams; import java.io.BufferedInputStream; import java.io.ByteArrayInputStream; -import java.io.DataInputStream; import java.io.DataInput; +import java.io.DataInputStream; import java.io.EOFException; import java.io.File; import java.io.FileDescriptor; @@ -42,14 +47,14 @@ import java.io.FilterOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; import java.nio.ByteBuffer; import java.nio.ByteOrder; import java.nio.charset.Charset; -import java.nio.charset.StandardCharsets; import java.text.ParsePosition; import java.text.SimpleDateFormat; import java.util.Arrays; -import java.util.LinkedList; import java.util.Date; import java.util.HashMap; import java.util.HashSet; @@ -58,11 +63,6 @@ import java.util.Set; import java.util.TimeZone; import java.util.regex.Matcher; import java.util.regex.Pattern; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; - -import libcore.io.IoUtils; -import libcore.io.Streams; /** * This is a class for reading and writing Exif tags in a JPEG file or a RAW image file. @@ -583,11 +583,19 @@ public class ExifInterface { private static class ExifAttribute { public final int format; public final int numberOfComponents; + public final long bytesOffset; public final byte[] bytes; + public static final long BYTES_OFFSET_UNKNOWN = -1; + private ExifAttribute(int format, int numberOfComponents, byte[] bytes) { + this(format, numberOfComponents, BYTES_OFFSET_UNKNOWN, bytes); + } + + private ExifAttribute(int format, int numberOfComponents, long bytesOffset, byte[] bytes) { this.format = format; this.numberOfComponents = numberOfComponents; + this.bytesOffset = bytesOffset; this.bytes = bytes; } @@ -1318,6 +1326,7 @@ public class ExifInterface { private int mOrfThumbnailLength; private int mRw2JpgFromRawOffset; private boolean mIsSupportedFile; + private boolean mModified; // Pattern to check non zero timestamp private static final Pattern sNonZeroTimePattern = Pattern.compile(".*[1-9].*"); @@ -1328,7 +1337,14 @@ public class ExifInterface { /** * Reads Exif tags from the specified image file. */ - public ExifInterface(String filename) throws IOException { + public ExifInterface(@NonNull File file) throws IOException { + this(file.getAbsolutePath()); + } + + /** + * Reads Exif tags from the specified image file. + */ + public ExifInterface(@NonNull String filename) throws IOException { if (filename == null) { throw new IllegalArgumentException("filename cannot be null"); } @@ -1354,7 +1370,7 @@ public class ExifInterface { * for writable and seekable file descriptors only. This constructor will not rewind the offset * of the given file descriptor. Developers should close the file descriptor after use. */ - public ExifInterface(FileDescriptor fileDescriptor) throws IOException { + public ExifInterface(@NonNull FileDescriptor fileDescriptor) throws IOException { if (fileDescriptor == null) { throw new IllegalArgumentException("fileDescriptor cannot be null"); } @@ -1388,7 +1404,7 @@ public class ExifInterface { * for input streams. The given input stream will proceed its current position. Developers * should close the input stream after use. */ - public ExifInterface(InputStream inputStream) throws IOException { + public ExifInterface(@NonNull InputStream inputStream) throws IOException { if (inputStream == null) { throw new IllegalArgumentException("inputStream cannot be null"); } @@ -1414,7 +1430,7 @@ public class ExifInterface { * * @param tag the name of the tag. */ - private ExifAttribute getExifAttribute(String tag) { + private @Nullable ExifAttribute getExifAttribute(@NonNull String tag) { // Retrieves all tag groups. The value from primary image tag group has a higher priority // than the value from the thumbnail tag group if there are more than one candidates. for (int i = 0; i < EXIF_TAGS.length; ++i) { @@ -1432,7 +1448,7 @@ public class ExifInterface { * * @param tag the name of the tag. */ - public String getAttribute(String tag) { + public @Nullable String getAttribute(@NonNull String tag) { ExifAttribute attribute = getExifAttribute(tag); if (attribute != null) { if (!sTagSetForCompatibility.contains(tag)) { @@ -1470,7 +1486,7 @@ public class ExifInterface { * @param tag the name of the tag. * @param defaultValue the value to return if the tag is not available. */ - public int getAttributeInt(String tag, int defaultValue) { + public int getAttributeInt(@NonNull String tag, int defaultValue) { ExifAttribute exifAttribute = getExifAttribute(tag); if (exifAttribute == null) { return defaultValue; @@ -1491,7 +1507,7 @@ public class ExifInterface { * @param tag the name of the tag. * @param defaultValue the value to return if the tag is not available. */ - public double getAttributeDouble(String tag, double defaultValue) { + public double getAttributeDouble(@NonNull String tag, double defaultValue) { ExifAttribute exifAttribute = getExifAttribute(tag); if (exifAttribute == null) { return defaultValue; @@ -1510,7 +1526,7 @@ public class ExifInterface { * @param tag the name of the tag. * @param value the value of the tag. */ - public void setAttribute(String tag, String value) { + public void setAttribute(@NonNull String tag, @Nullable String value) { // Convert the given value to rational values for backwards compatibility. if (value != null && sTagSetForCompatibility.contains(tag)) { if (tag.equals(TAG_GPS_TIMESTAMP)) { @@ -1772,12 +1788,18 @@ public class ExifInterface { } /** - * Save the tag data into the original image file. This is expensive because it involves - * copying all the data from one file to another and deleting the old file and renaming the - * other. It's best to use {@link #setAttribute(String,String)} to set all attributes to write - * and make a single call rather than multiple calls for each attribute. + * Save the tag data into the original image file. This is expensive because + * it involves copying all the data from one file to another and deleting + * the old file and renaming the other. It's best to use + * {@link #setAttribute(String,String)} to set all attributes to write and + * make a single call rather than multiple calls for each attribute. * <p> * This method is only supported for JPEG files. + * <p class="note"> + * Note: after calling this method, any attempts to obtain range information + * from {@link #getAttributeRange(String)} or {@link #getThumbnailRange()} + * will throw {@link IllegalStateException}, since the offsets may have + * changed in the newly written file. * </p> */ public void saveAttributes() throws IOException { @@ -1789,6 +1811,10 @@ public class ExifInterface { "ExifInterface does not support saving attributes for the current input."); } + // Remember the fact that we've changed the file on disk from what was + // originally parsed, meaning we can't answer range questions + mModified = true; + // Keep the thumbnail in memory mThumbnailBytes = getThumbnail(); @@ -1849,6 +1875,15 @@ public class ExifInterface { } /** + * Returns true if the image file has the given attribute defined. + * + * @param tag the name of the tag. + */ + public boolean hasAttribute(String tag) { + return (getExifAttribute(tag) != null); + } + + /** * Returns the JPEG compressed thumbnail inside the image file, or {@code null} if there is no * JPEG compressed thumbnail. * The returned data can be decoded using @@ -1968,17 +2003,45 @@ public class ExifInterface { * * @return two-element array, the offset in the first value, and length in * the second, or {@code null} if no thumbnail was found. + * @throws IllegalStateException if {@link #saveAttributes()} has been + * called since the underlying file was initially parsed, since + * that means offsets may have changed. */ - public long[] getThumbnailRange() { - if (!mHasThumbnail) { + public @Nullable long[] getThumbnailRange() { + if (mModified) { + throw new IllegalStateException( + "The underlying file has been modified since being parsed"); + } + + if (mHasThumbnail) { + return new long[] { mThumbnailOffset, mThumbnailLength }; + } else { return null; } + } - long[] range = new long[2]; - range[0] = mThumbnailOffset; - range[1] = mThumbnailLength; + /** + * Returns the offset and length of the requested tag inside the image file, + * or {@code null} if the tag is not contained. + * + * @return two-element array, the offset in the first value, and length in + * the second, or {@code null} if no tag was found. + * @throws IllegalStateException if {@link #saveAttributes()} has been + * called since the underlying file was initially parsed, since + * that means offsets may have changed. + */ + public @Nullable long[] getAttributeRange(@NonNull String tag) { + if (mModified) { + throw new IllegalStateException( + "The underlying file has been modified since being parsed"); + } - return range; + final ExifAttribute attribute = getExifAttribute(tag); + if (attribute != null) { + return new long[] { attribute.bytesOffset, attribute.bytes.length }; + } else { + return null; + } } /** @@ -2023,13 +2086,41 @@ public class ExifInterface { } /** - * Returns number of milliseconds since Jan. 1, 1970, midnight local time. - * Returns -1 if the date time information if not available. + * Returns parsed {@code DateTime} value, or -1 if unavailable or invalid. + * * @hide */ @UnsupportedAppUsage - public long getDateTime() { - String dateTimeString = getAttribute(TAG_DATETIME); + public @CurrentTimeMillisLong long getDateTime() { + return parseDateTime(getAttribute(TAG_DATETIME), + getAttribute(TAG_SUBSEC_TIME)); + } + + /** + * Returns parsed {@code DateTimeDigitized} value, or -1 if unavailable or + * invalid. + * + * @hide + */ + public @CurrentTimeMillisLong long getDateTimeDigitized() { + return parseDateTime(getAttribute(TAG_DATETIME_DIGITIZED), + getAttribute(TAG_SUBSEC_TIME_DIGITIZED)); + } + + /** + * Returns parsed {@code DateTimeOriginal} value, or -1 if unavailable or + * invalid. + * + * @hide + */ + @UnsupportedAppUsage + public @CurrentTimeMillisLong long getDateTimeOriginal() { + return parseDateTime(getAttribute(TAG_DATETIME_ORIGINAL), + getAttribute(TAG_SUBSEC_TIME_ORIGINAL)); + } + + private static @CurrentTimeMillisLong long parseDateTime(@Nullable String dateTimeString, + @Nullable String subSecs) { if (dateTimeString == null || !sNonZeroTimePattern.matcher(dateTimeString).matches()) return -1; @@ -2041,7 +2132,6 @@ public class ExifInterface { if (datetime == null) return -1; long msecs = datetime.getTime(); - String subSecs = getAttribute(TAG_SUBSEC_TIME); if (subSecs != null) { try { long sub = Long.parseLong(subSecs); @@ -3125,9 +3215,11 @@ public class ExifInterface { continue; } - byte[] bytes = new byte[(int) byteCount]; + final int bytesOffset = dataInputStream.peek(); + final byte[] bytes = new byte[(int) byteCount]; dataInputStream.readFully(bytes); - ExifAttribute attribute = new ExifAttribute(dataFormat, numberOfComponents, bytes); + ExifAttribute attribute = new ExifAttribute(dataFormat, numberOfComponents, + bytesOffset, bytes); mAttributes[ifdType].put(tag.name, attribute); // DNG files have a DNG Version tag specifying the version of specifications that the diff --git a/media/java/android/media/FileDataSourceDesc.java b/media/java/android/media/FileDataSourceDesc.java index 9e80975e032c..763a81f53765 100644 --- a/media/java/android/media/FileDataSourceDesc.java +++ b/media/java/android/media/FileDataSourceDesc.java @@ -17,20 +17,26 @@ package android.media; import android.annotation.NonNull; +import android.os.ParcelFileDescriptor; +import android.util.Log; -import java.io.FileDescriptor; +import java.io.IOException; /** * @hide - * Structure for data source descriptor. + * Structure of data source descriptor for sources using file descriptor. * - * Used by {@link MediaPlayer2#setDataSource(DataSourceDesc)} + * Used by {@link MediaPlayer2#setDataSource(DataSourceDesc)}, + * {@link MediaPlayer2#setNextDataSource(DataSourceDesc)} and + * {@link MediaPlayer2#setNextDataSources(List<DataSourceDesc>)} * to set data source for playback. * * <p>Users should use {@link Builder} to create {@link FileDataSourceDesc}. * */ public class FileDataSourceDesc extends DataSourceDesc { + private static final String TAG = "FileDataSourceDesc"; + /** * Used when the length of file descriptor is unknown. * @@ -38,34 +44,61 @@ public class FileDataSourceDesc extends DataSourceDesc { */ public static final long FD_LENGTH_UNKNOWN = LONG_MAX; - private FileDescriptor mFD; + private ParcelFileDescriptor mPFD; private long mOffset = 0; private long mLength = FD_LENGTH_UNKNOWN; private FileDataSourceDesc() { + super(); + } + + /** + * Releases the resources held by this {@code FileDataSourceDesc} object. + */ + @Override + void close() { + super.close(); + closeFD(); + } + + /** + * Releases the file descriptor held by this {@code FileDataSourceDesc} object. + */ + void closeFD() { + synchronized (this) { + if (mPFD != null) { + try { + mPFD.close(); + } catch (IOException e) { + Log.e(TAG, "failed to close pfd: " + e); + } + + mPFD = null; + } + } } /** - * Return the FileDescriptor of this data source. - * @return the FileDescriptor of this data source + * Return the ParcelFileDescriptor of this data source. + * @return the ParcelFileDescriptor of this data source */ - public FileDescriptor getFileDescriptor() { - return mFD; + public ParcelFileDescriptor getParcelFileDescriptor() { + return mPFD; } /** - * Return the offset associated with the FileDescriptor of this data source. + * Return the offset associated with the ParcelFileDescriptor of this data source. * It's meaningful only when it has been set by the {@link Builder}. - * @return the offset associated with the FileDescriptor of this data source + * @return the offset associated with the ParcelFileDescriptor of this data source */ public long getOffset() { return mOffset; } /** - * Return the content length associated with the FileDescriptor of this data source. + * Return the content length associated with the ParcelFileDescriptor of this data source. * {@link #FD_LENGTH_UNKNOWN} means same as the length of source content. - * @return the content length associated with the FileDescriptor of this data source + * @return the content length associated with the ParcelFileDescriptor of this data source */ public long getLength() { return mLength; @@ -78,7 +111,7 @@ public class FileDataSourceDesc extends DataSourceDesc { * * <pre class="prettyprint"> * FileDataSourceDesc newDSD = new FileDataSourceDesc.Builder() - * .setDataSource(fd, 0, srcLength) + * .setDataSource(pfd, 0, srcLength) * .setStartPosition(1000) * .setEndPosition(15000) * .build(); @@ -86,7 +119,7 @@ public class FileDataSourceDesc extends DataSourceDesc { * </pre> */ public static class Builder extends BuilderBase<Builder> { - private FileDescriptor mFD; + private ParcelFileDescriptor mPFD; private long mOffset = 0; private long mLength = FD_LENGTH_UNKNOWN; @@ -107,7 +140,7 @@ public class FileDataSourceDesc extends DataSourceDesc { if (dsd == null) { return; // use default } - mFD = dsd.mFD; + mPFD = dsd.mPFD; mOffset = dsd.mOffset; mLength = dsd.mLength; } @@ -122,7 +155,7 @@ public class FileDataSourceDesc extends DataSourceDesc { public @NonNull FileDataSourceDesc build() { FileDataSourceDesc dsd = new FileDataSourceDesc(); super.build(dsd); - dsd.mFD = mFD; + dsd.mPFD = mPFD; dsd.mOffset = mOffset; dsd.mLength = mLength; @@ -130,38 +163,46 @@ public class FileDataSourceDesc extends DataSourceDesc { } /** - * Sets the data source (FileDescriptor) to use. The FileDescriptor must be - * seekable (N.B. a LocalSocket is not seekable). It is the caller's responsibility - * to close the file descriptor after the source has been used. + * Sets the data source (ParcelFileDescriptor) to use. The ParcelFileDescriptor must be + * seekable (N.B. a LocalSocket is not seekable). When the {@link FileDataSourceDesc} + * created by this builder is passed to {@link MediaPlayer2} via + * {@link MediaPlayer2#setDataSource(DataSourceDesc)}, + * {@link MediaPlayer2#setNextDataSource(DataSourceDesc)} or + * {@link MediaPlayer2#setNextDataSources(List<DataSourceDesc>)}, MediaPlayer2 will + * close the ParcelFileDescriptor. * - * @param fd the FileDescriptor for the file to play + * @param pfd the ParcelFileDescriptor for the file to play * @return the same Builder instance. - * @throws NullPointerException if fd is null. + * @throws NullPointerException if pfd is null. */ - public @NonNull Builder setDataSource(@NonNull FileDescriptor fd) { - Media2Utils.checkArgument(fd != null, "fd cannot be null."); + public @NonNull Builder setDataSource(@NonNull ParcelFileDescriptor pfd) { + Media2Utils.checkArgument(pfd != null, "pfd cannot be null."); resetDataSource(); - mFD = fd; + mPFD = pfd; return this; } /** - * Sets the data source (FileDescriptor) to use. The FileDescriptor must be - * seekable (N.B. a LocalSocket is not seekable). It is the caller's responsibility - * to close the file descriptor after the source has been used. + * Sets the data source (ParcelFileDescriptor) to use. The ParcelFileDescriptor must be + * seekable (N.B. a LocalSocket is not seekable). When the {@link FileDataSourceDesc} + * created by this builder is passed to {@link MediaPlayer2} via + * {@link MediaPlayer2#setDataSource(DataSourceDesc)}, + * {@link MediaPlayer2#setNextDataSource(DataSourceDesc)} or + * {@link MediaPlayer2#setNextDataSources(List<DataSourceDesc>)}, MediaPlayer2 will + * close the ParcelFileDescriptor. * * Any negative number for offset is treated as 0. * Any negative number for length is treated as maximum length of the data source. * - * @param fd the FileDescriptor for the file to play + * @param pfd the ParcelFileDescriptor for the file to play * @param offset the offset into the file where the data to be played starts, in bytes * @param length the length in bytes of the data to be played * @return the same Builder instance. - * @throws NullPointerException if fd is null. + * @throws NullPointerException if pfd is null. */ public @NonNull Builder setDataSource( - @NonNull FileDescriptor fd, long offset, long length) { - Media2Utils.checkArgument(fd != null, "fd cannot be null."); + @NonNull ParcelFileDescriptor pfd, long offset, long length) { + Media2Utils.checkArgument(pfd != null, "pfd cannot be null."); if (offset < 0) { offset = 0; } @@ -169,14 +210,14 @@ public class FileDataSourceDesc extends DataSourceDesc { length = FD_LENGTH_UNKNOWN; } resetDataSource(); - mFD = fd; + mPFD = pfd; mOffset = offset; mLength = length; return this; } private void resetDataSource() { - mFD = null; + mPFD = null; mOffset = 0; mLength = FD_LENGTH_UNKNOWN; } diff --git a/media/java/android/media/MediaPlayer2.java b/media/java/android/media/MediaPlayer2.java index 267dab9c46a1..0f2604e3f2ce 100644 --- a/media/java/android/media/MediaPlayer2.java +++ b/media/java/android/media/MediaPlayer2.java @@ -36,6 +36,7 @@ import android.os.Handler; import android.os.HandlerThread; import android.os.Looper; import android.os.Message; +import android.os.ParcelFileDescriptor; import android.os.PersistableBundle; import android.os.PowerManager; import android.util.Log; @@ -412,6 +413,9 @@ public class MediaPlayer2 implements AutoCloseable mHandlerThread = null; } + setCurrentSourceInfo(null); + clearNextSourceInfos(); + // Modular DRM clean up mOnDrmConfigHelper = null; synchronized (mDrmEventCbLock) { @@ -457,10 +461,8 @@ public class MediaPlayer2 implements AutoCloseable synchronized (mDrmEventCbLock) { mDrmEventCallbackRecords.clear(); } - synchronized (mSrcLock) { - mCurrentSourceInfo = null; - mNextSourceInfos.clear(); - } + setCurrentSourceInfo(null); + clearNextSourceInfos(); synchronized (mTaskLock) { mPendingTasks.clear(); @@ -685,6 +687,8 @@ public class MediaPlayer2 implements AutoCloseable /** * Sets the data source as described by a DataSourceDesc. + * When the data source is of {@link FileDataSourceDesc} type, the {@link ParcelFileDescriptor} + * in the {@link FileDataSourceDesc} will be closed by the player. * * @param dsd the descriptor of data source you want to play * @return a token which can be used to cancel the operation later with {@link #cancelCommand}. @@ -696,13 +700,17 @@ public class MediaPlayer2 implements AutoCloseable void process() throws IOException { Media2Utils.checkArgument(dsd != null, "the DataSourceDesc cannot be null"); int state = getState(); - if (state != PLAYER_STATE_ERROR && state != PLAYER_STATE_IDLE) { - throw new IllegalStateException("called in wrong state " + state); - } + try { + if (state != PLAYER_STATE_ERROR && state != PLAYER_STATE_IDLE) { + throw new IllegalStateException("called in wrong state " + state); + } - synchronized (mSrcLock) { - mCurrentSourceInfo = new SourceInfo(dsd); - handleDataSource(true /* isCurrent */, dsd, mCurrentSourceInfo.mId); + synchronized (mSrcLock) { + setCurrentSourceInfo(new SourceInfo(dsd)); + handleDataSource(true /* isCurrent */, dsd, mCurrentSourceInfo.mId); + } + } finally { + dsd.close(); } } }); @@ -711,6 +719,8 @@ public class MediaPlayer2 implements AutoCloseable /** * Sets a single data source as described by a DataSourceDesc which will be played * after current data source is finished. + * When the data source is of {@link FileDataSourceDesc} type, the {@link ParcelFileDescriptor} + * in the {@link FileDataSourceDesc} will be closed by the player. * * @param dsd the descriptor of data source you want to play after current one * @return a token which can be used to cancel the operation later with {@link #cancelCommand}. @@ -722,7 +732,7 @@ public class MediaPlayer2 implements AutoCloseable void process() { Media2Utils.checkArgument(dsd != null, "the DataSourceDesc cannot be null"); synchronized (mSrcLock) { - mNextSourceInfos.clear(); + clearNextSourceInfos(); mNextSourceInfos.add(new SourceInfo(dsd)); } prepareNextDataSource(); @@ -732,6 +742,8 @@ public class MediaPlayer2 implements AutoCloseable /** * Sets a list of data sources to be played sequentially after current data source is done. + * When the data source is of {@link FileDataSourceDesc} type, the {@link ParcelFileDescriptor} + * in the {@link FileDataSourceDesc} will be closed by the player. * * @param dsds the list of data sources you want to play after current one * @return a token which can be used to cancel the operation later with {@link #cancelCommand}. @@ -744,17 +756,15 @@ public class MediaPlayer2 implements AutoCloseable if (dsds == null || dsds.size() == 0) { throw new IllegalArgumentException("data source list cannot be null or empty."); } - for (DataSourceDesc dsd : dsds) { - if (dsd == null) { - throw new IllegalArgumentException( - "DataSourceDesc in the source list cannot be null."); - } - } synchronized (mSrcLock) { - mNextSourceInfos.clear(); + clearNextSourceInfos(); for (DataSourceDesc dsd : dsds) { - mNextSourceInfos.add(new SourceInfo(dsd)); + if (dsd != null) { + mNextSourceInfos.add(new SourceInfo(dsd)); + } else { + Log.w(TAG, "DataSourceDesc in the source list shall not be null."); + } } } prepareNextDataSource(); @@ -771,7 +781,7 @@ public class MediaPlayer2 implements AutoCloseable return addTask(new Task(CALL_COMPLETED_CLEAR_NEXT_DATA_SOURCES, false) { @Override void process() { - mNextSourceInfos.clear(); + clearNextSourceInfos(); } }); } @@ -802,7 +812,7 @@ public class MediaPlayer2 implements AutoCloseable FileDataSourceDesc fileDSD = (FileDataSourceDesc) dsd; handleDataSource(isCurrent, srcId, - fileDSD.getFileDescriptor(), + fileDSD.getParcelFileDescriptor(), fileDSD.getOffset(), fileDSD.getLength(), fileDSD.getStartPosition(), @@ -886,7 +896,7 @@ public class MediaPlayer2 implements AutoCloseable if (afd.getDeclaredLength() < 0) { handleDataSource(isCurrent, srcId, - afd.getFileDescriptor(), + ParcelFileDescriptor.dup(afd.getFileDescriptor()), 0, DataSourceDesc.LONG_MAX, startPos, @@ -894,7 +904,7 @@ public class MediaPlayer2 implements AutoCloseable } else { handleDataSource(isCurrent, srcId, - afd.getFileDescriptor(), + ParcelFileDescriptor.dup(afd.getFileDescriptor()), afd.getStartOffset(), afd.getDeclaredLength(), startPos, @@ -960,7 +970,8 @@ public class MediaPlayer2 implements AutoCloseable if (file.exists()) { FileInputStream is = new FileInputStream(file); FileDescriptor fd = is.getFD(); - handleDataSource(isCurrent, srcId, fd, 0, DataSourceDesc.LONG_MAX, startPos, endPos); + handleDataSource(isCurrent, srcId, ParcelFileDescriptor.dup(fd), + 0, DataSourceDesc.LONG_MAX, startPos, endPos); is.close(); } else { throw new IOException("handleDataSource failed."); @@ -984,9 +995,10 @@ public class MediaPlayer2 implements AutoCloseable */ private void handleDataSource( boolean isCurrent, long srcId, - FileDescriptor fd, long offset, long length, + ParcelFileDescriptor pfd, long offset, long length, long startPos, long endPos) throws IOException { - nativeHandleDataSourceFD(isCurrent, srcId, fd, offset, length, startPos, endPos); + nativeHandleDataSourceFD(isCurrent, srcId, pfd.getFileDescriptor(), offset, length, + startPos, endPos); } private native void nativeHandleDataSourceFD(boolean isCurrent, long srcId, @@ -1037,7 +1049,10 @@ public class MediaPlayer2 implements AutoCloseable MEDIA_ERROR, MEDIA_ERROR_IO, MEDIA_ERROR_UNKNOWN, null); mTaskHandler.handleMessage(msg, nextSource.mId); - mNextSourceInfos.poll(); + SourceInfo nextSourceInfo = mNextSourceInfos.poll(); + if (nextSource != null) { + nextSourceInfo.close(); + } return prepareNextDataSource(); } } @@ -1058,7 +1073,7 @@ public class MediaPlayer2 implements AutoCloseable SourceInfo nextSourceInfo = mNextSourceInfos.peek(); if (nextSourceInfo.mStateAsNextSource == NEXT_SOURCE_STATE_PREPARED) { // Switch to next source only when it has been prepared. - mCurrentSourceInfo = mNextSourceInfos.poll(); + setCurrentSourceInfo(mNextSourceInfos.poll()); long srcId = mCurrentSourceInfo.mId; try { @@ -4490,6 +4505,7 @@ public class MediaPlayer2 implements AutoCloseable final DataSourceDesc mDSD; final long mId = mSrcIdGenerator.getAndIncrement(); AtomicInteger mBufferedPercentage = new AtomicInteger(0); + boolean mClosed = false; // m*AsNextSource (below) only applies to pending data sources in the playlist; // the meanings of mCurrentSourceInfo.{mStateAsNextSource,mPlayPendingAsNextSource} @@ -4501,6 +4517,17 @@ public class MediaPlayer2 implements AutoCloseable this.mDSD = dsd; } + void close() { + synchronized (this) { + if (!mClosed) { + if (mDSD != null) { + mDSD.close(); + } + mClosed = true; + } + } + } + @Override public String toString() { return String.format("%s(%d)", SourceInfo.class.getName(), mId); @@ -4531,6 +4558,26 @@ public class MediaPlayer2 implements AutoCloseable return nextSourceInfo != null && nextSourceInfo.mId == srcId; } + private void setCurrentSourceInfo(SourceInfo newSourceInfo) { + synchronized (mSrcLock) { + if (mCurrentSourceInfo != null) { + mCurrentSourceInfo.close(); + } + mCurrentSourceInfo = newSourceInfo; + } + } + + private void clearNextSourceInfos() { + synchronized (mSrcLock) { + for (SourceInfo sourceInfo : mNextSourceInfos) { + if (sourceInfo != null) { + sourceInfo.close(); + } + } + mNextSourceInfos.clear(); + } + } + public static final class MetricsConstants { private MetricsConstants() {} diff --git a/media/java/android/media/UriDataSourceDesc.java b/media/java/android/media/UriDataSourceDesc.java index d4a43a1d1c41..6a83dab14aa4 100644 --- a/media/java/android/media/UriDataSourceDesc.java +++ b/media/java/android/media/UriDataSourceDesc.java @@ -31,9 +31,11 @@ import java.util.Map; /** * @hide - * Structure for data source descriptor. + * Structure of data source descriptor for sources using URI. * - * Used by {@link MediaPlayer2#setDataSource(UriDataSourceDesc)} + * Used by {@link MediaPlayer2#setDataSource(DataSourceDesc)}, + * {@link MediaPlayer2#setNextDataSource(DataSourceDesc)} and + * {@link MediaPlayer2#setNextDataSources(List<DataSourceDesc>)} * to set data source for playback. * * <p>Users should use {@link Builder} to change {@link UriDataSourceDesc}. diff --git a/native/android/libandroid.map.txt b/native/android/libandroid.map.txt index e7e8384c5567..207508e18a8b 100644 --- a/native/android/libandroid.map.txt +++ b/native/android/libandroid.map.txt @@ -144,6 +144,7 @@ LIBANDROID { AHardwareBuffer_describe; # introduced=26 AHardwareBuffer_fromHardwareBuffer; # introduced=26 AHardwareBuffer_getNativeHandle; # introduced=26 + AHardwareBuffer_isSupported; # introduced=29 AHardwareBuffer_lock; # introduced=26 AHardwareBuffer_recvHandleFromUnixSocket; # introduced=26 AHardwareBuffer_release; # introduced=26 diff --git a/packages/SettingsLib/SearchWidget/res/values-as/strings.xml b/packages/SettingsLib/SearchWidget/res/values-as/strings.xml new file mode 100644 index 000000000000..813e7647632a --- /dev/null +++ b/packages/SettingsLib/SearchWidget/res/values-as/strings.xml @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (C) 2018 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. + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="search_menu" msgid="1604061903696928905">"সন্ধান সম্পৰ্কীয় ছেটিংসমূহ"</string> +</resources> diff --git a/packages/SettingsLib/res/values-af/strings.xml b/packages/SettingsLib/res/values-af/strings.xml index d34820cd3a11..1dd783835265 100644 --- a/packages/SettingsLib/res/values-af/strings.xml +++ b/packages/SettingsLib/res/values-af/strings.xml @@ -21,6 +21,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="wifi_fail_to_scan" msgid="1265540342578081461">"Kan nie skandeer vir netwerke nie"</string> + <string name="wifi_security_none" msgid="7985461072596594400">"Geen"</string> <string name="wifi_remembered" msgid="4955746899347821096">"Gestoor"</string> <string name="wifi_disabled_generic" msgid="4259794910584943386">"Gedeaktiveer"</string> <string name="wifi_disabled_network_failure" msgid="2364951338436007124">"IP-opstelling het misluk"</string> @@ -374,6 +375,7 @@ <string name="power_discharge_by_only_enhanced" msgid="2175151772952365149">"Sal op grond van jou gebruik waarskynlik hou tot omtrent <xliff:g id="TIME">%1$s</xliff:g>"</string> <string name="power_discharge_by" msgid="6453537733650125582">"Sal waarskynlik hou tot omtrent <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_discharge_by_only" msgid="107616694963545745">"Sal waarskynlik hou tot omtrent <xliff:g id="TIME">%1$s</xliff:g>"</string> + <string name="power_discharge_by_only_short" msgid="1372817269546888804">"Tot <xliff:g id="TIME">%1$s</xliff:g>"</string> <string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"Minder as <xliff:g id="THRESHOLD">%1$s</xliff:g> oor"</string> <string name="power_remaining_less_than_duration" msgid="5751885147712659423">"Minder as <xliff:g id="THRESHOLD">%1$s</xliff:g> oor (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"Meer as <xliff:g id="TIME_REMAINING">%1$s</xliff:g> oor (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> @@ -447,4 +449,6 @@ <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Vra elke keer"</string> <string name="zen_mode_forever" msgid="2704305038191592967">"Totdat jy dit afskakel"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"Sopas"</string> + <string name="updated_gfx_driver_dev_opt_in_app_summary" msgid="5309913444094165199">"Aansluitingprogram om opgedateerde grafikadrywer in ontwikkeling te gebruik"</string> + <string name="media_transfer_phone_device_name" msgid="1003823744105758574">"Foonluidspreker"</string> </resources> diff --git a/packages/SettingsLib/res/values-am/strings.xml b/packages/SettingsLib/res/values-am/strings.xml index b595e2b05154..2ce5f444834e 100644 --- a/packages/SettingsLib/res/values-am/strings.xml +++ b/packages/SettingsLib/res/values-am/strings.xml @@ -21,6 +21,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="wifi_fail_to_scan" msgid="1265540342578081461">"ለአውታረመረቦች መቃኘት አይቻልም"</string> + <string name="wifi_security_none" msgid="7985461072596594400">"የለም"</string> <string name="wifi_remembered" msgid="4955746899347821096">"ተቀምጧል"</string> <string name="wifi_disabled_generic" msgid="4259794910584943386">"ተሰናክሏል"</string> <string name="wifi_disabled_network_failure" msgid="2364951338436007124">"የአይ.ፒ. ውቅረት መሰናከል"</string> @@ -374,6 +375,7 @@ <string name="power_discharge_by_only_enhanced" msgid="2175151772952365149">"በአጠቃቀምዎ መሠረት እስከ <xliff:g id="TIME">%1$s</xliff:g> ገደማ መቆየት አለበት"</string> <string name="power_discharge_by" msgid="6453537733650125582">"እስከ <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>) ገደማ ድረስ መቆየት አለበት"</string> <string name="power_discharge_by_only" msgid="107616694963545745">"እስከ <xliff:g id="TIME">%1$s</xliff:g> ገደማ መቆየት አለበት"</string> + <string name="power_discharge_by_only_short" msgid="1372817269546888804">"እስከ <xliff:g id="TIME">%1$s</xliff:g>"</string> <string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"ከ<xliff:g id="THRESHOLD">%1$s</xliff:g> ያነሰ ይቀራል"</string> <string name="power_remaining_less_than_duration" msgid="5751885147712659423">"ከ<xliff:g id="THRESHOLD">%1$s</xliff:g> ያነሰ ይቀራል (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"ከ<xliff:g id="TIME_REMAINING">%1$s</xliff:g> በላይ ይቀራል (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> @@ -447,4 +449,6 @@ <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"ሁልጊዜ ጠይቅ"</string> <string name="zen_mode_forever" msgid="2704305038191592967">"እስኪያጠፉት ድረስ"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"ልክ አሁን"</string> + <string name="updated_gfx_driver_dev_opt_in_app_summary" msgid="5309913444094165199">"በግንባታ ላይ የተዘመነ የግራፊክስ ነጂን ለመጠቀም መተግበሪያን መርጠው ያስገቡ"</string> + <string name="media_transfer_phone_device_name" msgid="1003823744105758574">"የስልክ ድምጽ ማጉያ"</string> </resources> diff --git a/packages/SettingsLib/res/values-ar/strings.xml b/packages/SettingsLib/res/values-ar/strings.xml index f8c2ba2bd20d..23f3a12db8de 100644 --- a/packages/SettingsLib/res/values-ar/strings.xml +++ b/packages/SettingsLib/res/values-ar/strings.xml @@ -21,6 +21,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="wifi_fail_to_scan" msgid="1265540342578081461">"لا يمكن فحص الشبكات"</string> + <string name="wifi_security_none" msgid="7985461072596594400">"بدون"</string> <string name="wifi_remembered" msgid="4955746899347821096">"تم الحفظ"</string> <string name="wifi_disabled_generic" msgid="4259794910584943386">"غير مفعّلة"</string> <string name="wifi_disabled_network_failure" msgid="2364951338436007124">"تعذّرت تهيئة عنوان IP"</string> @@ -374,6 +375,7 @@ <string name="power_discharge_by_only_enhanced" msgid="2175151772952365149">"قد تكفي طاقة البطارية حتى حوالي الساعة <xliff:g id="TIME">%1$s</xliff:g> حسب استخدامك."</string> <string name="power_discharge_by" msgid="6453537733650125582">"قد تكفي طاقة البطارية حتى حوالي الساعة <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)."</string> <string name="power_discharge_by_only" msgid="107616694963545745">"قد تكفي طاقة البطارية حتى حوالي الساعة <xliff:g id="TIME">%1$s</xliff:g>."</string> + <string name="power_discharge_by_only_short" msgid="1372817269546888804">"حتى <xliff:g id="TIME">%1$s</xliff:g>"</string> <string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"يتبقى أقل من <xliff:g id="THRESHOLD">%1$s</xliff:g>."</string> <string name="power_remaining_less_than_duration" msgid="5751885147712659423">"يتبقى أقل من <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)."</string> <string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"يتبقى أكثر من <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)."</string> @@ -451,4 +453,6 @@ <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"الطلب في كل مرة"</string> <string name="zen_mode_forever" msgid="2704305038191592967">"إلى أن توقف الوضع يدويًا"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"للتو"</string> + <string name="updated_gfx_driver_dev_opt_in_app_summary" msgid="5309913444094165199">"فعِّل التطبيق لاستخدام برنامج تشغيل الرسومات المُحدَّث في تطوير البرامج."</string> + <string name="media_transfer_phone_device_name" msgid="1003823744105758574">"مكبر صوت الهاتف"</string> </resources> diff --git a/packages/SettingsLib/res/values-as/strings.xml b/packages/SettingsLib/res/values-as/strings.xml index 72122c2648ae..86d145916510 100644 --- a/packages/SettingsLib/res/values-as/strings.xml +++ b/packages/SettingsLib/res/values-as/strings.xml @@ -21,6 +21,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="wifi_fail_to_scan" msgid="1265540342578081461">"নেটৱৰ্ক বিচাৰি স্কেন কৰিব পৰা নাই"</string> + <string name="wifi_security_none" msgid="7985461072596594400">"নাই"</string> <string name="wifi_remembered" msgid="4955746899347821096">"ছেভ কৰি থোৱা নেটৱৰ্কসমূহ"</string> <string name="wifi_disabled_generic" msgid="4259794910584943386">"নিষ্ক্ৰিয় হৈ আছে"</string> <string name="wifi_disabled_network_failure" msgid="2364951338436007124">"IP কনফিগাৰেশ্বন বিফল হৈছে"</string> @@ -374,6 +375,7 @@ <string name="power_discharge_by_only_enhanced" msgid="2175151772952365149">"আপোনাৰ ব্যৱহাৰৰ ওপৰত ভিত্তি কৰি বেটাৰি আনুমানিকভাৱে <xliff:g id="TIME">%1$s</xliff:g> লৈকে চলিব"</string> <string name="power_discharge_by" msgid="6453537733650125582">"বেটাৰি আনুমানিকভাৱে <xliff:g id="TIME">%1$s</xliff:g> লৈকে চলিব (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_discharge_by_only" msgid="107616694963545745">"বেটাৰি আনুমানিকভাৱে <xliff:g id="TIME">%1$s</xliff:g> লৈকে চলিব"</string> + <string name="power_discharge_by_only_short" msgid="1372817269546888804">"<xliff:g id="TIME">%1$s</xliff:g> পৰ্যন্ত"</string> <string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"<xliff:g id="THRESHOLD">%1$s</xliff:g>তকৈও কম সময় বাকী আছে"</string> <string name="power_remaining_less_than_duration" msgid="5751885147712659423">"<xliff:g id="THRESHOLD">%1$s</xliff:g>তকৈও কম সময় বাকী আছে (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"<xliff:g id="TIME_REMAINING">%1$s</xliff:g>তকৈও বেছি সময় বাকী আছে (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> @@ -447,4 +449,6 @@ <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"প্ৰতিবাৰতে সোধক"</string> <string name="zen_mode_forever" msgid="2704305038191592967">"আপুনি অফ নকৰা পর্যন্ত"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"এই মাত্ৰ"</string> + <string name="updated_gfx_driver_dev_opt_in_app_summary" msgid="5309913444094165199">"বিকাশকাৰ্য চলি থকা আপডে\'টেড গ্ৰাফিক ড্ৰাইভাৰ ব্যৱহাৰ কৰিবলৈ এপ্ অপ্ট ইন কৰক"</string> + <string name="media_transfer_phone_device_name" msgid="1003823744105758574">"ফ’নৰ স্পীকাৰ"</string> </resources> diff --git a/packages/SettingsLib/res/values-az/strings.xml b/packages/SettingsLib/res/values-az/strings.xml index 23008e2f3a35..17d0ca622a61 100644 --- a/packages/SettingsLib/res/values-az/strings.xml +++ b/packages/SettingsLib/res/values-az/strings.xml @@ -21,6 +21,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="wifi_fail_to_scan" msgid="1265540342578081461">"Şəbəkə axtarmaq olmur"</string> + <string name="wifi_security_none" msgid="7985461072596594400">"Heç biri"</string> <string name="wifi_remembered" msgid="4955746899347821096">"Yadda saxlanılan"</string> <string name="wifi_disabled_generic" msgid="4259794910584943386">"Deaktiv"</string> <string name="wifi_disabled_network_failure" msgid="2364951338436007124">"IP Konfiqurasiya Uğursuzluğu"</string> @@ -374,6 +375,7 @@ <string name="power_discharge_by_only_enhanced" msgid="2175151772952365149">"İstifadəyə əsasən təxminən <xliff:g id="TIME">%1$s</xliff:g> olana qədər davam edəcək"</string> <string name="power_discharge_by" msgid="6453537733650125582">"Təxminən <xliff:g id="TIME">%1$s</xliff:g> olana qədər davam edəcək (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_discharge_by_only" msgid="107616694963545745">"Təxminən <xliff:g id="TIME">%1$s</xliff:g> olana qədər davam edəcək"</string> + <string name="power_discharge_by_only_short" msgid="1372817269546888804">"<xliff:g id="TIME">%1$s</xliff:g> olana qədər"</string> <string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"Qalan vaxt <xliff:g id="THRESHOLD">%1$s</xliff:g> və daha azdır"</string> <string name="power_remaining_less_than_duration" msgid="5751885147712659423">"Qalan vaxt <xliff:g id="THRESHOLD">%1$s</xliff:g> və daha azdır (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"Qalan vaxt <xliff:g id="TIME_REMAINING">%1$s</xliff:g> və daha çoxdur (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> @@ -447,4 +449,6 @@ <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Hər dəfə soruşun"</string> <string name="zen_mode_forever" msgid="2704305038191592967">"Deaktiv edənə qədər"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"İndicə"</string> + <string name="updated_gfx_driver_dev_opt_in_app_summary" msgid="5309913444094165199">"Qrafik drayverdən istifadə etmək üçün tətbiq seçin"</string> + <string name="media_transfer_phone_device_name" msgid="1003823744105758574">"Telefon spikeri"</string> </resources> diff --git a/packages/SettingsLib/res/values-b+sr+Latn/strings.xml b/packages/SettingsLib/res/values-b+sr+Latn/strings.xml index 3ee8589268cd..56052d214464 100644 --- a/packages/SettingsLib/res/values-b+sr+Latn/strings.xml +++ b/packages/SettingsLib/res/values-b+sr+Latn/strings.xml @@ -21,6 +21,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="wifi_fail_to_scan" msgid="1265540342578081461">"Nije moguće skenirati mreže"</string> + <string name="wifi_security_none" msgid="7985461072596594400">"Nema"</string> <string name="wifi_remembered" msgid="4955746899347821096">"Sačuvano"</string> <string name="wifi_disabled_generic" msgid="4259794910584943386">"Onemogućeno"</string> <string name="wifi_disabled_network_failure" msgid="2364951338436007124">"IP konfiguracija je otkazala"</string> @@ -374,6 +375,7 @@ <string name="power_discharge_by_only_enhanced" msgid="2175151772952365149">"Trajaće približno do <xliff:g id="TIME">%1$s</xliff:g> na osnovu korišćenja"</string> <string name="power_discharge_by" msgid="6453537733650125582">"Trajaće približno do <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_discharge_by_only" msgid="107616694963545745">"Trajaće približno do <xliff:g id="TIME">%1$s</xliff:g>"</string> + <string name="power_discharge_by_only_short" msgid="1372817269546888804">"Do <xliff:g id="TIME">%1$s</xliff:g>"</string> <string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"Preostalo je manje od <xliff:g id="THRESHOLD">%1$s</xliff:g>"</string> <string name="power_remaining_less_than_duration" msgid="5751885147712659423">"Preostalo je manje od <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"Preostalo je više od <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> @@ -448,4 +450,6 @@ <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Uvek pitaj"</string> <string name="zen_mode_forever" msgid="2704305038191592967">"Dok ne isključite"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"Upravo"</string> + <string name="updated_gfx_driver_dev_opt_in_app_summary" msgid="5309913444094165199">"Omogući aplikaciju za korišćenje upravljačkog programa grafičke katice u razvoju"</string> + <string name="media_transfer_phone_device_name" msgid="1003823744105758574">"Zvučnik telefona"</string> </resources> diff --git a/packages/SettingsLib/res/values-be/strings.xml b/packages/SettingsLib/res/values-be/strings.xml index 64253bff6a25..f2c204617b82 100644 --- a/packages/SettingsLib/res/values-be/strings.xml +++ b/packages/SettingsLib/res/values-be/strings.xml @@ -21,6 +21,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="wifi_fail_to_scan" msgid="1265540342578081461">"Не атрымлiваецца выканаць сканаванне для сетак"</string> + <string name="wifi_security_none" msgid="7985461072596594400">"Няма"</string> <string name="wifi_remembered" msgid="4955746899347821096">"Захавана"</string> <string name="wifi_disabled_generic" msgid="4259794910584943386">"Адключана"</string> <string name="wifi_disabled_network_failure" msgid="2364951338436007124">"Збой канфігурацыі IP"</string> @@ -374,6 +375,7 @@ <string name="power_discharge_by_only_enhanced" msgid="2175151772952365149">"Зараду хопіць прыблізна да <xliff:g id="TIME">%1$s</xliff:g> пры цяперашнім узроўні выкарыстання"</string> <string name="power_discharge_by" msgid="6453537733650125582">"Зараду (<xliff:g id="LEVEL">%2$s</xliff:g>) хопіць прыблізна да <xliff:g id="TIME">%1$s</xliff:g>"</string> <string name="power_discharge_by_only" msgid="107616694963545745">"Зараду хопіць прыблізна да <xliff:g id="TIME">%1$s</xliff:g>"</string> + <string name="power_discharge_by_only_short" msgid="1372817269546888804">"Да <xliff:g id="TIME">%1$s</xliff:g>"</string> <string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"Засталося менш за <xliff:g id="THRESHOLD">%1$s</xliff:g>"</string> <string name="power_remaining_less_than_duration" msgid="5751885147712659423">"Узровень зараду батарэі: <xliff:g id="LEVEL">%2$s</xliff:g> (хопіць менш чым на <xliff:g id="THRESHOLD">%1$s</xliff:g>)"</string> <string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"Узровень зараду батарэі: <xliff:g id="LEVEL">%2$s</xliff:g> (хопіць больш чым на <xliff:g id="TIME_REMAINING">%1$s</xliff:g>)"</string> @@ -449,4 +451,6 @@ <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Заўсёды пытацца"</string> <string name="zen_mode_forever" msgid="2704305038191592967">"Пакуль не выключыце"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"Зараз"</string> + <string name="updated_gfx_driver_dev_opt_in_app_summary" msgid="5309913444094165199">"Выбраная праграма, якая выкарыстоўвае абноўлены драйвер графічнай сістэмы (падчас распрацоўкі)"</string> + <string name="media_transfer_phone_device_name" msgid="1003823744105758574">"Дынамік тэлефона"</string> </resources> diff --git a/packages/SettingsLib/res/values-bg/strings.xml b/packages/SettingsLib/res/values-bg/strings.xml index 668aa2d82d07..5b8d6b877b2a 100644 --- a/packages/SettingsLib/res/values-bg/strings.xml +++ b/packages/SettingsLib/res/values-bg/strings.xml @@ -21,6 +21,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="wifi_fail_to_scan" msgid="1265540342578081461">"Не може да се сканира за мрежи"</string> + <string name="wifi_security_none" msgid="7985461072596594400">"Няма"</string> <string name="wifi_remembered" msgid="4955746899347821096">"Запазено"</string> <string name="wifi_disabled_generic" msgid="4259794910584943386">"Деактивирани"</string> <string name="wifi_disabled_network_failure" msgid="2364951338436007124">"Неуспешно конфигуриране на IP адреса"</string> @@ -374,6 +375,7 @@ <string name="power_discharge_by_only_enhanced" msgid="2175151772952365149">"Следва да издържи приблизително до <xliff:g id="TIME">%1$s</xliff:g> въз основа на използването"</string> <string name="power_discharge_by" msgid="6453537733650125582">"Следва да издържи приблизително до <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_discharge_by_only" msgid="107616694963545745">"Следва да издържи до около <xliff:g id="TIME">%1$s</xliff:g>"</string> + <string name="power_discharge_by_only_short" msgid="1372817269546888804">"До <xliff:g id="TIME">%1$s</xliff:g>"</string> <string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"Остава/т по-малко от <xliff:g id="THRESHOLD">%1$s</xliff:g>"</string> <string name="power_remaining_less_than_duration" msgid="5751885147712659423">"Остава/т по-малко от <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"Остава/т повече от <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> @@ -447,4 +449,6 @@ <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Да се пита винаги"</string> <string name="zen_mode_forever" msgid="2704305038191592967">"До изключване"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"Току-що"</string> + <string name="updated_gfx_driver_dev_opt_in_app_summary" msgid="5309913444094165199">"Включване на приложението за използване на актуализирания графичен драйвер в разработка"</string> + <string name="media_transfer_phone_device_name" msgid="1003823744105758574">"Високоговорител на телефона"</string> </resources> diff --git a/packages/SettingsLib/res/values-bn/strings.xml b/packages/SettingsLib/res/values-bn/strings.xml index c6eed2cbf7dc..7efad9998ae1 100644 --- a/packages/SettingsLib/res/values-bn/strings.xml +++ b/packages/SettingsLib/res/values-bn/strings.xml @@ -21,6 +21,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="wifi_fail_to_scan" msgid="1265540342578081461">"নেটওয়ার্কগুলির জন্য স্ক্যান করা যাবে না"</string> + <string name="wifi_security_none" msgid="7985461072596594400">"কোনো কিছুই নয়"</string> <string name="wifi_remembered" msgid="4955746899347821096">"সংরক্ষিত"</string> <string name="wifi_disabled_generic" msgid="4259794910584943386">"অক্ষম হয়েছে"</string> <string name="wifi_disabled_network_failure" msgid="2364951338436007124">"IP কনফিগারেশনের ব্যর্থতা"</string> @@ -374,6 +375,7 @@ <string name="power_discharge_by_only_enhanced" msgid="2175151772952365149">"বর্তমান ব্যবহার অনুযায়ী আনুমানিক <xliff:g id="TIME">%1$s</xliff:g> পর্যন্ত চলবে"</string> <string name="power_discharge_by" msgid="6453537733650125582">"আনুমানিক <xliff:g id="TIME">%1$s</xliff:g> পর্যন্ত চলবে (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_discharge_by_only" msgid="107616694963545745">"আনুমানিক <xliff:g id="TIME">%1$s</xliff:g> পর্যন্ত চলবে"</string> + <string name="power_discharge_by_only_short" msgid="1372817269546888804">"<xliff:g id="TIME">%1$s</xliff:g> পর্যন্ত"</string> <string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"<xliff:g id="THRESHOLD">%1$s</xliff:g> এর থেকেও কম বাকি আছে"</string> <string name="power_remaining_less_than_duration" msgid="5751885147712659423">"আর <xliff:g id="THRESHOLD">%1$s</xliff:g>-এর কম চার্জ বাকি আছে (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"আরও <xliff:g id="TIME_REMAINING">%1$s</xliff:g>-এর বেশি চলবে (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> @@ -447,4 +449,6 @@ <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"প্রতিবার জিজ্ঞেস করা হবে"</string> <string name="zen_mode_forever" msgid="2704305038191592967">"যতক্ষণ না আপনি বন্ধ করছেন"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"এখনই"</string> + <string name="updated_gfx_driver_dev_opt_in_app_summary" msgid="5309913444094165199">"ডেভলপমেন্টে আপডেট হওয়া গ্রাফিক্স ড্রাইভার ব্যবহার করতে অ্যাপ বেছে নিন"</string> + <string name="media_transfer_phone_device_name" msgid="1003823744105758574">"ফেনের স্পিকার"</string> </resources> diff --git a/packages/SettingsLib/res/values-bs/strings.xml b/packages/SettingsLib/res/values-bs/strings.xml index 16179fb7157c..92435f7ef1b8 100644 --- a/packages/SettingsLib/res/values-bs/strings.xml +++ b/packages/SettingsLib/res/values-bs/strings.xml @@ -21,6 +21,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="wifi_fail_to_scan" msgid="1265540342578081461">"Ne može skenirati mreže"</string> + <string name="wifi_security_none" msgid="7985461072596594400">"Nema"</string> <string name="wifi_remembered" msgid="4955746899347821096">"Sačuvano"</string> <string name="wifi_disabled_generic" msgid="4259794910584943386">"Onemogućeno"</string> <string name="wifi_disabled_network_failure" msgid="2364951338436007124">"Greška u konfiguraciji IP-a"</string> @@ -374,6 +375,7 @@ <string name="power_discharge_by_only_enhanced" msgid="2175151772952365149">"Trebala bi trajati otprilike do <xliff:g id="TIME">%1$s</xliff:g> na osnovu vaše upotrebe"</string> <string name="power_discharge_by" msgid="6453537733650125582">"Trebala bi trajati do otprilike <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_discharge_by_only" msgid="107616694963545745">"Trebala bi trajati otprilike do <xliff:g id="TIME">%1$s</xliff:g>"</string> + <string name="power_discharge_by_only_short" msgid="1372817269546888804">"Do <xliff:g id="TIME">%1$s</xliff:g>"</string> <string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"Preostalo je manje od <xliff:g id="THRESHOLD">%1$s</xliff:g>"</string> <string name="power_remaining_less_than_duration" msgid="5751885147712659423">"Preostalo je manje od <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"Preostalo je više od <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> @@ -448,4 +450,6 @@ <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Pitaj svaki put"</string> <string name="zen_mode_forever" msgid="2704305038191592967">"Dok ne isključite"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"Upravo"</string> + <string name="updated_gfx_driver_dev_opt_in_app_summary" msgid="5309913444094165199">"Prijavi aplikaciju za korištenje ažuriranog grafičkog drajvera u razvoju"</string> + <string name="media_transfer_phone_device_name" msgid="1003823744105758574">"Zvučnik telefona"</string> </resources> diff --git a/packages/SettingsLib/res/values-ca/strings.xml b/packages/SettingsLib/res/values-ca/strings.xml index f906ea4eeef1..3182f16fee44 100644 --- a/packages/SettingsLib/res/values-ca/strings.xml +++ b/packages/SettingsLib/res/values-ca/strings.xml @@ -21,6 +21,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="wifi_fail_to_scan" msgid="1265540342578081461">"No es poden cercar xarxes"</string> + <string name="wifi_security_none" msgid="7985461072596594400">"Cap"</string> <string name="wifi_remembered" msgid="4955746899347821096">"Desat"</string> <string name="wifi_disabled_generic" msgid="4259794910584943386">"Desactivat"</string> <string name="wifi_disabled_network_failure" msgid="2364951338436007124">"Error de configuració d\'IP"</string> @@ -374,6 +375,7 @@ <string name="power_discharge_by_only_enhanced" msgid="2175151772952365149">"La bateria hauria de durar aproximadament fins a les <xliff:g id="TIME">%1$s</xliff:g> segons l\'ús que en fas"</string> <string name="power_discharge_by" msgid="6453537733650125582">"La bateria hauria de durar aproximadament fins a les <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_discharge_by_only" msgid="107616694963545745">"La bateria hauria de durar aproximadament fins a les <xliff:g id="TIME">%1$s</xliff:g>"</string> + <string name="power_discharge_by_only_short" msgid="1372817269546888804">"Fins a les <xliff:g id="TIME">%1$s</xliff:g>"</string> <string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"Temps restant inferior a <xliff:g id="THRESHOLD">%1$s</xliff:g>"</string> <string name="power_remaining_less_than_duration" msgid="5751885147712659423">"Temps restant inferior a <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"Temps restant superior a <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> @@ -447,4 +449,6 @@ <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Pregunta sempre"</string> <string name="zen_mode_forever" msgid="2704305038191592967">"Fins que no ho desactivis"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"Ara mateix"</string> + <string name="updated_gfx_driver_dev_opt_in_app_summary" msgid="5309913444094165199">"Aplicació activada per utilitzar el controlador de gràfics actualitzat en desenvolupament"</string> + <string name="media_transfer_phone_device_name" msgid="1003823744105758574">"Altaveu del telèfon"</string> </resources> diff --git a/packages/SettingsLib/res/values-cs/strings.xml b/packages/SettingsLib/res/values-cs/strings.xml index f9c866992628..37854334c273 100644 --- a/packages/SettingsLib/res/values-cs/strings.xml +++ b/packages/SettingsLib/res/values-cs/strings.xml @@ -21,6 +21,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="wifi_fail_to_scan" msgid="1265540342578081461">"Nelze hledat sítě"</string> + <string name="wifi_security_none" msgid="7985461072596594400">"Žádné"</string> <string name="wifi_remembered" msgid="4955746899347821096">"Uloženo"</string> <string name="wifi_disabled_generic" msgid="4259794910584943386">"Vypnuto"</string> <string name="wifi_disabled_network_failure" msgid="2364951338436007124">"Selhání konfigurace protokolu IP"</string> @@ -374,6 +375,7 @@ <string name="power_discharge_by_only_enhanced" msgid="2175151772952365149">"Při vašem obvyklém využití vydrží asi do <xliff:g id="TIME">%1$s</xliff:g>"</string> <string name="power_discharge_by" msgid="6453537733650125582">"Vydrží asi do <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_discharge_by_only" msgid="107616694963545745">"Vydrží asi do <xliff:g id="TIME">%1$s</xliff:g>"</string> + <string name="power_discharge_by_only_short" msgid="1372817269546888804">"Do <xliff:g id="TIME">%1$s</xliff:g>"</string> <string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"Zbývá méně než <xliff:g id="THRESHOLD">%1$s</xliff:g>"</string> <string name="power_remaining_less_than_duration" msgid="5751885147712659423">"Zbývá méně než <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"Zbývá více než <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> @@ -449,4 +451,6 @@ <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Pokaždé se zeptat"</string> <string name="zen_mode_forever" msgid="2704305038191592967">"Dokud tuto funkci nevypnete"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"Právě teď"</string> + <string name="updated_gfx_driver_dev_opt_in_app_summary" msgid="5309913444094165199">"Přihlaste aplikaci k použití vyvíjeného aktualizovaného grafického ovladače"</string> + <string name="media_transfer_phone_device_name" msgid="1003823744105758574">"Reproduktor telefonu"</string> </resources> diff --git a/packages/SettingsLib/res/values-da/strings.xml b/packages/SettingsLib/res/values-da/strings.xml index 6b2bd98e4f09..eeeccee81948 100644 --- a/packages/SettingsLib/res/values-da/strings.xml +++ b/packages/SettingsLib/res/values-da/strings.xml @@ -21,6 +21,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="wifi_fail_to_scan" msgid="1265540342578081461">"Der kan ikke søges efter netværk"</string> + <string name="wifi_security_none" msgid="7985461072596594400">"Ingen"</string> <string name="wifi_remembered" msgid="4955746899347821096">"Gemt"</string> <string name="wifi_disabled_generic" msgid="4259794910584943386">"Deaktiveret"</string> <string name="wifi_disabled_network_failure" msgid="2364951338436007124">"IP-konfigurationsfejl"</string> @@ -374,6 +375,7 @@ <string name="power_discharge_by_only_enhanced" msgid="2175151772952365149">"Bør holde indtil ca. <xliff:g id="TIME">%1$s</xliff:g> baseret på dit forbrug"</string> <string name="power_discharge_by" msgid="6453537733650125582">"Bør holde indtil ca. <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_discharge_by_only" msgid="107616694963545745">"Bør holde indtil ca. <xliff:g id="TIME">%1$s</xliff:g>"</string> + <string name="power_discharge_by_only_short" msgid="1372817269546888804">"Indtil <xliff:g id="TIME">%1$s</xliff:g>"</string> <string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"Der er mindre end <xliff:g id="THRESHOLD">%1$s</xliff:g> tilbage"</string> <string name="power_remaining_less_than_duration" msgid="5751885147712659423">"Der er mindre end <xliff:g id="THRESHOLD">%1$s</xliff:g> tilbage (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"Der er mere end <xliff:g id="TIME_REMAINING">%1$s</xliff:g> tilbage (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> @@ -447,4 +449,6 @@ <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Spørg hver gang"</string> <string name="zen_mode_forever" msgid="2704305038191592967">"Indtil du deaktiverer"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"Lige nu"</string> + <string name="updated_gfx_driver_dev_opt_in_app_summary" msgid="5309913444094165199">"Tilvælg en app, der skal bruge den opdaterede grafikdriver under udvikling"</string> + <string name="media_transfer_phone_device_name" msgid="1003823744105758574">"Telefonens højttaler"</string> </resources> diff --git a/packages/SettingsLib/res/values-de/strings.xml b/packages/SettingsLib/res/values-de/strings.xml index ad6f5f2112cc..95f7416b1ae3 100644 --- a/packages/SettingsLib/res/values-de/strings.xml +++ b/packages/SettingsLib/res/values-de/strings.xml @@ -21,6 +21,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="wifi_fail_to_scan" msgid="1265540342578081461">"Netzwerkscan nicht möglich"</string> + <string name="wifi_security_none" msgid="7985461072596594400">"Keine"</string> <string name="wifi_remembered" msgid="4955746899347821096">"Gespeichert"</string> <string name="wifi_disabled_generic" msgid="4259794910584943386">"Deaktiviert"</string> <string name="wifi_disabled_network_failure" msgid="2364951338436007124">"IP-Konfigurationsfehler"</string> @@ -374,6 +375,7 @@ <string name="power_discharge_by_only_enhanced" msgid="2175151772952365149">"Sollte basierend auf deiner Nutzung etwa bis <xliff:g id="TIME">%1$s</xliff:g> reichen"</string> <string name="power_discharge_by" msgid="6453537733650125582">"Sollte etwa bis <xliff:g id="TIME">%1$s</xliff:g> reichen (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_discharge_by_only" msgid="107616694963545745">"Sollte etwa bis <xliff:g id="TIME">%1$s</xliff:g> reichen"</string> + <string name="power_discharge_by_only_short" msgid="1372817269546888804">"Bis <xliff:g id="TIME">%1$s</xliff:g>"</string> <string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"Weniger als <xliff:g id="THRESHOLD">%1$s</xliff:g> verbleibend"</string> <string name="power_remaining_less_than_duration" msgid="5751885147712659423">"Weniger als <xliff:g id="THRESHOLD">%1$s</xliff:g> verbleibend (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"Mehr als <xliff:g id="TIME_REMAINING">%1$s</xliff:g> verbleibend (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> @@ -447,4 +449,6 @@ <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Jedes Mal fragen"</string> <string name="zen_mode_forever" msgid="2704305038191592967">"Bis zur Deaktivierung"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"Gerade eben"</string> + <string name="updated_gfx_driver_dev_opt_in_app_summary" msgid="5309913444094165199">"App aktivieren, um den aktualisierten Grafiktreiber in der Entwicklung zu verwenden"</string> + <string name="media_transfer_phone_device_name" msgid="1003823744105758574">"Telefon-Lautsprecher"</string> </resources> diff --git a/packages/SettingsLib/res/values-el/strings.xml b/packages/SettingsLib/res/values-el/strings.xml index 5bfbf2c0c1cb..310b6cf04db7 100644 --- a/packages/SettingsLib/res/values-el/strings.xml +++ b/packages/SettingsLib/res/values-el/strings.xml @@ -21,6 +21,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="wifi_fail_to_scan" msgid="1265540342578081461">"Δεν είναι δυνατή η σάρωση για δίκτυα"</string> + <string name="wifi_security_none" msgid="7985461072596594400">"Καμία"</string> <string name="wifi_remembered" msgid="4955746899347821096">"Αποθηκευμένο"</string> <string name="wifi_disabled_generic" msgid="4259794910584943386">"Απενεργοποιημένο"</string> <string name="wifi_disabled_network_failure" msgid="2364951338436007124">"Αποτυχία διαμόρφωσης διεύθυνσης IP"</string> @@ -374,6 +375,7 @@ <string name="power_discharge_by_only_enhanced" msgid="2175151772952365149">"Θα διαρκέσει μέχρι τις <xliff:g id="TIME">%1$s</xliff:g> περίπου, ανάλογα με τη χρήση σας"</string> <string name="power_discharge_by" msgid="6453537733650125582">"Θα διαρκέσει μέχρι τις <xliff:g id="TIME">%1$s</xliff:g> περίπου (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_discharge_by_only" msgid="107616694963545745">"Θα διαρκέσει μέχρι τις <xliff:g id="TIME">%1$s</xliff:g> περίπου"</string> + <string name="power_discharge_by_only_short" msgid="1372817269546888804">"Έως τις <xliff:g id="TIME">%1$s</xliff:g>"</string> <string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"Απομένει/ουν λιγότερo/α από <xliff:g id="THRESHOLD">%1$s</xliff:g>"</string> <string name="power_remaining_less_than_duration" msgid="5751885147712659423">"Απομένει/ουν λιγότερo/α από <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"Απομένουν περισσότερα/ες από <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> @@ -447,4 +449,6 @@ <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Να ερωτώμαι κάθε φορά"</string> <string name="zen_mode_forever" msgid="2704305038191592967">"Μέχρι την απενεργοποίηση"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"Μόλις τώρα"</string> + <string name="updated_gfx_driver_dev_opt_in_app_summary" msgid="5309913444094165199">"Επιλέξτε μια εφαρμογή για τη χρήση του ενημερωμένου προγράμματος οδήγησης γραφικών σε ανάπτυξη"</string> + <string name="media_transfer_phone_device_name" msgid="1003823744105758574">"Ηχείο τηλεφώνου"</string> </resources> diff --git a/packages/SettingsLib/res/values-en-rAU/strings.xml b/packages/SettingsLib/res/values-en-rAU/strings.xml index f0eaeed5f885..5b11d63d4ac5 100644 --- a/packages/SettingsLib/res/values-en-rAU/strings.xml +++ b/packages/SettingsLib/res/values-en-rAU/strings.xml @@ -21,6 +21,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="wifi_fail_to_scan" msgid="1265540342578081461">"Can\'t scan for networks"</string> + <string name="wifi_security_none" msgid="7985461072596594400">"None"</string> <string name="wifi_remembered" msgid="4955746899347821096">"Saved"</string> <string name="wifi_disabled_generic" msgid="4259794910584943386">"Disabled"</string> <string name="wifi_disabled_network_failure" msgid="2364951338436007124">"IP Configuration Failure"</string> @@ -374,6 +375,7 @@ <string name="power_discharge_by_only_enhanced" msgid="2175151772952365149">"Should last until about <xliff:g id="TIME">%1$s</xliff:g> based on your usage"</string> <string name="power_discharge_by" msgid="6453537733650125582">"Should last until about <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_discharge_by_only" msgid="107616694963545745">"Should last until about <xliff:g id="TIME">%1$s</xliff:g>"</string> + <string name="power_discharge_by_only_short" msgid="1372817269546888804">"Until <xliff:g id="TIME">%1$s</xliff:g>"</string> <string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"Less than <xliff:g id="THRESHOLD">%1$s</xliff:g> remaining"</string> <string name="power_remaining_less_than_duration" msgid="5751885147712659423">"Less than <xliff:g id="THRESHOLD">%1$s</xliff:g> remaining (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"More than <xliff:g id="TIME_REMAINING">%1$s</xliff:g> remaining (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> @@ -447,4 +449,6 @@ <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Ask every time"</string> <string name="zen_mode_forever" msgid="2704305038191592967">"Until you turn off"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"Just now"</string> + <string name="updated_gfx_driver_dev_opt_in_app_summary" msgid="5309913444094165199">"Opt in app to use updated graphics driver in development"</string> + <string name="media_transfer_phone_device_name" msgid="1003823744105758574">"Phone speaker"</string> </resources> diff --git a/packages/SettingsLib/res/values-en-rCA/strings.xml b/packages/SettingsLib/res/values-en-rCA/strings.xml index f0eaeed5f885..5b11d63d4ac5 100644 --- a/packages/SettingsLib/res/values-en-rCA/strings.xml +++ b/packages/SettingsLib/res/values-en-rCA/strings.xml @@ -21,6 +21,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="wifi_fail_to_scan" msgid="1265540342578081461">"Can\'t scan for networks"</string> + <string name="wifi_security_none" msgid="7985461072596594400">"None"</string> <string name="wifi_remembered" msgid="4955746899347821096">"Saved"</string> <string name="wifi_disabled_generic" msgid="4259794910584943386">"Disabled"</string> <string name="wifi_disabled_network_failure" msgid="2364951338436007124">"IP Configuration Failure"</string> @@ -374,6 +375,7 @@ <string name="power_discharge_by_only_enhanced" msgid="2175151772952365149">"Should last until about <xliff:g id="TIME">%1$s</xliff:g> based on your usage"</string> <string name="power_discharge_by" msgid="6453537733650125582">"Should last until about <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_discharge_by_only" msgid="107616694963545745">"Should last until about <xliff:g id="TIME">%1$s</xliff:g>"</string> + <string name="power_discharge_by_only_short" msgid="1372817269546888804">"Until <xliff:g id="TIME">%1$s</xliff:g>"</string> <string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"Less than <xliff:g id="THRESHOLD">%1$s</xliff:g> remaining"</string> <string name="power_remaining_less_than_duration" msgid="5751885147712659423">"Less than <xliff:g id="THRESHOLD">%1$s</xliff:g> remaining (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"More than <xliff:g id="TIME_REMAINING">%1$s</xliff:g> remaining (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> @@ -447,4 +449,6 @@ <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Ask every time"</string> <string name="zen_mode_forever" msgid="2704305038191592967">"Until you turn off"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"Just now"</string> + <string name="updated_gfx_driver_dev_opt_in_app_summary" msgid="5309913444094165199">"Opt in app to use updated graphics driver in development"</string> + <string name="media_transfer_phone_device_name" msgid="1003823744105758574">"Phone speaker"</string> </resources> diff --git a/packages/SettingsLib/res/values-en-rGB/strings.xml b/packages/SettingsLib/res/values-en-rGB/strings.xml index f0eaeed5f885..5b11d63d4ac5 100644 --- a/packages/SettingsLib/res/values-en-rGB/strings.xml +++ b/packages/SettingsLib/res/values-en-rGB/strings.xml @@ -21,6 +21,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="wifi_fail_to_scan" msgid="1265540342578081461">"Can\'t scan for networks"</string> + <string name="wifi_security_none" msgid="7985461072596594400">"None"</string> <string name="wifi_remembered" msgid="4955746899347821096">"Saved"</string> <string name="wifi_disabled_generic" msgid="4259794910584943386">"Disabled"</string> <string name="wifi_disabled_network_failure" msgid="2364951338436007124">"IP Configuration Failure"</string> @@ -374,6 +375,7 @@ <string name="power_discharge_by_only_enhanced" msgid="2175151772952365149">"Should last until about <xliff:g id="TIME">%1$s</xliff:g> based on your usage"</string> <string name="power_discharge_by" msgid="6453537733650125582">"Should last until about <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_discharge_by_only" msgid="107616694963545745">"Should last until about <xliff:g id="TIME">%1$s</xliff:g>"</string> + <string name="power_discharge_by_only_short" msgid="1372817269546888804">"Until <xliff:g id="TIME">%1$s</xliff:g>"</string> <string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"Less than <xliff:g id="THRESHOLD">%1$s</xliff:g> remaining"</string> <string name="power_remaining_less_than_duration" msgid="5751885147712659423">"Less than <xliff:g id="THRESHOLD">%1$s</xliff:g> remaining (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"More than <xliff:g id="TIME_REMAINING">%1$s</xliff:g> remaining (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> @@ -447,4 +449,6 @@ <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Ask every time"</string> <string name="zen_mode_forever" msgid="2704305038191592967">"Until you turn off"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"Just now"</string> + <string name="updated_gfx_driver_dev_opt_in_app_summary" msgid="5309913444094165199">"Opt in app to use updated graphics driver in development"</string> + <string name="media_transfer_phone_device_name" msgid="1003823744105758574">"Phone speaker"</string> </resources> diff --git a/packages/SettingsLib/res/values-en-rIN/strings.xml b/packages/SettingsLib/res/values-en-rIN/strings.xml index f0eaeed5f885..5b11d63d4ac5 100644 --- a/packages/SettingsLib/res/values-en-rIN/strings.xml +++ b/packages/SettingsLib/res/values-en-rIN/strings.xml @@ -21,6 +21,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="wifi_fail_to_scan" msgid="1265540342578081461">"Can\'t scan for networks"</string> + <string name="wifi_security_none" msgid="7985461072596594400">"None"</string> <string name="wifi_remembered" msgid="4955746899347821096">"Saved"</string> <string name="wifi_disabled_generic" msgid="4259794910584943386">"Disabled"</string> <string name="wifi_disabled_network_failure" msgid="2364951338436007124">"IP Configuration Failure"</string> @@ -374,6 +375,7 @@ <string name="power_discharge_by_only_enhanced" msgid="2175151772952365149">"Should last until about <xliff:g id="TIME">%1$s</xliff:g> based on your usage"</string> <string name="power_discharge_by" msgid="6453537733650125582">"Should last until about <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_discharge_by_only" msgid="107616694963545745">"Should last until about <xliff:g id="TIME">%1$s</xliff:g>"</string> + <string name="power_discharge_by_only_short" msgid="1372817269546888804">"Until <xliff:g id="TIME">%1$s</xliff:g>"</string> <string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"Less than <xliff:g id="THRESHOLD">%1$s</xliff:g> remaining"</string> <string name="power_remaining_less_than_duration" msgid="5751885147712659423">"Less than <xliff:g id="THRESHOLD">%1$s</xliff:g> remaining (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"More than <xliff:g id="TIME_REMAINING">%1$s</xliff:g> remaining (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> @@ -447,4 +449,6 @@ <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Ask every time"</string> <string name="zen_mode_forever" msgid="2704305038191592967">"Until you turn off"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"Just now"</string> + <string name="updated_gfx_driver_dev_opt_in_app_summary" msgid="5309913444094165199">"Opt in app to use updated graphics driver in development"</string> + <string name="media_transfer_phone_device_name" msgid="1003823744105758574">"Phone speaker"</string> </resources> diff --git a/packages/SettingsLib/res/values-en-rXC/strings.xml b/packages/SettingsLib/res/values-en-rXC/strings.xml index 6927fda440e7..d7ed49a067e4 100644 --- a/packages/SettingsLib/res/values-en-rXC/strings.xml +++ b/packages/SettingsLib/res/values-en-rXC/strings.xml @@ -21,6 +21,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="wifi_fail_to_scan" msgid="1265540342578081461">"Can\'t scan for networks"</string> + <string name="wifi_security_none" msgid="7985461072596594400">"None"</string> <string name="wifi_remembered" msgid="4955746899347821096">"Saved"</string> <string name="wifi_disabled_generic" msgid="4259794910584943386">"Disabled"</string> <string name="wifi_disabled_network_failure" msgid="2364951338436007124">"IP Configuration Failure"</string> @@ -374,6 +375,7 @@ <string name="power_discharge_by_only_enhanced" msgid="2175151772952365149">"Should last until about <xliff:g id="TIME">%1$s</xliff:g> based on your usage"</string> <string name="power_discharge_by" msgid="6453537733650125582">"Should last until about <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_discharge_by_only" msgid="107616694963545745">"Should last until about <xliff:g id="TIME">%1$s</xliff:g>"</string> + <string name="power_discharge_by_only_short" msgid="1372817269546888804">"Until <xliff:g id="TIME">%1$s</xliff:g>"</string> <string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"Less than <xliff:g id="THRESHOLD">%1$s</xliff:g> remaining"</string> <string name="power_remaining_less_than_duration" msgid="5751885147712659423">"Less than <xliff:g id="THRESHOLD">%1$s</xliff:g> remaining (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"More than <xliff:g id="TIME_REMAINING">%1$s</xliff:g> remaining (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> @@ -447,4 +449,6 @@ <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Ask every time"</string> <string name="zen_mode_forever" msgid="2704305038191592967">"Until you turn off"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"Just now"</string> + <string name="updated_gfx_driver_dev_opt_in_app_summary" msgid="5309913444094165199">"Opt in app to use updated graphcis driver in developement"</string> + <string name="media_transfer_phone_device_name" msgid="1003823744105758574">"Phone speaker"</string> </resources> diff --git a/packages/SettingsLib/res/values-es-rUS/strings.xml b/packages/SettingsLib/res/values-es-rUS/strings.xml index 675084fbed8d..ecec63cd22cf 100644 --- a/packages/SettingsLib/res/values-es-rUS/strings.xml +++ b/packages/SettingsLib/res/values-es-rUS/strings.xml @@ -21,6 +21,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="wifi_fail_to_scan" msgid="1265540342578081461">"No se pueden buscar las redes."</string> + <string name="wifi_security_none" msgid="7985461072596594400">"Ninguna"</string> <string name="wifi_remembered" msgid="4955746899347821096">"Guardada"</string> <string name="wifi_disabled_generic" msgid="4259794910584943386">"Inhabilitada"</string> <string name="wifi_disabled_network_failure" msgid="2364951338436007124">"Error de configuración IP"</string> @@ -374,6 +375,7 @@ <string name="power_discharge_by_only_enhanced" msgid="2175151772952365149">"Debería durar aproximadamente hasta <xliff:g id="TIME">%1$s</xliff:g> según el uso"</string> <string name="power_discharge_by" msgid="6453537733650125582">"Debería durar aproximadamente hasta <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_discharge_by_only" msgid="107616694963545745">"Debería durar aproximadamente hasta <xliff:g id="TIME">%1$s</xliff:g>"</string> + <string name="power_discharge_by_only_short" msgid="1372817269546888804">"Hasta <xliff:g id="TIME">%1$s</xliff:g>"</string> <string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"Tiempo restante: menos de <xliff:g id="THRESHOLD">%1$s</xliff:g>"</string> <string name="power_remaining_less_than_duration" msgid="5751885147712659423">"Tiempo restante: menos de <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"Tiempo restante: más de <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> @@ -447,4 +449,6 @@ <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Preguntar siempre"</string> <string name="zen_mode_forever" msgid="2704305038191592967">"Hasta que lo desactives"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"Recién"</string> + <string name="updated_gfx_driver_dev_opt_in_app_summary" msgid="5309913444094165199">"Habilitar app para que use el controlador de gráficos actualizado en el desarrollo"</string> + <string name="media_transfer_phone_device_name" msgid="1003823744105758574">"Altavoz del teléfono"</string> </resources> diff --git a/packages/SettingsLib/res/values-es/strings.xml b/packages/SettingsLib/res/values-es/strings.xml index b51b84751def..b8fdf30e673f 100644 --- a/packages/SettingsLib/res/values-es/strings.xml +++ b/packages/SettingsLib/res/values-es/strings.xml @@ -21,6 +21,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="wifi_fail_to_scan" msgid="1265540342578081461">"No se puede buscar redes."</string> + <string name="wifi_security_none" msgid="7985461072596594400">"Ninguna"</string> <string name="wifi_remembered" msgid="4955746899347821096">"Guardado"</string> <string name="wifi_disabled_generic" msgid="4259794910584943386">"Inhabilitado"</string> <string name="wifi_disabled_network_failure" msgid="2364951338436007124">"Error de configuración de IP"</string> @@ -374,6 +375,7 @@ <string name="power_discharge_by_only_enhanced" msgid="2175151772952365149">"Debería durar aproximadamente hasta <xliff:g id="TIME">%1$s</xliff:g> según el uso"</string> <string name="power_discharge_by" msgid="6453537733650125582">"Debería durar aproximadamente hasta <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_discharge_by_only" msgid="107616694963545745">"Debería durar aproximadamente hasta <xliff:g id="TIME">%1$s</xliff:g>"</string> + <string name="power_discharge_by_only_short" msgid="1372817269546888804">"Hasta: <xliff:g id="TIME">%1$s</xliff:g>"</string> <string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"Tiempo restante: menos de <xliff:g id="THRESHOLD">%1$s</xliff:g>"</string> <string name="power_remaining_less_than_duration" msgid="5751885147712659423">"Queda menos del <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"Queda más del <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> @@ -447,4 +449,6 @@ <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Preguntar siempre"</string> <string name="zen_mode_forever" msgid="2704305038191592967">"Hasta que se desactive"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"Justo ahora"</string> + <string name="updated_gfx_driver_dev_opt_in_app_summary" msgid="5309913444094165199">"Habilitar aplicación para usar controlador de gráficos actualizado en desarrollo"</string> + <string name="media_transfer_phone_device_name" msgid="1003823744105758574">"Altavoz del teléfono"</string> </resources> diff --git a/packages/SettingsLib/res/values-et/strings.xml b/packages/SettingsLib/res/values-et/strings.xml index fb077be51f4f..1246626ce6b1 100644 --- a/packages/SettingsLib/res/values-et/strings.xml +++ b/packages/SettingsLib/res/values-et/strings.xml @@ -21,6 +21,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="wifi_fail_to_scan" msgid="1265540342578081461">"Võrke ei saa kontrollida"</string> + <string name="wifi_security_none" msgid="7985461072596594400">"Puudub"</string> <string name="wifi_remembered" msgid="4955746899347821096">"Salvestatud"</string> <string name="wifi_disabled_generic" msgid="4259794910584943386">"Keelatud"</string> <string name="wifi_disabled_network_failure" msgid="2364951338436007124">"IP seadistamise ebaõnnestumine"</string> @@ -374,6 +375,7 @@ <string name="power_discharge_by_only_enhanced" msgid="2175151772952365149">"Peaks teie kasutuse põhjal kestma kuni <xliff:g id="TIME">%1$s</xliff:g>"</string> <string name="power_discharge_by" msgid="6453537733650125582">"Peaks kestma kuni <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_discharge_by_only" msgid="107616694963545745">"Peaks kestma kuni <xliff:g id="TIME">%1$s</xliff:g>"</string> + <string name="power_discharge_by_only_short" msgid="1372817269546888804">"Kuni <xliff:g id="TIME">%1$s</xliff:g>"</string> <string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"Jäänud on alla <xliff:g id="THRESHOLD">%1$s</xliff:g>"</string> <string name="power_remaining_less_than_duration" msgid="5751885147712659423">"Jäänud on alla <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"Jäänud on üle <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> @@ -447,4 +449,6 @@ <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Küsi iga kord"</string> <string name="zen_mode_forever" msgid="2704305038191592967">"Kuni välja lülitate"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"Äsja"</string> + <string name="updated_gfx_driver_dev_opt_in_app_summary" msgid="5309913444094165199">"Lubage rakendus, et kasutada arenduses olevat värskendatud graafikadraiverit"</string> + <string name="media_transfer_phone_device_name" msgid="1003823744105758574">"Telefoni kõlar"</string> </resources> diff --git a/packages/SettingsLib/res/values-eu/strings.xml b/packages/SettingsLib/res/values-eu/strings.xml index 3d3b8c324f77..68b48408638a 100644 --- a/packages/SettingsLib/res/values-eu/strings.xml +++ b/packages/SettingsLib/res/values-eu/strings.xml @@ -21,6 +21,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="wifi_fail_to_scan" msgid="1265540342578081461">"Ezin dira sareak bilatu"</string> + <string name="wifi_security_none" msgid="7985461072596594400">"Bat ere ez"</string> <string name="wifi_remembered" msgid="4955746899347821096">"Gordeta"</string> <string name="wifi_disabled_generic" msgid="4259794910584943386">"Desgaituta"</string> <string name="wifi_disabled_network_failure" msgid="2364951338436007124">"Ezin izan da konfiguratu IP helbidea"</string> @@ -374,6 +375,7 @@ <string name="power_discharge_by_only_enhanced" msgid="2175151772952365149">"Erabileraren arabera, ordu honetara arte iraungo du, gutxi gorabehera: <xliff:g id="TIME">%1$s</xliff:g>"</string> <string name="power_discharge_by" msgid="6453537733650125582">"Ordu honetara arte iraungo du, gutxi gorabehera: <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_discharge_by_only" msgid="107616694963545745">"Ordu honetara arte iraungo du, gutxi gorabehera: <xliff:g id="TIME">%1$s</xliff:g>"</string> + <string name="power_discharge_by_only_short" msgid="1372817269546888804">"<xliff:g id="TIME">%1$s</xliff:g> arte"</string> <string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"<xliff:g id="THRESHOLD">%1$s</xliff:g> baino gutxiago gelditzen dira"</string> <string name="power_remaining_less_than_duration" msgid="5751885147712659423">"<xliff:g id="THRESHOLD">%1$s</xliff:g> baino gutxiago gelditzen da (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"<xliff:g id="TIME_REMAINING">%1$s</xliff:g> baino gehiago gelditzen da (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> @@ -447,4 +449,6 @@ <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Galdetu beti"</string> <string name="zen_mode_forever" msgid="2704305038191592967">"Desaktibatu arte"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"Oraintxe"</string> + <string name="updated_gfx_driver_dev_opt_in_app_summary" msgid="5309913444094165199">"Hautatu zein aplikaziorekin erabili nahi duzun garatze-prozesuan dagoen grafikoen kontrolatzaile eguneratua"</string> + <string name="media_transfer_phone_device_name" msgid="1003823744105758574">"Telefonoaren bozgorailua"</string> </resources> diff --git a/packages/SettingsLib/res/values-fa/strings.xml b/packages/SettingsLib/res/values-fa/strings.xml index 0af118ec0ad8..7882b0563a6b 100644 --- a/packages/SettingsLib/res/values-fa/strings.xml +++ b/packages/SettingsLib/res/values-fa/strings.xml @@ -21,6 +21,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="wifi_fail_to_scan" msgid="1265540342578081461">"اسکن شبکهها امکانپذیر نیست"</string> + <string name="wifi_security_none" msgid="7985461072596594400">"هیچکدام"</string> <string name="wifi_remembered" msgid="4955746899347821096">"ذخیرهشده"</string> <string name="wifi_disabled_generic" msgid="4259794910584943386">"غیرفعال شد"</string> <string name="wifi_disabled_network_failure" msgid="2364951338436007124">"پیکربندی IP انجام نشد"</string> @@ -374,6 +375,7 @@ <string name="power_discharge_by_only_enhanced" msgid="2175151772952365149">"باتوجه به میزان مصرفتان، باید حدوداً تا <xliff:g id="TIME">%1$s</xliff:g> شارژ داشته باشید"</string> <string name="power_discharge_by" msgid="6453537733650125582">"باید حدوداً تا <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>) شارژ داشته باشید"</string> <string name="power_discharge_by_only" msgid="107616694963545745">"باید حدوداً تا <xliff:g id="TIME">%1$s</xliff:g> شارژ داشته باشید"</string> + <string name="power_discharge_by_only_short" msgid="1372817269546888804">"تا <xliff:g id="TIME">%1$s</xliff:g>"</string> <string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"کمتر از <xliff:g id="THRESHOLD">%1$s</xliff:g> باقی مانده"</string> <string name="power_remaining_less_than_duration" msgid="5751885147712659423">"کمتر از <xliff:g id="THRESHOLD">%1$s</xliff:g> شارژ باقی مانده است (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"بیش از <xliff:g id="TIME_REMAINING">%1$s</xliff:g> شارژ باقی مانده است (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> @@ -447,4 +449,6 @@ <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"هربار پرسیده شود"</string> <string name="zen_mode_forever" msgid="2704305038191592967">"تا زمانیکه آن را خاموش کنید"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"هماکنون"</string> + <string name="updated_gfx_driver_dev_opt_in_app_summary" msgid="5309913444094165199">"برنامه انتخابشده برای استفاده از درایور گرافیک بهروزرسانیشده در برنامهنویس"</string> + <string name="media_transfer_phone_device_name" msgid="1003823744105758574">"بلندگوی تلفن"</string> </resources> diff --git a/packages/SettingsLib/res/values-fi/strings.xml b/packages/SettingsLib/res/values-fi/strings.xml index dde10d0d7fcb..1904c4d460e4 100644 --- a/packages/SettingsLib/res/values-fi/strings.xml +++ b/packages/SettingsLib/res/values-fi/strings.xml @@ -21,6 +21,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="wifi_fail_to_scan" msgid="1265540342578081461">"Verkkoja ei voi etsiä."</string> + <string name="wifi_security_none" msgid="7985461072596594400">"Ei mitään"</string> <string name="wifi_remembered" msgid="4955746899347821096">"Tallennettu"</string> <string name="wifi_disabled_generic" msgid="4259794910584943386">"Pois käytöstä"</string> <string name="wifi_disabled_network_failure" msgid="2364951338436007124">"IP-kokoonpanovirhe"</string> @@ -374,6 +375,7 @@ <string name="power_discharge_by_only_enhanced" msgid="2175151772952365149">"Varaus loppuu käyttösi perusteella noin <xliff:g id="TIME">%1$s</xliff:g>"</string> <string name="power_discharge_by" msgid="6453537733650125582">"Varaus loppuu noin <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_discharge_by_only" msgid="107616694963545745">"Varaus loppuu noin <xliff:g id="TIME">%1$s</xliff:g>"</string> + <string name="power_discharge_by_only_short" msgid="1372817269546888804">"<xliff:g id="TIME">%1$s</xliff:g> saakka"</string> <string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"Alle <xliff:g id="THRESHOLD">%1$s</xliff:g> jäljellä"</string> <string name="power_remaining_less_than_duration" msgid="5751885147712659423">"Alle <xliff:g id="THRESHOLD">%1$s</xliff:g> jäljellä (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"Yli <xliff:g id="TIME_REMAINING">%1$s</xliff:g> jäljellä (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> @@ -447,4 +449,6 @@ <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Kysy aina"</string> <string name="zen_mode_forever" msgid="2704305038191592967">"Kunnes poistat sen käytöstä"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"Äsken"</string> + <string name="updated_gfx_driver_dev_opt_in_app_summary" msgid="5309913444094165199">"Lisää sovellus käyttämään päivitettyä grafiikkaohjainta kehitysvaiheessa"</string> + <string name="media_transfer_phone_device_name" msgid="1003823744105758574">"Puhelimen kaiutin"</string> </resources> diff --git a/packages/SettingsLib/res/values-fr-rCA/strings.xml b/packages/SettingsLib/res/values-fr-rCA/strings.xml index 1257ea53c0c0..45b2872820c8 100644 --- a/packages/SettingsLib/res/values-fr-rCA/strings.xml +++ b/packages/SettingsLib/res/values-fr-rCA/strings.xml @@ -21,6 +21,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="wifi_fail_to_scan" msgid="1265540342578081461">"Impossible de rechercher des réseaux."</string> + <string name="wifi_security_none" msgid="7985461072596594400">"Aucune"</string> <string name="wifi_remembered" msgid="4955746899347821096">"Enregistré"</string> <string name="wifi_disabled_generic" msgid="4259794910584943386">"Désactivés"</string> <string name="wifi_disabled_network_failure" msgid="2364951338436007124">"Échec de configuration de l\'adresse IP"</string> @@ -374,6 +375,7 @@ <string name="power_discharge_by_only_enhanced" msgid="2175151772952365149">"Devrait durer jusqu\'à environ <xliff:g id="TIME">%1$s</xliff:g>, en fonction de votre usage"</string> <string name="power_discharge_by" msgid="6453537733650125582">"Devrait durer jusqu\'à environ <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_discharge_by_only" msgid="107616694963545745">"Devrait durer jusqu\'à environ <xliff:g id="TIME">%1$s</xliff:g>"</string> + <string name="power_discharge_by_only_short" msgid="1372817269546888804">"Jusqu\'à <xliff:g id="TIME">%1$s</xliff:g>"</string> <string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"Il reste moins de <xliff:g id="THRESHOLD">%1$s</xliff:g>"</string> <string name="power_remaining_less_than_duration" msgid="5751885147712659423">"Il reste moins de <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"Il reste plus de <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> @@ -447,4 +449,6 @@ <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Toujours demander"</string> <string name="zen_mode_forever" msgid="2704305038191592967">"Jusqu\'à la désactivation"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"À l\'instant"</string> + <string name="updated_gfx_driver_dev_opt_in_app_summary" msgid="5309913444094165199">"Sélectionnez l\'application pour utiliser le pilote graphique mis à jour en mode de conception"</string> + <string name="media_transfer_phone_device_name" msgid="1003823744105758574">"Haut-parleur du téléphone"</string> </resources> diff --git a/packages/SettingsLib/res/values-fr/strings.xml b/packages/SettingsLib/res/values-fr/strings.xml index 444a52ea94b2..13361d74ede1 100644 --- a/packages/SettingsLib/res/values-fr/strings.xml +++ b/packages/SettingsLib/res/values-fr/strings.xml @@ -21,6 +21,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="wifi_fail_to_scan" msgid="1265540342578081461">"Impossible de rechercher des réseaux."</string> + <string name="wifi_security_none" msgid="7985461072596594400">"Aucune"</string> <string name="wifi_remembered" msgid="4955746899347821096">"Enregistré"</string> <string name="wifi_disabled_generic" msgid="4259794910584943386">"Désactivé"</string> <string name="wifi_disabled_network_failure" msgid="2364951338436007124">"Échec de configuration de l\'adresse IP"</string> @@ -374,6 +375,7 @@ <string name="power_discharge_by_only_enhanced" msgid="2175151772952365149">"Temps restant estimé en fonction de votre utilisation : <xliff:g id="TIME">%1$s</xliff:g>"</string> <string name="power_discharge_by" msgid="6453537733650125582">"Temps restant estimé : <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_discharge_by_only" msgid="107616694963545745">"Temps restant estimé : <xliff:g id="TIME">%1$s</xliff:g>"</string> + <string name="power_discharge_by_only_short" msgid="1372817269546888804">"Jusqu\'à <xliff:g id="TIME">%1$s</xliff:g>"</string> <string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"Il reste moins de <xliff:g id="THRESHOLD">%1$s</xliff:g>"</string> <string name="power_remaining_less_than_duration" msgid="5751885147712659423">"Il reste moins de <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"Il reste plus de <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> @@ -447,4 +449,6 @@ <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Toujours demander"</string> <string name="zen_mode_forever" msgid="2704305038191592967">"Jusqu\'à la désactivation"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"À l\'instant"</string> + <string name="updated_gfx_driver_dev_opt_in_app_summary" msgid="5309913444094165199">"Sélectionner une application pour le développement de laquelle utiliser le pilote graphique mis à jour"</string> + <string name="media_transfer_phone_device_name" msgid="1003823744105758574">"Haut-parleur du téléphone"</string> </resources> diff --git a/packages/SettingsLib/res/values-gl/strings.xml b/packages/SettingsLib/res/values-gl/strings.xml index 8df269719ef6..e8cf009c07a3 100644 --- a/packages/SettingsLib/res/values-gl/strings.xml +++ b/packages/SettingsLib/res/values-gl/strings.xml @@ -21,6 +21,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="wifi_fail_to_scan" msgid="1265540342578081461">"Non se poden explorar redes"</string> + <string name="wifi_security_none" msgid="7985461072596594400">"Ningunha"</string> <string name="wifi_remembered" msgid="4955746899347821096">"Gardada"</string> <string name="wifi_disabled_generic" msgid="4259794910584943386">"Desactivadas"</string> <string name="wifi_disabled_network_failure" msgid="2364951338436007124">"Erro na configuración de IP"</string> @@ -374,6 +375,7 @@ <string name="power_discharge_by_only_enhanced" msgid="2175151772952365149">"En función do uso, debería durar aproximadamente ata a seguinte hora: <xliff:g id="TIME">%1$s</xliff:g>"</string> <string name="power_discharge_by" msgid="6453537733650125582">"Debería durar aproximadamente ata a seguinte hora: <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_discharge_by_only" msgid="107616694963545745">"Debería durar aproximadamente ata a seguinte hora: <xliff:g id="TIME">%1$s</xliff:g>"</string> + <string name="power_discharge_by_only_short" msgid="1372817269546888804">"Ata: <xliff:g id="TIME">%1$s</xliff:g>"</string> <string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"Tempo restante inferior a <xliff:g id="THRESHOLD">%1$s</xliff:g>"</string> <string name="power_remaining_less_than_duration" msgid="5751885147712659423">"Tempo restante: menos de <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"Tempo restante: máis de <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> @@ -447,4 +449,6 @@ <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Preguntar sempre"</string> <string name="zen_mode_forever" msgid="2704305038191592967">"Ata a desactivación"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"Agora mesmo"</string> + <string name="updated_gfx_driver_dev_opt_in_app_summary" msgid="5309913444094165199">"Subscribirse á aplicación para utilizar o controlador de gráficos actualizado en desenvolvemento"</string> + <string name="media_transfer_phone_device_name" msgid="1003823744105758574">"Altofalante do teléfono"</string> </resources> diff --git a/packages/SettingsLib/res/values-gu/strings.xml b/packages/SettingsLib/res/values-gu/strings.xml index 4a92f2a4a8e8..918920dbb8bf 100644 --- a/packages/SettingsLib/res/values-gu/strings.xml +++ b/packages/SettingsLib/res/values-gu/strings.xml @@ -21,6 +21,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="wifi_fail_to_scan" msgid="1265540342578081461">"નેટવર્ક્સ માટે સ્કૅન કરી શકતા નથી"</string> + <string name="wifi_security_none" msgid="7985461072596594400">"કોઈ નહીં"</string> <string name="wifi_remembered" msgid="4955746899347821096">"સાચવેલા"</string> <string name="wifi_disabled_generic" msgid="4259794910584943386">"અક્ષમ કર્યો"</string> <string name="wifi_disabled_network_failure" msgid="2364951338436007124">"IP કન્ફિગરેશન નિષ્ફળ"</string> @@ -374,6 +375,7 @@ <string name="power_discharge_by_only_enhanced" msgid="2175151772952365149">"તમારા વપરાશના આધારે લગભગ <xliff:g id="TIME">%1$s</xliff:g> સુધી ચાલવી જોઈએ"</string> <string name="power_discharge_by" msgid="6453537733650125582">"લગભગ <xliff:g id="TIME">%1$s</xliff:g> સુધી ચાલવી જોઈએ (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_discharge_by_only" msgid="107616694963545745">"લગભગ <xliff:g id="TIME">%1$s</xliff:g> સુધી ચાલવી જોઈએ"</string> + <string name="power_discharge_by_only_short" msgid="1372817269546888804">"<xliff:g id="TIME">%1$s</xliff:g> સુધી"</string> <string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"<xliff:g id="THRESHOLD">%1$s</xliff:g> કરતાં ઓછો સમય બાકી છે"</string> <string name="power_remaining_less_than_duration" msgid="5751885147712659423">"<xliff:g id="THRESHOLD">%1$s</xliff:g> કરતાં ઓછો સમય બાકી છે (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"<xliff:g id="TIME_REMAINING">%1$s</xliff:g> કરતાં વધુ સમય બાકી છે (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> @@ -447,4 +449,6 @@ <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"દર વખતે પૂછો"</string> <string name="zen_mode_forever" msgid="2704305038191592967">"તમે બંધ ન કરો ત્યાં સુધી"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"હમણાં જ"</string> + <string name="updated_gfx_driver_dev_opt_in_app_summary" msgid="5309913444094165199">"અપડેટ કરેલ ગ્રાફિક્સ ડ્રાઇવરનો ઉપયોગ કરવા માટે અૅપ પસંદ કરો"</string> + <string name="media_transfer_phone_device_name" msgid="1003823744105758574">"ફોન સ્પીકર"</string> </resources> diff --git a/packages/SettingsLib/res/values-hi/strings.xml b/packages/SettingsLib/res/values-hi/strings.xml index 6d88c3587597..890d0362bfc2 100644 --- a/packages/SettingsLib/res/values-hi/strings.xml +++ b/packages/SettingsLib/res/values-hi/strings.xml @@ -21,6 +21,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="wifi_fail_to_scan" msgid="1265540342578081461">"नेटवर्क के लिए स्कैन नहीं कर सकता"</string> + <string name="wifi_security_none" msgid="7985461072596594400">"कोई नहीं"</string> <string name="wifi_remembered" msgid="4955746899347821096">"सेव किया गया"</string> <string name="wifi_disabled_generic" msgid="4259794910584943386">"अक्षम"</string> <string name="wifi_disabled_network_failure" msgid="2364951338436007124">"IP कॉन्फ़िगरेशन की विफलता"</string> @@ -374,6 +375,7 @@ <string name="power_discharge_by_only_enhanced" msgid="2175151772952365149">"आपके इस्तेमाल के हिसाब से बैटरी लगभग <xliff:g id="TIME">%1$s</xliff:g> चलेगी"</string> <string name="power_discharge_by" msgid="6453537733650125582">"बैटरी लगभग <xliff:g id="TIME">%1$s</xliff:g> चलेगी (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_discharge_by_only" msgid="107616694963545745">"बैटरी लगभग <xliff:g id="TIME">%1$s</xliff:g> चलेगी"</string> + <string name="power_discharge_by_only_short" msgid="1372817269546888804">"<xliff:g id="TIME">%1$s</xliff:g> तक"</string> <string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"<xliff:g id="THRESHOLD">%1$s</xliff:g> से कम समय बचा है"</string> <string name="power_remaining_less_than_duration" msgid="5751885147712659423">"<xliff:g id="THRESHOLD">%1$s</xliff:g> से कम बैटरी बची है (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"<xliff:g id="TIME_REMAINING">%1$s</xliff:g> से ज़्यादा चलने लायक बैटरी बची है (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> @@ -447,4 +449,6 @@ <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"हर बार पूछें"</string> <string name="zen_mode_forever" msgid="2704305038191592967">"जब तक आप इसे बंद नहीं करते"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"अभी-अभी"</string> + <string name="updated_gfx_driver_dev_opt_in_app_summary" msgid="5309913444094165199">"डेवलपमेंट में अपडेट किए गए ग्राफ़िक्स ड्राइवर का इस्तेमाल करने के लिए ऐप्लिकेशन में ऑप्ट इन करें"</string> + <string name="media_transfer_phone_device_name" msgid="1003823744105758574">"फ़ोन स्पीकर"</string> </resources> diff --git a/packages/SettingsLib/res/values-hr/strings.xml b/packages/SettingsLib/res/values-hr/strings.xml index 32c9a620b3fb..1464b918ce60 100644 --- a/packages/SettingsLib/res/values-hr/strings.xml +++ b/packages/SettingsLib/res/values-hr/strings.xml @@ -21,6 +21,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="wifi_fail_to_scan" msgid="1265540342578081461">"Skeniranje mreža nije moguće"</string> + <string name="wifi_security_none" msgid="7985461072596594400">"Nema"</string> <string name="wifi_remembered" msgid="4955746899347821096">"Spremljeno"</string> <string name="wifi_disabled_generic" msgid="4259794910584943386">"Onemogućeno"</string> <string name="wifi_disabled_network_failure" msgid="2364951338436007124">"Konfiguracija IP-a nije uspjela"</string> @@ -374,6 +375,7 @@ <string name="power_discharge_by_only_enhanced" msgid="2175151772952365149">"Otprilike bi trebalo trajati do <xliff:g id="TIME">%1$s</xliff:g> na temelju vaše upotrebe"</string> <string name="power_discharge_by" msgid="6453537733650125582">"Otprilike bi trebalo trajati do <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_discharge_by_only" msgid="107616694963545745">"Otprilike bi trebalo trajati do <xliff:g id="TIME">%1$s</xliff:g>"</string> + <string name="power_discharge_by_only_short" msgid="1372817269546888804">"Do <xliff:g id="TIME">%1$s</xliff:g>"</string> <string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"Preostalo je manje od <xliff:g id="THRESHOLD">%1$s</xliff:g>"</string> <string name="power_remaining_less_than_duration" msgid="5751885147712659423">"Preostalo je manje od <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"Preostalo je više od <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> @@ -448,4 +450,6 @@ <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Pitaj svaki put"</string> <string name="zen_mode_forever" msgid="2704305038191592967">"Dok ne isključite"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"Upravo sad"</string> + <string name="updated_gfx_driver_dev_opt_in_app_summary" msgid="5309913444094165199">"Uključi aplikaciju za upotrebu ažuriranog upravljačkog programa u razvoju"</string> + <string name="media_transfer_phone_device_name" msgid="1003823744105758574">"Zvučnik telefona"</string> </resources> diff --git a/packages/SettingsLib/res/values-hu/strings.xml b/packages/SettingsLib/res/values-hu/strings.xml index ed19267f342b..c9fdd4526d0b 100644 --- a/packages/SettingsLib/res/values-hu/strings.xml +++ b/packages/SettingsLib/res/values-hu/strings.xml @@ -21,6 +21,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="wifi_fail_to_scan" msgid="1265540342578081461">"Nem lehet beolvasni a hálózatokat"</string> + <string name="wifi_security_none" msgid="7985461072596594400">"Nincs"</string> <string name="wifi_remembered" msgid="4955746899347821096">"Mentve"</string> <string name="wifi_disabled_generic" msgid="4259794910584943386">"Letiltva"</string> <string name="wifi_disabled_network_failure" msgid="2364951338436007124">"IP-konfigurációs hiba"</string> @@ -374,6 +375,7 @@ <string name="power_discharge_by_only_enhanced" msgid="2175151772952365149">"A használat alapján nagyjából még ennyit bír: <xliff:g id="TIME">%1$s</xliff:g>"</string> <string name="power_discharge_by" msgid="6453537733650125582">"Nagyjából még ennyit bír: <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_discharge_by_only" msgid="107616694963545745">"Nagyjából még ennyit bír: <xliff:g id="TIME">%1$s</xliff:g>"</string> + <string name="power_discharge_by_only_short" msgid="1372817269546888804">"Eddig: <xliff:g id="TIME">%1$s</xliff:g>"</string> <string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"Kevesebb mint <xliff:g id="THRESHOLD">%1$s</xliff:g> van hátra"</string> <string name="power_remaining_less_than_duration" msgid="5751885147712659423">"Kevesebb mint <xliff:g id="THRESHOLD">%1$s</xliff:g> van hátra (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"Kevesebb mint <xliff:g id="TIME_REMAINING">%1$s</xliff:g> van hátra (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> @@ -447,4 +449,6 @@ <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Mindig kérdezzen rá"</string> <string name="zen_mode_forever" msgid="2704305038191592967">"Kikapcsolásig"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"Az imént"</string> + <string name="updated_gfx_driver_dev_opt_in_app_summary" msgid="5309913444094165199">"A frissített, fejlesztés alatt álló grafikus drivert használja a választott alkalmazás"</string> + <string name="media_transfer_phone_device_name" msgid="1003823744105758574">"Telefon hangszórója"</string> </resources> diff --git a/packages/SettingsLib/res/values-hy/strings.xml b/packages/SettingsLib/res/values-hy/strings.xml index 6d516ea3d760..3b13ed1dca1c 100644 --- a/packages/SettingsLib/res/values-hy/strings.xml +++ b/packages/SettingsLib/res/values-hy/strings.xml @@ -21,6 +21,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="wifi_fail_to_scan" msgid="1265540342578081461">"Հնարավոր չէ սկանավորել ցանցերը"</string> + <string name="wifi_security_none" msgid="7985461072596594400">"Ոչ մեկը"</string> <string name="wifi_remembered" msgid="4955746899347821096">"Պահված է"</string> <string name="wifi_disabled_generic" msgid="4259794910584943386">"Անջատված"</string> <string name="wifi_disabled_network_failure" msgid="2364951338436007124">"IP կարգավորման ձախողում"</string> @@ -374,6 +375,7 @@ <string name="power_discharge_by_only_enhanced" msgid="2175151772952365149">"Լիցքը պետք է, որ բավականացնի մոտ <xliff:g id="TIME">%1$s</xliff:g>՝ կախված օգտագործման եղանակից"</string> <string name="power_discharge_by" msgid="6453537733650125582">"Լիցքը (<xliff:g id="LEVEL">%2$s</xliff:g>) պետք է, որ բավականացնի մոտ <xliff:g id="TIME">%1$s</xliff:g>"</string> <string name="power_discharge_by_only" msgid="107616694963545745">"Լիցքը պետք է, որ բավականացնի մոտ <xliff:g id="TIME">%1$s</xliff:g>"</string> + <string name="power_discharge_by_only_short" msgid="1372817269546888804">"Մինչև <xliff:g id="TIME">%1$s</xliff:g>"</string> <string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"Մնացել է <xliff:g id="THRESHOLD">%1$s</xliff:g>-ից պակաս"</string> <string name="power_remaining_less_than_duration" msgid="5751885147712659423">"Մնացել է <xliff:g id="THRESHOLD">%1$s</xliff:g>-ից պակաս (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"Մնացել է ավելի քան <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> @@ -447,4 +449,6 @@ <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Հարցնել ամեն անգամ"</string> <string name="zen_mode_forever" msgid="2704305038191592967">"Մինչև չանջատեք"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"Հենց նոր"</string> + <string name="updated_gfx_driver_dev_opt_in_app_summary" msgid="5309913444094165199">"Ընտրված հավելվածը, որը պետք է օգտագործի թարմացված գրաֆիկական սարքավարը մշակման ժամանակ"</string> + <string name="media_transfer_phone_device_name" msgid="1003823744105758574">"Հեռախոսի բարձրախոս"</string> </resources> diff --git a/packages/SettingsLib/res/values-in/strings.xml b/packages/SettingsLib/res/values-in/strings.xml index a5f2317bba7c..4d1b2dfc8971 100644 --- a/packages/SettingsLib/res/values-in/strings.xml +++ b/packages/SettingsLib/res/values-in/strings.xml @@ -21,6 +21,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="wifi_fail_to_scan" msgid="1265540342578081461">"Tidak dapat memindai jaringan"</string> + <string name="wifi_security_none" msgid="7985461072596594400">"Tidak ada"</string> <string name="wifi_remembered" msgid="4955746899347821096">"Disimpan"</string> <string name="wifi_disabled_generic" msgid="4259794910584943386">"Nonaktif"</string> <string name="wifi_disabled_network_failure" msgid="2364951338436007124">"Kegagalan Konfigurasi IP"</string> @@ -374,6 +375,7 @@ <string name="power_discharge_by_only_enhanced" msgid="2175151772952365149">"Akan bertahan kira-kira sampai <xliff:g id="TIME">%1$s</xliff:g> berdasarkan penggunaan Anda"</string> <string name="power_discharge_by" msgid="6453537733650125582">"Akan bertahan kira-kira sampai <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_discharge_by_only" msgid="107616694963545745">"Akan bertahan kira-kira sampai <xliff:g id="TIME">%1$s</xliff:g>"</string> + <string name="power_discharge_by_only_short" msgid="1372817269546888804">"Hingga <xliff:g id="TIME">%1$s</xliff:g>"</string> <string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"Tersisa kurang dari <xliff:g id="THRESHOLD">%1$s</xliff:g>"</string> <string name="power_remaining_less_than_duration" msgid="5751885147712659423">"Tersisa kurang dari <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"Tersisa lebih dari <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> @@ -447,4 +449,6 @@ <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Selalu tanya"</string> <string name="zen_mode_forever" msgid="2704305038191592967">"Sampai Anda menonaktifkannya"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"Baru saja"</string> + <string name="updated_gfx_driver_dev_opt_in_app_summary" msgid="5309913444094165199">"Ikut sertakan aplikasi untuk menggunakan driver grafis yang diupdate dalam pengembangan"</string> + <string name="media_transfer_phone_device_name" msgid="1003823744105758574">"Speaker ponsel"</string> </resources> diff --git a/packages/SettingsLib/res/values-is/strings.xml b/packages/SettingsLib/res/values-is/strings.xml index 6cf09a615eb7..600ffa4d2268 100644 --- a/packages/SettingsLib/res/values-is/strings.xml +++ b/packages/SettingsLib/res/values-is/strings.xml @@ -21,6 +21,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="wifi_fail_to_scan" msgid="1265540342578081461">"Ekki er hægt að leita að netum"</string> + <string name="wifi_security_none" msgid="7985461072596594400">"Ekkert"</string> <string name="wifi_remembered" msgid="4955746899347821096">"Vistað"</string> <string name="wifi_disabled_generic" msgid="4259794910584943386">"Óvirkt"</string> <string name="wifi_disabled_network_failure" msgid="2364951338436007124">"IP-stillingarvilla"</string> @@ -374,6 +375,7 @@ <string name="power_discharge_by_only_enhanced" msgid="2175151772952365149">"Ætti að endast til u.þ.b. <xliff:g id="TIME">%1$s</xliff:g> miðað við notkun þína"</string> <string name="power_discharge_by" msgid="6453537733650125582">"Ætti að endast til u.þ.b. <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_discharge_by_only" msgid="107616694963545745">"Ætti að endast til u.þ.b. <xliff:g id="TIME">%1$s</xliff:g>"</string> + <string name="power_discharge_by_only_short" msgid="1372817269546888804">"Til klukkan <xliff:g id="TIME">%1$s</xliff:g>"</string> <string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"Minna en <xliff:g id="THRESHOLD">%1$s</xliff:g> eftir"</string> <string name="power_remaining_less_than_duration" msgid="5751885147712659423">"Minna en <xliff:g id="THRESHOLD">%1$s</xliff:g> eftir (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"Meira en <xliff:g id="TIME_REMAINING">%1$s</xliff:g> eftir (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> @@ -447,4 +449,6 @@ <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Spyrja í hvert skipti"</string> <string name="zen_mode_forever" msgid="2704305038191592967">"Þar til þú slekkur"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"Rétt í þessu"</string> + <string name="updated_gfx_driver_dev_opt_in_app_summary" msgid="5309913444094165199">"Velja að nota uppfærðan myndefnisrekil í þróun í forriti"</string> + <string name="media_transfer_phone_device_name" msgid="1003823744105758574">"Símahátalari"</string> </resources> diff --git a/packages/SettingsLib/res/values-it/strings.xml b/packages/SettingsLib/res/values-it/strings.xml index a1b9b82eddf4..068aa91537bc 100644 --- a/packages/SettingsLib/res/values-it/strings.xml +++ b/packages/SettingsLib/res/values-it/strings.xml @@ -21,6 +21,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="wifi_fail_to_scan" msgid="1265540342578081461">"Impossibile cercare reti"</string> + <string name="wifi_security_none" msgid="7985461072596594400">"Nessuna"</string> <string name="wifi_remembered" msgid="4955746899347821096">"Salvata"</string> <string name="wifi_disabled_generic" msgid="4259794910584943386">"Disattivata"</string> <string name="wifi_disabled_network_failure" msgid="2364951338436007124">"Errore configurazione IP"</string> @@ -374,6 +375,7 @@ <string name="power_discharge_by_only_enhanced" msgid="2175151772952365149">"Tempo stimato rimanente in base al tuo utilizzo: <xliff:g id="TIME">%1$s</xliff:g> circa"</string> <string name="power_discharge_by" msgid="6453537733650125582">"Tempo stimato rimanente: <xliff:g id="TIME">%1$s</xliff:g> circa (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_discharge_by_only" msgid="107616694963545745">"Tempo stimato rimanente: <xliff:g id="TIME">%1$s</xliff:g> circa"</string> + <string name="power_discharge_by_only_short" msgid="1372817269546888804">"Fino alle ore <xliff:g id="TIME">%1$s</xliff:g>"</string> <string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"Tempo rimanente: meno di <xliff:g id="THRESHOLD">%1$s</xliff:g>"</string> <string name="power_remaining_less_than_duration" msgid="5751885147712659423">"Tempo rimanente: meno di <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"Tempo rimanente: più di <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> @@ -447,4 +449,6 @@ <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Chiedi ogni volta"</string> <string name="zen_mode_forever" msgid="2704305038191592967">"Fino alla disattivazione"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"Adesso"</string> + <string name="updated_gfx_driver_dev_opt_in_app_summary" msgid="5309913444094165199">"Attiva l\'app per utilizzare il driver grafico aggiornato nella versione di sviluppo"</string> + <string name="media_transfer_phone_device_name" msgid="1003823744105758574">"Altoparlante telefono"</string> </resources> diff --git a/packages/SettingsLib/res/values-iw/strings.xml b/packages/SettingsLib/res/values-iw/strings.xml index 1a5062200d77..fa38f774856d 100644 --- a/packages/SettingsLib/res/values-iw/strings.xml +++ b/packages/SettingsLib/res/values-iw/strings.xml @@ -21,6 +21,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="wifi_fail_to_scan" msgid="1265540342578081461">"לא ניתן לסרוק לאיתור רשתות"</string> + <string name="wifi_security_none" msgid="7985461072596594400">"ללא"</string> <string name="wifi_remembered" msgid="4955746899347821096">"נשמר"</string> <string name="wifi_disabled_generic" msgid="4259794910584943386">"מושבת"</string> <string name="wifi_disabled_network_failure" msgid="2364951338436007124">"כשל בתצורת IP"</string> @@ -374,6 +375,7 @@ <string name="power_discharge_by_only_enhanced" msgid="2175151772952365149">"אמורה להחזיק מעמד בערך עד <xliff:g id="TIME">%1$s</xliff:g> על סמך השימוש במכשיר"</string> <string name="power_discharge_by" msgid="6453537733650125582">"אמורה להחזיק מעמד בערך עד <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_discharge_by_only" msgid="107616694963545745">"אמורה להחזיק מעמד בערך עד <xliff:g id="TIME">%1$s</xliff:g>"</string> + <string name="power_discharge_by_only_short" msgid="1372817269546888804">"עד <xliff:g id="TIME">%1$s</xliff:g>"</string> <string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"נותרו פחות מ-<xliff:g id="THRESHOLD">%1$s</xliff:g>"</string> <string name="power_remaining_less_than_duration" msgid="5751885147712659423">"נותרו פחות מ-<xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"נותרו יותר מ-<xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> @@ -449,4 +451,6 @@ <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"שאל בכל פעם"</string> <string name="zen_mode_forever" msgid="2704305038191592967">"עד הכיבוי"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"הרגע"</string> + <string name="updated_gfx_driver_dev_opt_in_app_summary" msgid="5309913444094165199">"האפליקציה שנבחרה לשימוש במנהל ההתקן המעודכן לגרפיקה שבפיתוח"</string> + <string name="media_transfer_phone_device_name" msgid="1003823744105758574">"רמקול של טלפון"</string> </resources> diff --git a/packages/SettingsLib/res/values-ja/strings.xml b/packages/SettingsLib/res/values-ja/strings.xml index 4c544af39fd0..992765499f3f 100644 --- a/packages/SettingsLib/res/values-ja/strings.xml +++ b/packages/SettingsLib/res/values-ja/strings.xml @@ -21,6 +21,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="wifi_fail_to_scan" msgid="1265540342578081461">"ネットワークをスキャンできません"</string> + <string name="wifi_security_none" msgid="7985461072596594400">"なし"</string> <string name="wifi_remembered" msgid="4955746899347821096">"保存済み"</string> <string name="wifi_disabled_generic" msgid="4259794910584943386">"無効"</string> <string name="wifi_disabled_network_failure" msgid="2364951338436007124">"IP設定エラー"</string> @@ -374,6 +375,7 @@ <string name="power_discharge_by_only_enhanced" msgid="2175151772952365149">"電池切れの推定時間: <xliff:g id="TIME">%1$s</xliff:g>(使用状況に基づく)"</string> <string name="power_discharge_by" msgid="6453537733650125582">"電池切れの推定時間: <xliff:g id="TIME">%1$s</xliff:g>(<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_discharge_by_only" msgid="107616694963545745">"電池切れの推定時間: <xliff:g id="TIME">%1$s</xliff:g>"</string> + <string name="power_discharge_by_only_short" msgid="1372817269546888804">"<xliff:g id="TIME">%1$s</xliff:g> まで"</string> <string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"残り時間: <xliff:g id="THRESHOLD">%1$s</xliff:g>未満"</string> <string name="power_remaining_less_than_duration" msgid="5751885147712659423">"残り時間: <xliff:g id="THRESHOLD">%1$s</xliff:g>未満(<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"残り時間: <xliff:g id="TIME_REMAINING">%1$s</xliff:g>以上(<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> @@ -447,4 +449,6 @@ <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"毎回確認"</string> <string name="zen_mode_forever" msgid="2704305038191592967">"OFF にするまで"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"たった今"</string> + <string name="updated_gfx_driver_dev_opt_in_app_summary" msgid="5309913444094165199">"更新したグラフィックス ドライバを開発に使用するオプトイン アプリ"</string> + <string name="media_transfer_phone_device_name" msgid="1003823744105758574">"スマートフォンのスピーカー"</string> </resources> diff --git a/packages/SettingsLib/res/values-ka/strings.xml b/packages/SettingsLib/res/values-ka/strings.xml index 92f304960f59..7ba015337b3b 100644 --- a/packages/SettingsLib/res/values-ka/strings.xml +++ b/packages/SettingsLib/res/values-ka/strings.xml @@ -21,6 +21,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="wifi_fail_to_scan" msgid="1265540342578081461">"ქსელების სკანირება არა არის შესაძლებელი"</string> + <string name="wifi_security_none" msgid="7985461072596594400">"არცერთი"</string> <string name="wifi_remembered" msgid="4955746899347821096">"დამახსოვრებულია"</string> <string name="wifi_disabled_generic" msgid="4259794910584943386">"გამორთულია"</string> <string name="wifi_disabled_network_failure" msgid="2364951338436007124">"IP კონფიგურაციის შეფერხება"</string> @@ -374,6 +375,7 @@ <string name="power_discharge_by_only_enhanced" msgid="2175151772952365149">"უნდა იმუშაოს დაახლოებით <xliff:g id="TIME">%1$s</xliff:g>, მოხმარების გათვალისწინებით"</string> <string name="power_discharge_by" msgid="6453537733650125582">"უნდა იმუშაოს დაახლოებით <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_discharge_by_only" msgid="107616694963545745">"უნდა იმუშაოს დაახლოებით <xliff:g id="TIME">%1$s</xliff:g>"</string> + <string name="power_discharge_by_only_short" msgid="1372817269546888804">"<xliff:g id="TIME">%1$s</xliff:g>-მდე"</string> <string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"დარჩენილია <xliff:g id="THRESHOLD">%1$s</xliff:g>-ზე ნაკლები"</string> <string name="power_remaining_less_than_duration" msgid="5751885147712659423">"დარჩენილია <xliff:g id="THRESHOLD">%1$s</xliff:g>-ზე ნაკლები დრო (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"დარჩენილია <xliff:g id="TIME_REMAINING">%1$s</xliff:g>-ზე მეტი დრო (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> @@ -447,4 +449,6 @@ <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"ყოველთვის მკითხეთ"</string> <string name="zen_mode_forever" msgid="2704305038191592967">"გამორთვამდე"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"ახლახან"</string> + <string name="updated_gfx_driver_dev_opt_in_app_summary" msgid="5309913444094165199">"გააქტიურების აპი, რომელიც გამოიყენებს შემუშავების პროცესში მყოფ, განახლებულ გრაფიკულ დრაივერს"</string> + <string name="media_transfer_phone_device_name" msgid="1003823744105758574">"ტელეფონის დინამიკი"</string> </resources> diff --git a/packages/SettingsLib/res/values-kk/strings.xml b/packages/SettingsLib/res/values-kk/strings.xml index b56c6fd1c39d..d5b4441ea07a 100644 --- a/packages/SettingsLib/res/values-kk/strings.xml +++ b/packages/SettingsLib/res/values-kk/strings.xml @@ -21,6 +21,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="wifi_fail_to_scan" msgid="1265540342578081461">"Желілерді шолу мүмкін емес"</string> + <string name="wifi_security_none" msgid="7985461072596594400">"Ешқандай"</string> <string name="wifi_remembered" msgid="4955746899347821096">"Сақталды"</string> <string name="wifi_disabled_generic" msgid="4259794910584943386">"Өшірілген"</string> <string name="wifi_disabled_network_failure" msgid="2364951338436007124">"IP конфигурациясының қатесі"</string> @@ -374,6 +375,7 @@ <string name="power_discharge_by_only_enhanced" msgid="2175151772952365149">"Пайдалануға байланысты шамамен <xliff:g id="TIME">%1$s</xliff:g> уақытқа жетеді"</string> <string name="power_discharge_by" msgid="6453537733650125582">"Шамамен <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>) уақытқа жетеді"</string> <string name="power_discharge_by_only" msgid="107616694963545745">"Шамамен <xliff:g id="TIME">%1$s</xliff:g> уақытқа жетеді"</string> + <string name="power_discharge_by_only_short" msgid="1372817269546888804">"<xliff:g id="TIME">%1$s</xliff:g> дейін"</string> <string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"<xliff:g id="THRESHOLD">%1$s</xliff:g> шамасынан аз қалды"</string> <string name="power_remaining_less_than_duration" msgid="5751885147712659423">"<xliff:g id="THRESHOLD">%1$s</xliff:g> шамасынан аз қалды (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"<xliff:g id="TIME_REMAINING">%1$s</xliff:g> шамасынан көп уақыт қалды (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> @@ -447,4 +449,6 @@ <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Әрдайым сұрау"</string> <string name="zen_mode_forever" msgid="2704305038191592967">"Өшірілгенге дейін"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"Дәл қазір"</string> + <string name="updated_gfx_driver_dev_opt_in_app_summary" msgid="5309913444094165199">"Әзірлеу барысында қолданба жаңартылған графика драйверін пайдаланады"</string> + <string name="media_transfer_phone_device_name" msgid="1003823744105758574">"Телефон динамигі"</string> </resources> diff --git a/packages/SettingsLib/res/values-km/strings.xml b/packages/SettingsLib/res/values-km/strings.xml index 58604731a258..d1d1c7681c92 100644 --- a/packages/SettingsLib/res/values-km/strings.xml +++ b/packages/SettingsLib/res/values-km/strings.xml @@ -21,6 +21,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="wifi_fail_to_scan" msgid="1265540342578081461">"មិនអាចវិភាគរកបណ្ដាញ"</string> + <string name="wifi_security_none" msgid="7985461072596594400">"គ្មាន"</string> <string name="wifi_remembered" msgid="4955746899347821096">"បានរក្សាទុក"</string> <string name="wifi_disabled_generic" msgid="4259794910584943386">"បានបិទ"</string> <string name="wifi_disabled_network_failure" msgid="2364951338436007124">"ការកំណត់រចនាសម្ព័ន្ធ IP បរាជ័យ"</string> @@ -374,6 +375,7 @@ <string name="power_discharge_by_only_enhanced" msgid="2175151772952365149">"គួរតែអាចប្រើបានរហូតដល់ម៉ោងប្រហែល <xliff:g id="TIME">%1$s</xliff:g> ដោយផ្អែកលើការប្រើប្រាស់របស់អ្នក"</string> <string name="power_discharge_by" msgid="6453537733650125582">"គួរតែអាចប្រើបានរហូតដល់ម៉ោងប្រហែល <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_discharge_by_only" msgid="107616694963545745">"គួរតែអាចប្រើបានរហូតដល់ម៉ោងប្រហែល <xliff:g id="TIME">%1$s</xliff:g>"</string> + <string name="power_discharge_by_only_short" msgid="1372817269546888804">"រហូតដល់ម៉ោង <xliff:g id="TIME">%1$s</xliff:g>"</string> <string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"នៅសល់តិចជាង <xliff:g id="THRESHOLD">%1$s</xliff:g>"</string> <string name="power_remaining_less_than_duration" msgid="5751885147712659423">"នៅសល់តិចជាង <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"នៅសល់ច្រើនជាង <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> @@ -447,4 +449,6 @@ <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"សួរគ្រប់ពេល"</string> <string name="zen_mode_forever" msgid="2704305038191592967">"រហូតទាល់តែអ្នកបិទ"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"អម្បាញ់មិញ"</string> + <string name="updated_gfx_driver_dev_opt_in_app_summary" msgid="5309913444094165199">"ភ្ជាប់កម្មវិធី ដើម្បីប្រើដ្រាយវើក្រាហ្វិកដែលបានដំឡើងជំនាន់សម្រាប់ការអភិវឌ្ឍ"</string> + <string name="media_transfer_phone_device_name" msgid="1003823744105758574">"ឧបករណ៍បំពងសំឡេងទូរសព្ទ"</string> </resources> diff --git a/packages/SettingsLib/res/values-kn/strings.xml b/packages/SettingsLib/res/values-kn/strings.xml index 87e18e68750c..46759f5b79e4 100644 --- a/packages/SettingsLib/res/values-kn/strings.xml +++ b/packages/SettingsLib/res/values-kn/strings.xml @@ -21,6 +21,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="wifi_fail_to_scan" msgid="1265540342578081461">"ನೆಟ್ವರ್ಕ್ಗಳಿಗಾಗಿ ಸ್ಕ್ಯಾನ್ ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ"</string> + <string name="wifi_security_none" msgid="7985461072596594400">"ಯಾವುದೂ ಇಲ್ಲ"</string> <string name="wifi_remembered" msgid="4955746899347821096">"ಉಳಿಸಲಾಗಿದೆ"</string> <string name="wifi_disabled_generic" msgid="4259794910584943386">"ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ"</string> <string name="wifi_disabled_network_failure" msgid="2364951338436007124">"IP ಕಾನ್ಫಿಗರೇಶನ್ ವಿಫಲತೆ"</string> @@ -374,6 +375,7 @@ <string name="power_discharge_by_only_enhanced" msgid="2175151772952365149">"ನಿಮ್ಮ ಬಳಕೆ ಆಧರಿಸಿ <xliff:g id="TIME">%1$s</xliff:g> ಸಮಯದವರೆಗೆ ಫೋನ್ ರನ್ ಆಗಬೇಕು"</string> <string name="power_discharge_by" msgid="6453537733650125582">"<xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>) ಸಮಯದವರೆಗೆ ಫೋನ್ ರನ್ ಆಗಬೇಕು"</string> <string name="power_discharge_by_only" msgid="107616694963545745">"<xliff:g id="TIME">%1$s</xliff:g> ಸಮಯದವರೆಗೆ ಫೋನ್ ರನ್ ಆಗಬೇಕು"</string> + <string name="power_discharge_by_only_short" msgid="1372817269546888804">"<xliff:g id="TIME">%1$s</xliff:g> ರವರೆಗೆ"</string> <string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"<xliff:g id="THRESHOLD">%1$s</xliff:g> ನಿಮಿಷಕ್ಕಿಂತ ಕಡಿಮೆ ಸಮಯ ಉಳಿದಿದೆ"</string> <string name="power_remaining_less_than_duration" msgid="5751885147712659423">"<xliff:g id="THRESHOLD">%1$s</xliff:g> ಕ್ಕಿಂತ ಕಡಿಮೆ (<xliff:g id="LEVEL">%2$s</xliff:g>) ಬಾಕಿ"</string> <string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"<xliff:g id="TIME_REMAINING">%1$s</xliff:g> ಕ್ಕಿಂತ ಹೆಚ್ಚು (<xliff:g id="LEVEL">%2$s</xliff:g>) ಬಾಕಿ"</string> @@ -447,4 +449,6 @@ <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"ಪ್ರತಿ ಬಾರಿ ಕೇಳಿ"</string> <string name="zen_mode_forever" msgid="2704305038191592967">"ನೀವು ಆಫ್ ಮಾಡುವವರೆಗೆ"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"ಇದೀಗ"</string> + <string name="updated_gfx_driver_dev_opt_in_app_summary" msgid="5309913444094165199">"ಅಭಿವೃದ್ಧಿಯಲ್ಲಿ ಅಪ್ಡೇಟ್ ಮಾಡಲಾದ ಗ್ರಾಫಿಕ್ಗಳ ಡ್ರೈವರ್ ಬಳಸಲು ಆ್ಯಪ್ ಅನ್ನು ಆಯ್ಕೆಮಾಡಿ"</string> + <string name="media_transfer_phone_device_name" msgid="1003823744105758574">"ಫೋನ್ ಸ್ಪೀಕರ್"</string> </resources> diff --git a/packages/SettingsLib/res/values-ko/strings.xml b/packages/SettingsLib/res/values-ko/strings.xml index 3333c0dd05d2..067175b75095 100644 --- a/packages/SettingsLib/res/values-ko/strings.xml +++ b/packages/SettingsLib/res/values-ko/strings.xml @@ -21,6 +21,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="wifi_fail_to_scan" msgid="1265540342578081461">"네트워크를 검색할 수 없습니다."</string> + <string name="wifi_security_none" msgid="7985461072596594400">"없음"</string> <string name="wifi_remembered" msgid="4955746899347821096">"저장됨"</string> <string name="wifi_disabled_generic" msgid="4259794910584943386">"사용 중지됨"</string> <string name="wifi_disabled_network_failure" msgid="2364951338436007124">"IP 설정 실패"</string> @@ -374,6 +375,7 @@ <string name="power_discharge_by_only_enhanced" msgid="2175151772952365149">"사용량을 기준으로 약 <xliff:g id="TIME">%1$s</xliff:g>까지 사용 가능"</string> <string name="power_discharge_by" msgid="6453537733650125582">"약 <xliff:g id="TIME">%1$s</xliff:g>까지 사용 가능(<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_discharge_by_only" msgid="107616694963545745">"약 <xliff:g id="TIME">%1$s</xliff:g>까지 사용 가능"</string> + <string name="power_discharge_by_only_short" msgid="1372817269546888804">"<xliff:g id="TIME">%1$s</xliff:g>까지"</string> <string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"<xliff:g id="THRESHOLD">%1$s</xliff:g> 미만 남음"</string> <string name="power_remaining_less_than_duration" msgid="5751885147712659423">"<xliff:g id="THRESHOLD">%1$s</xliff:g> 미만 남음(<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"<xliff:g id="TIME_REMAINING">%1$s</xliff:g> 이상 남음(<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> @@ -435,7 +437,7 @@ <string name="cancel" msgid="6859253417269739139">"취소"</string> <string name="okay" msgid="1997666393121016642">"확인"</string> <string name="zen_mode_enable_dialog_turn_on" msgid="8287824809739581837">"켜기"</string> - <string name="zen_mode_settings_turn_on_dialog_title" msgid="2297134204747331078">"알림 일시중지 사용 설정"</string> + <string name="zen_mode_settings_turn_on_dialog_title" msgid="2297134204747331078">"방해 금지 모드 사용 설정"</string> <string name="zen_mode_settings_summary_off" msgid="6119891445378113334">"사용 안함"</string> <string name="zen_interruption_level_priority" msgid="2078370238113347720">"중요 알림만"</string> <string name="zen_mode_and_condition" msgid="4927230238450354412">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string> @@ -447,4 +449,6 @@ <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"항상 확인"</string> <string name="zen_mode_forever" msgid="2704305038191592967">"사용 중지할 때까지"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"조금 전"</string> + <string name="updated_gfx_driver_dev_opt_in_app_summary" msgid="5309913444094165199">"개발 중인 업데이트된 그래픽 드라이버를 사용할 앱을 선택하세요."</string> + <string name="media_transfer_phone_device_name" msgid="1003823744105758574">"휴대전화 스피커"</string> </resources> diff --git a/packages/SettingsLib/res/values-ky/strings.xml b/packages/SettingsLib/res/values-ky/strings.xml index cbbc47c1b3cf..8e994da2d35f 100644 --- a/packages/SettingsLib/res/values-ky/strings.xml +++ b/packages/SettingsLib/res/values-ky/strings.xml @@ -21,6 +21,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="wifi_fail_to_scan" msgid="1265540342578081461">"Түйүндөрдү издөө мүмкүн эмес"</string> + <string name="wifi_security_none" msgid="7985461072596594400">"Жок"</string> <string name="wifi_remembered" msgid="4955746899347821096">"Сакталды"</string> <string name="wifi_disabled_generic" msgid="4259794910584943386">"Өчүрүлгөн"</string> <string name="wifi_disabled_network_failure" msgid="2364951338436007124">"IP конфигурациясы бузулду"</string> @@ -374,6 +375,7 @@ <string name="power_discharge_by_only_enhanced" msgid="2175151772952365149">"Колдонгонуңузга караганда болжол менен <xliff:g id="TIME">%1$s</xliff:g> кийин өчөт"</string> <string name="power_discharge_by" msgid="6453537733650125582">"Болжол менен <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>) кийин өчөт"</string> <string name="power_discharge_by_only" msgid="107616694963545745">"Болжол менен <xliff:g id="TIME">%1$s</xliff:g> кийин өчөт"</string> + <string name="power_discharge_by_only_short" msgid="1372817269546888804">"<xliff:g id="TIME">%1$s</xliff:g> чейин"</string> <string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"<xliff:g id="THRESHOLD">%1$s</xliff:g> жетпеген убакыт калды"</string> <string name="power_remaining_less_than_duration" msgid="5751885147712659423">"<xliff:g id="THRESHOLD">%1$s</xliff:g> жетпеген убакыт калды (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"<xliff:g id="TIME_REMAINING">%1$s</xliff:g> ашыгыраак убакыт калды (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> @@ -447,4 +449,6 @@ <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Ар дайым суралсын"</string> <string name="zen_mode_forever" msgid="2704305038191592967">"Бул функция өчүрүлгөнгө чейин"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"Азыр эле"</string> + <string name="updated_gfx_driver_dev_opt_in_app_summary" msgid="5309913444094165199">"Иштеп чыгууда жаңыртылган графикалык драйверлерди пайдалануу үчүн колдонмону кошуңуз"</string> + <string name="media_transfer_phone_device_name" msgid="1003823744105758574">"Телефондун динамиги"</string> </resources> diff --git a/packages/SettingsLib/res/values-lo/strings.xml b/packages/SettingsLib/res/values-lo/strings.xml index 21e4679b9019..7bf46c014871 100644 --- a/packages/SettingsLib/res/values-lo/strings.xml +++ b/packages/SettingsLib/res/values-lo/strings.xml @@ -21,6 +21,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="wifi_fail_to_scan" msgid="1265540342578081461">"ບໍ່ສາມາດກວດຫາເຄືອຂ່າຍໄດ້"</string> + <string name="wifi_security_none" msgid="7985461072596594400">"ບໍ່ໃຊ້"</string> <string name="wifi_remembered" msgid="4955746899347821096">"ບັນທຶກແລ້ວ"</string> <string name="wifi_disabled_generic" msgid="4259794910584943386">"ປິດການນຳໃຊ້"</string> <string name="wifi_disabled_network_failure" msgid="2364951338436007124">"ການຕັ້ງຄ່າ IP ລົ້ມເຫຼວ"</string> @@ -374,6 +375,7 @@ <string name="power_discharge_by_only_enhanced" msgid="2175151772952365149">"Should last until about <xliff:g id="TIME">%1$s</xliff:g> based on your usage"</string> <string name="power_discharge_by" msgid="6453537733650125582">"Should last until about <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_discharge_by_only" msgid="107616694963545745">"Should last until about <xliff:g id="TIME">%1$s</xliff:g>"</string> + <string name="power_discharge_by_only_short" msgid="1372817269546888804">"ຈົນກວ່າຈະຮອດ <xliff:g id="TIME">%1$s</xliff:g>"</string> <string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"ຍັງເຫຼືອໜ້ອຍກວ່າ <xliff:g id="THRESHOLD">%1$s</xliff:g>"</string> <string name="power_remaining_less_than_duration" msgid="5751885147712659423">"ຍັງເຫຼືອໜ້ອຍກວ່າ <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"ຍັງເຫຼືອຫຼາຍກວ່າ <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> @@ -447,4 +449,6 @@ <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"ຖາມທຸກເທື່ອ"</string> <string name="zen_mode_forever" msgid="2704305038191592967">"ຈົນກວ່າທ່ານຈະປິດ"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"ຕອນນີ້"</string> + <string name="updated_gfx_driver_dev_opt_in_app_summary" msgid="5309913444094165199">"ເຂົ້າຮ່ວມແອັບເພື່ອໃຊ້ໄດຣເວີກຣາຟິກທີ່ອັບເດດແລ້ວໃນການພັດທະນາ"</string> + <string name="media_transfer_phone_device_name" msgid="1003823744105758574">"ລຳໂພງໂທລະສັບ"</string> </resources> diff --git a/packages/SettingsLib/res/values-lt/strings.xml b/packages/SettingsLib/res/values-lt/strings.xml index cbff9e745965..9da3d523c1bd 100644 --- a/packages/SettingsLib/res/values-lt/strings.xml +++ b/packages/SettingsLib/res/values-lt/strings.xml @@ -21,6 +21,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="wifi_fail_to_scan" msgid="1265540342578081461">"Nepavyksta nuskaityti tinklų"</string> + <string name="wifi_security_none" msgid="7985461072596594400">"Nėra"</string> <string name="wifi_remembered" msgid="4955746899347821096">"Išsaugotas"</string> <string name="wifi_disabled_generic" msgid="4259794910584943386">"Neleidžiama"</string> <string name="wifi_disabled_network_failure" msgid="2364951338436007124">"IP konfigūracijos triktis"</string> @@ -374,6 +375,7 @@ <string name="power_discharge_by_only_enhanced" msgid="2175151772952365149">"Pagal tai, kaip naudojama, turėtų išsikrauti maždaug po <xliff:g id="TIME">%1$s</xliff:g>"</string> <string name="power_discharge_by" msgid="6453537733650125582">"Turėtų išsikrauti maždaug po <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_discharge_by_only" msgid="107616694963545745">"Turėtų išsikrauti maždaug po <xliff:g id="TIME">%1$s</xliff:g>"</string> + <string name="power_discharge_by_only_short" msgid="1372817269546888804">"Iki <xliff:g id="TIME">%1$s</xliff:g>"</string> <string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"Liko mažiau nei <xliff:g id="THRESHOLD">%1$s</xliff:g>"</string> <string name="power_remaining_less_than_duration" msgid="5751885147712659423">"Liko mažiau nei <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"Liko daugiau nei <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> @@ -449,4 +451,6 @@ <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Klausti kaskart"</string> <string name="zen_mode_forever" msgid="2704305038191592967">"Kol išjungsite"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"Ką tik"</string> + <string name="updated_gfx_driver_dev_opt_in_app_summary" msgid="5309913444094165199">"Pasirinkti programą, kuri bus naudojama su atnaujinta kuriama grafikos tvarkykle"</string> + <string name="media_transfer_phone_device_name" msgid="1003823744105758574">"Telefono garsiakalbis"</string> </resources> diff --git a/packages/SettingsLib/res/values-lv/strings.xml b/packages/SettingsLib/res/values-lv/strings.xml index d200828f6933..2233468642d1 100644 --- a/packages/SettingsLib/res/values-lv/strings.xml +++ b/packages/SettingsLib/res/values-lv/strings.xml @@ -21,6 +21,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="wifi_fail_to_scan" msgid="1265540342578081461">"Nevar skenēt tīklus"</string> + <string name="wifi_security_none" msgid="7985461072596594400">"Nav"</string> <string name="wifi_remembered" msgid="4955746899347821096">"Saglabāts"</string> <string name="wifi_disabled_generic" msgid="4259794910584943386">"Atspējots"</string> <string name="wifi_disabled_network_failure" msgid="2364951338436007124">"IP konfigurācijas kļūme"</string> @@ -374,6 +375,7 @@ <string name="power_discharge_by_only_enhanced" msgid="2175151772952365149">"Ņemot vērā lietojumu, darbosies aptuveni līdz <xliff:g id="TIME">%1$s</xliff:g>"</string> <string name="power_discharge_by" msgid="6453537733650125582">"Darbosies aptuveni līdz <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_discharge_by_only" msgid="107616694963545745">"Darbosies aptuveni līdz <xliff:g id="TIME">%1$s</xliff:g>"</string> + <string name="power_discharge_by_only_short" msgid="1372817269546888804">"Līdz <xliff:g id="TIME">%1$s</xliff:g>"</string> <string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"Atlikušais laiks — mazāk nekā <xliff:g id="THRESHOLD">%1$s</xliff:g>"</string> <string name="power_remaining_less_than_duration" msgid="5751885147712659423">"Atlicis mazāk nekā <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"Atlicis vairāk nekā <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> @@ -448,4 +450,6 @@ <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Vaicāt katru reizi"</string> <string name="zen_mode_forever" msgid="2704305038191592967">"Līdz brīdim, kad izslēgsiet"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"Tikko"</string> + <string name="updated_gfx_driver_dev_opt_in_app_summary" msgid="5309913444094165199">"Izvēlēties izmantot atjaunināto grafikas dzini šīs lietotnes izstrādē"</string> + <string name="media_transfer_phone_device_name" msgid="1003823744105758574">"Tālruņa skaļrunis"</string> </resources> diff --git a/packages/SettingsLib/res/values-mk/strings.xml b/packages/SettingsLib/res/values-mk/strings.xml index db16847bd07c..534d154b5fe2 100644 --- a/packages/SettingsLib/res/values-mk/strings.xml +++ b/packages/SettingsLib/res/values-mk/strings.xml @@ -21,6 +21,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="wifi_fail_to_scan" msgid="1265540342578081461">"Не може да скенира за мрежи"</string> + <string name="wifi_security_none" msgid="7985461072596594400">"Ниедна"</string> <string name="wifi_remembered" msgid="4955746899347821096">"Зачувано"</string> <string name="wifi_disabled_generic" msgid="4259794910584943386">"Оневозможено"</string> <string name="wifi_disabled_network_failure" msgid="2364951338436007124">"Конфигурирањето ИП не успеа"</string> @@ -374,6 +375,7 @@ <string name="power_discharge_by_only_enhanced" msgid="2175151772952365149">"Треба да трае до околу <xliff:g id="TIME">%1$s</xliff:g> според вашето користење"</string> <string name="power_discharge_by" msgid="6453537733650125582">"Треба да трае до околу <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_discharge_by_only" msgid="107616694963545745">"Треба да трае до околу <xliff:g id="TIME">%1$s</xliff:g>"</string> + <string name="power_discharge_by_only_short" msgid="1372817269546888804">"До <xliff:g id="TIME">%1$s</xliff:g>"</string> <string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"Уште помалку од <xliff:g id="THRESHOLD">%1$s</xliff:g>"</string> <string name="power_remaining_less_than_duration" msgid="5751885147712659423">"Уште помалку од <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"Уште повеќе од <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> @@ -447,4 +449,6 @@ <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Секогаш прашувај"</string> <string name="zen_mode_forever" msgid="2704305038191592967">"Додека не го исклучите"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"Неодамнешни"</string> + <string name="updated_gfx_driver_dev_opt_in_app_summary" msgid="5309913444094165199">"Прифатете ја апликацијата за да се користи ажурираниот драјвер за графика во програмирање"</string> + <string name="media_transfer_phone_device_name" msgid="1003823744105758574">"Телефонски звучник"</string> </resources> diff --git a/packages/SettingsLib/res/values-ml/strings.xml b/packages/SettingsLib/res/values-ml/strings.xml index c3af9684db4c..7a335cd3920f 100644 --- a/packages/SettingsLib/res/values-ml/strings.xml +++ b/packages/SettingsLib/res/values-ml/strings.xml @@ -21,6 +21,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="wifi_fail_to_scan" msgid="1265540342578081461">"നെറ്റ്വർക്കുകൾക്കായി സ്കാൻ ചെയ്യാനായില്ല"</string> + <string name="wifi_security_none" msgid="7985461072596594400">"ഒന്നുമില്ല"</string> <string name="wifi_remembered" msgid="4955746899347821096">"സംരക്ഷിച്ചു"</string> <string name="wifi_disabled_generic" msgid="4259794910584943386">"പ്രവർത്തനരഹിതമാക്കി"</string> <string name="wifi_disabled_network_failure" msgid="2364951338436007124">"IP കോൺഫിഗറേഷൻ പരാജയം"</string> @@ -374,6 +375,7 @@ <string name="power_discharge_by_only_enhanced" msgid="2175151772952365149">"നിങ്ങളുടെ ഉപയോഗത്തെ അടിസ്ഥാനമാക്കി ഏകദേശം <xliff:g id="TIME">%1$s</xliff:g> വരെ നീണ്ടുനിൽക്കേണ്ടതാണ്"</string> <string name="power_discharge_by" msgid="6453537733650125582">"ഏകദേശം <xliff:g id="TIME">%1$s</xliff:g> വരെ നീണ്ടുനിൽക്കേണ്ടതാണ് (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_discharge_by_only" msgid="107616694963545745">"ഏകദേശം <xliff:g id="TIME">%1$s</xliff:g> വരെ നീണ്ടുനിൽക്കേണ്ടതാണ്"</string> + <string name="power_discharge_by_only_short" msgid="1372817269546888804">"<xliff:g id="TIME">%1$s</xliff:g> വരെ"</string> <string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"<xliff:g id="THRESHOLD">%1$s</xliff:g>-ൽ കുറവ് സമയം ശേഷിക്കുന്നു"</string> <string name="power_remaining_less_than_duration" msgid="5751885147712659423">"<xliff:g id="THRESHOLD">%1$s</xliff:g>-ൽ കുറവ് സമയം ശേഷിക്കുന്നു (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"<xliff:g id="TIME_REMAINING">%1$s</xliff:g>-ൽ കൂടുതൽ സമയം ശേഷിക്കുന്നു (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> @@ -447,4 +449,6 @@ <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"എപ്പോഴും ചോദിക്കുക"</string> <string name="zen_mode_forever" msgid="2704305038191592967">"നിങ്ങൾ ഓഫാക്കുന്നത് വരെ"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"ഇപ്പോൾ"</string> + <string name="updated_gfx_driver_dev_opt_in_app_summary" msgid="5309913444094165199">"വികസനത്തിൽ, അപ്ഡേറ്റ് ചെയ്ത ഗ്രാഫിക്സ് ഡ്രൈവർ ഉപയോഗിക്കാൻ ഓപ്റ്റ് ഇൻ ചെയ്യുക"</string> + <string name="media_transfer_phone_device_name" msgid="1003823744105758574">"ഫോൺ സ്പീക്കർ"</string> </resources> diff --git a/packages/SettingsLib/res/values-mn/strings.xml b/packages/SettingsLib/res/values-mn/strings.xml index 8627e1b3b2b5..4816643f6424 100644 --- a/packages/SettingsLib/res/values-mn/strings.xml +++ b/packages/SettingsLib/res/values-mn/strings.xml @@ -21,6 +21,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="wifi_fail_to_scan" msgid="1265540342578081461">"Сүлжээнүүдийг скан хийх боломжгүй"</string> + <string name="wifi_security_none" msgid="7985461072596594400">"Байхгүй"</string> <string name="wifi_remembered" msgid="4955746899347821096">"Хадгалагдсан"</string> <string name="wifi_disabled_generic" msgid="4259794910584943386">"Идэвхгүйжүүлсэн"</string> <string name="wifi_disabled_network_failure" msgid="2364951338436007124">"IP тохируулга амжилтгүй"</string> @@ -374,6 +375,7 @@ <string name="power_discharge_by_only_enhanced" msgid="2175151772952365149">"Таны хэрэглээнд тулгуурлан ойролцоогоор <xliff:g id="TIME">%1$s</xliff:g> хүртэл барих ёстой"</string> <string name="power_discharge_by" msgid="6453537733650125582">"Ойролцоогоор <xliff:g id="TIME">%1$s</xliff:g> хүртэл барих ёстой (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_discharge_by_only" msgid="107616694963545745">"Ойролцоогоор <xliff:g id="TIME">%1$s</xliff:g> хүртэл барих ёстой"</string> + <string name="power_discharge_by_only_short" msgid="1372817269546888804">"<xliff:g id="TIME">%1$s</xliff:g> хүртэл"</string> <string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"<xliff:g id="THRESHOLD">%1$s</xliff:g>-с бага хугацаа үлдсэн"</string> <string name="power_remaining_less_than_duration" msgid="5751885147712659423">"<xliff:g id="THRESHOLD">%1$s</xliff:g>-с бага хугацаа үлдсэн (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"<xliff:g id="TIME_REMAINING">%1$s</xliff:g>-с их хугацаа үлдсэн (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> @@ -447,4 +449,6 @@ <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Тухай бүрт асуух"</string> <string name="zen_mode_forever" msgid="2704305038191592967">"Таныг унтраах хүртэл"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"Дөнгөж сая"</string> + <string name="updated_gfx_driver_dev_opt_in_app_summary" msgid="5309913444094165199">"Хөгжүүлэлтэд буй шинэчилсэн график драйверийг ашиглахын тулд аппад нэгдэх"</string> + <string name="media_transfer_phone_device_name" msgid="1003823744105758574">"Утасны чанга яригч"</string> </resources> diff --git a/packages/SettingsLib/res/values-mr/strings.xml b/packages/SettingsLib/res/values-mr/strings.xml index cd7f175eabc0..8ebb182ac51c 100644 --- a/packages/SettingsLib/res/values-mr/strings.xml +++ b/packages/SettingsLib/res/values-mr/strings.xml @@ -21,6 +21,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="wifi_fail_to_scan" msgid="1265540342578081461">"नेटवर्कसाठी स्कॅन करू शकत नाही"</string> + <string name="wifi_security_none" msgid="7985461072596594400">"काहीही नाही"</string> <string name="wifi_remembered" msgid="4955746899347821096">"सेव्ह केले"</string> <string name="wifi_disabled_generic" msgid="4259794910584943386">"अक्षम"</string> <string name="wifi_disabled_network_failure" msgid="2364951338436007124">"IP कॉन्फिगरेशन अयशस्वी"</string> @@ -374,6 +375,7 @@ <string name="power_discharge_by_only_enhanced" msgid="2175151772952365149">"तुमच्या वापरावर अवलंबून सुमारे <xliff:g id="TIME">%1$s</xliff:g> पर्यंत टिकावी"</string> <string name="power_discharge_by" msgid="6453537733650125582">"सुमारे <xliff:g id="TIME">%1$s</xliff:g> पर्यंत टिकेल (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_discharge_by_only" msgid="107616694963545745">"सुमारे <xliff:g id="TIME">%1$s</xliff:g> पर्यंत टिकावी"</string> + <string name="power_discharge_by_only_short" msgid="1372817269546888804">"<xliff:g id="TIME">%1$s</xliff:g> पर्यंत"</string> <string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"<xliff:g id="THRESHOLD">%1$s</xliff:g> पेक्षा कमी शिल्लक आहे"</string> <string name="power_remaining_less_than_duration" msgid="5751885147712659423">"<xliff:g id="THRESHOLD">%1$s</xliff:g> पेक्षा कमी वेळ शिल्लक आहे (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"<xliff:g id="TIME_REMAINING">%1$s</xliff:g> पेक्षा जास्त वेळ शिल्लक आहे (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> @@ -447,4 +449,6 @@ <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"प्रत्येक वेळी विचारा"</string> <string name="zen_mode_forever" msgid="2704305038191592967">"तुम्ही बंद करेपर्यंत"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"आत्ताच"</string> + <string name="updated_gfx_driver_dev_opt_in_app_summary" msgid="5309913444094165199">"अपडेट केलेले ग्राफिक ड्राइव्हर डेव्हलमेंटमध्ये वापरण्यासाठी अॅप निवडा"</string> + <string name="media_transfer_phone_device_name" msgid="1003823744105758574">"फोनचा स्पीकर"</string> </resources> diff --git a/packages/SettingsLib/res/values-ms/strings.xml b/packages/SettingsLib/res/values-ms/strings.xml index d0b2e12b16b1..359388259048 100644 --- a/packages/SettingsLib/res/values-ms/strings.xml +++ b/packages/SettingsLib/res/values-ms/strings.xml @@ -21,6 +21,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="wifi_fail_to_scan" msgid="1265540342578081461">"Tidak boleh mengimbas untuk rangkaian"</string> + <string name="wifi_security_none" msgid="7985461072596594400">"Tiada"</string> <string name="wifi_remembered" msgid="4955746899347821096">"Disimpan"</string> <string name="wifi_disabled_generic" msgid="4259794910584943386">"Dinyahdayakan"</string> <string name="wifi_disabled_network_failure" msgid="2364951338436007124">"Kegagalan Konfigurasi IP"</string> @@ -374,6 +375,7 @@ <string name="power_discharge_by_only_enhanced" msgid="2175151772952365149">"Seharusnya boleh digunakan hingga kira-kira <xliff:g id="TIME">%1$s</xliff:g> berdasarkan penggunaan anda"</string> <string name="power_discharge_by" msgid="6453537733650125582">"Seharusnya boleh digunakan hingga kira-kira <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_discharge_by_only" msgid="107616694963545745">"Seharusnya boleh digunakan hingga kira-kira <xliff:g id="TIME">%1$s</xliff:g>"</string> + <string name="power_discharge_by_only_short" msgid="1372817269546888804">"Hingga <xliff:g id="TIME">%1$s</xliff:g>"</string> <string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"Tinggal kurang daripada <xliff:g id="THRESHOLD">%1$s</xliff:g>"</string> <string name="power_remaining_less_than_duration" msgid="5751885147712659423">"Kurang daripada <xliff:g id="THRESHOLD">%1$s</xliff:g> lagi (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"Lebih daripada <xliff:g id="TIME_REMAINING">%1$s</xliff:g> lagi (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> @@ -447,4 +449,6 @@ <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Tanya setiap kali"</string> <string name="zen_mode_forever" msgid="2704305038191592967">"Sehingga anda matikan"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"Sebentar tadi"</string> + <string name="updated_gfx_driver_dev_opt_in_app_summary" msgid="5309913444094165199">"Sertakan apl untuk menggunakan pemacu grafik yang dikemas kini dalam pembangunan"</string> + <string name="media_transfer_phone_device_name" msgid="1003823744105758574">"Pembesar suara telefon"</string> </resources> diff --git a/packages/SettingsLib/res/values-my/strings.xml b/packages/SettingsLib/res/values-my/strings.xml index 5f5957c46471..7ac3742cf7a5 100644 --- a/packages/SettingsLib/res/values-my/strings.xml +++ b/packages/SettingsLib/res/values-my/strings.xml @@ -21,6 +21,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="wifi_fail_to_scan" msgid="1265540342578081461">"ကွန်ယက်များကို စကင်မလုပ်နိုင်ပါ"</string> + <string name="wifi_security_none" msgid="7985461072596594400">"တစ်ခုမျှ မဟုတ်ပါ"</string> <string name="wifi_remembered" msgid="4955746899347821096">"သိမ်းဆည်းပြီး"</string> <string name="wifi_disabled_generic" msgid="4259794910584943386">"ပိတ်ထားသည်"</string> <string name="wifi_disabled_network_failure" msgid="2364951338436007124">"IP ပြုပြင်ခြင်း မအောင်မြင်ပါ"</string> @@ -374,6 +375,7 @@ <string name="power_discharge_by_only_enhanced" msgid="2175151772952365149">"သင်၏ အသုံးပြုမှုအပေါ် အခြေခံ၍ <xliff:g id="TIME">%1$s</xliff:g> ခန့်အထိ သုံးနိုင်သည်"</string> <string name="power_discharge_by" msgid="6453537733650125582">"<xliff:g id="TIME">%1$s</xliff:g> ခန့်အထိ သုံးနိုင်သည် (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_discharge_by_only" msgid="107616694963545745">"<xliff:g id="TIME">%1$s</xliff:g> ခန့်အထိ သုံးနိုင်သည်"</string> + <string name="power_discharge_by_only_short" msgid="1372817269546888804">"<xliff:g id="TIME">%1$s</xliff:g> အထိ"</string> <string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"<xliff:g id="THRESHOLD">%1$s</xliff:g> ခန့်သာ ကျန်တော့သည်"</string> <string name="power_remaining_less_than_duration" msgid="5751885147712659423">"<xliff:g id="THRESHOLD">%1$s</xliff:g> အောက်သာ ကျန်သည် (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"<xliff:g id="TIME_REMAINING">%1$s</xliff:g> ကျော် ကျန်သည် (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> @@ -447,4 +449,6 @@ <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"အမြဲမေးပါ"</string> <string name="zen_mode_forever" msgid="2704305038191592967">"သင်ပိတ်လိုက်သည် အထိ"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"ယခုလေးတင်"</string> + <string name="updated_gfx_driver_dev_opt_in_app_summary" msgid="5309913444094165199">"ဆော့ဖ်ဝဲရေးဆွဲမှုအတွင်း အပ်ဒိတ်လုပ်ထားသော ဂရပ်ဖစ်ဒရိုင်ဗာကို အသုံးပြုရန် အက်ပ်ကို ရွေးချယ်ပါ"</string> + <string name="media_transfer_phone_device_name" msgid="1003823744105758574">"ဖုန်းစပီကာ"</string> </resources> diff --git a/packages/SettingsLib/res/values-nb/strings.xml b/packages/SettingsLib/res/values-nb/strings.xml index 3c240f8ecd6e..ae9c5f2e21a4 100644 --- a/packages/SettingsLib/res/values-nb/strings.xml +++ b/packages/SettingsLib/res/values-nb/strings.xml @@ -21,6 +21,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="wifi_fail_to_scan" msgid="1265540342578081461">"Kan ikke søke etter nettverk"</string> + <string name="wifi_security_none" msgid="7985461072596594400">"Ingen"</string> <string name="wifi_remembered" msgid="4955746899347821096">"Lagret"</string> <string name="wifi_disabled_generic" msgid="4259794910584943386">"Slått av"</string> <string name="wifi_disabled_network_failure" msgid="2364951338436007124">"IP-konfigurasjonsfeil"</string> @@ -374,6 +375,7 @@ <string name="power_discharge_by_only_enhanced" msgid="2175151772952365149">"Skal vare til omtrent <xliff:g id="TIME">%1$s</xliff:g>, basert på bruken din"</string> <string name="power_discharge_by" msgid="6453537733650125582">"Skal vare til omtrent <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_discharge_by_only" msgid="107616694963545745">"Skal vare til omtrent <xliff:g id="TIME">%1$s</xliff:g>"</string> + <string name="power_discharge_by_only_short" msgid="1372817269546888804">"Til <xliff:g id="TIME">%1$s</xliff:g>"</string> <string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"Mindre enn <xliff:g id="THRESHOLD">%1$s</xliff:g> gjenstår"</string> <string name="power_remaining_less_than_duration" msgid="5751885147712659423">"Mindre enn <xliff:g id="THRESHOLD">%1$s</xliff:g> gjenstår (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"Mer enn <xliff:g id="TIME_REMAINING">%1$s</xliff:g> gjenstår (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> @@ -447,4 +449,6 @@ <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Spør hver gang"</string> <string name="zen_mode_forever" msgid="2704305038191592967">"Til du slår av"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"Nå nettopp"</string> + <string name="updated_gfx_driver_dev_opt_in_app_summary" msgid="5309913444094165199">"Velg app for å bruke en oppdatert grafikkdriver som er under utvikling"</string> + <string name="media_transfer_phone_device_name" msgid="1003823744105758574">"Telefonhøyttaler"</string> </resources> diff --git a/packages/SettingsLib/res/values-ne/strings.xml b/packages/SettingsLib/res/values-ne/strings.xml index 1699870e1ecf..0b4510fda69d 100644 --- a/packages/SettingsLib/res/values-ne/strings.xml +++ b/packages/SettingsLib/res/values-ne/strings.xml @@ -21,6 +21,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="wifi_fail_to_scan" msgid="1265540342578081461">"सञ्जालका लागि स्क्यान गर्न सक्दैन"</string> + <string name="wifi_security_none" msgid="7985461072596594400">"कुनै पनि होइन"</string> <string name="wifi_remembered" msgid="4955746899347821096">"सुरक्षित गरियो"</string> <string name="wifi_disabled_generic" msgid="4259794910584943386">"असक्षम पारियो"</string> <string name="wifi_disabled_network_failure" msgid="2364951338436007124">"IP विन्यास असफल"</string> @@ -374,6 +375,7 @@ <string name="power_discharge_by_only_enhanced" msgid="2175151772952365149">"तपाईंको प्रयोगका आधारमा लगभग <xliff:g id="TIME">%1$s</xliff:g> सम्म टिक्नु पर्छ"</string> <string name="power_discharge_by" msgid="6453537733650125582">"ब्याट्री लगभग <xliff:g id="TIME">%1$s</xliff:g> सम्म टिक्नु पर्छ (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_discharge_by_only" msgid="107616694963545745">"लगभग <xliff:g id="TIME">%1$s</xliff:g> सम्म टिक्नु पर्छ"</string> + <string name="power_discharge_by_only_short" msgid="1372817269546888804">"<xliff:g id="TIME">%1$s</xliff:g> सम्म"</string> <string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"<xliff:g id="THRESHOLD">%1$s</xliff:g> भन्दा कम समय बाँकी छ"</string> <string name="power_remaining_less_than_duration" msgid="5751885147712659423">"<xliff:g id="THRESHOLD">%1$s</xliff:g> भन्दा कम समय बाँकी (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"<xliff:g id="TIME_REMAINING">%1$s</xliff:g> भन्दा बढी समय बाँकी (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> @@ -447,4 +449,6 @@ <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"प्रत्येक पटक सोध्नुहोस्"</string> <string name="zen_mode_forever" msgid="2704305038191592967">"तपाईंले निष्क्रिय नपार्दासम्म"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"अहिले भर्खरै"</string> + <string name="updated_gfx_driver_dev_opt_in_app_summary" msgid="5309913444094165199">"विकासको क्रममा अद्यावधिक गरिएको ग्राफिक ड्राइभर प्रयोग गर्न अप्ट इन गर्नुहोस्"</string> + <string name="media_transfer_phone_device_name" msgid="1003823744105758574">"फोनको स्पिकर"</string> </resources> diff --git a/packages/SettingsLib/res/values-nl/strings.xml b/packages/SettingsLib/res/values-nl/strings.xml index 738df94f47fd..f227e1c50505 100644 --- a/packages/SettingsLib/res/values-nl/strings.xml +++ b/packages/SettingsLib/res/values-nl/strings.xml @@ -21,6 +21,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="wifi_fail_to_scan" msgid="1265540342578081461">"Kan niet zoeken naar netwerken"</string> + <string name="wifi_security_none" msgid="7985461072596594400">"Geen"</string> <string name="wifi_remembered" msgid="4955746899347821096">"Opgeslagen"</string> <string name="wifi_disabled_generic" msgid="4259794910584943386">"Uitgeschakeld"</string> <string name="wifi_disabled_network_failure" msgid="2364951338436007124">"IP-configuratie mislukt"</string> @@ -374,6 +375,7 @@ <string name="power_discharge_by_only_enhanced" msgid="2175151772952365149">"Is nog genoeg tot ongeveer <xliff:g id="TIME">%1$s</xliff:g> op basis van je gebruik"</string> <string name="power_discharge_by" msgid="6453537733650125582">"Is nog genoeg tot ongeveer <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_discharge_by_only" msgid="107616694963545745">"Is nog genoeg tot ongeveer <xliff:g id="TIME">%1$s</xliff:g>"</string> + <string name="power_discharge_by_only_short" msgid="1372817269546888804">"Tot <xliff:g id="TIME">%1$s</xliff:g>"</string> <string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"Minder dan <xliff:g id="THRESHOLD">%1$s</xliff:g> resterend"</string> <string name="power_remaining_less_than_duration" msgid="5751885147712659423">"Minder dan <xliff:g id="THRESHOLD">%1$s</xliff:g> resterend (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"Meer dan <xliff:g id="TIME_REMAINING">%1$s</xliff:g> resterend (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> @@ -447,4 +449,6 @@ <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Altijd vragen"</string> <string name="zen_mode_forever" msgid="2704305038191592967">"Totdat je uitschakelt"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"Zojuist"</string> + <string name="updated_gfx_driver_dev_opt_in_app_summary" msgid="5309913444094165199">"Meld een app aan om het geüpdatete grafische stuurprogramma in ontwikkeling te gebruiken"</string> + <string name="media_transfer_phone_device_name" msgid="1003823744105758574">"Telefoonluidspreker"</string> </resources> diff --git a/packages/SettingsLib/res/values-or/strings.xml b/packages/SettingsLib/res/values-or/strings.xml index 2d39cc6df105..bf8493a40648 100644 --- a/packages/SettingsLib/res/values-or/strings.xml +++ b/packages/SettingsLib/res/values-or/strings.xml @@ -21,6 +21,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="wifi_fail_to_scan" msgid="1265540342578081461">"ନେଟ୍ୱର୍କଗୁଡ଼ିକୁ ଖୋଜିପାରୁନାହିଁ"</string> + <string name="wifi_security_none" msgid="7985461072596594400">"କିଛି ନାହିଁ"</string> <string name="wifi_remembered" msgid="4955746899347821096">"ସେଭ୍ ହୋଇଗଲା"</string> <string name="wifi_disabled_generic" msgid="4259794910584943386">"ଅକ୍ଷମ ହୋଇଛି"</string> <string name="wifi_disabled_network_failure" msgid="2364951338436007124">"IP କନଫିଗରେଶନ ବିଫଳ ହୋଇଛି"</string> @@ -374,6 +375,7 @@ <string name="power_discharge_by_only_enhanced" msgid="2175151772952365149">"ଆପଣଙ୍କର ବ୍ୟବହାରକୁ ଆଧାର କରି ବ୍ୟାଟେରୀ <xliff:g id="TIME">%1$s</xliff:g> ପର୍ଯ୍ୟନ୍ତ ଚାଲିବ"</string> <string name="power_discharge_by" msgid="6453537733650125582">"ବ୍ୟାଟେରୀ ପାଖାପାଖି <xliff:g id="TIME">%1$s</xliff:g> ଚାଲିବ (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_discharge_by_only" msgid="107616694963545745">"ବ୍ୟାଟେରୀ <xliff:g id="TIME">%1$s</xliff:g> ପର୍ଯ୍ୟନ୍ତ ଚାଲିବ"</string> + <string name="power_discharge_by_only_short" msgid="1372817269546888804">"<xliff:g id="TIME">%1$s</xliff:g> ପର୍ଯ୍ୟନ୍ତ"</string> <string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"<xliff:g id="THRESHOLD">%1$s</xliff:g>ରୁ କମ୍ ସମୟ ବଳକା ଅଛି"</string> <string name="power_remaining_less_than_duration" msgid="5751885147712659423">"<xliff:g id="THRESHOLD">%1$s</xliff:g> ରୁ କମ୍ ସମୟ ବଳକା ଅଛି (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"<xliff:g id="TIME_REMAINING">%1$s</xliff:g>ରୁ ଅଧିକ ସମୟ ବଳକା ଅଛି(<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> @@ -447,4 +449,6 @@ <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"ପ୍ରତ୍ୟେକ ଥର ପଚାରନ୍ତୁ"</string> <string name="zen_mode_forever" msgid="2704305038191592967">"ଆପଣ ବନ୍ଦ ନକରିବା ପର୍ଯ୍ୟନ୍ତ DND ଅନ୍ ରହିବ"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"ଏହିକ୍ଷଣି"</string> + <string name="updated_gfx_driver_dev_opt_in_app_summary" msgid="5309913444094165199">"ଡେଭଲପ୍ମେଣ୍ଟରେ ଅପ୍ଡେଟ୍ ଗ୍ରାଫିକ୍ସ ଡ୍ରାଇଭର୍ ବ୍ୟବହାର କରିବାକୁ ଆପ୍ଟ ଇନ୍ ଅପ୍ଲିକେସନ୍"</string> + <string name="media_transfer_phone_device_name" msgid="1003823744105758574">"ଫୋନ୍ ସ୍ପିକର୍"</string> </resources> diff --git a/packages/SettingsLib/res/values-pa/strings.xml b/packages/SettingsLib/res/values-pa/strings.xml index 61f04470a03e..f948a7e39aa2 100644 --- a/packages/SettingsLib/res/values-pa/strings.xml +++ b/packages/SettingsLib/res/values-pa/strings.xml @@ -21,6 +21,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="wifi_fail_to_scan" msgid="1265540342578081461">"ਨੈਟਵਰਕਾਂ ਲਈ ਸਕੈਨ ਨਹੀਂ ਕਰ ਸਕਦਾ"</string> + <string name="wifi_security_none" msgid="7985461072596594400">"ਕੋਈ ਨਹੀਂ"</string> <string name="wifi_remembered" msgid="4955746899347821096">"ਰੱਖਿਅਤ ਕੀਤਾ"</string> <string name="wifi_disabled_generic" msgid="4259794910584943386">"ਅਯੋਗ ਬਣਾਇਆ"</string> <string name="wifi_disabled_network_failure" msgid="2364951338436007124">"IP ਕੌਂਫਿਗਰੇਸ਼ਨ ਅਸਫਲਤਾ"</string> @@ -374,6 +375,7 @@ <string name="power_discharge_by_only_enhanced" msgid="2175151772952365149">"ਤੁਹਾਡੀ ਵਰਤੋਂ ਦੇ ਆਧਾਰ \'ਤੇ ਲਗਭਗ <xliff:g id="TIME">%1$s</xliff:g> ਚੱਲੇਗਾ"</string> <string name="power_discharge_by" msgid="6453537733650125582">"ਲਗਭਗ <xliff:g id="TIME">%1$s</xliff:g> ਚੱਲੇਗਾ (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_discharge_by_only" msgid="107616694963545745">"ਲਗਭਗ <xliff:g id="TIME">%1$s</xliff:g> ਚੱਲੇਗਾ"</string> + <string name="power_discharge_by_only_short" msgid="1372817269546888804">"<xliff:g id="TIME">%1$s</xliff:g> ਤੱਕ"</string> <string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"<xliff:g id="THRESHOLD">%1$s</xliff:g> ਤੋਂ ਘੱਟ ਸਮਾਂ ਬਾਕੀ"</string> <string name="power_remaining_less_than_duration" msgid="5751885147712659423">"<xliff:g id="THRESHOLD">%1$s</xliff:g> ਤੋਂ ਘੱਟ ਸਮਾਂ ਬਾਕੀ (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"<xliff:g id="TIME_REMAINING">%1$s</xliff:g> ਤੋਂ ਵੱਧ ਸਮਾਂ ਬਾਕੀ (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> @@ -447,4 +449,6 @@ <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"ਹਰ ਵਾਰ ਪੁੱਛੋ"</string> <string name="zen_mode_forever" msgid="2704305038191592967">"ਜਦੋਂ ਤੱਕ ਤੁਸੀਂ ਬੰਦ ਨਹੀਂ ਕਰਦੇ"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"ਹੁਣੇ ਹੀ"</string> + <string name="updated_gfx_driver_dev_opt_in_app_summary" msgid="5309913444094165199">"ਅੱਪਡੇਟ ਕੀਤੇ ਵਿਕਾਸ-ਅਧੀਨ ਗ੍ਰਾਫਿਕਸ ਡਰਾਈਵਰ ਦੀ ਵਰਤੋਂ ਕਰਨ ਲਈ ਐਪ ਦੀ ਚੋਣ ਕਰੋ"</string> + <string name="media_transfer_phone_device_name" msgid="1003823744105758574">"ਫ਼ੋਨ ਦਾ ਸਪੀਕਰ"</string> </resources> diff --git a/packages/SettingsLib/res/values-pl/strings.xml b/packages/SettingsLib/res/values-pl/strings.xml index 519f82cf5275..c75a8944c230 100644 --- a/packages/SettingsLib/res/values-pl/strings.xml +++ b/packages/SettingsLib/res/values-pl/strings.xml @@ -21,6 +21,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="wifi_fail_to_scan" msgid="1265540342578081461">"Nie można wyszukać sieci."</string> + <string name="wifi_security_none" msgid="7985461072596594400">"Brak"</string> <string name="wifi_remembered" msgid="4955746899347821096">"Zapisana"</string> <string name="wifi_disabled_generic" msgid="4259794910584943386">"Wyłączona"</string> <string name="wifi_disabled_network_failure" msgid="2364951338436007124">"Błąd konfiguracji IP"</string> @@ -374,6 +375,7 @@ <string name="power_discharge_by_only_enhanced" msgid="2175151772952365149">"Na podstawie Twojego sposobu korzystania jeszcze około <xliff:g id="TIME">%1$s</xliff:g>"</string> <string name="power_discharge_by" msgid="6453537733650125582">"Powinno wystarczyć do <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_discharge_by_only" msgid="107616694963545745">"Powinno wystarczyć do <xliff:g id="TIME">%1$s</xliff:g>"</string> + <string name="power_discharge_by_only_short" msgid="1372817269546888804">"Do <xliff:g id="TIME">%1$s</xliff:g>"</string> <string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"Pozostało mniej niż <xliff:g id="THRESHOLD">%1$s</xliff:g>"</string> <string name="power_remaining_less_than_duration" msgid="5751885147712659423">"Pozostało mniej niż <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"Pozostało ponad: <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> @@ -449,4 +451,6 @@ <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Zawsze pytaj"</string> <string name="zen_mode_forever" msgid="2704305038191592967">"Dopóki nie wyłączysz"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"Przed chwilą"</string> + <string name="updated_gfx_driver_dev_opt_in_app_summary" msgid="5309913444094165199">"Wybierz aplikację, która ma używać opracowywanego sterownika grafiki"</string> + <string name="media_transfer_phone_device_name" msgid="1003823744105758574">"Głośnik telefonu"</string> </resources> diff --git a/packages/SettingsLib/res/values-pt-rBR/strings.xml b/packages/SettingsLib/res/values-pt-rBR/strings.xml index 16844a2ec063..c273f59cb754 100644 --- a/packages/SettingsLib/res/values-pt-rBR/strings.xml +++ b/packages/SettingsLib/res/values-pt-rBR/strings.xml @@ -21,6 +21,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="wifi_fail_to_scan" msgid="1265540342578081461">"Não é possível verificar a existência de redes"</string> + <string name="wifi_security_none" msgid="7985461072596594400">"Nenhuma"</string> <string name="wifi_remembered" msgid="4955746899347821096">"Salva"</string> <string name="wifi_disabled_generic" msgid="4259794910584943386">"Desativado"</string> <string name="wifi_disabled_network_failure" msgid="2364951338436007124">"Falha de configuração de IP"</string> @@ -374,6 +375,7 @@ <string name="power_discharge_by_only_enhanced" msgid="2175151772952365149">"Deve durar até cerca de <xliff:g id="TIME">%1$s</xliff:g> com base no seu uso"</string> <string name="power_discharge_by" msgid="6453537733650125582">"Deve durar até cerca de <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_discharge_by_only" msgid="107616694963545745">"Deve durar até cerca de <xliff:g id="TIME">%1$s</xliff:g>"</string> + <string name="power_discharge_by_only_short" msgid="1372817269546888804">"Até <xliff:g id="TIME">%1$s</xliff:g>"</string> <string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"Menos de <xliff:g id="THRESHOLD">%1$s</xliff:g> restante(s)"</string> <string name="power_remaining_less_than_duration" msgid="5751885147712659423">"Menos de <xliff:g id="THRESHOLD">%1$s</xliff:g> restante(s) (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"Mais de <xliff:g id="TIME_REMAINING">%1$s</xliff:g> restante(s) (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> @@ -447,4 +449,6 @@ <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Perguntar sempre"</string> <string name="zen_mode_forever" msgid="2704305038191592967">"Até você desativar"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"Agora"</string> + <string name="updated_gfx_driver_dev_opt_in_app_summary" msgid="5309913444094165199">"Ative o app para usar o driver gráfico atualizado no desenvolvimento"</string> + <string name="media_transfer_phone_device_name" msgid="1003823744105758574">"Alto-falante do smartphone"</string> </resources> diff --git a/packages/SettingsLib/res/values-pt-rPT/strings.xml b/packages/SettingsLib/res/values-pt-rPT/strings.xml index f01ddfa54d80..26e47293bd8f 100644 --- a/packages/SettingsLib/res/values-pt-rPT/strings.xml +++ b/packages/SettingsLib/res/values-pt-rPT/strings.xml @@ -21,6 +21,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="wifi_fail_to_scan" msgid="1265540342578081461">"Não é possível verificar redes"</string> + <string name="wifi_security_none" msgid="7985461072596594400">"Nenhuma"</string> <string name="wifi_remembered" msgid="4955746899347821096">"Guardada"</string> <string name="wifi_disabled_generic" msgid="4259794910584943386">"Desativado"</string> <string name="wifi_disabled_network_failure" msgid="2364951338436007124">"Falha de configuração de IP"</string> @@ -374,6 +375,7 @@ <string name="power_discharge_by_only_enhanced" msgid="2175151772952365149">"Deve durar até cerca da(s) <xliff:g id="TIME">%1$s</xliff:g> com base na sua utilização."</string> <string name="power_discharge_by" msgid="6453537733650125582">"Deve durar até cerca da(s) <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)."</string> <string name="power_discharge_by_only" msgid="107616694963545745">"Deve durar até cerca da(s) <xliff:g id="TIME">%1$s</xliff:g>."</string> + <string name="power_discharge_by_only_short" msgid="1372817269546888804">"Até à(s) <xliff:g id="TIME">%1$s</xliff:g>"</string> <string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"Resta(m) menos de <xliff:g id="THRESHOLD">%1$s</xliff:g>."</string> <string name="power_remaining_less_than_duration" msgid="5751885147712659423">"Resta(m) menos de <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)."</string> <string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"Resta(m) mais de <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)."</string> @@ -447,4 +449,6 @@ <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Perguntar sempre"</string> <string name="zen_mode_forever" msgid="2704305038191592967">"Até ser desativado"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"Agora mesmo"</string> + <string name="updated_gfx_driver_dev_opt_in_app_summary" msgid="5309913444094165199">"Optar pela aplicação para utilizar a placa gráfica atualizada em desenvolvimento"</string> + <string name="media_transfer_phone_device_name" msgid="1003823744105758574">"Altifalante do telemóvel"</string> </resources> diff --git a/packages/SettingsLib/res/values-pt/strings.xml b/packages/SettingsLib/res/values-pt/strings.xml index 16844a2ec063..c273f59cb754 100644 --- a/packages/SettingsLib/res/values-pt/strings.xml +++ b/packages/SettingsLib/res/values-pt/strings.xml @@ -21,6 +21,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="wifi_fail_to_scan" msgid="1265540342578081461">"Não é possível verificar a existência de redes"</string> + <string name="wifi_security_none" msgid="7985461072596594400">"Nenhuma"</string> <string name="wifi_remembered" msgid="4955746899347821096">"Salva"</string> <string name="wifi_disabled_generic" msgid="4259794910584943386">"Desativado"</string> <string name="wifi_disabled_network_failure" msgid="2364951338436007124">"Falha de configuração de IP"</string> @@ -374,6 +375,7 @@ <string name="power_discharge_by_only_enhanced" msgid="2175151772952365149">"Deve durar até cerca de <xliff:g id="TIME">%1$s</xliff:g> com base no seu uso"</string> <string name="power_discharge_by" msgid="6453537733650125582">"Deve durar até cerca de <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_discharge_by_only" msgid="107616694963545745">"Deve durar até cerca de <xliff:g id="TIME">%1$s</xliff:g>"</string> + <string name="power_discharge_by_only_short" msgid="1372817269546888804">"Até <xliff:g id="TIME">%1$s</xliff:g>"</string> <string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"Menos de <xliff:g id="THRESHOLD">%1$s</xliff:g> restante(s)"</string> <string name="power_remaining_less_than_duration" msgid="5751885147712659423">"Menos de <xliff:g id="THRESHOLD">%1$s</xliff:g> restante(s) (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"Mais de <xliff:g id="TIME_REMAINING">%1$s</xliff:g> restante(s) (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> @@ -447,4 +449,6 @@ <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Perguntar sempre"</string> <string name="zen_mode_forever" msgid="2704305038191592967">"Até você desativar"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"Agora"</string> + <string name="updated_gfx_driver_dev_opt_in_app_summary" msgid="5309913444094165199">"Ative o app para usar o driver gráfico atualizado no desenvolvimento"</string> + <string name="media_transfer_phone_device_name" msgid="1003823744105758574">"Alto-falante do smartphone"</string> </resources> diff --git a/packages/SettingsLib/res/values-ro/strings.xml b/packages/SettingsLib/res/values-ro/strings.xml index 8a7b4401217c..94f4842644bc 100644 --- a/packages/SettingsLib/res/values-ro/strings.xml +++ b/packages/SettingsLib/res/values-ro/strings.xml @@ -21,6 +21,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="wifi_fail_to_scan" msgid="1265540342578081461">"Nu se poate scana pentru rețele"</string> + <string name="wifi_security_none" msgid="7985461072596594400">"Niciuna"</string> <string name="wifi_remembered" msgid="4955746899347821096">"Salvată"</string> <string name="wifi_disabled_generic" msgid="4259794910584943386">"Dezactivată"</string> <string name="wifi_disabled_network_failure" msgid="2364951338436007124">"Eroare de configurație IP"</string> @@ -374,6 +375,7 @@ <string name="power_discharge_by_only_enhanced" msgid="2175151772952365149">"În baza utilizării, ar trebui să reziste până la aproximativ <xliff:g id="TIME">%1$s</xliff:g>"</string> <string name="power_discharge_by" msgid="6453537733650125582">"Ar trebui să reziste până la <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_discharge_by_only" msgid="107616694963545745">"Ar trebui să reziste până la <xliff:g id="TIME">%1$s</xliff:g>"</string> + <string name="power_discharge_by_only_short" msgid="1372817269546888804">"Până la <xliff:g id="TIME">%1$s</xliff:g>"</string> <string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"a mai rămas mai puțin de <xliff:g id="THRESHOLD">%1$s</xliff:g>"</string> <string name="power_remaining_less_than_duration" msgid="5751885147712659423">"A mai rămas mai puțin de <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"A mai rămas mai mult de <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> @@ -448,4 +450,6 @@ <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Întreabă de fiecare dată"</string> <string name="zen_mode_forever" msgid="2704305038191592967">"Până când dezactivați"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"Chiar acum"</string> + <string name="updated_gfx_driver_dev_opt_in_app_summary" msgid="5309913444094165199">"Aplicația pentru înscriere pentru a folosi driverul actualizat al plăcii grafice este în dezvoltare"</string> + <string name="media_transfer_phone_device_name" msgid="1003823744105758574">"Difuzorul telefonului"</string> </resources> diff --git a/packages/SettingsLib/res/values-ru/strings.xml b/packages/SettingsLib/res/values-ru/strings.xml index 31274d1c378a..1c331d82164a 100644 --- a/packages/SettingsLib/res/values-ru/strings.xml +++ b/packages/SettingsLib/res/values-ru/strings.xml @@ -21,6 +21,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="wifi_fail_to_scan" msgid="1265540342578081461">"Не удалось начать поиск сетей."</string> + <string name="wifi_security_none" msgid="7985461072596594400">"Нет"</string> <string name="wifi_remembered" msgid="4955746899347821096">"Сохранено"</string> <string name="wifi_disabled_generic" msgid="4259794910584943386">"Отключено"</string> <string name="wifi_disabled_network_failure" msgid="2364951338436007124">"Ошибка IP-конфигурации"</string> @@ -374,6 +375,7 @@ <string name="power_discharge_by_only_enhanced" msgid="2175151772952365149">"При текущем уровне использования заряда хватит примерно до <xliff:g id="TIME">%1$s</xliff:g>"</string> <string name="power_discharge_by" msgid="6453537733650125582">"Заряда (<xliff:g id="LEVEL">%2$s</xliff:g>) хватит примерно до <xliff:g id="TIME">%1$s</xliff:g>"</string> <string name="power_discharge_by_only" msgid="107616694963545745">"Заряда хватит примерно до <xliff:g id="TIME">%1$s</xliff:g>"</string> + <string name="power_discharge_by_only_short" msgid="1372817269546888804">"До <xliff:g id="TIME">%1$s</xliff:g>"</string> <string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"Осталось менее <xliff:g id="THRESHOLD">%1$s</xliff:g>"</string> <string name="power_remaining_less_than_duration" msgid="5751885147712659423">"Уровень заряда батареи: <xliff:g id="LEVEL">%2$s</xliff:g> (хватит менее чем на <xliff:g id="THRESHOLD">%1$s</xliff:g>)"</string> <string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"Уровень заряда батареи: <xliff:g id="LEVEL">%2$s</xliff:g> (хватит более чем на <xliff:g id="TIME_REMAINING">%1$s</xliff:g>)"</string> @@ -449,4 +451,6 @@ <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Всегда спрашивать"</string> <string name="zen_mode_forever" msgid="2704305038191592967">"Пока вы не отключите"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"Только что"</string> + <string name="updated_gfx_driver_dev_opt_in_app_summary" msgid="5309913444094165199">"Приложение будет использовать обновленный драйвер графической системы (на стадии разработки)"</string> + <string name="media_transfer_phone_device_name" msgid="1003823744105758574">"Встроенный динамик"</string> </resources> diff --git a/packages/SettingsLib/res/values-si/strings.xml b/packages/SettingsLib/res/values-si/strings.xml index b22e0689ef3a..608ff7f67542 100644 --- a/packages/SettingsLib/res/values-si/strings.xml +++ b/packages/SettingsLib/res/values-si/strings.xml @@ -21,6 +21,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="wifi_fail_to_scan" msgid="1265540342578081461">"ජාල සඳහා පරිලෝකනය කළ නොහැක"</string> + <string name="wifi_security_none" msgid="7985461072596594400">"කිසිවක් නැත"</string> <string name="wifi_remembered" msgid="4955746899347821096">"සුරකින ලදි"</string> <string name="wifi_disabled_generic" msgid="4259794910584943386">"අබලයි"</string> <string name="wifi_disabled_network_failure" msgid="2364951338436007124">"IP වින්යාස කිරීම අසාර්ථකයි"</string> @@ -374,6 +375,7 @@ <string name="power_discharge_by_only_enhanced" msgid="2175151772952365149">"ඔබේ භාවිතය මත පදනම්ව <xliff:g id="TIME">%1$s</xliff:g> පමන වන තෙක් තිබිය යුතුය"</string> <string name="power_discharge_by" msgid="6453537733650125582">"<xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>) පමණ වන තෙක් තිබිය යුතුය"</string> <string name="power_discharge_by_only" msgid="107616694963545745">"<xliff:g id="TIME">%1$s</xliff:g> පමණ වන තෙක් තිබිය යුතුය"</string> + <string name="power_discharge_by_only_short" msgid="1372817269546888804">"<xliff:g id="TIME">%1$s</xliff:g> දක්වා"</string> <string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"<xliff:g id="THRESHOLD">%1$s</xliff:g>ට වඩා අඩුවෙන් ඉතිරිව ඇත"</string> <string name="power_remaining_less_than_duration" msgid="5751885147712659423">"<xliff:g id="THRESHOLD">%1$s</xliff:g>ට වඩා අඩුවෙන් ඉතිරිය (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"<xliff:g id="TIME_REMAINING">%1$s</xliff:g>ට වඩා වැඩියෙන් ඉතිරිය (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> @@ -447,4 +449,6 @@ <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"සෑම විටම ඉල්ලන්න"</string> <string name="zen_mode_forever" msgid="2704305038191592967">"ඔබ ක්රියාවිරහිත කරන තුරු"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"මේ දැන්"</string> + <string name="updated_gfx_driver_dev_opt_in_app_summary" msgid="5309913444094165199">"වැඩිදියුණු වෙමින් ඇති යාවත්කාලීන කළ චිත්රක ධාවකය භාවිත කිරීමට යෙදුමට ඇතුළු වන්න"</string> + <string name="media_transfer_phone_device_name" msgid="1003823744105758574">"දුරකථන ස්පීකරය"</string> </resources> diff --git a/packages/SettingsLib/res/values-sk/strings.xml b/packages/SettingsLib/res/values-sk/strings.xml index 43923b87d6a7..2f76ef97903a 100644 --- a/packages/SettingsLib/res/values-sk/strings.xml +++ b/packages/SettingsLib/res/values-sk/strings.xml @@ -21,6 +21,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="wifi_fail_to_scan" msgid="1265540342578081461">"Siete sa nedajú vyhľadávať"</string> + <string name="wifi_security_none" msgid="7985461072596594400">"Žiadne"</string> <string name="wifi_remembered" msgid="4955746899347821096">"Uložené"</string> <string name="wifi_disabled_generic" msgid="4259794910584943386">"Vypnuté"</string> <string name="wifi_disabled_network_failure" msgid="2364951338436007124">"Zlyhanie konfigurácie adresy IP"</string> @@ -374,6 +375,7 @@ <string name="power_discharge_by_only_enhanced" msgid="2175151772952365149">"Mal by vydržať približne do <xliff:g id="TIME">%1$s</xliff:g> v závislosti od využitia"</string> <string name="power_discharge_by" msgid="6453537733650125582">"Mal by vydržať približne <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_discharge_by_only" msgid="107616694963545745">"Mal by vydržať približne do <xliff:g id="TIME">%1$s</xliff:g>"</string> + <string name="power_discharge_by_only_short" msgid="1372817269546888804">"Do <xliff:g id="TIME">%1$s</xliff:g>"</string> <string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"Zostáva menej ako <xliff:g id="THRESHOLD">%1$s</xliff:g>"</string> <string name="power_remaining_less_than_duration" msgid="5751885147712659423">"Zostáva menej ako <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"Zostáva viac ako <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> @@ -449,4 +451,6 @@ <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Vždy sa opýtať"</string> <string name="zen_mode_forever" msgid="2704305038191592967">"Dokiaľ túto funkciu nevypnete"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"Teraz"</string> + <string name="updated_gfx_driver_dev_opt_in_app_summary" msgid="5309913444094165199">"Prihlásiť aplikáciu, ktorá má používať aktualizovaný ovládač grafickej karty vo vývoji"</string> + <string name="media_transfer_phone_device_name" msgid="1003823744105758574">"Reproduktor telefónu"</string> </resources> diff --git a/packages/SettingsLib/res/values-sl/strings.xml b/packages/SettingsLib/res/values-sl/strings.xml index 6d392fe2e57e..64124cb87876 100644 --- a/packages/SettingsLib/res/values-sl/strings.xml +++ b/packages/SettingsLib/res/values-sl/strings.xml @@ -21,6 +21,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="wifi_fail_to_scan" msgid="1265540342578081461">"Ni mogoče iskati omrežij"</string> + <string name="wifi_security_none" msgid="7985461072596594400">"Brez"</string> <string name="wifi_remembered" msgid="4955746899347821096">"Shranjeno"</string> <string name="wifi_disabled_generic" msgid="4259794910584943386">"Onemogočeno"</string> <string name="wifi_disabled_network_failure" msgid="2364951338436007124">"Konfiguracija IP-ja ni uspela"</string> @@ -374,6 +375,7 @@ <string name="power_discharge_by_only_enhanced" msgid="2175151772952365149">"Naprava bi morala glede na način uporabe delovati do približno <xliff:g id="TIME">%1$s</xliff:g>"</string> <string name="power_discharge_by" msgid="6453537733650125582">"Naprava bi morala delovati do približno <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_discharge_by_only" msgid="107616694963545745">"Naprava bi morala delovati do približno <xliff:g id="TIME">%1$s</xliff:g>"</string> + <string name="power_discharge_by_only_short" msgid="1372817269546888804">"Do <xliff:g id="TIME">%1$s</xliff:g>"</string> <string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"Preostalo manj kot <xliff:g id="THRESHOLD">%1$s</xliff:g>"</string> <string name="power_remaining_less_than_duration" msgid="5751885147712659423">"Preostanek: manj kot <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"Preostali čas delovanja: manj kot <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> @@ -449,4 +451,6 @@ <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Vedno vprašaj"</string> <string name="zen_mode_forever" msgid="2704305038191592967">"Dokler ne izklopite"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"Pravkar"</string> + <string name="updated_gfx_driver_dev_opt_in_app_summary" msgid="5309913444094165199">"Omogočena aplikacija za uporabo posodobljenega grafičnega gonilnika pri razvoju"</string> + <string name="media_transfer_phone_device_name" msgid="1003823744105758574">"Zvočnik telefona"</string> </resources> diff --git a/packages/SettingsLib/res/values-sq/strings.xml b/packages/SettingsLib/res/values-sq/strings.xml index e05a01953904..25d575efedb5 100644 --- a/packages/SettingsLib/res/values-sq/strings.xml +++ b/packages/SettingsLib/res/values-sq/strings.xml @@ -21,6 +21,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="wifi_fail_to_scan" msgid="1265540342578081461">"Nuk mund të skanojë për rrjete"</string> + <string name="wifi_security_none" msgid="7985461072596594400">"Asnjë"</string> <string name="wifi_remembered" msgid="4955746899347821096">"U ruajt"</string> <string name="wifi_disabled_generic" msgid="4259794910584943386">"Të çaktivizuara"</string> <string name="wifi_disabled_network_failure" msgid="2364951338436007124">"Dështim në konfigurimin e IP-së"</string> @@ -374,6 +375,7 @@ <string name="power_discharge_by_only_enhanced" msgid="2175151772952365149">"Duhet të zgjasë deri në rreth <xliff:g id="TIME">%1$s</xliff:g> bazuar në përdorimin tënd"</string> <string name="power_discharge_by" msgid="6453537733650125582">"Duhet të zgjasë deri në rreth <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_discharge_by_only" msgid="107616694963545745">"Duhet të zgjasë deri në rreth <xliff:g id="TIME">%1$s</xliff:g>"</string> + <string name="power_discharge_by_only_short" msgid="1372817269546888804">"Deri në <xliff:g id="TIME">%1$s</xliff:g>"</string> <string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"Më pak se <xliff:g id="THRESHOLD">%1$s</xliff:g> të mbetura"</string> <string name="power_remaining_less_than_duration" msgid="5751885147712659423">"Mbeten më pak se <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"Mbeten më shumë se <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> @@ -447,4 +449,6 @@ <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Pyet çdo herë"</string> <string name="zen_mode_forever" msgid="2704305038191592967">"Deri sa ta çaktivizosh"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"Pikërisht tani"</string> + <string name="updated_gfx_driver_dev_opt_in_app_summary" msgid="5309913444094165199">"Prano aplikacionin për të përdorur drejtuesin e përditësuar të grafikës që është në zhvillim"</string> + <string name="media_transfer_phone_device_name" msgid="1003823744105758574">"Altoparlanti i telefonit"</string> </resources> diff --git a/packages/SettingsLib/res/values-sr/strings.xml b/packages/SettingsLib/res/values-sr/strings.xml index 371b909d987b..b58b47caa8ae 100644 --- a/packages/SettingsLib/res/values-sr/strings.xml +++ b/packages/SettingsLib/res/values-sr/strings.xml @@ -21,6 +21,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="wifi_fail_to_scan" msgid="1265540342578081461">"Није могуће скенирати мреже"</string> + <string name="wifi_security_none" msgid="7985461072596594400">"Нема"</string> <string name="wifi_remembered" msgid="4955746899347821096">"Сачувано"</string> <string name="wifi_disabled_generic" msgid="4259794910584943386">"Онемогућено"</string> <string name="wifi_disabled_network_failure" msgid="2364951338436007124">"IP конфигурација је отказала"</string> @@ -374,6 +375,7 @@ <string name="power_discharge_by_only_enhanced" msgid="2175151772952365149">"Трајаће приближно до <xliff:g id="TIME">%1$s</xliff:g> на основу коришћења"</string> <string name="power_discharge_by" msgid="6453537733650125582">"Трајаће приближно до <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_discharge_by_only" msgid="107616694963545745">"Трајаће приближно до <xliff:g id="TIME">%1$s</xliff:g>"</string> + <string name="power_discharge_by_only_short" msgid="1372817269546888804">"До <xliff:g id="TIME">%1$s</xliff:g>"</string> <string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"Преостало је мање од <xliff:g id="THRESHOLD">%1$s</xliff:g>"</string> <string name="power_remaining_less_than_duration" msgid="5751885147712659423">"Преостало је мање од <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"Преостало је више од <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> @@ -448,4 +450,6 @@ <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Увек питај"</string> <string name="zen_mode_forever" msgid="2704305038191592967">"Док не искључите"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"Управо"</string> + <string name="updated_gfx_driver_dev_opt_in_app_summary" msgid="5309913444094165199">"Омогући апликацију за коришћење управљачког програма графичке катице у развоју"</string> + <string name="media_transfer_phone_device_name" msgid="1003823744105758574">"Звучник телефона"</string> </resources> diff --git a/packages/SettingsLib/res/values-sv/strings.xml b/packages/SettingsLib/res/values-sv/strings.xml index e6872bb35d8a..7198b84ed035 100644 --- a/packages/SettingsLib/res/values-sv/strings.xml +++ b/packages/SettingsLib/res/values-sv/strings.xml @@ -21,6 +21,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="wifi_fail_to_scan" msgid="1265540342578081461">"Det går inte att söka efter nätverk"</string> + <string name="wifi_security_none" msgid="7985461072596594400">"Ingen"</string> <string name="wifi_remembered" msgid="4955746899347821096">"Sparat"</string> <string name="wifi_disabled_generic" msgid="4259794910584943386">"Inaktiverad"</string> <string name="wifi_disabled_network_failure" msgid="2364951338436007124">"IP-konfigurationsfel"</string> @@ -374,6 +375,7 @@ <string name="power_discharge_by_only_enhanced" msgid="2175151772952365149">"Bör räcka ungefär till klockan <xliff:g id="TIME">%1$s</xliff:g> utifrån din användning"</string> <string name="power_discharge_by" msgid="6453537733650125582">"Bör räcka ungefär till klockan <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_discharge_by_only" msgid="107616694963545745">"Bör räcka ungefär till klockan <xliff:g id="TIME">%1$s</xliff:g>"</string> + <string name="power_discharge_by_only_short" msgid="1372817269546888804">"Till kl. <xliff:g id="TIME">%1$s</xliff:g>"</string> <string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"Mindre än <xliff:g id="THRESHOLD">%1$s</xliff:g> återstår"</string> <string name="power_remaining_less_than_duration" msgid="5751885147712659423">"Mindre än <xliff:g id="THRESHOLD">%1$s</xliff:g> återstår (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"Mer än <xliff:g id="TIME_REMAINING">%1$s</xliff:g> återstår (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> @@ -447,4 +449,6 @@ <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Fråga varje gång"</string> <string name="zen_mode_forever" msgid="2704305038191592967">"Tills du inaktiverar funktionen"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"Nyss"</string> + <string name="updated_gfx_driver_dev_opt_in_app_summary" msgid="5309913444094165199">"Välj om appen ska använda den uppdaterade grafikdrivrutinen under utveckling"</string> + <string name="media_transfer_phone_device_name" msgid="1003823744105758574">"Mobilens högtalare"</string> </resources> diff --git a/packages/SettingsLib/res/values-sw/strings.xml b/packages/SettingsLib/res/values-sw/strings.xml index 23efb916c4ca..657b54f02066 100644 --- a/packages/SettingsLib/res/values-sw/strings.xml +++ b/packages/SettingsLib/res/values-sw/strings.xml @@ -21,6 +21,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="wifi_fail_to_scan" msgid="1265540342578081461">"Haiwezi kutambaza mitandao"</string> + <string name="wifi_security_none" msgid="7985461072596594400">"Hamna"</string> <string name="wifi_remembered" msgid="4955746899347821096">"Imehifadhiwa"</string> <string name="wifi_disabled_generic" msgid="4259794910584943386">"Imezimwa"</string> <string name="wifi_disabled_network_failure" msgid="2364951338436007124">"Haikuweza Kusanidi IP"</string> @@ -374,6 +375,7 @@ <string name="power_discharge_by_only_enhanced" msgid="2175151772952365149">"Inapaswa kudumu hadi <xliff:g id="TIME">%1$s</xliff:g> kulingana na jinsi unavyoitumia"</string> <string name="power_discharge_by" msgid="6453537733650125582">"Inapaswa kudumu kwa takribani <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_discharge_by_only" msgid="107616694963545745">"Inapaswa kudumu hadi <xliff:g id="TIME">%1$s</xliff:g>"</string> + <string name="power_discharge_by_only_short" msgid="1372817269546888804">"Hadi <xliff:g id="TIME">%1$s</xliff:g>"</string> <string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"Zimesalia chini ya <xliff:g id="THRESHOLD">%1$s</xliff:g>"</string> <string name="power_remaining_less_than_duration" msgid="5751885147712659423">"Zimesalia chini ya <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"Zimesalia zaidi ya <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> @@ -447,4 +449,6 @@ <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Uliza kila wakati"</string> <string name="zen_mode_forever" msgid="2704305038191592967">"Hadi utakapoizima"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"Sasa hivi"</string> + <string name="updated_gfx_driver_dev_opt_in_app_summary" msgid="5309913444094165199">"Chagua programu itakayotumia kiendeshaji cha michoro kilichosasishwa katika hatua ya kusanidi"</string> + <string name="media_transfer_phone_device_name" msgid="1003823744105758574">"Spika ya simu"</string> </resources> diff --git a/packages/SettingsLib/res/values-ta/strings.xml b/packages/SettingsLib/res/values-ta/strings.xml index 53ba7386c9ae..59b42d834c34 100644 --- a/packages/SettingsLib/res/values-ta/strings.xml +++ b/packages/SettingsLib/res/values-ta/strings.xml @@ -21,6 +21,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="wifi_fail_to_scan" msgid="1265540342578081461">"நெட்வொர்க்குகளுக்கு ஸ்கேன் செய்யப்படவில்லை"</string> + <string name="wifi_security_none" msgid="7985461072596594400">"ஏதுமில்லை"</string> <string name="wifi_remembered" msgid="4955746899347821096">"சேமிக்கப்பட்டது"</string> <string name="wifi_disabled_generic" msgid="4259794910584943386">"முடக்கப்பட்டது"</string> <string name="wifi_disabled_network_failure" msgid="2364951338436007124">"IP உள்ளமைவில் தோல்வி"</string> @@ -374,6 +375,7 @@ <string name="power_discharge_by_only_enhanced" msgid="2175151772952365149">"நீங்கள் பயன்படுத்துவதன் அடிப்படையில் <xliff:g id="TIME">%1$s</xliff:g> வரை உபயோகிக்க முடியும்"</string> <string name="power_discharge_by" msgid="6453537733650125582">"<xliff:g id="TIME">%1$s</xliff:g> வரை பயன்படுத்த முடியும் (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_discharge_by_only" msgid="107616694963545745">"<xliff:g id="TIME">%1$s</xliff:g> வரை பயன்படுத்த முடியும்"</string> + <string name="power_discharge_by_only_short" msgid="1372817269546888804">"<xliff:g id="TIME">%1$s</xliff:g> வரை"</string> <string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"<xliff:g id="THRESHOLD">%1$s</xliff:g>க்கும் குறைவாகவே பயன்படுத்த முடியும்"</string> <string name="power_remaining_less_than_duration" msgid="5751885147712659423">"<xliff:g id="THRESHOLD">%1$s</xliff:g>க்கும் குறைவாகவே பயன்படுத்த முடியும் (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"<xliff:g id="TIME_REMAINING">%1$s</xliff:g>க்கும் மேல் பயன்படுத்த முடியும் (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> @@ -447,4 +449,6 @@ <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"ஒவ்வொரு முறையும் கேள்"</string> <string name="zen_mode_forever" msgid="2704305038191592967">"ஆஃப் செய்யும் வரை"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"சற்றுமுன்"</string> + <string name="updated_gfx_driver_dev_opt_in_app_summary" msgid="5309913444094165199">"உருவாக்கத்திலுள்ள புதுப்பிக்கப்பட்ட கிராஃபிக்ஸ் டிரைவரைப் பயன்படுத்த ஆப்ஸைத் தேர்ந்தெடுக்கவும்"</string> + <string name="media_transfer_phone_device_name" msgid="1003823744105758574">"மொபைல் ஸ்பீக்கர்"</string> </resources> diff --git a/packages/SettingsLib/res/values-te/strings.xml b/packages/SettingsLib/res/values-te/strings.xml index c8c6b4ce69f6..af233dae55a3 100644 --- a/packages/SettingsLib/res/values-te/strings.xml +++ b/packages/SettingsLib/res/values-te/strings.xml @@ -21,6 +21,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="wifi_fail_to_scan" msgid="1265540342578081461">"నెట్వర్క్ల కోసం స్కాన్ చేయడం సాధ్యపడదు"</string> + <string name="wifi_security_none" msgid="7985461072596594400">"ఏదీ లేదు"</string> <string name="wifi_remembered" msgid="4955746899347821096">"సేవ్ చేయబడింది"</string> <string name="wifi_disabled_generic" msgid="4259794910584943386">"నిలిపివేయబడింది"</string> <string name="wifi_disabled_network_failure" msgid="2364951338436007124">"IP కాన్ఫిగరేషన్ వైఫల్యం"</string> @@ -374,6 +375,7 @@ <string name="power_discharge_by_only_enhanced" msgid="2175151772952365149">"మీ వినియోగం ఆధారంగా దాదాపు <xliff:g id="TIME">%1$s</xliff:g> వరకు ఉండాలి"</string> <string name="power_discharge_by" msgid="6453537733650125582">"దాదాపు <xliff:g id="TIME">%1$s</xliff:g> వరకు ఉండాలి (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_discharge_by_only" msgid="107616694963545745">"దాదాపు <xliff:g id="TIME">%1$s</xliff:g> వరకు ఉండాలి"</string> + <string name="power_discharge_by_only_short" msgid="1372817269546888804">"<xliff:g id="TIME">%1$s</xliff:g> వరకు"</string> <string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"<xliff:g id="THRESHOLD">%1$s</xliff:g> కంటే తక్కువ సమయం మిగిలి ఉంది"</string> <string name="power_remaining_less_than_duration" msgid="5751885147712659423">"<xliff:g id="THRESHOLD">%1$s</xliff:g> కంటే తక్కువ సమయం మిగిలి ఉంది (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"<xliff:g id="TIME_REMAINING">%1$s</xliff:g> కంటే ఎక్కువ సమయం మిగిలి ఉంది (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> @@ -447,4 +449,6 @@ <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"ప్రతిసారి అడుగు"</string> <string name="zen_mode_forever" msgid="2704305038191592967">"మీరు ఆఫ్ చేసే వరకు"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"ఇప్పుడే"</string> + <string name="updated_gfx_driver_dev_opt_in_app_summary" msgid="5309913444094165199">"అభివృద్దిలో అప్డేట్ చేసిన గ్రాఫిక్ డ్రైవర్ను ఉపయోగించడానికి యాప్ని ప్రారంభించండి"</string> + <string name="media_transfer_phone_device_name" msgid="1003823744105758574">"ఫోన్ స్పీకర్"</string> </resources> diff --git a/packages/SettingsLib/res/values-th/strings.xml b/packages/SettingsLib/res/values-th/strings.xml index d293d590f1a2..636c3f2f19c0 100644 --- a/packages/SettingsLib/res/values-th/strings.xml +++ b/packages/SettingsLib/res/values-th/strings.xml @@ -21,6 +21,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="wifi_fail_to_scan" msgid="1265540342578081461">"ไม่สามารถสแกนหาเครือข่าย"</string> + <string name="wifi_security_none" msgid="7985461072596594400">"ไม่มี"</string> <string name="wifi_remembered" msgid="4955746899347821096">"บันทึกแล้ว"</string> <string name="wifi_disabled_generic" msgid="4259794910584943386">"ปิดอยู่"</string> <string name="wifi_disabled_network_failure" msgid="2364951338436007124">"การกำหนดค่า IP ล้มเหลว"</string> @@ -374,6 +375,7 @@ <string name="power_discharge_by_only_enhanced" msgid="2175151772952365149">"น่าจะใช้งานได้ถึงเวลาประมาณ <xliff:g id="TIME">%1$s</xliff:g> เมื่อดูจากการใช้งานของคุณ"</string> <string name="power_discharge_by" msgid="6453537733650125582">"น่าจะใช้งานได้ถึงเวลาประมาณ <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_discharge_by_only" msgid="107616694963545745">"น่าจะใช้งานได้ถึงเวลาประมาณ <xliff:g id="TIME">%1$s</xliff:g>"</string> + <string name="power_discharge_by_only_short" msgid="1372817269546888804">"จนถึง <xliff:g id="TIME">%1$s</xliff:g>"</string> <string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"เหลืออีกไม่ถึง <xliff:g id="THRESHOLD">%1$s</xliff:g>"</string> <string name="power_remaining_less_than_duration" msgid="5751885147712659423">"เหลือเวลาอีกไม่ถึง <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"เหลือเวลามากกว่า <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> @@ -447,4 +449,6 @@ <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"ถามทุกครั้ง"</string> <string name="zen_mode_forever" msgid="2704305038191592967">"จนกว่าคุณจะปิด"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"เมื่อสักครู่"</string> + <string name="updated_gfx_driver_dev_opt_in_app_summary" msgid="5309913444094165199">"เลือกใช้แอปเพื่อใช้ไดรเวอร์กราฟิกที่อัปเดตในการพัฒนา"</string> + <string name="media_transfer_phone_device_name" msgid="1003823744105758574">"ลำโพงโทรศัพท์"</string> </resources> diff --git a/packages/SettingsLib/res/values-tl/strings.xml b/packages/SettingsLib/res/values-tl/strings.xml index 9da4561c65b6..1bcc36a62618 100644 --- a/packages/SettingsLib/res/values-tl/strings.xml +++ b/packages/SettingsLib/res/values-tl/strings.xml @@ -21,6 +21,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="wifi_fail_to_scan" msgid="1265540342578081461">"Hindi makapag-scan ng mga network"</string> + <string name="wifi_security_none" msgid="7985461072596594400">"Wala"</string> <string name="wifi_remembered" msgid="4955746899347821096">"Na-save"</string> <string name="wifi_disabled_generic" msgid="4259794910584943386">"Naka-disable"</string> <string name="wifi_disabled_network_failure" msgid="2364951338436007124">"Pagkabigo ng Configuration ng IP"</string> @@ -374,6 +375,7 @@ <string name="power_discharge_by_only_enhanced" msgid="2175151772952365149">"Tatagal dapat nang hanggang humigit-kumulang <xliff:g id="TIME">%1$s</xliff:g> batay sa iyong paggamit"</string> <string name="power_discharge_by" msgid="6453537733650125582">"Tatagal dapat nang hanggang humigit-kumulang <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_discharge_by_only" msgid="107616694963545745">"Tatagal hanggang mga <xliff:g id="TIME">%1$s</xliff:g>"</string> + <string name="power_discharge_by_only_short" msgid="1372817269546888804">"Hanggang <xliff:g id="TIME">%1$s</xliff:g>"</string> <string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"Wala nang <xliff:g id="THRESHOLD">%1$s</xliff:g> ang natitira"</string> <string name="power_remaining_less_than_duration" msgid="5751885147712659423">"Wala nang <xliff:g id="THRESHOLD">%1$s</xliff:g> ang natitira (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"Mahigit <xliff:g id="TIME_REMAINING">%1$s</xliff:g> pa ang natitira (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> @@ -447,4 +449,6 @@ <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Magtanong palagi"</string> <string name="zen_mode_forever" msgid="2704305038191592967">"Hanggang sa i-off mo"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"Ngayon lang"</string> + <string name="updated_gfx_driver_dev_opt_in_app_summary" msgid="5309913444094165199">"App sa pag-opt in para magamit ang na-update na graphics driver na ginagawa"</string> + <string name="media_transfer_phone_device_name" msgid="1003823744105758574">"Speaker ng telepono"</string> </resources> diff --git a/packages/SettingsLib/res/values-tr/strings.xml b/packages/SettingsLib/res/values-tr/strings.xml index 2d5cd7f36f55..ff669f6a5f72 100644 --- a/packages/SettingsLib/res/values-tr/strings.xml +++ b/packages/SettingsLib/res/values-tr/strings.xml @@ -21,6 +21,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="wifi_fail_to_scan" msgid="1265540342578081461">"Ağlar taranamıyor"</string> + <string name="wifi_security_none" msgid="7985461072596594400">"Yok"</string> <string name="wifi_remembered" msgid="4955746899347821096">"Kaydedildi"</string> <string name="wifi_disabled_generic" msgid="4259794910584943386">"Devre dışı"</string> <string name="wifi_disabled_network_failure" msgid="2364951338436007124">"IP Yapılandırması Hatası"</string> @@ -374,6 +375,7 @@ <string name="power_discharge_by_only_enhanced" msgid="2175151772952365149">"Kullanımınıza göre saat yaklaşık <xliff:g id="TIME">%1$s</xliff:g> olana kadar kullanılabilmelidir"</string> <string name="power_discharge_by" msgid="6453537733650125582">"Saat yaklaşık <xliff:g id="TIME">%1$s</xliff:g> olana kadar kullanılabilmelidir (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_discharge_by_only" msgid="107616694963545745">"Saat yaklaşık <xliff:g id="TIME">%1$s</xliff:g> olana kadar kullanılabilmelidir"</string> + <string name="power_discharge_by_only_short" msgid="1372817269546888804">"Şu saate kadar: <xliff:g id="TIME">%1$s</xliff:g>"</string> <string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"En fazla <xliff:g id="THRESHOLD">%1$s</xliff:g> kaldı"</string> <string name="power_remaining_less_than_duration" msgid="5751885147712659423">"En çok <xliff:g id="THRESHOLD">%1$s</xliff:g> kaldı (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"En az <xliff:g id="TIME_REMAINING">%1$s</xliff:g> kaldı (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> @@ -447,4 +449,6 @@ <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Her zaman sor"</string> <string name="zen_mode_forever" msgid="2704305038191592967">"Siz kapatana kadar"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"Az önce"</string> + <string name="updated_gfx_driver_dev_opt_in_app_summary" msgid="5309913444094165199">"Güncellenmiş grafik sürücüsünü geliştirme ortamında kullanmak için uygulamayı kaydedin"</string> + <string name="media_transfer_phone_device_name" msgid="1003823744105758574">"Telefon hoparlörü"</string> </resources> diff --git a/packages/SettingsLib/res/values-uk/strings.xml b/packages/SettingsLib/res/values-uk/strings.xml index 512ea86da467..2ded8c187936 100644 --- a/packages/SettingsLib/res/values-uk/strings.xml +++ b/packages/SettingsLib/res/values-uk/strings.xml @@ -21,6 +21,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="wifi_fail_to_scan" msgid="1265540342578081461">"Неможливо здійснити сканування мереж"</string> + <string name="wifi_security_none" msgid="7985461072596594400">"Немає"</string> <string name="wifi_remembered" msgid="4955746899347821096">"Збережено"</string> <string name="wifi_disabled_generic" msgid="4259794910584943386">"Вимкнено"</string> <string name="wifi_disabled_network_failure" msgid="2364951338436007124">"Помилка конфігурації IP-адреси"</string> @@ -374,6 +375,7 @@ <string name="power_discharge_by_only_enhanced" msgid="2175151772952365149">"На основі даних про використання, вистачить приблизно до <xliff:g id="TIME">%1$s</xliff:g>"</string> <string name="power_discharge_by" msgid="6453537733650125582">"Вистачить приблизно до <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_discharge_by_only" msgid="107616694963545745">"Вистачить приблизно до <xliff:g id="TIME">%1$s</xliff:g>"</string> + <string name="power_discharge_by_only_short" msgid="1372817269546888804">"До <xliff:g id="TIME">%1$s</xliff:g>"</string> <string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"Залишилося менше ніж <xliff:g id="THRESHOLD">%1$s</xliff:g>"</string> <string name="power_remaining_less_than_duration" msgid="5751885147712659423">"Залишилося менше ніж <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"Залишилося понад <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> @@ -449,4 +451,6 @@ <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Запитувати щоразу"</string> <string name="zen_mode_forever" msgid="2704305038191592967">"Доки ви не вимкнете"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"Щойно"</string> + <string name="updated_gfx_driver_dev_opt_in_app_summary" msgid="5309913444094165199">"Вибраний додаток, який використовуватиме оновлений графічний драйвер під час розробки"</string> + <string name="media_transfer_phone_device_name" msgid="1003823744105758574">"Динамік телефона"</string> </resources> diff --git a/packages/SettingsLib/res/values-ur/strings.xml b/packages/SettingsLib/res/values-ur/strings.xml index 84ad3ed16410..7dc46906327c 100644 --- a/packages/SettingsLib/res/values-ur/strings.xml +++ b/packages/SettingsLib/res/values-ur/strings.xml @@ -21,6 +21,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="wifi_fail_to_scan" msgid="1265540342578081461">"نیٹ ورکس کیلئے اسکین نہيں کر سکتے ہیں"</string> + <string name="wifi_security_none" msgid="7985461072596594400">"کوئی نہیں"</string> <string name="wifi_remembered" msgid="4955746899347821096">"محفوظ کردیا گیا"</string> <string name="wifi_disabled_generic" msgid="4259794910584943386">"غیر فعال"</string> <string name="wifi_disabled_network_failure" msgid="2364951338436007124">"IP کنفیگریشن کی ناکامی"</string> @@ -374,6 +375,7 @@ <string name="power_discharge_by_only_enhanced" msgid="2175151772952365149">"آپ کے استعمال کی بنیاد پر تقریباً <xliff:g id="TIME">%1$s</xliff:g> تک بیٹری چلے گی"</string> <string name="power_discharge_by" msgid="6453537733650125582">"تقریباً <xliff:g id="TIME">%1$s</xliff:g> تک بیٹری چلے گی (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_discharge_by_only" msgid="107616694963545745">"تقریباً <xliff:g id="TIME">%1$s</xliff:g> تک بیٹری چلے گی"</string> + <string name="power_discharge_by_only_short" msgid="1372817269546888804">"<xliff:g id="TIME">%1$s</xliff:g> تک"</string> <string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"<xliff:g id="THRESHOLD">%1$s</xliff:g> سے کم باقی ہے"</string> <string name="power_remaining_less_than_duration" msgid="5751885147712659423">"<xliff:g id="THRESHOLD">%1$s</xliff:g> سے کم باقی ہے (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"<xliff:g id="TIME_REMAINING">%1$s</xliff:g> سے زیادہ باقی ہے (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> @@ -447,4 +449,6 @@ <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"ہر بار پوچھیں"</string> <string name="zen_mode_forever" msgid="2704305038191592967">"یہاں تک کہ آپ آف کر دیں"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"ابھی ابھی"</string> + <string name="updated_gfx_driver_dev_opt_in_app_summary" msgid="5309913444094165199">"ڈیولپمنٹ میں اپ ڈیٹ کردہ گرافکس ڈرائیور کو استعمال کرنے کے لیے ایپ آپٹ ان کریں"</string> + <string name="media_transfer_phone_device_name" msgid="1003823744105758574">"فون اسپیکر"</string> </resources> diff --git a/packages/SettingsLib/res/values-uz/strings.xml b/packages/SettingsLib/res/values-uz/strings.xml index af2ada59c770..5f92c9ad52ce 100644 --- a/packages/SettingsLib/res/values-uz/strings.xml +++ b/packages/SettingsLib/res/values-uz/strings.xml @@ -21,6 +21,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="wifi_fail_to_scan" msgid="1265540342578081461">"Tarmoqlarni tekshirib chiqishni iloji bo‘lmadi"</string> + <string name="wifi_security_none" msgid="7985461072596594400">"Hech qanday"</string> <string name="wifi_remembered" msgid="4955746899347821096">"Saqlandi"</string> <string name="wifi_disabled_generic" msgid="4259794910584943386">"O‘chiq"</string> <string name="wifi_disabled_network_failure" msgid="2364951338436007124">"IP manzilini sozlab bo‘lmadi"</string> @@ -374,6 +375,7 @@ <string name="power_discharge_by_only_enhanced" msgid="2175151772952365149">"Joriy holatda taxminan <xliff:g id="TIME">%1$s</xliff:g> gacha davom etadi"</string> <string name="power_discharge_by" msgid="6453537733650125582">"Taxminan <xliff:g id="TIME">%1$s</xliff:g> gacha davom etadi (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_discharge_by_only" msgid="107616694963545745">"Taxminan <xliff:g id="TIME">%1$s</xliff:g> gacha davom etadi"</string> + <string name="power_discharge_by_only_short" msgid="1372817269546888804">"<xliff:g id="TIME">%1$s</xliff:g> gacha"</string> <string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"<xliff:g id="THRESHOLD">%1$s</xliff:g>dan kamroq vaqt qoldi"</string> <string name="power_remaining_less_than_duration" msgid="5751885147712659423">"<xliff:g id="THRESHOLD">%1$s</xliff:g>dan kamroq vaqt qoldi (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"<xliff:g id="TIME_REMAINING">%1$s</xliff:g>dan ko‘proq vaqt qoldi (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> @@ -447,4 +449,6 @@ <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Har safar so‘ralsin"</string> <string name="zen_mode_forever" msgid="2704305038191592967">"Bekor qilinmaguncha"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"Hozir"</string> + <string name="updated_gfx_driver_dev_opt_in_app_summary" msgid="5309913444094165199">"Ilova yangilangan grafik drayverdan (hali ishlov jarayonida) foydalanadi"</string> + <string name="media_transfer_phone_device_name" msgid="1003823744105758574">"Telefon karnayi"</string> </resources> diff --git a/packages/SettingsLib/res/values-vi/strings.xml b/packages/SettingsLib/res/values-vi/strings.xml index f454127547ea..eb10fb1abb2e 100644 --- a/packages/SettingsLib/res/values-vi/strings.xml +++ b/packages/SettingsLib/res/values-vi/strings.xml @@ -21,6 +21,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="wifi_fail_to_scan" msgid="1265540342578081461">"Không thể dò tìm mạng"</string> + <string name="wifi_security_none" msgid="7985461072596594400">"Không"</string> <string name="wifi_remembered" msgid="4955746899347821096">"Đã lưu"</string> <string name="wifi_disabled_generic" msgid="4259794910584943386">"Đã tắt"</string> <string name="wifi_disabled_network_failure" msgid="2364951338436007124">"Lỗi cấu hình IP"</string> @@ -374,6 +375,7 @@ <string name="power_discharge_by_only_enhanced" msgid="2175151772952365149">"Sẽ hết pin cho tới khoảng <xliff:g id="TIME">%1$s</xliff:g> dựa trên mức sử dụng của bạn"</string> <string name="power_discharge_by" msgid="6453537733650125582">"Sẽ hết pin cho tới khoảng <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_discharge_by_only" msgid="107616694963545745">"Sẽ hết pin cho tới khoảng <xliff:g id="TIME">%1$s</xliff:g>"</string> + <string name="power_discharge_by_only_short" msgid="1372817269546888804">"Cho đến <xliff:g id="TIME">%1$s</xliff:g>"</string> <string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"Còn lại không đến <xliff:g id="THRESHOLD">%1$s</xliff:g>"</string> <string name="power_remaining_less_than_duration" msgid="5751885147712659423">"Còn lại không đến <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"Còn lại hơn <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> @@ -447,4 +449,6 @@ <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Luôn hỏi"</string> <string name="zen_mode_forever" msgid="2704305038191592967">"Cho đến khi bạn tắt"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"Vừa xong"</string> + <string name="updated_gfx_driver_dev_opt_in_app_summary" msgid="5309913444094165199">"Chọn ứng dụng để sử dụng trình điều khiển đồ họa được cập nhật trong giai đoạn phát triển"</string> + <string name="media_transfer_phone_device_name" msgid="1003823744105758574">"Loa điện thoại"</string> </resources> diff --git a/packages/SettingsLib/res/values-zh-rCN/strings.xml b/packages/SettingsLib/res/values-zh-rCN/strings.xml index 10a20bef083f..7b14138287a3 100644 --- a/packages/SettingsLib/res/values-zh-rCN/strings.xml +++ b/packages/SettingsLib/res/values-zh-rCN/strings.xml @@ -21,6 +21,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="wifi_fail_to_scan" msgid="1265540342578081461">"无法扫描网络"</string> + <string name="wifi_security_none" msgid="7985461072596594400">"无"</string> <string name="wifi_remembered" msgid="4955746899347821096">"已保存"</string> <string name="wifi_disabled_generic" msgid="4259794910584943386">"已停用"</string> <string name="wifi_disabled_network_failure" msgid="2364951338436007124">"IP 配置失败"</string> @@ -374,6 +375,7 @@ <string name="power_discharge_by_only_enhanced" msgid="2175151772952365149">"根据您的使用情况,估计大约还能用到<xliff:g id="TIME">%1$s</xliff:g>"</string> <string name="power_discharge_by" msgid="6453537733650125582">"目前电量为 <xliff:g id="LEVEL">%2$s</xliff:g>,估计大约还能用到<xliff:g id="TIME">%1$s</xliff:g>"</string> <string name="power_discharge_by_only" msgid="107616694963545745">"估计大约还能用到<xliff:g id="TIME">%1$s</xliff:g>"</string> + <string name="power_discharge_by_only_short" msgid="1372817269546888804">"直到<xliff:g id="TIME">%1$s</xliff:g>"</string> <string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"剩余电池续航时间不到 <xliff:g id="THRESHOLD">%1$s</xliff:g>"</string> <string name="power_remaining_less_than_duration" msgid="5751885147712659423">"电量剩余使用时间不到 <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"电量剩余使用时间超过 <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> @@ -447,4 +449,6 @@ <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"每次都询问"</string> <string name="zen_mode_forever" msgid="2704305038191592967">"直到您将其关闭"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"刚刚"</string> + <string name="updated_gfx_driver_dev_opt_in_app_summary" msgid="5309913444094165199">"为应用启用更新后的显卡驱动,以在开发过程中使用"</string> + <string name="media_transfer_phone_device_name" msgid="1003823744105758574">"手机扬声器"</string> </resources> diff --git a/packages/SettingsLib/res/values-zh-rHK/strings.xml b/packages/SettingsLib/res/values-zh-rHK/strings.xml index 15105453c5b6..48b6959129ad 100644 --- a/packages/SettingsLib/res/values-zh-rHK/strings.xml +++ b/packages/SettingsLib/res/values-zh-rHK/strings.xml @@ -21,6 +21,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="wifi_fail_to_scan" msgid="1265540342578081461">"無法掃瞄網絡"</string> + <string name="wifi_security_none" msgid="7985461072596594400">"無"</string> <string name="wifi_remembered" msgid="4955746899347821096">"已儲存"</string> <string name="wifi_disabled_generic" msgid="4259794910584943386">"已停用"</string> <string name="wifi_disabled_network_failure" msgid="2364951338436007124">"IP 設定失敗"</string> @@ -374,6 +375,7 @@ <string name="power_discharge_by_only_enhanced" msgid="2175151772952365149">"根據您的使用情況,電量剩餘約 <xliff:g id="TIME">%1$s</xliff:g>"</string> <string name="power_discharge_by" msgid="6453537733650125582">"電量剩餘約 <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_discharge_by_only" msgid="107616694963545745">"電量剩餘約 <xliff:g id="TIME">%1$s</xliff:g>"</string> + <string name="power_discharge_by_only_short" msgid="1372817269546888804">"還可用到<xliff:g id="TIME">%1$s</xliff:g>"</string> <string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"剩餘電量時間少於 <xliff:g id="THRESHOLD">%1$s</xliff:g>"</string> <string name="power_remaining_less_than_duration" msgid="5751885147712659423">"還有少於 <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"還有超過 <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> @@ -447,4 +449,6 @@ <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"每次都詢問"</string> <string name="zen_mode_forever" msgid="2704305038191592967">"直至您關閉為止"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"剛剛"</string> + <string name="updated_gfx_driver_dev_opt_in_app_summary" msgid="5309913444094165199">"請選取應用程式,以在開發階段使用更新的顯示卡驅動程式"</string> + <string name="media_transfer_phone_device_name" msgid="1003823744105758574">"手機喇叭"</string> </resources> diff --git a/packages/SettingsLib/res/values-zh-rTW/strings.xml b/packages/SettingsLib/res/values-zh-rTW/strings.xml index 90c0d808cd08..684569b819e2 100644 --- a/packages/SettingsLib/res/values-zh-rTW/strings.xml +++ b/packages/SettingsLib/res/values-zh-rTW/strings.xml @@ -21,6 +21,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="wifi_fail_to_scan" msgid="1265540342578081461">"無法掃描網路"</string> + <string name="wifi_security_none" msgid="7985461072596594400">"無"</string> <string name="wifi_remembered" msgid="4955746899347821096">"已儲存"</string> <string name="wifi_disabled_generic" msgid="4259794910584943386">"已停用"</string> <string name="wifi_disabled_network_failure" msgid="2364951338436007124">"IP 設定失敗"</string> @@ -374,6 +375,7 @@ <string name="power_discharge_by_only_enhanced" msgid="2175151772952365149">"根據你的使用情形,預估可持續使用到<xliff:g id="TIME">%1$s</xliff:g>"</string> <string name="power_discharge_by" msgid="6453537733650125582">"目前電量 <xliff:g id="LEVEL">%2$s</xliff:g>,預估還能持續使用到<xliff:g id="TIME">%1$s</xliff:g>"</string> <string name="power_discharge_by_only" msgid="107616694963545745">"預估還能持續使用到<xliff:g id="TIME">%1$s</xliff:g>"</string> + <string name="power_discharge_by_only_short" msgid="1372817269546888804">"還能持續使用到<xliff:g id="TIME">%1$s</xliff:g>"</string> <string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"電池可用時間不到 <xliff:g id="THRESHOLD">%1$s</xliff:g>"</string> <string name="power_remaining_less_than_duration" msgid="5751885147712659423">"電池可用時間不到 <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"電池可用時間超過 <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> @@ -447,4 +449,6 @@ <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"每次都詢問"</string> <string name="zen_mode_forever" msgid="2704305038191592967">"直到你關閉為止"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"剛剛"</string> + <string name="updated_gfx_driver_dev_opt_in_app_summary" msgid="5309913444094165199">"選取要在開發階段使用最新版繪圖驅動程式的應用程式"</string> + <string name="media_transfer_phone_device_name" msgid="1003823744105758574">"手機喇叭"</string> </resources> diff --git a/packages/SettingsLib/res/values-zu/strings.xml b/packages/SettingsLib/res/values-zu/strings.xml index e4f9f4d77733..d107a5a80f1b 100644 --- a/packages/SettingsLib/res/values-zu/strings.xml +++ b/packages/SettingsLib/res/values-zu/strings.xml @@ -21,6 +21,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="wifi_fail_to_scan" msgid="1265540342578081461">"Ayikwazi ukuhlola amanethiwekhi"</string> + <string name="wifi_security_none" msgid="7985461072596594400">"Lutho"</string> <string name="wifi_remembered" msgid="4955746899347821096">"Kulondoloziwe"</string> <string name="wifi_disabled_generic" msgid="4259794910584943386">"Akusebenzi"</string> <string name="wifi_disabled_network_failure" msgid="2364951338436007124">"Ukwehluleka kokulungiswa kwe-IP"</string> @@ -374,6 +375,7 @@ <string name="power_discharge_by_only_enhanced" msgid="2175151772952365149">"Kumele ihlale cishe kube ngu-<xliff:g id="TIME">%1$s</xliff:g> kusukela ekusetshenzisweni kwakho"</string> <string name="power_discharge_by" msgid="6453537733650125582">"Kumele ihlale cishe kube ngu-<xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_discharge_by_only" msgid="107616694963545745">"Kumele ihlale cishe kube ngu-<xliff:g id="TIME">%1$s</xliff:g>"</string> + <string name="power_discharge_by_only_short" msgid="1372817269546888804">"Kuze kube ngu-<xliff:g id="TIME">%1$s</xliff:g>"</string> <string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"Kusele okungaphansi kunokungu-<xliff:g id="THRESHOLD">%1$s</xliff:g>"</string> <string name="power_remaining_less_than_duration" msgid="5751885147712659423">"Ngaphansi kuka-<xliff:g id="THRESHOLD">%1$s</xliff:g> osele (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"Ngaphezu kuka-<xliff:g id="TIME_REMAINING">%1$s</xliff:g> osele (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> @@ -447,4 +449,6 @@ <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Buza njalo"</string> <string name="zen_mode_forever" msgid="2704305038191592967">"Uze uvale isikrini"</string> <string name="time_unit_just_now" msgid="6363336622778342422">"Khona manje"</string> + <string name="updated_gfx_driver_dev_opt_in_app_summary" msgid="5309913444094165199">"Uhlelo lokusebenza lokukhetha ukungena olungasebenzisa idrayivu yamagrafikhi ekuthuthukiseni"</string> + <string name="media_transfer_phone_device_name" msgid="1003823744105758574">"Isipikha sefoni"</string> </resources> diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProtoDumpUtil.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProtoDumpUtil.java index cbb6e82c8f86..b2c12b277dc0 100644 --- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProtoDumpUtil.java +++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProtoDumpUtil.java @@ -855,6 +855,10 @@ class SettingsProtoDumpUtil { GlobalSettingsProto.MultiSim.SMS_PROMPT); p.end(multiSimToken); + dumpSetting(s, p, + Global.NATIVE_FLAGS_HEALTH_CHECK_ENABLED, + GlobalSettingsProto.NATIVE_FLAGS_HEALTH_CHECK_ENABLED); + final long netstatsToken = p.start(GlobalSettingsProto.NETSTATS); dumpSetting(s, p, Settings.Global.NETSTATS_ENABLED, diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationGutsManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationGutsManager.java index 7895a8e7831f..3b407b5f8a65 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationGutsManager.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationGutsManager.java @@ -18,10 +18,7 @@ package com.android.systemui.statusbar.notification.row; import static android.app.AppOpsManager.OP_CAMERA; import static android.app.AppOpsManager.OP_RECORD_AUDIO; import static android.app.AppOpsManager.OP_SYSTEM_ALERT_WINDOW; -import static android.service.notification.NotificationListenerService.Ranking - .USER_SENTIMENT_NEGATIVE; - -import static com.android.systemui.statusbar.notification.row.NotificationInfo.ACTION_NONE; +import static android.service.notification.NotificationListenerService.Ranking.USER_SENTIMENT_NEGATIVE; import android.app.INotificationManager; import android.app.NotificationChannel; @@ -43,7 +40,6 @@ import android.view.accessibility.AccessibilityManager; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.nano.MetricsProto; -import com.android.internal.statusbar.IStatusBarService; import com.android.systemui.Dependency; import com.android.systemui.Dumpable; import com.android.systemui.plugins.ActivityStarter; @@ -188,13 +184,7 @@ public class NotificationGutsManager implements Dumpable, NotificationLifetimeEx } else if (gutsView instanceof AppOpsInfo) { initializeAppOpsInfo(row, (AppOpsInfo) gutsView); } else if (gutsView instanceof NotificationInfo) { - int action; - if (item instanceof NotificationMenuRow.NotificationInfoMenuItem) { - action = ((NotificationMenuRow.NotificationInfoMenuItem) item).mAction; - } else { - action = ACTION_NONE; - } - initializeNotificationInfo(row, (NotificationInfo) gutsView, action); + initializeNotificationInfo(row, (NotificationInfo) gutsView); } return true; } catch (Exception e) { @@ -253,13 +243,11 @@ public class NotificationGutsManager implements Dumpable, NotificationLifetimeEx * Sets up the {@link NotificationInfo} inside the notification row's guts. * @param row view to set up the guts for * @param notificationInfoView view to set up/bind within {@code row} - * @param action The action to take immediately upon binding, if any. */ @VisibleForTesting void initializeNotificationInfo( final ExpandableNotificationRow row, - NotificationInfo notificationInfoView, - @NotificationInfo.NotificationInfoAction int action) throws Exception { + NotificationInfo notificationInfoView) throws Exception { NotificationGuts guts = row.getGuts(); StatusBarNotification sbn = row.getStatusBarNotification(); String packageName = sbn.getPackageName(); @@ -303,8 +291,7 @@ public class NotificationGutsManager implements Dumpable, NotificationLifetimeEx isForBlockingHelper, row.getEntry().userSentiment == USER_SENTIMENT_NEGATIVE, row.getEntry().noisy, - row.getEntry().importance, - action); + row.getEntry().importance); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationInfo.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationInfo.java index 0d36d2c2f77c..213ac704b06a 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationInfo.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationInfo.java @@ -187,14 +187,13 @@ public class NotificationInfo extends LinearLayout implements NotificationGuts.G boolean isDeviceProvisioned, boolean isNonblockable, boolean isNoisy, - int importance, - @NotificationInfoAction int action) + int importance) throws RemoteException { bindNotification(pm, iNotificationManager, pkg, notificationChannel, numUniqueChannelsInRow, sbn, checkSaveListener, onSettingsClick, onAppSettingsClick, isDeviceProvisioned, isNonblockable, false /* isBlockingHelper */, false /* isUserSentimentNegative */, isNoisy, - importance, action); + importance); } public void bindNotification( @@ -212,8 +211,7 @@ public class NotificationInfo extends LinearLayout implements NotificationGuts.G boolean isForBlockingHelper, boolean isUserSentimentNegative, boolean isNoisy, - int importance, - @NotificationInfoAction int action) + int importance) throws RemoteException { mINotificationManager = iNotificationManager; mMetricsLogger = Dependency.get(MetricsLogger.class); @@ -255,10 +253,6 @@ public class NotificationInfo extends LinearLayout implements NotificationGuts.G bindHeader(); bindPrompt(); bindButtons(); - - if (action != ACTION_NONE) { - swapContent(action, false /* don't animate */); - } } private void bindHeader() throws RemoteException { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationMenuRow.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationMenuRow.java index b6ff6fc7f0e5..948d2a5e2a18 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationMenuRow.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationMenuRow.java @@ -17,9 +17,6 @@ package com.android.systemui.statusbar.notification.row; import static com.android.systemui.SwipeHelper.SWIPED_FAR_ENOUGH_SIZE_FRACTION; -import static com.android.systemui.statusbar.notification.row.NotificationInfo.ACTION_BLOCK; -import static com.android.systemui.statusbar.notification.row.NotificationInfo.ACTION_NONE; -import static com.android.systemui.statusbar.notification.row.NotificationInfo.ACTION_TOGGLE_SILENT; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; @@ -46,7 +43,6 @@ import com.android.systemui.plugins.statusbar.NotificationMenuRowPlugin; import com.android.systemui.statusbar.AlphaOptimizedImageView; import com.android.systemui.statusbar.notification.NotificationUtils; import com.android.systemui.statusbar.notification.row.NotificationGuts.GutsContent; -import com.android.systemui.statusbar.notification.row.NotificationInfo.NotificationInfoAction; import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayout; import java.util.ArrayList; @@ -73,7 +69,7 @@ public class NotificationMenuRow implements NotificationMenuRowPlugin, View.OnCl private Context mContext; private FrameLayout mMenuContainer; - private NotificationInfoMenuItem mInfoItem; + private NotificationMenuItem mInfoItem; private MenuItem mAppOpsItem; private MenuItem mSnoozeItem; private ArrayList<MenuItem> mLeftMenuItems; @@ -248,36 +244,30 @@ public class NotificationMenuRow implements NotificationMenuRowPlugin, View.OnCl if (!isForeground) { // Only show snooze for non-foreground notifications mSnoozeItem = createSnoozeItem(mContext); - mLeftMenuItems.add(mSnoozeItem); } - mInfoItem = createInfoItem(mContext); - if (!NotificationUtils.useNewInterruptionModel(mContext)) { - mLeftMenuItems.add(mInfoItem); - } - mAppOpsItem = createAppOpsItem(mContext); - mLeftMenuItems.add(mAppOpsItem); - if (NotificationUtils.useNewInterruptionModel(mContext)) { - if (!mParent.getIsNonblockable()) { - mRightMenuItems.add(createBlockItem(mContext, mInfoItem.getGutsView())); - } - // TODO(kprevas): this is duplicated logic - // but it's currently spread across NotificationGutsManager and NotificationInfo. - // Try to consolidate and reuse here. - boolean canToggleSilent = !mParent.getIsNonblockable() - && !isForeground - && mParent.getEntry().noisy; - if (canToggleSilent) { - int channelImportance = mParent.getEntry().channel.getImportance(); - int effectiveImportance = - channelImportance == NotificationManager.IMPORTANCE_UNSPECIFIED - ? mParent.getEntry().importance : channelImportance; - mRightMenuItems.add(createToggleSilentItem(mContext, mInfoItem.getGutsView(), - effectiveImportance < NotificationManager.IMPORTANCE_DEFAULT)); + int channelImportance = mParent.getEntry().channel.getImportance(); + int effectiveImportance = + channelImportance == NotificationManager.IMPORTANCE_UNSPECIFIED + ? mParent.getEntry().importance : channelImportance; + mInfoItem = createInfoItem(mContext, + effectiveImportance < NotificationManager.IMPORTANCE_DEFAULT); + } else { + mInfoItem = createInfoItem(mContext); + } + + if (!NotificationUtils.useNewInterruptionModel(mContext)) { + if (!isForeground) { + mRightMenuItems.add(mSnoozeItem); } + mRightMenuItems.add(mInfoItem); + mRightMenuItems.add(mAppOpsItem); + mLeftMenuItems.addAll(mRightMenuItems); } else { - mRightMenuItems.addAll(mLeftMenuItems); + mRightMenuItems.add(mInfoItem); + mRightMenuItems.add(mAppOpsItem); + mRightMenuItems.add(mSnoozeItem); } populateMenuViews(); @@ -634,13 +624,24 @@ public class NotificationMenuRow implements NotificationMenuRowPlugin, View.OnCl return snooze; } - static NotificationInfoMenuItem createInfoItem(Context context) { + static NotificationMenuItem createInfoItem(Context context) { Resources res = context.getResources(); String infoDescription = res.getString(R.string.notification_menu_gear_description); NotificationInfo infoContent = (NotificationInfo) LayoutInflater.from(context).inflate( R.layout.notification_info, null, false); - return new NotificationInfoMenuItem(context, infoDescription, infoContent, - R.drawable.ic_settings, ACTION_NONE); + return new NotificationMenuItem(context, infoDescription, infoContent, + R.drawable.ic_settings); + } + + static NotificationMenuItem createInfoItem(Context context, boolean isCurrentlySilent) { + Resources res = context.getResources(); + String infoDescription = res.getString(R.string.notification_menu_gear_description); + NotificationInfo infoContent = (NotificationInfo) LayoutInflater.from(context).inflate( + R.layout.notification_info, null, false); + int iconResId = isCurrentlySilent + ? R.drawable.ic_notifications_alert + : R.drawable.ic_notifications_silence; + return new NotificationMenuItem(context, infoDescription, infoContent, iconResId); } static MenuItem createAppOpsItem(Context context) { @@ -651,29 +652,6 @@ public class NotificationMenuRow implements NotificationMenuRowPlugin, View.OnCl return info; } - private static MenuItem createBlockItem(Context context, NotificationInfo gutsView) { - return new NotificationInfoMenuItem( - context, - context.getResources().getString(R.string.inline_stop_button), - gutsView, - R.drawable.ic_notification_block, - ACTION_BLOCK); - } - - private static MenuItem createToggleSilentItem(Context context, NotificationInfo gutsView, - boolean isCurrentlySilent) { - return new NotificationInfoMenuItem( - context, - isCurrentlySilent - ? context.getResources().getString(R.string.inline_silent_button_alert) - : context.getResources().getString(R.string.inline_silent_button_silent), - gutsView, - isCurrentlySilent - ? R.drawable.ic_notifications_alert - : R.drawable.ic_notifications_silence, - ACTION_TOGGLE_SILENT); - } - private void addMenuView(MenuItem item, ViewGroup parent) { View menuView = item.getMenuView(); if (menuView != null) { @@ -789,23 +767,4 @@ public class NotificationMenuRow implements NotificationMenuRowPlugin, View.OnCl return mContentDescription; } } - - /** A {@link NotificationMenuItem} with an associated {@link NotificationInfoAction}. */ - public static class NotificationInfoMenuItem extends NotificationMenuItem { - - @NotificationInfoAction - int mAction; - - public NotificationInfoMenuItem(Context context, String contentDescription, - NotificationInfo content, int iconResId, - @NotificationInfoAction int action) { - super(context, contentDescription, content, iconResId); - this.mAction = action; - } - - @Override - public NotificationInfo getGutsView() { - return (NotificationInfo) super.getGutsView(); - } - } } diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationGutsManagerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationGutsManagerTest.java index 279796919879..84bfae650ce3 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationGutsManagerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationGutsManagerTest.java @@ -20,8 +20,7 @@ import static android.app.AppOpsManager.OP_CAMERA; import static android.app.AppOpsManager.OP_RECORD_AUDIO; import static android.app.AppOpsManager.OP_SYSTEM_ALERT_WINDOW; import static android.app.NotificationManager.IMPORTANCE_DEFAULT; -import static android.service.notification.NotificationListenerService.Ranking - .USER_SENTIMENT_NEGATIVE; +import static android.service.notification.NotificationListenerService.Ranking.USER_SENTIMENT_NEGATIVE; import static junit.framework.Assert.assertNotNull; import static junit.framework.Assert.assertNull; @@ -54,7 +53,6 @@ import android.support.test.filters.SmallTest; import android.testing.AndroidTestingRunner; import android.testing.TestableLooper; import android.util.ArraySet; -import android.util.Log; import android.view.View; import com.android.systemui.SysuiTestCase; @@ -63,8 +61,7 @@ import com.android.systemui.statusbar.NotificationPresenter; import com.android.systemui.statusbar.NotificationTestHelper; import com.android.systemui.statusbar.notification.NotificationData; import com.android.systemui.statusbar.notification.NotificationEntryManager; -import com.android.systemui.statusbar.notification.row.NotificationGutsManager - .OnSettingsClickListener; +import com.android.systemui.statusbar.notification.row.NotificationGutsManager.OnSettingsClickListener; import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayout; import com.android.systemui.statusbar.policy.DeviceProvisionedController; @@ -298,8 +295,7 @@ public class NotificationGutsManagerTest extends SysuiTestCase { when(row.getIsNonblockable()).thenReturn(false); StatusBarNotification statusBarNotification = row.getStatusBarNotification(); - mGutsManager.initializeNotificationInfo(row, notificationInfoView, - NotificationInfo.ACTION_NONE); + mGutsManager.initializeNotificationInfo(row, notificationInfoView); verify(notificationInfoView).bindNotification( any(PackageManager.class), @@ -316,8 +312,7 @@ public class NotificationGutsManagerTest extends SysuiTestCase { eq(true) /* isForBlockingHelper */, eq(true) /* isUserSentimentNegative */, eq(false) /*isNoisy */, - eq(0), - eq(NotificationInfo.ACTION_NONE)); + eq(0)); } @Test @@ -329,8 +324,7 @@ public class NotificationGutsManagerTest extends SysuiTestCase { when(row.getIsNonblockable()).thenReturn(false); StatusBarNotification statusBarNotification = row.getStatusBarNotification(); - mGutsManager.initializeNotificationInfo(row, notificationInfoView, - NotificationInfo.ACTION_NONE); + mGutsManager.initializeNotificationInfo(row, notificationInfoView); verify(notificationInfoView).bindNotification( any(PackageManager.class), @@ -347,8 +341,7 @@ public class NotificationGutsManagerTest extends SysuiTestCase { eq(false) /* isForBlockingHelper */, eq(true) /* isUserSentimentNegative */, eq(false) /*isNoisy */, - eq(0), - eq(NotificationInfo.ACTION_NONE)); + eq(0)); } @Test @@ -361,8 +354,7 @@ public class NotificationGutsManagerTest extends SysuiTestCase { when(row.getIsNonblockable()).thenReturn(false); StatusBarNotification statusBarNotification = row.getStatusBarNotification(); - mGutsManager.initializeNotificationInfo(row, notificationInfoView, - NotificationInfo.ACTION_NONE); + mGutsManager.initializeNotificationInfo(row, notificationInfoView); verify(notificationInfoView).bindNotification( any(PackageManager.class), @@ -379,8 +371,7 @@ public class NotificationGutsManagerTest extends SysuiTestCase { eq(true) /* isForBlockingHelper */, eq(true) /* isUserSentimentNegative */, eq(true) /*isNoisy */, - eq(0), - eq(NotificationInfo.ACTION_NONE)); + eq(0)); } @Test @@ -393,8 +384,7 @@ public class NotificationGutsManagerTest extends SysuiTestCase { when(row.getIsNonblockable()).thenReturn(false); StatusBarNotification statusBarNotification = row.getStatusBarNotification(); - mGutsManager.initializeNotificationInfo(row, notificationInfoView, - NotificationInfo.ACTION_NONE); + mGutsManager.initializeNotificationInfo(row, notificationInfoView); verify(notificationInfoView).bindNotification( any(PackageManager.class), @@ -411,8 +401,7 @@ public class NotificationGutsManagerTest extends SysuiTestCase { eq(true) /* isForBlockingHelper */, eq(true) /* isUserSentimentNegative */, eq(false) /*isNoisy */, - eq(IMPORTANCE_DEFAULT), - eq(NotificationInfo.ACTION_NONE)); + eq(IMPORTANCE_DEFAULT)); } @Test @@ -425,8 +414,7 @@ public class NotificationGutsManagerTest extends SysuiTestCase { StatusBarNotification statusBarNotification = row.getStatusBarNotification(); when(mDeviceProvisionedController.isDeviceProvisioned()).thenReturn(true); - mGutsManager.initializeNotificationInfo(row, notificationInfoView, - NotificationInfo.ACTION_NONE); + mGutsManager.initializeNotificationInfo(row, notificationInfoView); verify(notificationInfoView).bindNotification( any(PackageManager.class), @@ -443,8 +431,7 @@ public class NotificationGutsManagerTest extends SysuiTestCase { eq(false) /* isForBlockingHelper */, eq(true) /* isUserSentimentNegative */, eq(false) /*isNoisy */, - eq(0), - eq(NotificationInfo.ACTION_NONE)); + eq(0)); } @Test @@ -456,8 +443,7 @@ public class NotificationGutsManagerTest extends SysuiTestCase { when(row.getIsNonblockable()).thenReturn(false); StatusBarNotification statusBarNotification = row.getStatusBarNotification(); - mGutsManager.initializeNotificationInfo(row, notificationInfoView, - NotificationInfo.ACTION_BLOCK); + mGutsManager.initializeNotificationInfo(row, notificationInfoView); verify(notificationInfoView).bindNotification( any(PackageManager.class), @@ -474,8 +460,7 @@ public class NotificationGutsManagerTest extends SysuiTestCase { eq(true) /* isForBlockingHelper */, eq(true) /* isUserSentimentNegative */, eq(false) /*isNoisy */, - eq(0), - eq(NotificationInfo.ACTION_BLOCK)); + eq(0)); } @Test diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationInfoTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationInfoTest.java index 985827a9cd54..3dd493f0cd44 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationInfoTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationInfoTest.java @@ -187,7 +187,7 @@ public class NotificationInfoTest extends SysuiTestCase { when(mMockPackageManager.getApplicationLabel(any())).thenReturn("App Name"); mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager, TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, true, false, - false, IMPORTANCE_DEFAULT, NotificationInfo.ACTION_NONE); + false, IMPORTANCE_DEFAULT); final TextView textView = mNotificationInfo.findViewById(R.id.pkgname); assertTrue(textView.getText().toString().contains("App Name")); assertEquals(VISIBLE, mNotificationInfo.findViewById(R.id.header).getVisibility()); @@ -200,7 +200,7 @@ public class NotificationInfoTest extends SysuiTestCase { .thenReturn(iconDrawable); mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager, TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, true, false, - false, IMPORTANCE_DEFAULT, NotificationInfo.ACTION_NONE); + false, IMPORTANCE_DEFAULT); final ImageView iconView = mNotificationInfo.findViewById(R.id.pkgicon); assertEquals(iconDrawable, iconView.getDrawable()); } @@ -209,7 +209,7 @@ public class NotificationInfoTest extends SysuiTestCase { public void testBindNotification_noDelegate() throws Exception { mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager, TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, true, false, - false, IMPORTANCE_DEFAULT, NotificationInfo.ACTION_NONE); + false, IMPORTANCE_DEFAULT); final TextView nameView = mNotificationInfo.findViewById(R.id.delegate_name); assertEquals(GONE, nameView.getVisibility()); final TextView dividerView = mNotificationInfo.findViewById(R.id.pkg_divider); @@ -228,7 +228,7 @@ public class NotificationInfoTest extends SysuiTestCase { mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager, TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, true, false, - false, IMPORTANCE_DEFAULT, NotificationInfo.ACTION_NONE); + false, IMPORTANCE_DEFAULT); final TextView nameView = mNotificationInfo.findViewById(R.id.delegate_name); assertEquals(VISIBLE, nameView.getVisibility()); assertTrue(nameView.getText().toString().contains("Other")); @@ -240,7 +240,7 @@ public class NotificationInfoTest extends SysuiTestCase { public void testBindNotification_GroupNameHiddenIfNoGroup() throws Exception { mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager, TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, true, false, - false, IMPORTANCE_DEFAULT, NotificationInfo.ACTION_NONE); + false, IMPORTANCE_DEFAULT); final TextView groupNameView = mNotificationInfo.findViewById(R.id.group_name); assertEquals(GONE, groupNameView.getVisibility()); final TextView groupDividerView = mNotificationInfo.findViewById(R.id.pkg_group_divider); @@ -257,7 +257,7 @@ public class NotificationInfoTest extends SysuiTestCase { .thenReturn(notificationChannelGroup); mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager, TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, true, false, - false, IMPORTANCE_DEFAULT, NotificationInfo.ACTION_NONE); + false, IMPORTANCE_DEFAULT); final TextView groupNameView = mNotificationInfo.findViewById(R.id.group_name); assertEquals(View.VISIBLE, groupNameView.getVisibility()); assertEquals("Test Group Name", groupNameView.getText()); @@ -269,7 +269,7 @@ public class NotificationInfoTest extends SysuiTestCase { public void testBindNotification_SetsTextChannelName() throws Exception { mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager, TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, true, false, - false, IMPORTANCE_DEFAULT, NotificationInfo.ACTION_NONE); + false, IMPORTANCE_DEFAULT); final TextView textView = mNotificationInfo.findViewById(R.id.channel_name); assertEquals(TEST_CHANNEL_NAME, textView.getText()); } @@ -278,7 +278,7 @@ public class NotificationInfoTest extends SysuiTestCase { public void testBindNotification_DefaultChannelDoesNotUseChannelName() throws Exception { mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager, TEST_PACKAGE_NAME, mDefaultNotificationChannel, 1, mSbn, null, null, null, true, - false, false, IMPORTANCE_DEFAULT, NotificationInfo.ACTION_NONE); + false, false, IMPORTANCE_DEFAULT); final TextView textView = mNotificationInfo.findViewById(R.id.channel_name); assertEquals(GONE, textView.getVisibility()); } @@ -291,7 +291,7 @@ public class NotificationInfoTest extends SysuiTestCase { eq(TEST_PACKAGE_NAME), eq(TEST_UID), anyBoolean())).thenReturn(10); mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager, TEST_PACKAGE_NAME, mDefaultNotificationChannel, 1, mSbn, null, null, null, true, - false, false, IMPORTANCE_DEFAULT, NotificationInfo.ACTION_NONE); + false, false, IMPORTANCE_DEFAULT); final TextView textView = mNotificationInfo.findViewById(R.id.channel_name); assertEquals(VISIBLE, textView.getVisibility()); } @@ -300,7 +300,7 @@ public class NotificationInfoTest extends SysuiTestCase { public void testBindNotification_UnblockablePackageUsesChannelName() throws Exception { mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager, TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, true, true, - false, IMPORTANCE_DEFAULT, NotificationInfo.ACTION_NONE); + false, IMPORTANCE_DEFAULT); final TextView textView = mNotificationInfo.findViewById(R.id.channel_name); assertEquals(VISIBLE, textView.getVisibility()); } @@ -309,7 +309,7 @@ public class NotificationInfoTest extends SysuiTestCase { public void testBindNotification_BlockButton() throws Exception { mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager, TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, true, false, - false, IMPORTANCE_DEFAULT, NotificationInfo.ACTION_NONE); + false, IMPORTANCE_DEFAULT); final View block = mNotificationInfo.findViewById(R.id.block); final View toggleSilent = mNotificationInfo.findViewById(R.id.toggle_silent); final View minimize = mNotificationInfo.findViewById(R.id.minimize); @@ -323,7 +323,7 @@ public class NotificationInfoTest extends SysuiTestCase { mNotificationChannel.setImportance(IMPORTANCE_DEFAULT); mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager, TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, true, false, - true, IMPORTANCE_DEFAULT, NotificationInfo.ACTION_NONE); + true, IMPORTANCE_DEFAULT); final TextView toggleSilent = mNotificationInfo.findViewById(R.id.toggle_silent); assertEquals(VISIBLE, toggleSilent.getVisibility()); assertEquals( @@ -335,7 +335,7 @@ public class NotificationInfoTest extends SysuiTestCase { mNotificationChannel.setImportance(IMPORTANCE_LOW); mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager, TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, true, false, - true, IMPORTANCE_LOW, NotificationInfo.ACTION_NONE); + true, IMPORTANCE_LOW); final TextView toggleSilent = mNotificationInfo.findViewById(R.id.toggle_silent); assertEquals(VISIBLE, toggleSilent.getVisibility()); assertEquals( @@ -347,7 +347,7 @@ public class NotificationInfoTest extends SysuiTestCase { mNotificationChannel.setImportance(IMPORTANCE_UNSPECIFIED); mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager, TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, true, false, - true, IMPORTANCE_DEFAULT, NotificationInfo.ACTION_NONE); + true, IMPORTANCE_DEFAULT); final TextView toggleSilent = mNotificationInfo.findViewById(R.id.toggle_silent); assertEquals(VISIBLE, toggleSilent.getVisibility()); assertEquals( @@ -360,7 +360,7 @@ public class NotificationInfoTest extends SysuiTestCase { mNotificationChannel.setImportance(IMPORTANCE_UNSPECIFIED); mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager, TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, true, false, - true, IMPORTANCE_LOW, NotificationInfo.ACTION_NONE); + true, IMPORTANCE_LOW); final TextView toggleSilent = mNotificationInfo.findViewById(R.id.toggle_silent); assertEquals(VISIBLE, toggleSilent.getVisibility()); assertEquals( @@ -372,7 +372,7 @@ public class NotificationInfoTest extends SysuiTestCase { mSbn.getNotification().flags = Notification.FLAG_FOREGROUND_SERVICE; mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager, TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, true, false, - false, IMPORTANCE_DEFAULT, NotificationInfo.ACTION_NONE); + false, IMPORTANCE_DEFAULT); final View block = mNotificationInfo.findViewById(R.id.block); final View minimize = mNotificationInfo.findViewById(R.id.minimize); assertEquals(GONE, block.getVisibility()); @@ -387,7 +387,7 @@ public class NotificationInfoTest extends SysuiTestCase { (View v, NotificationChannel c, int appUid) -> { assertEquals(mNotificationChannel, c); latch.countDown(); - }, null, true, false, false, IMPORTANCE_DEFAULT, NotificationInfo.ACTION_NONE); + }, null, true, false, false, IMPORTANCE_DEFAULT); final View settingsButton = mNotificationInfo.findViewById(R.id.info); settingsButton.performClick(); @@ -399,7 +399,7 @@ public class NotificationInfoTest extends SysuiTestCase { public void testBindNotification_SettingsButtonInvisibleWhenNoClickListener() throws Exception { mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager, TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, true, false, - false, IMPORTANCE_DEFAULT, NotificationInfo.ACTION_NONE); + false, IMPORTANCE_DEFAULT); final View settingsButton = mNotificationInfo.findViewById(R.id.info); assertTrue(settingsButton.getVisibility() != View.VISIBLE); } @@ -411,7 +411,7 @@ public class NotificationInfoTest extends SysuiTestCase { TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, (View v, NotificationChannel c, int appUid) -> { assertEquals(mNotificationChannel, c); - }, null, false, false, false, IMPORTANCE_DEFAULT, NotificationInfo.ACTION_NONE); + }, null, false, false, false, IMPORTANCE_DEFAULT); final View settingsButton = mNotificationInfo.findViewById(R.id.info); assertTrue(settingsButton.getVisibility() != View.VISIBLE); } @@ -420,11 +420,11 @@ public class NotificationInfoTest extends SysuiTestCase { public void testBindNotification_SettingsButtonReappearsAfterSecondBind() throws Exception { mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager, TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, true, false, - false, IMPORTANCE_DEFAULT, NotificationInfo.ACTION_NONE); + false, IMPORTANCE_DEFAULT); mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager, TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, (View v, NotificationChannel c, int appUid) -> { - }, null, true, false, false, IMPORTANCE_DEFAULT, NotificationInfo.ACTION_NONE); + }, null, true, false, false, IMPORTANCE_DEFAULT); final View settingsButton = mNotificationInfo.findViewById(R.id.info); assertEquals(View.VISIBLE, settingsButton.getVisibility()); } @@ -433,7 +433,7 @@ public class NotificationInfoTest extends SysuiTestCase { public void testLogBlockingHelperCounter_doesntLogForNormalGutsView() throws Exception { mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager, TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, true, false, - false, IMPORTANCE_DEFAULT, NotificationInfo.ACTION_NONE); + false, IMPORTANCE_DEFAULT); mNotificationInfo.logBlockingHelperCounter("HowCanNotifsBeRealIfAppsArent"); verify(mMetricsLogger, times(0)).count(anyString(), anyInt()); } @@ -442,7 +442,7 @@ public class NotificationInfoTest extends SysuiTestCase { public void testLogBlockingHelperCounter_logsForBlockingHelper() throws Exception { mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager, TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, false, true, - true, true, false, IMPORTANCE_DEFAULT, NotificationInfo.ACTION_NONE); + true, true, false, IMPORTANCE_DEFAULT); mNotificationInfo.logBlockingHelperCounter("HowCanNotifsBeRealIfAppsArent"); verify(mMetricsLogger, times(1)).count(anyString(), anyInt()); } @@ -455,7 +455,7 @@ public class NotificationInfoTest extends SysuiTestCase { (View v, NotificationChannel c, int appUid) -> { assertEquals(null, c); latch.countDown(); - }, null, true, true, false, IMPORTANCE_DEFAULT, NotificationInfo.ACTION_NONE); + }, null, true, true, false, IMPORTANCE_DEFAULT); mNotificationInfo.findViewById(R.id.info).performClick(); // Verify that listener was triggered. @@ -468,7 +468,7 @@ public class NotificationInfoTest extends SysuiTestCase { throws Exception { mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager, TEST_PACKAGE_NAME, mNotificationChannel, MULTIPLE_CHANNEL_COUNT, mSbn, null, null, - null, true, true, false, IMPORTANCE_DEFAULT, NotificationInfo.ACTION_NONE); + null, true, true, false, IMPORTANCE_DEFAULT); final TextView channelNameView = mNotificationInfo.findViewById(R.id.channel_name); assertEquals(GONE, channelNameView.getVisibility()); @@ -479,7 +479,7 @@ public class NotificationInfoTest extends SysuiTestCase { public void testStopInvisibleIfBundleFromDifferentChannels() throws Exception { mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager, TEST_PACKAGE_NAME, mNotificationChannel, MULTIPLE_CHANNEL_COUNT, mSbn, null, null, - null, true, true, false, IMPORTANCE_DEFAULT, NotificationInfo.ACTION_NONE); + null, true, true, false, IMPORTANCE_DEFAULT); final TextView blockView = mNotificationInfo.findViewById(R.id.block); assertEquals(GONE, blockView.getVisibility()); } @@ -488,7 +488,7 @@ public class NotificationInfoTest extends SysuiTestCase { public void testbindNotification_BlockingHelper() throws Exception { mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager, TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, false, false, - true, true, false, IMPORTANCE_DEFAULT, NotificationInfo.ACTION_NONE); + true, true, false, IMPORTANCE_DEFAULT); final TextView view = mNotificationInfo.findViewById(R.id.block_prompt); assertEquals(View.VISIBLE, view.getVisibility()); assertEquals(mContext.getString(R.string.inline_blocking_helper), view.getText()); @@ -498,7 +498,7 @@ public class NotificationInfoTest extends SysuiTestCase { public void testbindNotification_UnblockableTextVisibleWhenAppUnblockable() throws Exception { mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager, TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, true, true, - false, IMPORTANCE_DEFAULT, NotificationInfo.ACTION_NONE); + false, IMPORTANCE_DEFAULT); final TextView view = mNotificationInfo.findViewById(R.id.block_prompt); assertEquals(View.VISIBLE, view.getVisibility()); assertEquals(mContext.getString(R.string.notification_unblockable_desc), @@ -509,7 +509,7 @@ public class NotificationInfoTest extends SysuiTestCase { public void testBindNotification_DoesNotUpdateNotificationChannel() throws Exception { mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager, TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, true, false, - false, IMPORTANCE_DEFAULT, NotificationInfo.ACTION_NONE); + false, IMPORTANCE_DEFAULT); mTestableLooper.processAllMessages(); verify(mMockINotificationManager, never()).updateNotificationChannelForPackage( anyString(), eq(TEST_UID), any()); @@ -520,7 +520,7 @@ public class NotificationInfoTest extends SysuiTestCase { mNotificationChannel.setImportance(IMPORTANCE_LOW); mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager, TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, true, false, - false, IMPORTANCE_DEFAULT, NotificationInfo.ACTION_NONE); + false, IMPORTANCE_DEFAULT); mNotificationInfo.findViewById(R.id.block).performClick(); mTestableLooper.processAllMessages(); @@ -534,7 +534,7 @@ public class NotificationInfoTest extends SysuiTestCase { mNotificationChannel.setImportance(IMPORTANCE_LOW); mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager, TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, true, false, - false, IMPORTANCE_DEFAULT, NotificationInfo.ACTION_NONE); + false, IMPORTANCE_DEFAULT); mNotificationInfo.findViewById(R.id.minimize).performClick(); mTestableLooper.processAllMessages(); @@ -548,7 +548,7 @@ public class NotificationInfoTest extends SysuiTestCase { mNotificationChannel.setImportance(IMPORTANCE_DEFAULT); mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager, TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, true, false, - true, IMPORTANCE_DEFAULT, NotificationInfo.ACTION_NONE); + true, IMPORTANCE_DEFAULT); mNotificationInfo.findViewById(R.id.toggle_silent).performClick(); mTestableLooper.processAllMessages(); @@ -562,7 +562,7 @@ public class NotificationInfoTest extends SysuiTestCase { mNotificationChannel.setImportance(IMPORTANCE_LOW); mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager, TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, true, false, - true, IMPORTANCE_DEFAULT, NotificationInfo.ACTION_NONE); + true, IMPORTANCE_DEFAULT); mNotificationInfo.findViewById(R.id.toggle_silent).performClick(); mTestableLooper.processAllMessages(); @@ -576,7 +576,7 @@ public class NotificationInfoTest extends SysuiTestCase { int originalImportance = mNotificationChannel.getImportance(); mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager, TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, true, false, - false, IMPORTANCE_DEFAULT, NotificationInfo.ACTION_NONE); + false, IMPORTANCE_DEFAULT); mNotificationInfo.handleCloseControls(true, false); mTestableLooper.processAllMessages(); @@ -591,7 +591,7 @@ public class NotificationInfoTest extends SysuiTestCase { mNotificationChannel.setImportance(IMPORTANCE_UNSPECIFIED); mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager, TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, true, false, - false, IMPORTANCE_DEFAULT, NotificationInfo.ACTION_NONE); + false, IMPORTANCE_DEFAULT); mNotificationInfo.handleCloseControls(true, false); @@ -609,8 +609,8 @@ public class NotificationInfoTest extends SysuiTestCase { TEST_PACKAGE_NAME, mNotificationChannel /* notificationChannel */, 10 /* numUniqueChannelsInRow */, mSbn, null /* checkSaveListener */, null /* onSettingsClick */, null /* onAppSettingsClick */ , - true, false /* isNonblockable */, false /* isNoisy */, IMPORTANCE_DEFAULT, - NotificationInfo.ACTION_NONE); + true, false /* isNonblockable */, false /* isNoisy */, IMPORTANCE_DEFAULT + ); mNotificationInfo.findViewById(R.id.block).performClick(); waitForUndoButton(); @@ -631,8 +631,8 @@ public class NotificationInfoTest extends SysuiTestCase { TEST_PACKAGE_NAME, mNotificationChannel /* notificationChannel */, 10 /* numUniqueChannelsInRow */, mSbn, null /* checkSaveListener */, null /* onSettingsClick */, null /* onAppSettingsClick */, - true, false /* isNonblockable */, false /* isNoisy */, IMPORTANCE_DEFAULT, - NotificationInfo.ACTION_NONE); + true, false /* isNonblockable */, false /* isNoisy */, IMPORTANCE_DEFAULT + ); mNotificationInfo.findViewById(R.id.block).performClick(); waitForUndoButton(); @@ -653,8 +653,7 @@ public class NotificationInfoTest extends SysuiTestCase { null /* onSettingsClick */, null /* onAppSettingsClick */ , true /* provisioned */, false /* isNonblockable */, true /* isForBlockingHelper */, - true /* isUserSentimentNegative */, false /* isNoisy */, IMPORTANCE_DEFAULT, - NotificationInfo.ACTION_NONE); + true /* isUserSentimentNegative */, false /* isNoisy */, IMPORTANCE_DEFAULT); NotificationGuts guts = spy(new NotificationGuts(mContext, null)); when(guts.getWindowToken()).thenReturn(mock(IBinder.class)); @@ -682,8 +681,7 @@ public class NotificationInfoTest extends SysuiTestCase { 10 /* numUniqueChannelsInRow */, mSbn, listener /* checkSaveListener */, null /* onSettingsClick */, null /* onAppSettingsClick */ , true /* provisioned */, false /* isNonblockable */, true /* isForBlockingHelper */, - true /* isUserSentimentNegative */, false /* isNoisy */, IMPORTANCE_DEFAULT, - NotificationInfo.ACTION_NONE); + true /* isUserSentimentNegative */, false /* isNoisy */, IMPORTANCE_DEFAULT); NotificationGuts guts = spy(new NotificationGuts(mContext, null)); when(guts.getWindowToken()).thenReturn(mock(IBinder.class)); @@ -712,7 +710,7 @@ public class NotificationInfoTest extends SysuiTestCase { null /* onSettingsClick */, null /* onAppSettingsClick */ , false /* isNonblockable */, true /* isForBlockingHelper */, true, true /* isUserSentimentNegative */, false /* isNoisy */, - IMPORTANCE_DEFAULT, NotificationInfo.ACTION_NONE); + IMPORTANCE_DEFAULT); mNotificationInfo.handleCloseControls(true /* save */, false /* force */); @@ -731,8 +729,7 @@ public class NotificationInfoTest extends SysuiTestCase { null /* onSettingsClick */, null /* onAppSettingsClick */, true /* provisioned */, false /* isNonblockable */, true /* isForBlockingHelper */, - true /* isUserSentimentNegative */, false /* isNoisy */, IMPORTANCE_DEFAULT, - NotificationInfo.ACTION_NONE); + true /* isUserSentimentNegative */, false /* isNoisy */, IMPORTANCE_DEFAULT); mNotificationInfo.findViewById(R.id.block).performClick(); mTestableLooper.processAllMessages(); @@ -755,7 +752,7 @@ public class NotificationInfoTest extends SysuiTestCase { true /* isForBlockingHelper */, true, false /* isUserSentimentNegative */, - false /* isNoisy */, IMPORTANCE_DEFAULT, NotificationInfo.ACTION_NONE); + false /* isNoisy */, IMPORTANCE_DEFAULT); NotificationGuts guts = mock(NotificationGuts.class); doCallRealMethod().when(guts).closeControls(anyInt(), anyInt(), anyBoolean(), anyBoolean()); mNotificationInfo.setGutsParent(guts); @@ -770,7 +767,7 @@ public class NotificationInfoTest extends SysuiTestCase { mNotificationChannel.setImportance(IMPORTANCE_LOW); mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager, TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, true, true, - false, IMPORTANCE_DEFAULT, NotificationInfo.ACTION_NONE); + false, IMPORTANCE_DEFAULT); mNotificationInfo.findViewById(R.id.block).performClick(); waitForUndoButton(); @@ -784,7 +781,7 @@ public class NotificationInfoTest extends SysuiTestCase { mNotificationChannel.setImportance(IMPORTANCE_LOW); mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager, TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, true, false, - false, IMPORTANCE_DEFAULT, NotificationInfo.ACTION_NONE); + false, IMPORTANCE_DEFAULT); mNotificationInfo.findViewById(R.id.block).performClick(); waitForUndoButton(); @@ -817,7 +814,7 @@ public class NotificationInfoTest extends SysuiTestCase { false /* isNonblockable */, true /* isForBlockingHelper */, true /* isUserSentimentNegative */, - false/* isNoisy */, IMPORTANCE_DEFAULT, NotificationInfo.ACTION_NONE); + false/* isNoisy */, IMPORTANCE_DEFAULT); mNotificationInfo.findViewById(R.id.block).performClick(); waitForUndoButton(); @@ -839,7 +836,7 @@ public class NotificationInfoTest extends SysuiTestCase { mNotificationChannel.setImportance(IMPORTANCE_LOW); mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager, TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, true, true, - false, IMPORTANCE_DEFAULT, NotificationInfo.ACTION_NONE); + false, IMPORTANCE_DEFAULT); mNotificationInfo.findViewById(R.id.minimize).performClick(); waitForUndoButton(); @@ -854,7 +851,7 @@ public class NotificationInfoTest extends SysuiTestCase { mSbn.getNotification().flags = Notification.FLAG_FOREGROUND_SERVICE; mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager, TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, true, false, - false, IMPORTANCE_DEFAULT, NotificationInfo.ACTION_NONE); + false, IMPORTANCE_DEFAULT); mNotificationInfo.findViewById(R.id.minimize).performClick(); waitForUndoButton(); @@ -875,7 +872,7 @@ public class NotificationInfoTest extends SysuiTestCase { mNotificationChannel.setImportance(IMPORTANCE_LOW); mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager, TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, true, false, - false, IMPORTANCE_DEFAULT, NotificationInfo.ACTION_NONE); + false, IMPORTANCE_DEFAULT); mNotificationInfo.handleCloseControls(true, false); @@ -893,7 +890,7 @@ public class NotificationInfoTest extends SysuiTestCase { mNotificationChannel.setImportance(IMPORTANCE_LOW); mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager, TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, true, false, - false, IMPORTANCE_DEFAULT, NotificationInfo.ACTION_NONE); + false, IMPORTANCE_DEFAULT); mNotificationInfo.findViewById(R.id.block).performClick(); waitForUndoButton(); @@ -915,7 +912,7 @@ public class NotificationInfoTest extends SysuiTestCase { mNotificationChannel.setImportance(IMPORTANCE_LOW); mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager, TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, true, false, - false, IMPORTANCE_DEFAULT, NotificationInfo.ACTION_NONE); + false, IMPORTANCE_DEFAULT); mNotificationInfo.findViewById(R.id.minimize).performClick(); waitForUndoButton(); @@ -937,7 +934,7 @@ public class NotificationInfoTest extends SysuiTestCase { mNotificationChannel.setImportance(IMPORTANCE_DEFAULT); mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager, TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, true, false, - true, IMPORTANCE_DEFAULT, NotificationInfo.ACTION_NONE); + true, IMPORTANCE_DEFAULT); mNotificationInfo.findViewById(R.id.toggle_silent).performClick(); waitForUndoButton(); @@ -958,7 +955,7 @@ public class NotificationInfoTest extends SysuiTestCase { mNotificationChannel.setImportance(IMPORTANCE_LOW); mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager, TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, true, false, - false, IMPORTANCE_DEFAULT, NotificationInfo.ACTION_NONE); + false, IMPORTANCE_DEFAULT); mNotificationInfo.findViewById(R.id.toggle_silent).performClick(); waitForUndoButton(); @@ -980,7 +977,7 @@ public class NotificationInfoTest extends SysuiTestCase { mNotificationChannel.setImportance(IMPORTANCE_UNSPECIFIED); mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager, TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, true, false, - true, IMPORTANCE_DEFAULT, NotificationInfo.ACTION_NONE); + true, IMPORTANCE_DEFAULT); mNotificationInfo.findViewById(R.id.toggle_silent).performClick(); waitForUndoButton(); @@ -1002,7 +999,7 @@ public class NotificationInfoTest extends SysuiTestCase { mNotificationChannel.setImportance(IMPORTANCE_UNSPECIFIED); mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager, TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, true, false, - false, IMPORTANCE_LOW, NotificationInfo.ACTION_NONE); + false, IMPORTANCE_LOW); mNotificationInfo.findViewById(R.id.toggle_silent).performClick(); waitForUndoButton(); @@ -1023,7 +1020,7 @@ public class NotificationInfoTest extends SysuiTestCase { mNotificationChannel.setImportance(IMPORTANCE_LOW); mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager, TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, true, true, - false, IMPORTANCE_DEFAULT, NotificationInfo.ACTION_NONE); + false, IMPORTANCE_DEFAULT); mNotificationInfo.findViewById(R.id.minimize).performClick(); waitForUndoButton(); @@ -1039,7 +1036,7 @@ public class NotificationInfoTest extends SysuiTestCase { mNotificationChannel.setImportance(IMPORTANCE_LOW); mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager, TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, true, true, - false, IMPORTANCE_DEFAULT, NotificationInfo.ACTION_NONE); + false, IMPORTANCE_DEFAULT); mNotificationInfo.findViewById(R.id.block).performClick(); waitForUndoButton(); @@ -1056,7 +1053,7 @@ public class NotificationInfoTest extends SysuiTestCase { mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager, TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, (Runnable saveImportance, StatusBarNotification sbn) -> { - }, null, null, true, true, false, IMPORTANCE_DEFAULT, NotificationInfo.ACTION_NONE); + }, null, null, true, true, false, IMPORTANCE_DEFAULT); mNotificationInfo.findViewById(R.id.block).performClick(); mTestableLooper.processAllMessages(); @@ -1074,8 +1071,8 @@ public class NotificationInfoTest extends SysuiTestCase { TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, (Runnable saveImportance, StatusBarNotification sbn) -> { saveImportance.run(); - }, null, null, true, false, false, IMPORTANCE_DEFAULT, - NotificationInfo.ACTION_NONE); + }, null, null, true, false, false, IMPORTANCE_DEFAULT + ); mNotificationInfo.findViewById(R.id.block).performClick(); mTestableLooper.processAllMessages(); @@ -1111,7 +1108,7 @@ public class NotificationInfoTest extends SysuiTestCase { TEST_PACKAGE_NAME, mNotificationChannel, 1, sbn, null, null, (View v, Intent intent) -> { latch.countDown(); - }, true, false, false, IMPORTANCE_DEFAULT, NotificationInfo.ACTION_NONE); + }, true, false, false, IMPORTANCE_DEFAULT); final TextView settingsLink = mNotificationInfo.findViewById(R.id.app_settings); assertEquals(View.VISIBLE, settingsLink.getVisibility()); settingsLink.performClick(); @@ -1139,7 +1136,7 @@ public class NotificationInfoTest extends SysuiTestCase { TEST_PACKAGE_NAME, mNotificationChannel, MULTIPLE_CHANNEL_COUNT, sbn, null, null, (View v, Intent intent) -> { latch.countDown(); - }, true, false, false, IMPORTANCE_DEFAULT, NotificationInfo.ACTION_NONE); + }, true, false, false, IMPORTANCE_DEFAULT); final TextView settingsLink = mNotificationInfo.findViewById(R.id.app_settings); assertEquals(View.VISIBLE, settingsLink.getVisibility()); settingsLink.performClick(); @@ -1158,7 +1155,7 @@ public class NotificationInfoTest extends SysuiTestCase { mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager, TEST_PACKAGE_NAME, mNotificationChannel, MULTIPLE_CHANNEL_COUNT, sbn, null, null, - null, true, false, false, IMPORTANCE_DEFAULT, NotificationInfo.ACTION_NONE); + null, true, false, false, IMPORTANCE_DEFAULT); final TextView settingsLink = mNotificationInfo.findViewById(R.id.app_settings); assertEquals(GONE, settingsLink.getVisibility()); } @@ -1179,7 +1176,7 @@ public class NotificationInfoTest extends SysuiTestCase { mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager, TEST_PACKAGE_NAME, mNotificationChannel, 1, sbn, null, null, null, true, false, - false, IMPORTANCE_DEFAULT, NotificationInfo.ACTION_NONE); + false, IMPORTANCE_DEFAULT); final TextView settingsLink = mNotificationInfo.findViewById(R.id.app_settings); assertEquals(GONE, settingsLink.getVisibility()); } @@ -1202,7 +1199,7 @@ public class NotificationInfoTest extends SysuiTestCase { mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager, TEST_PACKAGE_NAME, mNotificationChannel, 1, sbn, null, null, null, false, true, - true, true, false, IMPORTANCE_DEFAULT, NotificationInfo.ACTION_NONE); + true, true, false, IMPORTANCE_DEFAULT); final TextView settingsLink = mNotificationInfo.findViewById(R.id.app_settings); assertEquals(GONE, settingsLink.getVisibility()); } @@ -1219,7 +1216,7 @@ public class NotificationInfoTest extends SysuiTestCase { mNotificationChannel.setImportance(IMPORTANCE_LOW); mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager, TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, true, true, - false, IMPORTANCE_DEFAULT, NotificationInfo.ACTION_NONE); + false, IMPORTANCE_DEFAULT); mNotificationInfo.findViewById(R.id.minimize).performClick(); waitForUndoButton(); @@ -1232,7 +1229,7 @@ public class NotificationInfoTest extends SysuiTestCase { mNotificationChannel.setImportance(IMPORTANCE_LOW); mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager, TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, true, true, - false, IMPORTANCE_DEFAULT, NotificationInfo.ACTION_NONE); + false, IMPORTANCE_DEFAULT); mNotificationInfo.findViewById(R.id.block).performClick(); waitForUndoButton(); @@ -1245,7 +1242,7 @@ public class NotificationInfoTest extends SysuiTestCase { mNotificationChannel.setImportance(IMPORTANCE_DEFAULT); mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager, TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, true, true, - true, IMPORTANCE_DEFAULT, NotificationInfo.ACTION_NONE); + true, IMPORTANCE_DEFAULT); mNotificationInfo.findViewById(R.id.toggle_silent).performClick(); waitForUndoButton(); @@ -1259,7 +1256,7 @@ public class NotificationInfoTest extends SysuiTestCase { mNotificationChannel.setImportance(IMPORTANCE_LOW); mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager, TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, true, true, - true, IMPORTANCE_DEFAULT, NotificationInfo.ACTION_NONE); + true, IMPORTANCE_DEFAULT); mNotificationInfo.findViewById(R.id.toggle_silent).performClick(); waitForUndoButton(); @@ -1273,7 +1270,7 @@ public class NotificationInfoTest extends SysuiTestCase { mNotificationChannel.setImportance(IMPORTANCE_LOW); mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager, TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, true, true, - false, IMPORTANCE_DEFAULT, NotificationInfo.ACTION_NONE); + false, IMPORTANCE_DEFAULT); mNotificationInfo.findViewById(R.id.block).performClick(); waitForUndoButton(); @@ -1285,7 +1282,7 @@ public class NotificationInfoTest extends SysuiTestCase { mNotificationChannel.setImportance(IMPORTANCE_LOW); mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager, TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, true, true, - false, IMPORTANCE_DEFAULT, NotificationInfo.ACTION_NONE); + false, IMPORTANCE_DEFAULT); mNotificationInfo.findViewById(R.id.block).performClick(); waitForUndoButton(); @@ -1293,60 +1290,4 @@ public class NotificationInfoTest extends SysuiTestCase { waitForStopButton(); assertEquals(VISIBLE, mNotificationInfo.findViewById(R.id.header).getVisibility()); } - - @Test - public void testBindNotificationWithInitialBlockAction() throws Exception { - mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager, - TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, true, false, - false, IMPORTANCE_DEFAULT, NotificationInfo.ACTION_BLOCK); - waitForUndoButton(); - mNotificationInfo.handleCloseControls(true, false); - - mTestableLooper.processAllMessages(); - ArgumentCaptor<NotificationChannel> updated = - ArgumentCaptor.forClass(NotificationChannel.class); - verify(mMockINotificationManager, times(1)).updateNotificationChannelForPackage( - anyString(), eq(TEST_UID), updated.capture()); - assertTrue((updated.getValue().getUserLockedFields() - & USER_LOCKED_IMPORTANCE) != 0); - assertEquals(IMPORTANCE_NONE, updated.getValue().getImportance()); - } - - @Test - public void testBindNotificationWithInitialSilenceAction() throws Exception { - mNotificationChannel.setImportance(IMPORTANCE_DEFAULT); - mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager, - TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, true, false, - true, IMPORTANCE_DEFAULT, NotificationInfo.ACTION_TOGGLE_SILENT); - waitForUndoButton(); - mNotificationInfo.handleCloseControls(true, false); - - mTestableLooper.processAllMessages(); - ArgumentCaptor<NotificationChannel> updated = - ArgumentCaptor.forClass(NotificationChannel.class); - verify(mMockINotificationManager, times(1)).updateNotificationChannelForPackage( - anyString(), eq(TEST_UID), updated.capture()); - assertTrue((updated.getValue().getUserLockedFields() - & USER_LOCKED_IMPORTANCE) != 0); - assertEquals(IMPORTANCE_LOW, updated.getValue().getImportance()); - } - - @Test - public void testBindNotificationWithInitialUnSilenceAction() throws Exception { - mNotificationChannel.setImportance(IMPORTANCE_LOW); - mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager, - TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, true, false, - true, IMPORTANCE_LOW, NotificationInfo.ACTION_TOGGLE_SILENT); - waitForUndoButton(); - mNotificationInfo.handleCloseControls(true, false); - - mTestableLooper.processAllMessages(); - ArgumentCaptor<NotificationChannel> updated = - ArgumentCaptor.forClass(NotificationChannel.class); - verify(mMockINotificationManager, times(1)).updateNotificationChannelForPackage( - anyString(), eq(TEST_UID), updated.capture()); - assertTrue((updated.getValue().getUserLockedFields() - & USER_LOCKED_IMPORTANCE) != 0); - assertEquals(IMPORTANCE_HIGH, updated.getValue().getImportance()); - } } diff --git a/services/accessibility/java/com/android/server/accessibility/MagnificationGestureHandler.java b/services/accessibility/java/com/android/server/accessibility/MagnificationGestureHandler.java index 8d691ffd194d..12e7376b750f 100644 --- a/services/accessibility/java/com/android/server/accessibility/MagnificationGestureHandler.java +++ b/services/accessibility/java/com/android/server/accessibility/MagnificationGestureHandler.java @@ -273,33 +273,6 @@ class MagnificationGestureHandler extends BaseEventStreamTransformation { private void dispatchTransformedEvent(MotionEvent event, MotionEvent rawEvent, int policyFlags) { - if (DEBUG_ALL) Slog.i(LOG_TAG, "dispatchTransformedEvent(event = " + event + ")"); - - // If the touchscreen event is within the magnified portion of the screen we have - // to change its location to be where the user thinks he is poking the - // UI which may have been magnified and panned. - if (mMagnificationController.isMagnifying() - && event.isFromSource(SOURCE_TOUCHSCREEN) - && mMagnificationController.magnificationRegionContains( - event.getX(), event.getY())) { - final float scale = mMagnificationController.getScale(); - final float scaledOffsetX = mMagnificationController.getOffsetX(); - final float scaledOffsetY = mMagnificationController.getOffsetY(); - final int pointerCount = event.getPointerCount(); - PointerCoords[] coords = getTempPointerCoordsWithMinSize(pointerCount); - PointerProperties[] properties = getTempPointerPropertiesWithMinSize( - pointerCount); - for (int i = 0; i < pointerCount; i++) { - event.getPointerCoords(i, coords[i]); - coords[i].x = (coords[i].x - scaledOffsetX) / scale; - coords[i].y = (coords[i].y - scaledOffsetY) / scale; - event.getPointerProperties(i, properties[i]); - } - event = MotionEvent.obtain(event.getDownTime(), - event.getEventTime(), event.getAction(), pointerCount, properties, - coords, 0, 0, 1.0f, 1.0f, event.getDeviceId(), 0, event.getSource(), - event.getFlags()); - } if (DEBUG_EVENT_STREAM) { storeEventInto(mDebugOutputEventHistory, event); try { diff --git a/services/core/java/com/android/server/am/SettingsToPropertiesMapper.java b/services/core/java/com/android/server/am/SettingsToPropertiesMapper.java index a5848ca0235a..4c4a09060706 100644 --- a/services/core/java/com/android/server/am/SettingsToPropertiesMapper.java +++ b/services/core/java/com/android/server/am/SettingsToPropertiesMapper.java @@ -65,6 +65,7 @@ class SettingsToPropertiesMapper { // permission in the corresponding .te file your feature belongs to. @VisibleForTesting static final String[] sGlobalSettings = new String[] { + Settings.Global.NATIVE_FLAGS_HEALTH_CHECK_ENABLED, }; @VisibleForTesting diff --git a/services/core/java/com/android/server/input/InputManagerService.java b/services/core/java/com/android/server/input/InputManagerService.java index 3a31c9c5e05f..3339a49c5ed0 100644 --- a/services/core/java/com/android/server/input/InputManagerService.java +++ b/services/core/java/com/android/server/input/InputManagerService.java @@ -1443,25 +1443,10 @@ public class InputManagerService extends IInputManager.Stub } } - public void setInputWindows(InputWindowHandle[] windowHandles, int displayId) { - nativeSetInputWindows(mPtr, windowHandles, displayId); - } - public void setFocusedApplication(int displayId, InputApplicationHandle application) { nativeSetFocusedApplication(mPtr, displayId, application); } - public void setFocusedWindow(InputWindowHandle focusedWindowHandle) { - final IWindow newFocusedWindow = - focusedWindowHandle != null ? focusedWindowHandle.clientWindow : null; - if (mFocusedWindow != newFocusedWindow) { - if (mFocusedWindowHasCapture) { - setPointerCapture(false); - } - mFocusedWindow = newFocusedWindow; - } - } - public void setFocusedDisplay(int displayId) { nativeSetFocusedDisplay(mPtr, displayId); } @@ -1799,11 +1784,22 @@ public class InputManagerService extends IInputManager.Stub mWindowManagerCallbacks.notifyInputChannelBroken(token); } + // Native callback + private void notifyFocusChanged(IBinder token) { + if (mFocusedWindow != token) { + if (mFocusedWindowHasCapture) { + setPointerCapture(false); + } + if (token instanceof IWindow) { + mFocusedWindow = (IWindow) token; + } + } + } + // Native callback. - private long notifyANR(InputApplicationHandle inputApplicationHandle, - IBinder token, String reason) { + private long notifyANR(IBinder token, String reason) { return mWindowManagerCallbacks.notifyANR( - inputApplicationHandle, token, reason); + token, reason); } // Native callback. @@ -1834,14 +1830,12 @@ public class InputManagerService extends IInputManager.Stub } // Native callback. - private long interceptKeyBeforeDispatching(IBinder focus, - KeyEvent event, int policyFlags) { + private long interceptKeyBeforeDispatching(IBinder focus, KeyEvent event, int policyFlags) { return mWindowManagerCallbacks.interceptKeyBeforeDispatching(focus, event, policyFlags); } // Native callback. - private KeyEvent dispatchUnhandledKey(IBinder focus, - KeyEvent event, int policyFlags) { + private KeyEvent dispatchUnhandledKey(IBinder focus, KeyEvent event, int policyFlags) { return mWindowManagerCallbacks.dispatchUnhandledKey(focus, event, policyFlags); } @@ -1993,8 +1987,7 @@ public class InputManagerService extends IInputManager.Stub public void notifyInputChannelBroken(IBinder token); - public long notifyANR(InputApplicationHandle inputApplicationHandle, - IBinder token, String reason); + public long notifyANR(IBinder token, String reason); public int interceptKeyBeforeQueueing(KeyEvent event, int policyFlags); diff --git a/services/core/java/com/android/server/timezone/RulesManagerService.java b/services/core/java/com/android/server/timezone/RulesManagerService.java index da0a794c74f3..4b413e5f76bb 100644 --- a/services/core/java/com/android/server/timezone/RulesManagerService.java +++ b/services/core/java/com/android/server/timezone/RulesManagerService.java @@ -49,7 +49,7 @@ import java.util.concurrent.atomic.AtomicBoolean; import libcore.icu.ICU; import libcore.timezone.TzDataSetVersion; import libcore.timezone.TimeZoneFinder; -import libcore.util.ZoneInfoDB; +import libcore.timezone.ZoneInfoDB; import static android.app.timezone.RulesState.DISTRO_STATUS_INSTALLED; import static android.app.timezone.RulesState.DISTRO_STATUS_NONE; diff --git a/services/core/java/com/android/server/wm/AppWindowToken.java b/services/core/java/com/android/server/wm/AppWindowToken.java index 52c78cea439c..6d402f291fcb 100644 --- a/services/core/java/com/android/server/wm/AppWindowToken.java +++ b/services/core/java/com/android/server/wm/AppWindowToken.java @@ -304,7 +304,7 @@ class AppWindowToken extends WindowToken implements WindowManagerService.AppFree mActivityComponent = activityComponent; mVoiceInteraction = voiceInteraction; mFillsParent = fillsParent; - mInputApplicationHandle = new InputApplicationHandle(this); + mInputApplicationHandle = new InputApplicationHandle(appToken.asBinder()); } void onFirstWindowDrawn(WindowState win, WindowStateAnimator winAnimator) { diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java index 3acacbcce71d..478340d85d01 100644 --- a/services/core/java/com/android/server/wm/DisplayContent.java +++ b/services/core/java/com/android/server/wm/DisplayContent.java @@ -2400,8 +2400,8 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo mDisplayReady = false; mRemovingDisplay = false; } + mDisplayPolicy.onDisplayRemoved(); - mInputMonitor.onRemoved(); mService.mWindowPlacerLocked.requestTraversal(); } diff --git a/services/core/java/com/android/server/wm/DragDropController.java b/services/core/java/com/android/server/wm/DragDropController.java index 7ed078a93375..e3ddadc7f70e 100644 --- a/services/core/java/com/android/server/wm/DragDropController.java +++ b/services/core/java/com/android/server/wm/DragDropController.java @@ -74,8 +74,15 @@ class DragDropController { return mDragState != null; } - InputWindowHandle getInputWindowHandleLocked() { - return mDragState.getInputWindowHandle(); + void showInputSurface(SurfaceControl.Transaction t, int displayId) { + mDragState.showInputSurface(t, displayId); + } + + void hideInputSurface(SurfaceControl.Transaction t, int displayId) { + if (mDragState != null) { + // TODO: Are we guaranteed to get here? + mDragState.hideInputSurface(t, displayId); + } } void registerCallback(IDragDropCallback callback) { diff --git a/services/core/java/com/android/server/wm/DragState.java b/services/core/java/com/android/server/wm/DragState.java index a379266fe533..7279fe018055 100644 --- a/services/core/java/com/android/server/wm/DragState.java +++ b/services/core/java/com/android/server/wm/DragState.java @@ -32,9 +32,11 @@ import android.annotation.Nullable; import android.content.ClipData; import android.content.ClipDescription; import android.content.Context; +import android.graphics.Rect; import android.graphics.Point; import android.hardware.input.InputManager; import android.os.Build; +import android.os.Binder; import android.os.IBinder; import android.os.Process; import android.os.RemoteException; @@ -118,6 +120,11 @@ class DragState { private final Interpolator mCubicEaseOutInterpolator = new DecelerateInterpolator(1.5f); private Point mDisplaySize = new Point(); + // A surface used to catch input events for the drag-and-drop operation. + SurfaceControl mInputSurface; + + private final Rect mTmpClipRect = new Rect(); + DragState(WindowManagerService service, DragDropController controller, IBinder token, SurfaceControl surface, int flags, IBinder localWin) { mService = service; @@ -127,6 +134,42 @@ class DragState { mFlags = flags; mLocalWin = localWin; mNotifiedWindows = new ArrayList<WindowState>(); + + } + + void hideInputSurface(SurfaceControl.Transaction t, int displayId) { + if (displayId != mDisplayContent.getDisplayId()) { + return; + } + + if (mInputSurface != null) { + t.hide(mInputSurface); + } + } + + void showInputSurface(SurfaceControl.Transaction t, int displayId) { + if (displayId != mDisplayContent.getDisplayId()) { + return; + } + + if (mInputSurface == null) { + mInputSurface = mService.makeSurfaceBuilder(mService.mRoot.getDisplayContent(displayId) + .getSession()).setContainerLayer(true) + .setName("Drag and Drop Input Consumer").setSize(1, 1).build(); + } + final InputWindowHandle h = getInputWindowHandle(); + if (h == null) { + Slog.w(TAG_WM, "Drag is in progress but there is no " + + "drag window handle."); + return; + } + + t.show(mInputSurface); + t.setInputWindowInfo(mInputSurface, h); + t.setLayer(mInputSurface, Integer.MAX_VALUE); + + mTmpClipRect.set(0, 0, mDisplaySize.x, mDisplaySize.y); + t.setWindowCrop(mInputSurface, mTmpClipRect); } /** @@ -218,7 +261,7 @@ class DragState { mInputEventReceiver = new DragInputEventReceiver(mClientChannel, mService.mH.getLooper(), mDragDropController); - mDragApplicationHandle = new InputApplicationHandle(null); + mDragApplicationHandle = new InputApplicationHandle(new Binder()); mDragApplicationHandle.name = "drag"; mDragApplicationHandle.dispatchingTimeoutNanos = WindowManagerService.DEFAULT_INPUT_DISPATCHING_TIMEOUT_NANOS; @@ -226,7 +269,7 @@ class DragState { mDragWindowHandle = new InputWindowHandle(mDragApplicationHandle, null, display.getDisplayId()); mDragWindowHandle.name = "drag"; - mDragWindowHandle.inputChannel = mServerChannel; + mDragWindowHandle.token = mServerChannel.getToken(); mDragWindowHandle.layer = getDragLayerLocked(); mDragWindowHandle.layoutParamsFlags = 0; mDragWindowHandle.layoutParamsType = WindowManager.LayoutParams.TYPE_DRAG; diff --git a/services/core/java/com/android/server/wm/InputConsumerImpl.java b/services/core/java/com/android/server/wm/InputConsumerImpl.java index 49bedc97a38a..8140820871da 100644 --- a/services/core/java/com/android/server/wm/InputConsumerImpl.java +++ b/services/core/java/com/android/server/wm/InputConsumerImpl.java @@ -16,6 +16,8 @@ package com.android.server.wm; +import android.graphics.Rect; +import android.os.Binder; import android.os.IBinder; import android.os.Process; import android.os.RemoteException; @@ -25,6 +27,8 @@ import android.view.WindowManager; import android.view.InputApplicationHandle; import android.view.InputWindowHandle; +import android.view.SurfaceControl; +import android.util.Slog; import java.io.PrintWriter; @@ -39,6 +43,9 @@ class InputConsumerImpl implements IBinder.DeathRecipient { final int mClientPid; final UserHandle mClientUser; + final SurfaceControl mInputSurface; + Rect mTmpClipRect = new Rect(); + InputConsumerImpl(WindowManagerService service, IBinder token, String name, InputChannel inputChannel, int clientPid, UserHandle clientUser, int displayId) { mService = service; @@ -58,14 +65,14 @@ class InputConsumerImpl implements IBinder.DeathRecipient { } mService.mInputManager.registerInputChannel(mServerChannel, null); - mApplicationHandle = new InputApplicationHandle(null); + mApplicationHandle = new InputApplicationHandle(new Binder()); mApplicationHandle.name = name; mApplicationHandle.dispatchingTimeoutNanos = WindowManagerService.DEFAULT_INPUT_DISPATCHING_TIMEOUT_NANOS; mWindowHandle = new InputWindowHandle(mApplicationHandle, null, displayId); mWindowHandle.name = name; - mWindowHandle.inputChannel = mServerChannel; + mWindowHandle.token = mServerChannel.getToken(); mWindowHandle.layoutParamsType = WindowManager.LayoutParams.TYPE_INPUT_CONSUMER; mWindowHandle.layer = getLayerLw(mWindowHandle.layoutParamsType); mWindowHandle.layoutParamsFlags = 0; @@ -80,6 +87,11 @@ class InputConsumerImpl implements IBinder.DeathRecipient { mWindowHandle.ownerUid = Process.myUid(); mWindowHandle.inputFeatures = 0; mWindowHandle.scaleFactor = 1.0f; + + mInputSurface = mService.makeSurfaceBuilder(mService.mRoot.getDisplayContent(displayId) + .getSession()).setContainerLayer(true).setName("Input Consumer " + name) + .setSize(1, 1) + .build(); } void linkToDeathRecipient() { @@ -102,12 +114,33 @@ class InputConsumerImpl implements IBinder.DeathRecipient { mToken.unlinkToDeath(this, 0); } - void layout(int dw, int dh) { - mWindowHandle.touchableRegion.set(0, 0, dw, dh); - mWindowHandle.frameLeft = 0; - mWindowHandle.frameTop = 0; - mWindowHandle.frameRight = dw; - mWindowHandle.frameBottom = dh; + void layout(SurfaceControl.Transaction t, int dw, int dh) { + t.setPosition(mInputSurface, 0, 0); + + mTmpClipRect.set(0, 0, dw, dh); + t.setWindowCrop(mInputSurface, mTmpClipRect); + } + + void layout(SurfaceControl.Transaction t, Rect r) { + t.setPosition(mInputSurface, r.left, r.top); + mTmpClipRect.set(0, 0, r.width(), r.height()); + t.setWindowCrop(mInputSurface, mTmpClipRect); + } + + void hide(SurfaceControl.Transaction t) { + t.hide(mInputSurface); + } + + void show(SurfaceControl.Transaction t, WindowState w) { + t.show(mInputSurface); + t.setInputWindowInfo(mInputSurface, mWindowHandle); + t.setRelativeLayer(mInputSurface, w.getSurfaceControl(), 1); + } + + void show(SurfaceControl.Transaction t, int layer) { + t.show(mInputSurface); + t.setInputWindowInfo(mInputSurface, mWindowHandle); + t.setLayer(mInputSurface, layer); } private int getLayerLw(int windowType) { diff --git a/services/core/java/com/android/server/wm/InputManagerCallback.java b/services/core/java/com/android/server/wm/InputManagerCallback.java index 92ea1a90735c..94355395b38e 100644 --- a/services/core/java/com/android/server/wm/InputManagerCallback.java +++ b/services/core/java/com/android/server/wm/InputManagerCallback.java @@ -72,8 +72,7 @@ final class InputManagerCallback implements InputManagerService.WindowManagerCal * Called by the InputManager. */ @Override - public long notifyANR(InputApplicationHandle inputApplicationHandle, - IBinder token, String reason) { + public long notifyANR(IBinder token, String reason) { AppWindowToken appWindowToken = null; WindowState windowState = null; boolean aboveSystem = false; @@ -84,9 +83,6 @@ final class InputManagerCallback implements InputManagerService.WindowManagerCal appWindowToken = windowState.mAppToken; } } - if (appWindowToken == null && inputApplicationHandle != null) { - appWindowToken = (AppWindowToken)inputApplicationHandle.appWindowToken; - } if (windowState != null) { Slog.i(TAG_WM, "Input event dispatching timed out " diff --git a/services/core/java/com/android/server/wm/InputMonitor.java b/services/core/java/com/android/server/wm/InputMonitor.java index 83d32c8ad289..88b22cb5e01e 100644 --- a/services/core/java/com/android/server/wm/InputMonitor.java +++ b/services/core/java/com/android/server/wm/InputMonitor.java @@ -44,6 +44,7 @@ import android.view.InputApplicationHandle; import android.view.InputChannel; import android.view.InputEventReceiver; import android.view.InputWindowHandle; +import android.view.SurfaceControl; import com.android.server.policy.WindowManagerPolicy; @@ -61,9 +62,8 @@ final class InputMonitor { // When true, need to call updateInputWindowsLw(). private boolean mUpdateInputWindowsNeeded = true; - // Array of window handles to provide to the input dispatcher. - private InputWindowHandle[] mInputWindowHandles; - private int mInputWindowHandleCount; + // Currently focused input window handle. + private InputWindowHandle mFocusedInputWindowHandle; private boolean mDisableWallpaperTouchEvents; private final Rect mTmpRect = new Rect(); @@ -72,6 +72,8 @@ final class InputMonitor { private int mDisplayId; + SurfaceControl.Transaction mInputTransaction = new SurfaceControl.Transaction(); + /** * The set of input consumer added to the window manager by name, which consumes input events * for the windows below it. @@ -126,6 +128,7 @@ final class InputMonitor { private boolean disposeInputConsumer(InputConsumerImpl consumer) { if (consumer != null) { consumer.disposeChannelsLw(); + consumer.hide(mInputTransaction); return true; } return false; @@ -137,7 +140,16 @@ final class InputMonitor { void layoutInputConsumers(int dw, int dh) { for (int i = mInputConsumers.size() - 1; i >= 0; i--) { - mInputConsumers.valueAt(i).layout(dw, dh); + mInputConsumers.valueAt(i).layout(mInputTransaction, dw, dh); + } + } + + // The visibility of the input consumers is recomputed each time we + // update the input windows. We use a model where consumers begin invisible + // (set so by this function) and must meet some condition for visibility on each update. + void resetInputConsumers(SurfaceControl.Transaction t) { + for (int i = mInputConsumers.size() - 1; i >= 0; i--) { + mInputConsumers.valueAt(i).hide(t); } } @@ -177,18 +189,7 @@ final class InputMonitor { } - private void addInputWindowHandle(final InputWindowHandle windowHandle) { - if (mInputWindowHandles == null) { - mInputWindowHandles = new InputWindowHandle[16]; - } - if (mInputWindowHandleCount >= mInputWindowHandles.length) { - mInputWindowHandles = Arrays.copyOf(mInputWindowHandles, - mInputWindowHandleCount * 2); - } - mInputWindowHandles[mInputWindowHandleCount++] = windowHandle; - } - - void addInputWindowHandle(final InputWindowHandle inputWindowHandle, + void populateInputWindowHandle(final InputWindowHandle inputWindowHandle, final WindowState child, int flags, final int type, final boolean isVisible, final boolean hasFocus, final boolean hasWallpaper) { // Add a window to our list of input windows. @@ -214,6 +215,11 @@ final class InputMonitor { inputWindowHandle.frameRight = frame.right; inputWindowHandle.frameBottom = frame.bottom; + // Surface insets are hardcoded to be the same in all directions + // and we could probably deprecate the "left/right/top/bottom" concept. + // we avoid reintroducing this concept by just choosing one of them here. + inputWindowHandle.surfaceInset = child.getAttrs().surfaceInsets.left; + if (child.mGlobalScale != 1) { // If we are scaling the window, input coordinates need // to be inversely scaled to map from what is on screen @@ -227,12 +233,9 @@ final class InputMonitor { Slog.d(TAG_WM, "addInputWindowHandle: " + child + ", " + inputWindowHandle); } - addInputWindowHandle(inputWindowHandle); - } - private void clearInputWindowHandlesLw() { - while (mInputWindowHandleCount != 0) { - mInputWindowHandles[--mInputWindowHandleCount] = null; + if (hasFocus) { + mFocusedInputWindowHandle = inputWindowHandle; } } @@ -261,14 +264,9 @@ final class InputMonitor { if (DEBUG_DRAG) { Log.d(TAG_WM, "Inserting drag window"); } - final InputWindowHandle dragWindowHandle = - mService.mDragDropController.getInputWindowHandleLocked(); - if (dragWindowHandle == null) { - Slog.w(TAG_WM, "Drag is in progress but there is no " - + "drag window handle."); - } else if (dragWindowHandle.displayId == mDisplayId) { - addInputWindowHandle(dragWindowHandle); - } + mService.mDragDropController.showInputSurface(mInputTransaction, mDisplayId); + } else { + mService.mDragDropController.hideInputSurface(mInputTransaction, mDisplayId); } final boolean inPositioning = mService.mTaskPositioningController.isPositioningLocked(); @@ -276,14 +274,9 @@ final class InputMonitor { if (DEBUG_TASK_POSITIONING) { Log.d(TAG_WM, "Inserting window handle for repositioning"); } - final InputWindowHandle dragWindowHandle = - mService.mTaskPositioningController.getDragWindowHandleLocked(); - if (dragWindowHandle == null) { - Slog.e(TAG_WM, - "Repositioning is in progress but there is no drag window handle."); - } else if (dragWindowHandle.displayId == mDisplayId) { - addInputWindowHandle(dragWindowHandle); - } + mService.mTaskPositioningController.showInputSurface(mInputTransaction, mDisplayId); + } else { + mService.mTaskPositioningController.hideInputSurface(mInputTransaction, mDisplayId); } // Add all windows on the default display. @@ -362,12 +355,6 @@ final class InputMonitor { } } - void onRemoved() { - // If DisplayContent removed, we need find a way to remove window handles of this display - // from InputDispatcher, so pass an empty InputWindowHandles to remove them. - mService.mInputManager.setInputWindows(mInputWindowHandles, mDisplayId); - } - private final class UpdateInputForAllWindowsConsumer implements Consumer<WindowState> { InputConsumerImpl navInputConsumer; InputConsumerImpl pipInputConsumer; @@ -401,16 +388,16 @@ final class InputMonitor { final DisplayContent dc = mService.mRoot.getDisplayContent(mDisplayId); wallpaperController = dc.mWallpaperController; - dc.forAllWindows(this, true /* traverseTopToBottom */); + resetInputConsumers(mInputTransaction); + + dc.forAllWindows(this, + true /* traverseTopToBottom */); + if (mAddWallpaperInputConsumerHandle) { - // No visible wallpaper found, add the wallpaper input consumer at the end. - addInputWindowHandle(wallpaperInputConsumer.mWindowHandle); + wallpaperInputConsumer.show(mInputTransaction, 0); } - // Send windows to native code. - mService.mInputManager.setInputWindows(mInputWindowHandles, mDisplayId); - - clearInputWindowHandlesLw(); + mInputTransaction.apply(); Trace.traceEnd(Trace.TRACE_TAG_WINDOW_MANAGER); } @@ -420,7 +407,7 @@ final class InputMonitor { final InputChannel inputChannel = w.mInputChannel; final InputWindowHandle inputWindowHandle = w.mInputWindowHandle; if (inputChannel == null || inputWindowHandle == null || w.mRemoved - || w.canReceiveTouchInput()) { + || w.cantReceiveTouchInput()) { // Skip this window because it cannot possibly receive input. return; } @@ -438,41 +425,36 @@ final class InputMonitor { && recentsAnimationController.shouldApplyInputConsumer(w.mAppToken)) { if (recentsAnimationController.updateInputConsumerForApp( recentsAnimationInputConsumer.mWindowHandle, hasFocus)) { - addInputWindowHandle(recentsAnimationInputConsumer.mWindowHandle); + recentsAnimationInputConsumer.show(mInputTransaction, w); mAddRecentsAnimationInputConsumerHandle = false; } - // If the target app window does not yet exist, then we don't add the input - // consumer window, but also don't add the app window below. - return; } } if (w.inPinnedWindowingMode()) { - if (mAddPipInputConsumerHandle - && (inputWindowHandle.layer <= pipInputConsumer.mWindowHandle.layer)) { + if (mAddPipInputConsumerHandle) { // Update the bounds of the Pip input consumer to match the window bounds. w.getBounds(mTmpRect); + pipInputConsumer.layout(mInputTransaction, mTmpRect); + + // The touchable region is relative to the surface top-left + mTmpRect.offsetTo(0, 0); pipInputConsumer.mWindowHandle.touchableRegion.set(mTmpRect); - addInputWindowHandle(pipInputConsumer.mWindowHandle); + pipInputConsumer.show(mInputTransaction, w); mAddPipInputConsumerHandle = false; } - // TODO: Fix w.canReceiveTouchInput() to handle this case - if (!hasFocus) { - // Skip this pinned stack window if it does not have focus - return; - } } if (mAddInputConsumerHandle && inputWindowHandle.layer <= navInputConsumer.mWindowHandle.layer) { - addInputWindowHandle(navInputConsumer.mWindowHandle); + navInputConsumer.show(mInputTransaction, w); mAddInputConsumerHandle = false; } if (mAddWallpaperInputConsumerHandle) { if (w.mAttrs.type == TYPE_WALLPAPER && w.isVisibleLw()) { // Add the wallpaper input consumer above the first visible wallpaper. - addInputWindowHandle(wallpaperInputConsumer.mWindowHandle); + wallpaperInputConsumer.show(mInputTransaction, w); mAddWallpaperInputConsumerHandle = false; } } @@ -490,8 +472,13 @@ final class InputMonitor { mService.mDragDropController.sendDragStartedIfNeededLocked(w); } - addInputWindowHandle( + populateInputWindowHandle( inputWindowHandle, w, flags, type, isVisible, hasFocus, hasWallpaper); + + if (w.mWinAnimator.hasSurface()) { + mInputTransaction.setInputWindowInfo( + w.mWinAnimator.mSurfaceController.mSurfaceControl, inputWindowHandle); + } } } } diff --git a/services/core/java/com/android/server/wm/RootWindowContainer.java b/services/core/java/com/android/server/wm/RootWindowContainer.java index b483fd3bc642..fd9120a6c12e 100644 --- a/services/core/java/com/android/server/wm/RootWindowContainer.java +++ b/services/core/java/com/android/server/wm/RootWindowContainer.java @@ -189,9 +189,7 @@ class RootWindowContainer extends WindowContainer<DisplayContent> { mService.mH.sendMessage(msg); } }); - final WindowState topFocusedWindow = getTopFocusedDisplayContent().mCurrentFocus; - mService.mInputManager.setFocusedWindow( - topFocusedWindow != null ? topFocusedWindow.mInputWindowHandle : null); + return changed; } diff --git a/services/core/java/com/android/server/wm/TaskPositioner.java b/services/core/java/com/android/server/wm/TaskPositioner.java index 7182ad6fccfe..b88e581d5783 100644 --- a/services/core/java/com/android/server/wm/TaskPositioner.java +++ b/services/core/java/com/android/server/wm/TaskPositioner.java @@ -33,6 +33,7 @@ import android.annotation.IntDef; import android.app.IActivityTaskManager; import android.graphics.Point; import android.graphics.Rect; +import android.os.Binder; import android.os.Looper; import android.os.Process; import android.os.RemoteException; @@ -261,7 +262,7 @@ class TaskPositioner { mClientChannel, mService.mAnimationHandler.getLooper(), mService.mAnimator.getChoreographer()); - mDragApplicationHandle = new InputApplicationHandle(null); + mDragApplicationHandle = new InputApplicationHandle(new Binder()); mDragApplicationHandle.name = TAG; mDragApplicationHandle.dispatchingTimeoutNanos = WindowManagerService.DEFAULT_INPUT_DISPATCHING_TIMEOUT_NANOS; @@ -269,7 +270,7 @@ class TaskPositioner { mDragWindowHandle = new InputWindowHandle(mDragApplicationHandle, null, display.getDisplayId()); mDragWindowHandle.name = TAG; - mDragWindowHandle.inputChannel = mServerChannel; + mDragWindowHandle.token = mServerChannel.getToken(); mDragWindowHandle.layer = mService.getDragLayerLocked(); mDragWindowHandle.layoutParamsFlags = 0; mDragWindowHandle.layoutParamsType = WindowManager.LayoutParams.TYPE_DRAG; diff --git a/services/core/java/com/android/server/wm/TaskPositioningController.java b/services/core/java/com/android/server/wm/TaskPositioningController.java index 51567a0d6ad0..28bc039d6ee4 100644 --- a/services/core/java/com/android/server/wm/TaskPositioningController.java +++ b/services/core/java/com/android/server/wm/TaskPositioningController.java @@ -21,10 +21,14 @@ import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM; import android.annotation.Nullable; import android.app.IActivityTaskManager; +import android.graphics.Point; +import android.graphics.Rect; import android.os.Handler; import android.os.Looper; import android.os.RemoteException; import android.util.Slog; +import android.view.Display; +import android.view.SurfaceControl; import android.view.IWindow; import com.android.internal.annotations.GuardedBy; @@ -39,10 +43,14 @@ class TaskPositioningController { private final InputManagerService mInputManager; private final IActivityTaskManager mActivityManager; private final Handler mHandler; + private SurfaceControl mInputSurface; + private DisplayContent mPositioningDisplay; @GuardedBy("WindowManagerSerivce.mWindowMap") private @Nullable TaskPositioner mTaskPositioner; + private final Rect mTmpClipRect = new Rect(); + boolean isPositioningLocked() { return mTaskPositioner != null; } @@ -59,6 +67,43 @@ class TaskPositioningController { mHandler = new Handler(looper); } + void hideInputSurface(SurfaceControl.Transaction t, int displayId) { + if (mPositioningDisplay != null && mPositioningDisplay.getDisplayId() == displayId + && mInputSurface != null) { + t.hide(mInputSurface); + } + } + + void showInputSurface(SurfaceControl.Transaction t, int displayId) { + if (mPositioningDisplay == null || mPositioningDisplay.getDisplayId() != displayId) { + return; + } + final DisplayContent dc = mService.mRoot.getDisplayContent(displayId); + if (mInputSurface == null) { + mInputSurface = mService.makeSurfaceBuilder(dc.getSession()) + .setContainerLayer(true) + .setName("Drag and Drop Input Consumer").setSize(1, 1).build(); + } + + final InputWindowHandle h = getDragWindowHandleLocked(); + if (h == null) { + Slog.w(TAG_WM, "Drag is in progress but there is no " + + "drag window handle."); + return; + } + + t.show(mInputSurface); + t.setInputWindowInfo(mInputSurface, h); + t.setLayer(mInputSurface, Integer.MAX_VALUE); + + final Display display = dc.getDisplay(); + final Point p = new Point(); + display.getRealSize(p); + + mTmpClipRect.set(0, 0, p.x, p.y); + t.setWindowCrop(mInputSurface, mTmpClipRect); + } + boolean startMovingTask(IWindow window, float startX, float startY) { WindowState win = null; synchronized (mService.mGlobalLock) { @@ -122,6 +167,7 @@ class TaskPositioningController { Slog.w(TAG_WM, "startPositioningLocked: Invalid display content " + win); return false; } + mPositioningDisplay = displayContent; mTaskPositioner = TaskPositioner.create(mService); mTaskPositioner.register(displayContent); @@ -157,6 +203,7 @@ class TaskPositioningController { mTaskPositioner.unregister(); mTaskPositioner = null; } + mPositioningDisplay = null; } }); } diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java index 6f044f3d2689..9efaefefb192 100644 --- a/services/core/java/com/android/server/wm/WindowState.java +++ b/services/core/java/com/android/server/wm/WindowState.java @@ -2037,7 +2037,7 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP InputChannel[] inputChannels = InputChannel.openInputChannelPair(name); mInputChannel = inputChannels[0]; mClientChannel = inputChannels[1]; - mInputWindowHandle.inputChannel = inputChannels[0]; + mInputWindowHandle.token = mClient.asBinder(); if (outInputChannel != null) { mClientChannel.transferTo(outInputChannel); mClientChannel.dispose(); @@ -2068,7 +2068,7 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP mClientChannel.dispose(); mClientChannel = null; } - mInputWindowHandle.inputChannel = null; + mInputWindowHandle.token = null; } /** Returns true if the replacement window was removed. */ @@ -2167,11 +2167,15 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP mTmpRect.inset(-delta, -delta); } region.set(mTmpRect); - cropRegionToStackBoundsIfNeeded(region); + region.translate(-mWindowFrames.mFrame.left, -mWindowFrames.mFrame.top); } else { // Not modal or full screen modal getTouchableRegion(region); } + + // The area containing the shadows is not touchable. + region.translate(mAttrs.surfaceInsets.left, mAttrs.surfaceInsets.top); + return flags; } @@ -2392,11 +2396,11 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP && (mViewVisibility == View.VISIBLE) && !mRemoveOnExit && ((mAttrs.flags & WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE) == 0) && (mAppToken == null || mAppToken.windowsAreFocusable()) - && !canReceiveTouchInput(); + && !cantReceiveTouchInput(); } - /** @return true if this window desires touch events. */ - boolean canReceiveTouchInput() { + /** @return false if this window desires touch events. */ + boolean cantReceiveTouchInput() { return mAppToken != null && mAppToken.getTask() != null && mAppToken.getTask().mStack.shouldIgnoreInput(); } @@ -2803,25 +2807,32 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP } void getTouchableRegion(Region outRegion) { + if (inPinnedWindowingMode() && !isFocused()) { + outRegion.setEmpty(); + return; + } + final Rect frame = mWindowFrames.mFrame; switch (mTouchableInsets) { default: case TOUCHABLE_INSETS_FRAME: outRegion.set(frame); + outRegion.translate(-frame.left, -frame.top); break; case TOUCHABLE_INSETS_CONTENT: applyInsets(outRegion, frame, mGivenContentInsets); + outRegion.translate(-frame.left, -frame.top); break; case TOUCHABLE_INSETS_VISIBLE: applyInsets(outRegion, frame, mGivenVisibleInsets); + outRegion.translate(-frame.left, -frame.top); break; case TOUCHABLE_INSETS_REGION: { outRegion.set(mGivenTouchableRegion); - outRegion.translate(frame.left, frame.top); break; } } - cropRegionToStackBoundsIfNeeded(outRegion); + outRegion.translate(mAttrs.surfaceInsets.left, mAttrs.surfaceInsets.top); } private void cropRegionToStackBoundsIfNeeded(Region region) { diff --git a/services/core/jni/com_android_server_input_InputManagerService.cpp b/services/core/jni/com_android_server_input_InputManagerService.cpp index ee8a08b2fbdb..fcd9335874e1 100644 --- a/services/core/jni/com_android_server_input_InputManagerService.cpp +++ b/services/core/jni/com_android_server_input_InputManagerService.cpp @@ -86,6 +86,7 @@ static struct { jmethodID notifySwitch; jmethodID notifyInputChannelBroken; jmethodID notifyANR; + jmethodID notifyFocusChanged; jmethodID filterInputEvent; jmethodID interceptKeyBeforeQueueing; jmethodID interceptMotionBeforeQueueingNonInteractive; @@ -147,15 +148,6 @@ static inline const char* toString(bool value) { return value ? "true" : "false"; } -static jobject getInputApplicationHandleObjLocalRef(JNIEnv* env, - const sp<InputApplicationHandle>& inputApplicationHandle) { - if (inputApplicationHandle == nullptr) { - return nullptr; - } - return static_cast<NativeInputApplicationHandle*>(inputApplicationHandle.get())-> - getInputApplicationHandleObjLocalRef(env); -} - static void loadSystemIconAsSpriteWithPointerIcon(JNIEnv* env, jobject contextObj, int32_t style, PointerIcon* outPointerIcon, SpriteIcon* outSpriteIcon) { status_t status = android_view_PointerIcon_loadSystemIcon(env, @@ -249,6 +241,7 @@ public: const sp<IBinder>& token, const std::string& reason); virtual void notifyInputChannelBroken(const sp<IBinder>& token); + virtual void notifyFocusChanged(const sp<IBinder>& token); virtual bool filterInputEvent(const InputEvent* inputEvent, uint32_t policyFlags); virtual void getDispatcherConfiguration(InputDispatcherConfiguration* outConfig); virtual void interceptKeyBeforeQueueing(const KeyEvent* keyEvent, uint32_t& policyFlags); @@ -342,6 +335,8 @@ NativeInputManager::NativeInputManager(jobject contextObj, mInteractive = true; mInputManager = new InputManager(this, this); + defaultServiceManager()->addService(String16("inputflinger"), + mInputManager, false); } NativeInputManager::~NativeInputManager() { @@ -656,13 +651,11 @@ nsecs_t NativeInputManager::notifyANR(const sp<InputApplicationHandle>& inputApp JNIEnv* env = jniEnv(); - jobject inputApplicationHandleObj = - getInputApplicationHandleObjLocalRef(env, inputApplicationHandle); jobject tokenObj = javaObjectForIBinder(env, token); jstring reasonObj = env->NewStringUTF(reason.c_str()); jlong newTimeout = env->CallLongMethod(mServiceObj, - gServiceClassInfo.notifyANR, inputApplicationHandleObj, tokenObj, + gServiceClassInfo.notifyANR, tokenObj, reasonObj); if (checkAndClearExceptionFromCallback(env, "notifyANR")) { newTimeout = 0; // abort dispatch @@ -671,7 +664,6 @@ nsecs_t NativeInputManager::notifyANR(const sp<InputApplicationHandle>& inputApp } env->DeleteLocalRef(reasonObj); - env->DeleteLocalRef(inputApplicationHandleObj); return newTimeout; } @@ -691,6 +683,22 @@ void NativeInputManager::notifyInputChannelBroken(const sp<IBinder>& token) { } } +void NativeInputManager::notifyFocusChanged(const sp<IBinder>& token) { +#if DEBUG_INPUT_DISPATCHER_POLICY + ALOGD("notifyFocusChanged"); +#endif + ATRACE_CALL(); + + JNIEnv* env = jniEnv(); + + jobject tokenObj = javaObjectForIBinder(env, token); + if (tokenObj) { + env->CallVoidMethod(mServiceObj, gServiceClassInfo.notifyFocusChanged, + tokenObj); + checkAndClearExceptionFromCallback(env, "notifyFocusChanged"); + } +} + void NativeInputManager::getDispatcherConfiguration(InputDispatcherConfiguration* outConfig) { ATRACE_CALL(); JNIEnv* env = jniEnv(); @@ -1715,10 +1723,13 @@ int register_android_server_InputManager(JNIEnv* env) { GET_METHOD_ID(gServiceClassInfo.notifyInputChannelBroken, clazz, "notifyInputChannelBroken", "(Landroid/os/IBinder;)V"); + + GET_METHOD_ID(gServiceClassInfo.notifyFocusChanged, clazz, + "notifyFocusChanged", "(Landroid/os/IBinder;)V"); GET_METHOD_ID(gServiceClassInfo.notifyANR, clazz, "notifyANR", - "(Landroid/view/InputApplicationHandle;Landroid/os/IBinder;Ljava/lang/String;)J"); + "(Landroid/os/IBinder;Ljava/lang/String;)J"); GET_METHOD_ID(gServiceClassInfo.filterInputEvent, clazz, "filterInputEvent", "(Landroid/view/InputEvent;I)Z"); diff --git a/services/intelligence/java/com/android/server/intelligence/IntelligenceManagerService.java b/services/intelligence/java/com/android/server/intelligence/IntelligenceManagerService.java index 38810dd8d8d8..9fd797d1e549 100644 --- a/services/intelligence/java/com/android/server/intelligence/IntelligenceManagerService.java +++ b/services/intelligence/java/com/android/server/intelligence/IntelligenceManagerService.java @@ -19,6 +19,7 @@ package com.android.server.intelligence; import static android.content.Context.INTELLIGENCE_MANAGER_SERVICE; import android.annotation.NonNull; +import android.annotation.Nullable; import android.annotation.UserIdInt; import android.app.ActivityManagerInternal; import android.content.ComponentName; @@ -134,12 +135,13 @@ public final class IntelligenceManagerService extends } @Override - public void finishSession(@UserIdInt int userId, @NonNull InteractionSessionId sessionId) { + public void finishSession(@UserIdInt int userId, @NonNull InteractionSessionId sessionId, + @Nullable List<ContentCaptureEvent> events) { Preconditions.checkNotNull(sessionId); synchronized (mLock) { final IntelligencePerUserService service = getServiceForUserLocked(userId); - service.finishSessionLocked(sessionId); + service.finishSessionLocked(sessionId, events); } } diff --git a/services/intelligence/java/com/android/server/intelligence/IntelligencePerUserService.java b/services/intelligence/java/com/android/server/intelligence/IntelligencePerUserService.java index 051f0d695fcf..9ab7e58feb9b 100644 --- a/services/intelligence/java/com/android/server/intelligence/IntelligencePerUserService.java +++ b/services/intelligence/java/com/android/server/intelligence/IntelligencePerUserService.java @@ -22,6 +22,7 @@ import static com.android.server.wm.ActivityTaskManagerInternal.ASSIST_KEY_STRUC import android.Manifest; import android.annotation.NonNull; +import android.annotation.Nullable; import android.annotation.UserIdInt; import android.app.AppGlobals; import android.app.assist.AssistContent; @@ -146,7 +147,8 @@ final class IntelligencePerUserService // TODO(b/111276913): log metrics @GuardedBy("mLock") - public void finishSessionLocked(@NonNull InteractionSessionId sessionId) { + public void finishSessionLocked(@NonNull InteractionSessionId sessionId, + @Nullable List<ContentCaptureEvent> events) { if (!isEnabledLocked()) { return; } @@ -158,8 +160,18 @@ final class IntelligencePerUserService } return; } + if (events != null && !events.isEmpty()) { + // TODO(b/111276913): for now we're sending the events and the onDestroy() in 2 separate + // calls because it's not clear yet whether we'll change the manager to send events + // to the service directly (i.e., without passing through system server). Once we + // decide, we might need to split IIntelligenceService.onSessionLifecycle() in 2 + // methods, one for start and another for finish (and passing the events to finish), + // otherwise the service might receive the 2 calls out of order. + session.sendEventsLocked(events); + } if (mMaster.verbose) { - Slog.v(TAG, "finishSession(): " + session); + Slog.v(TAG, "finishSession(" + (events == null ? 0 : events.size()) + " events): " + + session); } session.removeSelfLocked(true); } diff --git a/telephony/java/android/telephony/SubscriptionManager.java b/telephony/java/android/telephony/SubscriptionManager.java index c3385814189c..34a8c9659595 100644 --- a/telephony/java/android/telephony/SubscriptionManager.java +++ b/telephony/java/android/telephony/SubscriptionManager.java @@ -147,7 +147,8 @@ public class SubscriptionManager { public static final Uri WFC_ENABLED_CONTENT_URI = Uri.withAppendedPath(CONTENT_URI, "wfc"); /** - * A content {@link Uri} used to receive updates on advanced calling user setting. + * A content {@link Uri} used to receive updates on advanced calling user setting + * @see ImsMmTelManager#isAdvancedCallingSettingEnabled(). * <p> * Use this {@link Uri} with a {@link ContentObserver} to be notified of changes to the * subscription advanced calling enabled diff --git a/tests/TouchLatency/.gitignore b/tests/TouchLatency/.gitignore index bd79078a904e..7f4121a9623a 100644 --- a/tests/TouchLatency/.gitignore +++ b/tests/TouchLatency/.gitignore @@ -3,4 +3,5 @@ /.idea .DS_Store /build +/gen .iml diff --git a/tests/TouchLatency/app/build.gradle b/tests/TouchLatency/app/build.gradle index 233711055eb8..2594322e3727 100644 --- a/tests/TouchLatency/app/build.gradle +++ b/tests/TouchLatency/app/build.gradle @@ -1,13 +1,13 @@ apply plugin: 'com.android.application' android { - compileSdkVersion 21 - buildToolsVersion "21.1.2" + compileSdkVersion 28 + buildToolsVersion '28.0.3' defaultConfig { applicationId "com.prefabulated.touchlatency" minSdkVersion 21 - targetSdkVersion 21 + targetSdkVersion 28 versionCode 1 versionName "1.0" } diff --git a/tests/TouchLatency/app/src/main/java/com/prefabulated/touchlatency/TouchLatencyActivity.java b/tests/TouchLatency/app/src/main/java/com/prefabulated/touchlatency/TouchLatencyActivity.java index b4b5ca7161fc..360c22f832b3 100644 --- a/tests/TouchLatency/app/src/main/java/com/prefabulated/touchlatency/TouchLatencyActivity.java +++ b/tests/TouchLatency/app/src/main/java/com/prefabulated/touchlatency/TouchLatencyActivity.java @@ -19,11 +19,9 @@ package com.prefabulated.touchlatency; import android.app.Activity; import android.content.Context; import android.graphics.Canvas; -import android.graphics.Color; import android.graphics.Paint; -import android.os.CountDownTimer; +import android.graphics.Paint.Align; import android.os.Bundle; -import android.text.method.Touch; import android.util.AttributeSet; import android.util.Log; import android.view.Menu; @@ -31,15 +29,17 @@ import android.view.MenuItem; import android.view.MotionEvent; import android.view.View; import android.os.Trace; - -import java.util.ArrayList; -import java.util.Collections; +import java.math.RoundingMode; +import java.text.DecimalFormat; class TouchLatencyView extends View implements View.OnTouchListener { private static final String LOG_TAG = "TouchLatency"; private static final int BACKGROUND_COLOR = 0xFF400080; private static final int INNER_RADIUS = 70; - private static final int BALL_RADIUS = 100; + private static final int BALL_DIAMETER = 200; + private static final int SEC_TO_NANOS = 1000000000; + private static final float FPS_UPDATE_THRESHOLD = 20; + private static final long BALL_VELOCITY = 420; public TouchLatencyView(Context context, AttributeSet attrs) { super(context, attrs); @@ -58,13 +58,17 @@ class TouchLatencyView extends View implements View.OnTouchListener { mRedPaint = new Paint(Paint.ANTI_ALIAS_FLAG); mRedPaint.setColor(0xFFFF0000); mRedPaint.setStyle(Paint.Style.FILL); + mTextPaint = new Paint(Paint.ANTI_ALIAS_FLAG); + mTextPaint.setColor(0xFFFFFFFF); + mTextPaint.setTextSize(100); + mTextPaint.setTextAlign(Align.RIGHT); mTouching = false; - mBallX = 100.0f; - mBallY = 100.0f; - mVelocityX = 7.0f; - mVelocityY = 7.0f; + mLastDrawNano = 0; + mFps = 0; + mLastFpsUpdate = 0; + mFrameCount = 0; Trace.endSection(); } @@ -113,43 +117,70 @@ class TouchLatencyView extends View implements View.OnTouchListener { } } + private Paint getBallColor() { + if (mFps > 75) + return mGreenPaint; + else if (mFps > 45) + return mYellowPaint; + else + return mRedPaint; + } + private void drawBall(Canvas canvas) { Trace.beginSection("TouchLatencyView drawBall"); int width = canvas.getWidth(); int height = canvas.getHeight(); + float fps = 0f; - // Update position - mBallX += mVelocityX; - mBallY += mVelocityY; + long t = System.nanoTime(); + long tDiff = t - mLastDrawNano; + mLastDrawNano = t; + mFrameCount++; - // Clamp and change velocity if necessary - float left = mBallX - BALL_RADIUS; - if (left < 0) { - left = 0; - mVelocityX *= -1; + if (tDiff < SEC_TO_NANOS) { + fps = 1f * SEC_TO_NANOS / tDiff; } - float top = mBallY - BALL_RADIUS; - if (top < 0) { - top = 0; - mVelocityY *= -1; + long fDiff = t - mLastFpsUpdate; + if (Math.abs(mFps - fps) > FPS_UPDATE_THRESHOLD) { + mFps = fps; + mLastFpsUpdate = t; + mFrameCount = 0; + } else if (fDiff > SEC_TO_NANOS) { + mFps = 1f * mFrameCount * SEC_TO_NANOS / fDiff; + mLastFpsUpdate = t; + mFrameCount = 0; } - float right = mBallX + BALL_RADIUS; - if (right > width) { - right = width; - mVelocityX *= -1; + final long pos = t * BALL_VELOCITY / SEC_TO_NANOS; + final long xMax = width - BALL_DIAMETER; + final long yMax = height - BALL_DIAMETER; + long xOffset = pos % xMax; + long yOffset = pos % yMax; + + float left, right, top, bottom; + + if (((pos / xMax) & 1) == 0) { + left = xMax - xOffset; + } else { + left = xOffset; } + right = left + BALL_DIAMETER; - float bottom = mBallY + BALL_RADIUS; - if (bottom > height) { - bottom = height; - mVelocityY *= -1; + if (((pos / yMax) & 1) == 0) { + top = yMax - yOffset; + } else { + top = yOffset; } + bottom = top + BALL_DIAMETER; // Draw the ball canvas.drawColor(BACKGROUND_COLOR); - canvas.drawOval(left, top, right, bottom, mYellowPaint); + canvas.drawOval(left, top, right, bottom, getBallColor()); + DecimalFormat df = new DecimalFormat("fps: #.##"); + df.setRoundingMode(RoundingMode.HALF_UP); + canvas.drawText(df.format(mFps), width, 100, mTextPaint); + invalidate(); Trace.endSection(); } @@ -176,15 +207,15 @@ class TouchLatencyView extends View implements View.OnTouchListener { Trace.endSection(); } - private Paint mBluePaint, mGreenPaint, mYellowPaint, mRedPaint; + private final Paint mBluePaint, mGreenPaint, mYellowPaint, mRedPaint, mTextPaint; private int mMode; private boolean mTouching; private float mTouchX, mTouchY; private float mLastDrawnX, mLastDrawnY; - private float mBallX, mBallY; - private float mVelocityX, mVelocityY; + private long mLastDrawNano, mLastFpsUpdate, mFrameCount; + private float mFps; } public class TouchLatencyActivity extends Activity { diff --git a/tests/TouchLatency/build.gradle b/tests/TouchLatency/build.gradle index d3ff69d6e7f9..03abe82a4359 100644 --- a/tests/TouchLatency/build.gradle +++ b/tests/TouchLatency/build.gradle @@ -3,9 +3,10 @@ buildscript { repositories { jcenter() + google() } dependencies { - classpath 'com.android.tools.build:gradle:1.1.0' + classpath 'com.android.tools.build:gradle:3.2.1' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files @@ -15,5 +16,6 @@ buildscript { allprojects { repositories { jcenter() + google() } } diff --git a/tests/TouchLatency/gradle/wrapper/gradle-wrapper.properties b/tests/TouchLatency/gradle/wrapper/gradle-wrapper.properties index 0c71e760dc93..111992a460fa 100644 --- a/tests/TouchLatency/gradle/wrapper/gradle-wrapper.properties +++ b/tests/TouchLatency/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Wed Apr 10 15:27:10 PDT 2013 +#Tue Nov 27 13:37:59 PST 2018 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-2.2.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip diff --git a/tools/apilint/apilint.py b/tools/apilint/apilint.py index 91cd1cba964d..cb8fef946baf 100644 --- a/tools/apilint/apilint.py +++ b/tools/apilint/apilint.py @@ -1285,10 +1285,19 @@ def verify_user_handle(clazz): if clazz.fullname == "android.os.UserManager": return for m in clazz.methods: - if m.name.endswith("AsUser") or m.name.endswith("ForUser"): continue if re.match("on[A-Z]+", m.name): continue - if "android.os.UserHandle" in m.args: - warn(clazz, m, None, "Method taking UserHandle should be named 'doFooAsUser' or 'queryFooForUser'") + + has_arg = "android.os.UserHandle" in m.args + has_name = m.name.endswith("AsUser") or m.name.endswith("ForUser") + + if clazz.fullname.endswith("Manager") and has_arg: + warn(clazz, m, None, "When a method overload is needed to target a specific " + "UserHandle, callers should be directed to use " + "Context.createPackageContextAsUser() and re-obtain the relevant " + "Manager, and no new API should be added") + elif has_arg and not has_name: + warn(clazz, m, None, "Method taking UserHandle should be named 'doFooAsUser' " + "or 'queryFooForUser'") def verify_params(clazz): |