diff options
217 files changed, 4161 insertions, 1246 deletions
diff --git a/cmds/bootanimation/BootAnimation.cpp b/cmds/bootanimation/BootAnimation.cpp index 98e447cf996f..7ed0bed43833 100644 --- a/cmds/bootanimation/BootAnimation.cpp +++ b/cmds/bootanimation/BootAnimation.cpp @@ -127,6 +127,7 @@ static const char VERTEX_SHADER_SOURCE[] = R"( })"; static const char IMAGE_FRAG_DYNAMIC_COLORING_SHADER_SOURCE[] = R"( precision mediump float; + const float cWhiteMaskThreshold = 0.05f; uniform sampler2D uTexture; uniform float uFade; uniform float uColorProgress; @@ -141,10 +142,20 @@ static const char IMAGE_FRAG_DYNAMIC_COLORING_SHADER_SOURCE[] = R"( varying highp vec2 vUv; void main() { vec4 mask = texture2D(uTexture, vUv); - vec4 color = mask.r * mix(uStartColor0, uEndColor0, uColorProgress) - + mask.g * mix(uStartColor1, uEndColor1, uColorProgress) - + mask.b * mix(uStartColor2, uEndColor2, uColorProgress) - + mask.a * mix(uStartColor3, uEndColor3, uColorProgress); + float r = mask.r; + float g = mask.g; + float b = mask.b; + float a = mask.a; + // If all channels have values, render pixel as a shade of white. + float useWhiteMask = step(cWhiteMaskThreshold, r) + * step(cWhiteMaskThreshold, g) + * step(cWhiteMaskThreshold, b) + * step(cWhiteMaskThreshold, a); + vec4 color = r * mix(uStartColor0, uEndColor0, uColorProgress) + + g * mix(uStartColor1, uEndColor1, uColorProgress) + + b * mix(uStartColor2, uEndColor2, uColorProgress) + + a * mix(uStartColor3, uEndColor3, uColorProgress); + color = mix(color, vec4(vec3((r + g + b + a) * 0.25f), 1.0), useWhiteMask); gl_FragColor = vec4(color.x, color.y, color.z, (1.0 - uFade)) * color.a; })"; static const char IMAGE_FRAG_SHADER_SOURCE[] = R"( @@ -1077,6 +1088,8 @@ bool BootAnimation::parseAnimationDesc(Animation& animation) { int pause = 0; int progress = 0; int framesToFadeCount = 0; + int colorTransitionStart = 0; + int colorTransitionEnd = 0; char path[ANIM_ENTRY_NAME_MAX]; char color[7] = "000000"; // default to black if unspecified char clockPos1[TEXT_POS_LEN_MAX + 1] = ""; @@ -1102,14 +1115,17 @@ bool BootAnimation::parseAnimationDesc(Animation& animation) { } else { animation.progressEnabled = false; } - } else if (sscanf(l, "dynamic_colors %" STRTO(ANIM_PATH_MAX) "s #%6s #%6s #%6s #%6s", + } else if (sscanf(l, "dynamic_colors %" STRTO(ANIM_PATH_MAX) "s #%6s #%6s #%6s #%6s %d %d", dynamicColoringPartNameBuffer, - start_color_0, start_color_1, start_color_2, start_color_3)) { + start_color_0, start_color_1, start_color_2, start_color_3, + &colorTransitionStart, &colorTransitionEnd)) { animation.dynamicColoringEnabled = true; parseColor(start_color_0, animation.startColors[0]); parseColor(start_color_1, animation.startColors[1]); parseColor(start_color_2, animation.startColors[2]); parseColor(start_color_3, animation.startColors[3]); + animation.colorTransitionStart = colorTransitionStart; + animation.colorTransitionEnd = colorTransitionEnd; dynamicColoringPartName = std::string(dynamicColoringPartNameBuffer); } else if (sscanf(l, "%c %d %d %" STRTO(ANIM_PATH_MAX) "s%n", &pathType, &count, &pause, path, &nextReadPos) >= 4) { @@ -1461,11 +1477,16 @@ bool BootAnimation::playAnimation(const Animation& animation) { if (shouldStopPlayingPart(part, fadedFramesCount, lastDisplayedProgress)) break; // Color progress is - // - the normalized animation progress between [0, 1] for the dynamic coloring part, + // - the animation progress, normalized from + // [colorTransitionStart,colorTransitionEnd] to [0, 1] for the dynamic coloring + // part. // - 0 for parts that come before, // - 1 for parts that come after. float colorProgress = part.useDynamicColoring - ? (float)j / fcount + ? fmin(fmax( + ((float)j - animation.colorTransitionStart) / + fmax(animation.colorTransitionEnd - + animation.colorTransitionStart, 1.0f), 0.0f), 1.0f) : (part.postDynamicColoring ? 1 : 0); processDisplayEvents(); diff --git a/cmds/bootanimation/BootAnimation.h b/cmds/bootanimation/BootAnimation.h index 0e29621f0326..7a597da533ee 100644 --- a/cmds/bootanimation/BootAnimation.h +++ b/cmds/bootanimation/BootAnimation.h @@ -111,6 +111,8 @@ public: Font progressFont; // Controls if dynamic coloring is enabled for the whole animation. bool dynamicColoringEnabled = false; + int colorTransitionStart = 0; // Start frame of dynamic color transition. + int colorTransitionEnd = 0; // End frame of dynamic color transition. float startColors[4][3]; // Start colors of dynamic color transition. float endColors[4][3]; // End colors of dynamic color transition. }; diff --git a/core/api/current.txt b/core/api/current.txt index 3ddb374c8a05..ef886e41d782 100644 --- a/core/api/current.txt +++ b/core/api/current.txt @@ -20181,8 +20181,10 @@ package android.media { method public int getAllowedCapturePolicy(); method public int getContentType(); method public int getFlags(); + method public int getSpatializationBehavior(); method public int getUsage(); method public int getVolumeControlStream(); + method public boolean isContentSpatialized(); method public void writeToParcel(android.os.Parcel, int); field public static final int ALLOW_CAPTURE_BY_ALL = 1; // 0x1 field public static final int ALLOW_CAPTURE_BY_NONE = 3; // 0x3 @@ -20196,6 +20198,8 @@ package android.media { field public static final int FLAG_AUDIBILITY_ENFORCED = 1; // 0x1 field public static final int FLAG_HW_AV_SYNC = 16; // 0x10 field @Deprecated public static final int FLAG_LOW_LATENCY = 256; // 0x100 + field public static final int SPATIALIZATION_BEHAVIOR_AUTO = 0; // 0x0 + field public static final int SPATIALIZATION_BEHAVIOR_NEVER = 1; // 0x1 field public static final int USAGE_ALARM = 4; // 0x4 field public static final int USAGE_ASSISTANCE_ACCESSIBILITY = 11; // 0xb field public static final int USAGE_ASSISTANCE_NAVIGATION_GUIDANCE = 12; // 0xc @@ -20222,7 +20226,9 @@ package android.media { method public android.media.AudioAttributes.Builder setContentType(int); method public android.media.AudioAttributes.Builder setFlags(int); method @NonNull public android.media.AudioAttributes.Builder setHapticChannelsMuted(boolean); + method @NonNull public android.media.AudioAttributes.Builder setIsContentSpatialized(boolean); method public android.media.AudioAttributes.Builder setLegacyStreamType(int); + method @NonNull public android.media.AudioAttributes.Builder setSpatializationBehavior(int); method public android.media.AudioAttributes.Builder setUsage(int); } @@ -20447,6 +20453,7 @@ package android.media { method public String getProperty(String); method public int getRingerMode(); method @Deprecated public int getRouting(int); + method @Nullable public android.media.Spatializer getSpatializer(); method public int getStreamMaxVolume(int); method public int getStreamMinVolume(int); method public int getStreamVolume(int); @@ -23843,6 +23850,19 @@ package android.media { method public void onLoadComplete(android.media.SoundPool, int, int); } + public class Spatializer { + method public void addOnSpatializerStateChangedListener(@NonNull java.util.concurrent.Executor, @NonNull android.media.Spatializer.OnSpatializerStateChangedListener); + method public boolean canBeSpatialized(@NonNull android.media.AudioAttributes, @NonNull android.media.AudioFormat); + method public boolean isAvailable(); + method public boolean isEnabled(); + method public void removeOnSpatializerStateChangedListener(@NonNull android.media.Spatializer.OnSpatializerStateChangedListener); + } + + public static interface Spatializer.OnSpatializerStateChangedListener { + method public void onSpatializerAvailableChanged(@NonNull android.media.Spatializer, boolean); + method public void onSpatializerEnabledChanged(@NonNull android.media.Spatializer, boolean); + } + public final class SubtitleData { ctor public SubtitleData(int, long, long, @NonNull byte[]); method @NonNull public byte[] getData(); diff --git a/core/api/system-current.txt b/core/api/system-current.txt index 2846b3695958..2ca073bcf4d6 100644 --- a/core/api/system-current.txt +++ b/core/api/system-current.txt @@ -5372,6 +5372,13 @@ package android.media { field public static final android.media.RouteDiscoveryPreference EMPTY; } + public class Spatializer { + method @RequiresPermission("android.permission.MODIFY_DEFAULT_AUDIO_EFFECTS") public void addCompatibleAudioDevice(@NonNull android.media.AudioDeviceAttributes); + method @NonNull @RequiresPermission("android.permission.MODIFY_DEFAULT_AUDIO_EFFECTS") public java.util.List<android.media.AudioDeviceAttributes> getCompatibleAudioDevices(); + method @RequiresPermission("android.permission.MODIFY_DEFAULT_AUDIO_EFFECTS") public void removeCompatibleAudioDevice(@NonNull android.media.AudioDeviceAttributes); + method @RequiresPermission("android.permission.MODIFY_DEFAULT_AUDIO_EFFECTS") public void setEnabled(boolean); + } + } package android.media.audiofx { diff --git a/core/java/android/inputmethodservice/InputMethodService.java b/core/java/android/inputmethodservice/InputMethodService.java index 42fa9fbc7b94..c0f008122b4f 100644 --- a/core/java/android/inputmethodservice/InputMethodService.java +++ b/core/java/android/inputmethodservice/InputMethodService.java @@ -1732,12 +1732,12 @@ public class InputMethodService extends AbstractInputMethodService { if (config.orientation != Configuration.ORIENTATION_LANDSCAPE) { return false; } - if ((mInputEditorInfo != null - && (mInputEditorInfo.imeOptions & EditorInfo.IME_FLAG_NO_FULLSCREEN) != 0) + if (mInputEditorInfo != null + && ((mInputEditorInfo.imeOptions & EditorInfo.IME_FLAG_NO_FULLSCREEN) != 0 // If app window has portrait orientation, regardless of what display orientation // is, IME shouldn't use fullscreen-mode. || (mInputEditorInfo.internalImeOptions - & EditorInfo.IME_INTERNAL_FLAG_APP_WINDOW_PORTRAIT) != 0) { + & EditorInfo.IME_INTERNAL_FLAG_APP_WINDOW_PORTRAIT) != 0)) { return false; } return true; diff --git a/core/java/android/os/GraphicsEnvironment.java b/core/java/android/os/GraphicsEnvironment.java index be21fea1d0df..1651bfc2db5d 100644 --- a/core/java/android/os/GraphicsEnvironment.java +++ b/core/java/android/os/GraphicsEnvironment.java @@ -26,8 +26,6 @@ import android.content.pm.IPackageManager; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; -import android.content.res.AssetFileDescriptor; -import android.content.res.AssetManager; import android.provider.Settings; import android.text.TextUtils; import android.util.Log; @@ -37,9 +35,6 @@ import dalvik.system.VMRuntime; import java.io.BufferedReader; import java.io.File; -import java.io.FileDescriptor; -import java.io.FileInputStream; -import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; @@ -88,9 +83,6 @@ public class GraphicsEnvironment { private static final String UPDATABLE_DRIVER_ALLOWLIST_ALL = "*"; private static final String UPDATABLE_DRIVER_SPHAL_LIBRARIES_FILENAME = "sphal_libraries.txt"; - // ANGLE related properties. - private static final String ANGLE_RULES_FILE = "a4a_rules.json"; - private static final String ANGLE_TEMP_RULES = "debug.angle.rules"; private static final String ACTION_ANGLE_FOR_ANDROID = "android.app.action.ANGLE_FOR_ANDROID"; private static final String ACTION_ANGLE_FOR_ANDROID_TOAST_MESSAGE = "android.app.action.ANGLE_FOR_ANDROID_TOAST_MESSAGE"; @@ -164,21 +156,14 @@ public class GraphicsEnvironment { Log.v(TAG, "ANGLE Developer option for '" + packageName + "' " + "set to: '" + devOptIn + "'"); - // We only want to use ANGLE if the app is in the allowlist, or the developer has - // explicitly chosen something other than default driver. - // The allowlist will be generated by the ANGLE APK at both boot time and - // ANGLE update time. It will only include apps mentioned in the rules file. - final boolean allowed = checkAngleAllowlist(context, coreSettings, packageName); + // We only want to use ANGLE if the developer has explicitly chosen something other than + // default driver. final boolean requested = devOptIn.equals(ANGLE_GL_DRIVER_CHOICE_ANGLE); - - if (allowed) { - Log.v(TAG, "ANGLE allowlist includes " + packageName); - } if (requested) { Log.v(TAG, "ANGLE developer option for " + packageName + ": " + devOptIn); } - return allowed || requested; + return requested; } private int getVulkanVersion(PackageManager pm) { @@ -475,117 +460,6 @@ public class GraphicsEnvironment { } /** - * Attempt to setup ANGLE with a temporary rules file. - * True: Temporary rules file was loaded. - * False: Temporary rules file was *not* loaded. - */ - private boolean setupAngleWithTempRulesFile(Context context, - String packageName, - String paths, - String devOptIn) { - /** - * We only want to load a temp rules file for: - * - apps that are marked 'debuggable' in their manifest - * - devices that are running a userdebug build (ro.debuggable) or can inject libraries for - * debugging (PR_SET_DUMPABLE). - */ - if (!isDebuggable()) { - Log.v(TAG, "Skipping loading temporary rules file"); - return false; - } - - final String angleTempRules = SystemProperties.get(ANGLE_TEMP_RULES); - - if (TextUtils.isEmpty(angleTempRules)) { - Log.v(TAG, "System property '" + ANGLE_TEMP_RULES + "' is not set or is empty"); - return false; - } - - Log.i(TAG, "Detected system property " + ANGLE_TEMP_RULES + ": " + angleTempRules); - - final File tempRulesFile = new File(angleTempRules); - if (tempRulesFile.exists()) { - Log.i(TAG, angleTempRules + " exists, loading file."); - try { - final FileInputStream stream = new FileInputStream(angleTempRules); - - try { - final FileDescriptor rulesFd = stream.getFD(); - final long rulesOffset = 0; - final long rulesLength = stream.getChannel().size(); - Log.i(TAG, "Loaded temporary ANGLE rules from " + angleTempRules); - - setAngleInfo(paths, packageName, devOptIn, null, - rulesFd, rulesOffset, rulesLength); - - stream.close(); - - // We successfully setup ANGLE, so return with good status - return true; - } catch (IOException e) { - Log.w(TAG, "Hit IOException thrown by FileInputStream: " + e); - } - } catch (FileNotFoundException e) { - Log.w(TAG, "Temp ANGLE rules file not found: " + e); - } catch (SecurityException e) { - Log.w(TAG, "Temp ANGLE rules file not accessible: " + e); - } - } - - return false; - } - - /** - * Attempt to setup ANGLE with a rules file loaded from the ANGLE APK. - * True: APK rules file was loaded. - * False: APK rules file was *not* loaded. - */ - private boolean setupAngleRulesApk(String anglePkgName, - ApplicationInfo angleInfo, - PackageManager pm, - String packageName, - String paths, - String devOptIn, - String[] features) { - // Pass the rules file to loader for ANGLE decisions - try { - final AssetManager angleAssets = pm.getResourcesForApplication(angleInfo).getAssets(); - - try { - final AssetFileDescriptor assetsFd = angleAssets.openFd(ANGLE_RULES_FILE); - - setAngleInfo(paths, packageName, devOptIn, features, assetsFd.getFileDescriptor(), - assetsFd.getStartOffset(), assetsFd.getLength()); - - assetsFd.close(); - - return true; - } catch (IOException e) { - Log.w(TAG, "Failed to get AssetFileDescriptor for " + ANGLE_RULES_FILE - + " from '" + anglePkgName + "': " + e); - } - } catch (PackageManager.NameNotFoundException e) { - Log.w(TAG, "Failed to get AssetManager for '" + anglePkgName + "': " + e); - } - - return false; - } - - /** - * Pull ANGLE allowlist from GlobalSettings and compare against current package - */ - private boolean checkAngleAllowlist(Context context, Bundle bundle, String packageName) { - final ContentResolver contentResolver = context.getContentResolver(); - final List<String> angleAllowlist = - getGlobalSettingsString(contentResolver, bundle, - Settings.Global.ANGLE_ALLOWLIST); - - if (DEBUG) Log.v(TAG, "ANGLE allowlist: " + angleAllowlist); - - return angleAllowlist.contains(packageName); - } - - /** * Pass ANGLE details down to trigger enable logic * * @param context @@ -648,27 +522,16 @@ public class GraphicsEnvironment { if (DEBUG) Log.v(TAG, "ANGLE package libs: " + paths); // If the user has set the developer option to something other than default, - // we need to call setupAngleRulesApk() with the package name and the developer + // we need to call setAngleInfo() with the package name and the developer // option value (native/angle/other). Then later when we are actually trying to // load a driver, GraphicsEnv::getShouldUseAngle() has seen the package name before // and can confidently answer yes/no based on the previously set developer // option value. final String devOptIn = getDriverForPackage(context, bundle, packageName); + final String[] features = getAngleEglFeatures(context, bundle); - if (setupAngleWithTempRulesFile(context, packageName, paths, devOptIn)) { - // We setup ANGLE with a temp rules file, so we're done here. - return true; - } - - String[] features = getAngleEglFeatures(context, bundle); - - if (setupAngleRulesApk( - anglePkgName, angleInfo, pm, packageName, paths, devOptIn, features)) { - // ANGLE with rules is set up from the APK, hence return. - return true; - } - - return false; + setAngleInfo(paths, packageName, devOptIn, features); + return true; } /** @@ -956,7 +819,7 @@ public class GraphicsEnvironment { private static native void setGpuStats(String driverPackageName, String driverVersionName, long driverVersionCode, long driverBuildTime, String appPackageName, int vulkanVersion); private static native void setAngleInfo(String path, String appPackage, String devOptIn, - String[] features, FileDescriptor rulesFd, long rulesOffset, long rulesLength); + String[] features); private static native boolean getShouldUseAngle(String packageName); private static native boolean setInjectLayersPrSetDumpable(); diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java index 94d19bc1c869..99cb4c524a3b 100644 --- a/core/java/android/provider/Settings.java +++ b/core/java/android/provider/Settings.java @@ -13736,13 +13736,6 @@ public final class Settings { "angle_gl_driver_selection_values"; /** - * List of package names that should check ANGLE rules - * @hide - */ - @Readable - public static final String ANGLE_ALLOWLIST = "angle_allowlist"; - - /** * Lists of ANGLE EGL features for debugging. * Each list of features is separated by a comma, each feature in each list is separated by * a colon. diff --git a/core/jni/android_os_GraphicsEnvironment.cpp b/core/jni/android_os_GraphicsEnvironment.cpp index b40491a49b14..f44e829d49d7 100644 --- a/core/jni/android_os_GraphicsEnvironment.cpp +++ b/core/jni/android_os_GraphicsEnvironment.cpp @@ -50,8 +50,7 @@ void setGpuStats_native(JNIEnv* env, jobject clazz, jstring driverPackageName, } void setAngleInfo_native(JNIEnv* env, jobject clazz, jstring path, jstring appName, - jstring devOptIn, jobjectArray featuresObj, jobject rulesFd, - jlong rulesOffset, jlong rulesLength) { + jstring devOptIn, jobjectArray featuresObj) { ScopedUtfChars pathChars(env, path); ScopedUtfChars appNameChars(env, appName); ScopedUtfChars devOptInChars(env, devOptIn); @@ -74,11 +73,8 @@ void setAngleInfo_native(JNIEnv* env, jobject clazz, jstring path, jstring appNa } } - int rulesFd_native = jniGetFDFromFileDescriptor(env, rulesFd); - android::GraphicsEnv::getInstance().setAngleInfo(pathChars.c_str(), appNameChars.c_str(), - devOptInChars.c_str(), features, - rulesFd_native, rulesOffset, rulesLength); + devOptInChars.c_str(), features); } bool shouldUseAngle_native(JNIEnv* env, jobject clazz, jstring appName) { @@ -124,8 +120,7 @@ const JNINativeMethod g_methods[] = { {"setInjectLayersPrSetDumpable", "()Z", reinterpret_cast<void*>(setInjectLayersPrSetDumpable_native)}, {"setAngleInfo", - "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/io/" - "FileDescriptor;JJ)V", + "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;)V", reinterpret_cast<void*>(setAngleInfo_native)}, {"getShouldUseAngle", "(Ljava/lang/String;)Z", reinterpret_cast<void*>(shouldUseAngle_native)}, diff --git a/core/res/res/values-as/strings.xml b/core/res/res/values-as/strings.xml index 65e4664589f3..96403247a7f4 100644 --- a/core/res/res/values-as/strings.xml +++ b/core/res/res/values-as/strings.xml @@ -100,7 +100,7 @@ <string name="peerTtyModeHco" msgid="5626377160840915617">"নেটৱৰ্ক পীয়েৰে TTY ম\'ড HCOলৈ সলনি কৰিবলৈ অনুৰোধ কৰিছে"</string> <string name="peerTtyModeVco" msgid="572208600818270944">"নেটৱৰ্ক পীয়েৰে TTY ম\'ড VCO লৈ সলনি কৰিবলৈ অনুৰোধ কৰিছে"</string> <string name="peerTtyModeOff" msgid="2420380956369226583">"নেটৱৰ্ক পীয়েৰে TTY ম\'ড OFFলৈ সলনি কৰিবলৈ অনুৰোধ কৰিছে"</string> - <string name="serviceClassVoice" msgid="2065556932043454987">"Voice"</string> + <string name="serviceClassVoice" msgid="2065556932043454987">"কণ্ঠস্বৰ"</string> <string name="serviceClassData" msgid="4148080018967300248">"ডেটা"</string> <string name="serviceClassFAX" msgid="2561653371698904118">"ফেক্স"</string> <string name="serviceClassSMS" msgid="1547664561704509004">"এছএমএছ"</string> @@ -815,7 +815,7 @@ <string name="phoneTypeTtyTdd" msgid="532038552105328779">"TTY TDD"</string> <string name="phoneTypeWorkMobile" msgid="7522314392003565121">"কৰ্মস্থানৰ ম’বাইল নম্বৰ"</string> <string name="phoneTypeWorkPager" msgid="3748332310638505234">"কৰ্মস্থানৰ পেজাৰৰ নম্বৰ"</string> - <string name="phoneTypeAssistant" msgid="757550783842231039">"Assistant"</string> + <string name="phoneTypeAssistant" msgid="757550783842231039">"সহায়ক"</string> <string name="phoneTypeMms" msgid="1799747455131365989">"এমএমএছ"</string> <string name="eventTypeCustom" msgid="3257367158986466481">"নিজৰ উপযোগিতা অনুযায়ী"</string> <string name="eventTypeBirthday" msgid="7770026752793912283">"জন্মদিন"</string> @@ -848,7 +848,7 @@ <string name="orgTypeOther" msgid="5450675258408005553">"অন্যান্য"</string> <string name="orgTypeCustom" msgid="1126322047677329218">"নিজৰ উপযোগিতা অনুযায়ী"</string> <string name="relationTypeCustom" msgid="282938315217441351">"নিজৰ উপযোগিতা অনুযায়ী"</string> - <string name="relationTypeAssistant" msgid="4057605157116589315">"Assistant"</string> + <string name="relationTypeAssistant" msgid="4057605157116589315">"সহায়ক"</string> <string name="relationTypeBrother" msgid="7141662427379247820">"ভাতৃ"</string> <string name="relationTypeChild" msgid="9076258911292693601">"শিশু"</string> <string name="relationTypeDomesticPartner" msgid="7825306887697559238">"সংগী"</string> @@ -1038,9 +1038,9 @@ <string name="menu_space_shortcut_label" msgid="5949311515646872071">"স্পেচ"</string> <string name="menu_enter_shortcut_label" msgid="6709499510082897320">"লিখক"</string> <string name="menu_delete_shortcut_label" msgid="4365787714477739080">"মচক"</string> - <string name="search_go" msgid="2141477624421347086">"Search"</string> - <string name="search_hint" msgid="455364685740251925">"অনুসন্ধান কৰক…"</string> - <string name="searchview_description_search" msgid="1045552007537359343">"Search"</string> + <string name="search_go" msgid="2141477624421347086">"সন্ধান কৰক"</string> + <string name="search_hint" msgid="455364685740251925">"সন্ধান কৰক…"</string> + <string name="searchview_description_search" msgid="1045552007537359343">"সন্ধান কৰক"</string> <string name="searchview_description_query" msgid="7430242366971716338">"প্ৰশ্নৰ সন্ধান কৰক"</string> <string name="searchview_description_clear" msgid="1989371719192982900">"প্ৰশ্ন মচক"</string> <string name="searchview_description_submit" msgid="6771060386117334686">"প্ৰশ্ন দাখিল কৰক"</string> @@ -1467,7 +1467,7 @@ <string name="tutorial_double_tap_to_zoom_message_short" msgid="1842872462124648678">"জুম নিয়ন্ত্ৰণ কৰিবলৈ দুবাৰ টিপক"</string> <string name="gadget_host_error_inflating" msgid="2449961590495198720">"ৱিজেট যোগ কৰিব পৰা নগ\'ল।"</string> <string name="ime_action_go" msgid="5536744546326495436">"যাওক"</string> - <string name="ime_action_search" msgid="4501435960587287668">"Search"</string> + <string name="ime_action_search" msgid="4501435960587287668">"সন্ধান কৰক"</string> <string name="ime_action_send" msgid="8456843745664334138">"পঠিয়াওক"</string> <string name="ime_action_next" msgid="4169702997635728543">"পৰৱৰ্তী"</string> <string name="ime_action_done" msgid="6299921014822891569">"সম্পন্ন হ’ল"</string> @@ -1972,7 +1972,7 @@ <string name="language_picker_section_suggested" msgid="6556199184638990447">"প্ৰস্তাৱিত"</string> <string name="language_picker_section_all" msgid="1985809075777564284">"সকলো ভাষা"</string> <string name="region_picker_section_all" msgid="756441309928774155">"সকলো অঞ্চল"</string> - <string name="locale_search_menu" msgid="6258090710176422934">"Search"</string> + <string name="locale_search_menu" msgid="6258090710176422934">"সন্ধান কৰক"</string> <string name="app_suspended_title" msgid="888873445010322650">"এপটো নাই"</string> <string name="app_suspended_default_message" msgid="6451215678552004172">"এই মুহূৰ্তত <xliff:g id="APP_NAME_0">%1$s</xliff:g> উপলব্ধ নহয়। ইয়াক <xliff:g id="APP_NAME_1">%2$s</xliff:g>এ পৰিচালনা কৰে।"</string> <string name="app_suspended_more_details" msgid="211260942831587014">"অধিক জানক"</string> diff --git a/core/res/res/values-be/strings.xml b/core/res/res/values-be/strings.xml index 2d94ffe2b0eb..f0c8f88609f4 100644 --- a/core/res/res/values-be/strings.xml +++ b/core/res/res/values-be/strings.xml @@ -972,7 +972,7 @@ <string name="keyguard_accessibility_pattern_area" msgid="1419570880512350689">"Вобласць узора."</string> <string name="keyguard_accessibility_slide_area" msgid="4331399051142520176">"Вобласць слайда."</string> <string name="password_keyboard_label_symbol_key" msgid="2716255580853511949">"123"</string> - <string name="password_keyboard_label_alpha_key" msgid="5294837425652726684">"ABC"</string> + <string name="password_keyboard_label_alpha_key" msgid="5294837425652726684">"АБВ"</string> <string name="password_keyboard_label_alt_key" msgid="8528261816395508841">"Alt"</string> <string name="granularity_label_character" msgid="8903387663153706317">"Знак"</string> <string name="granularity_label_word" msgid="3686589158760620518">"слова"</string> diff --git a/core/res/res/values-gu/strings.xml b/core/res/res/values-gu/strings.xml index e473ab670e75..3422d8e62f9d 100644 --- a/core/res/res/values-gu/strings.xml +++ b/core/res/res/values-gu/strings.xml @@ -100,7 +100,7 @@ <string name="peerTtyModeHco" msgid="5626377160840915617">"પીઅરે TTY મોડ HCO ની વિનંતી કરી"</string> <string name="peerTtyModeVco" msgid="572208600818270944">"પીઅરે TTY મોડ VCO ની વિનંતી કરી"</string> <string name="peerTtyModeOff" msgid="2420380956369226583">"પીઅરે TTY મોડ બંધ કરવાની વિનંતી કરી"</string> - <string name="serviceClassVoice" msgid="2065556932043454987">"Voice"</string> + <string name="serviceClassVoice" msgid="2065556932043454987">"વૉઇસ"</string> <string name="serviceClassData" msgid="4148080018967300248">"ડેટા"</string> <string name="serviceClassFAX" msgid="2561653371698904118">"ફેક્સ"</string> <string name="serviceClassSMS" msgid="1547664561704509004">"SMS"</string> @@ -306,7 +306,7 @@ <string name="permgroupdesc_contacts" msgid="9163927941244182567">"તમારા સંપર્કોને ઍક્સેસ કરવાની"</string> <string name="permgrouplab_location" msgid="1858277002233964394">"સ્થાન"</string> <string name="permgroupdesc_location" msgid="1995955142118450685">"આ ઉપકરણના સ્થાનને ઍક્સેસ કરવાની"</string> - <string name="permgrouplab_calendar" msgid="6426860926123033230">"Calendar"</string> + <string name="permgrouplab_calendar" msgid="6426860926123033230">"કૅલેન્ડર"</string> <string name="permgroupdesc_calendar" msgid="6762751063361489379">"તમારા કેલેન્ડરને ઍક્સેસ કરવાની"</string> <string name="permgrouplab_sms" msgid="795737735126084874">"SMS"</string> <string name="permgroupdesc_sms" msgid="5726462398070064542">"SMS સંદેશા મોકલવાની અને જોવાની"</string> @@ -848,7 +848,7 @@ <string name="orgTypeOther" msgid="5450675258408005553">"અન્ય"</string> <string name="orgTypeCustom" msgid="1126322047677329218">"કસ્ટમ"</string> <string name="relationTypeCustom" msgid="282938315217441351">"કસ્ટમ"</string> - <string name="relationTypeAssistant" msgid="4057605157116589315">"Assistant"</string> + <string name="relationTypeAssistant" msgid="4057605157116589315">"આસિસ્ટંટ"</string> <string name="relationTypeBrother" msgid="7141662427379247820">"ભાઈ"</string> <string name="relationTypeChild" msgid="9076258911292693601">"બાળક"</string> <string name="relationTypeDomesticPartner" msgid="7825306887697559238">"ઘરેલું ભાગીદાર"</string> diff --git a/core/res/res/values-kn/strings.xml b/core/res/res/values-kn/strings.xml index ed2f964d29e7..c5b57e96e24b 100644 --- a/core/res/res/values-kn/strings.xml +++ b/core/res/res/values-kn/strings.xml @@ -306,7 +306,7 @@ <string name="permgroupdesc_contacts" msgid="9163927941244182567">"ನಿಮ್ಮ ಸಂಪರ್ಕಗಳನ್ನು ಪ್ರವೇಶಿಸಲು"</string> <string name="permgrouplab_location" msgid="1858277002233964394">"ಸ್ಥಳ"</string> <string name="permgroupdesc_location" msgid="1995955142118450685">"ಈ ಸಾಧನದ ಸ್ಥಳವನ್ನು ಪ್ರವೇಶಿಸಿ"</string> - <string name="permgrouplab_calendar" msgid="6426860926123033230">"Calendar"</string> + <string name="permgrouplab_calendar" msgid="6426860926123033230">"ಕ್ಯಾಲೆಂಡರ್"</string> <string name="permgroupdesc_calendar" msgid="6762751063361489379">"ನಿಮ್ಮ ಕ್ಯಾಲೆಂಡರ್ ಪ್ರವೇಶಿಸಲು"</string> <string name="permgrouplab_sms" msgid="795737735126084874">"SMS"</string> <string name="permgroupdesc_sms" msgid="5726462398070064542">"SMS ಸಂದೇಶಗಳನ್ನು ಕಳುಹಿಸಲು ಮತ್ತು ನಿರ್ವಹಿಸಲು"</string> @@ -815,7 +815,7 @@ <string name="phoneTypeTtyTdd" msgid="532038552105328779">"TTY TDD"</string> <string name="phoneTypeWorkMobile" msgid="7522314392003565121">"ಕಚೇರಿ ಮೊಬೈಲ್"</string> <string name="phoneTypeWorkPager" msgid="3748332310638505234">"ಕಚೇರಿ ಪೇಜರ್"</string> - <string name="phoneTypeAssistant" msgid="757550783842231039">"Assistant"</string> + <string name="phoneTypeAssistant" msgid="757550783842231039">"ಅಸಿಸ್ಟೆಂಟ್"</string> <string name="phoneTypeMms" msgid="1799747455131365989">"MMS"</string> <string name="eventTypeCustom" msgid="3257367158986466481">"ಕಸ್ಟಮ್"</string> <string name="eventTypeBirthday" msgid="7770026752793912283">"ಜನ್ಮದಿನ"</string> @@ -848,7 +848,7 @@ <string name="orgTypeOther" msgid="5450675258408005553">"ಇತರೆ"</string> <string name="orgTypeCustom" msgid="1126322047677329218">"ಕಸ್ಟಮ್"</string> <string name="relationTypeCustom" msgid="282938315217441351">"ಕಸ್ಟಮ್"</string> - <string name="relationTypeAssistant" msgid="4057605157116589315">"Assistant"</string> + <string name="relationTypeAssistant" msgid="4057605157116589315">"ಅಸಿಸ್ಟೆಂಟ್"</string> <string name="relationTypeBrother" msgid="7141662427379247820">"ಸಹೋದರ"</string> <string name="relationTypeChild" msgid="9076258911292693601">"ಮಗು"</string> <string name="relationTypeDomesticPartner" msgid="7825306887697559238">"ಸ್ಥಳೀಯ ಪಾಲುದಾರ"</string> @@ -1038,9 +1038,9 @@ <string name="menu_space_shortcut_label" msgid="5949311515646872071">"space"</string> <string name="menu_enter_shortcut_label" msgid="6709499510082897320">"enter"</string> <string name="menu_delete_shortcut_label" msgid="4365787714477739080">"ಅಳಿಸಿ"</string> - <string name="search_go" msgid="2141477624421347086">"Search"</string> + <string name="search_go" msgid="2141477624421347086">"ಹುಡುಕಿ"</string> <string name="search_hint" msgid="455364685740251925">"ಹುಡುಕಿ…"</string> - <string name="searchview_description_search" msgid="1045552007537359343">"Search"</string> + <string name="searchview_description_search" msgid="1045552007537359343">"ಹುಡುಕಿ"</string> <string name="searchview_description_query" msgid="7430242366971716338">"ಪ್ರಶ್ನೆಯನ್ನು ಹುಡುಕಿ"</string> <string name="searchview_description_clear" msgid="1989371719192982900">"ಪ್ರಶ್ನೆಯನ್ನು ತೆರವುಗೊಳಿಸು"</string> <string name="searchview_description_submit" msgid="6771060386117334686">"ಪ್ರಶ್ನೆಯನ್ನು ಸಲ್ಲಿಸು"</string> @@ -1467,7 +1467,7 @@ <string name="tutorial_double_tap_to_zoom_message_short" msgid="1842872462124648678">"ಝೂಮ್ ನಿಯಂತ್ರಿಸಲು ಎರಡು ಬಾರಿ ಟ್ಯಾಪ್ ಮಾಡಿ"</string> <string name="gadget_host_error_inflating" msgid="2449961590495198720">"ವಿಜೆಟ್ ಸೇರಿಸಲು ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ."</string> <string name="ime_action_go" msgid="5536744546326495436">"ಹೋಗು"</string> - <string name="ime_action_search" msgid="4501435960587287668">"Search"</string> + <string name="ime_action_search" msgid="4501435960587287668">"ಹುಡುಕಿ"</string> <string name="ime_action_send" msgid="8456843745664334138">"ಕಳುಹಿಸು"</string> <string name="ime_action_next" msgid="4169702997635728543">"ಮುಂದೆ"</string> <string name="ime_action_done" msgid="6299921014822891569">"ಮುಗಿದಿದೆ"</string> @@ -1972,7 +1972,7 @@ <string name="language_picker_section_suggested" msgid="6556199184638990447">"ಸೂಚಿತ ಭಾಷೆ"</string> <string name="language_picker_section_all" msgid="1985809075777564284">"ಎಲ್ಲಾ ಭಾಷೆಗಳು"</string> <string name="region_picker_section_all" msgid="756441309928774155">"ಎಲ್ಲಾ ಪ್ರದೇಶಗಳು"</string> - <string name="locale_search_menu" msgid="6258090710176422934">"Search"</string> + <string name="locale_search_menu" msgid="6258090710176422934">"ಹುಡುಕಿ"</string> <string name="app_suspended_title" msgid="888873445010322650">"ಅಪ್ಲಿಕೇಶನ್ ಲಭ್ಯವಿಲ್ಲ"</string> <string name="app_suspended_default_message" msgid="6451215678552004172">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> ಅಪ್ಲಿಕೇಶನ್ ಸದ್ಯಕ್ಕೆ ಲಭ್ಯವಿಲ್ಲ. ಇದನ್ನು <xliff:g id="APP_NAME_1">%2$s</xliff:g> ನಲ್ಲಿ ನಿರ್ವಹಿಸಲಾಗುತ್ತಿದೆ."</string> <string name="app_suspended_more_details" msgid="211260942831587014">"ಇನ್ನಷ್ಟು ತಿಳಿಯಿರಿ"</string> diff --git a/core/res/res/values-ml/strings.xml b/core/res/res/values-ml/strings.xml index 44172ea0438e..fb7c4daa8e45 100644 --- a/core/res/res/values-ml/strings.xml +++ b/core/res/res/values-ml/strings.xml @@ -100,7 +100,7 @@ <string name="peerTtyModeHco" msgid="5626377160840915617">"പിയർ അഭ്യർത്ഥിച്ച TTY മോഡ് HCO"</string> <string name="peerTtyModeVco" msgid="572208600818270944">"പിയർ അഭ്യർത്ഥിച്ച TTY മോഡ് VCO"</string> <string name="peerTtyModeOff" msgid="2420380956369226583">"പിയർ അഭ്യർത്ഥിച്ച TTY മോഡ് \'ഓഫ്\'"</string> - <string name="serviceClassVoice" msgid="2065556932043454987">"Voice"</string> + <string name="serviceClassVoice" msgid="2065556932043454987">"ശബ്ദം"</string> <string name="serviceClassData" msgid="4148080018967300248">"ഡാറ്റ"</string> <string name="serviceClassFAX" msgid="2561653371698904118">"ഫാക്സ്"</string> <string name="serviceClassSMS" msgid="1547664561704509004">"SMS"</string> @@ -815,7 +815,7 @@ <string name="phoneTypeTtyTdd" msgid="532038552105328779">"TTY TDD"</string> <string name="phoneTypeWorkMobile" msgid="7522314392003565121">"ഓഫീസ് മൊബൈല്"</string> <string name="phoneTypeWorkPager" msgid="3748332310638505234">"ഔദ്യോഗിക പേജര്"</string> - <string name="phoneTypeAssistant" msgid="757550783842231039">"അസിസ്റ്റന്റ്"</string> + <string name="phoneTypeAssistant" msgid="757550783842231039">"അസിസ്റ്റന്റ്"</string> <string name="phoneTypeMms" msgid="1799747455131365989">"MMS"</string> <string name="eventTypeCustom" msgid="3257367158986466481">"ഇഷ്ടാനുസൃതം"</string> <string name="eventTypeBirthday" msgid="7770026752793912283">"ജന്മദിനം"</string> @@ -1038,9 +1038,9 @@ <string name="menu_space_shortcut_label" msgid="5949311515646872071">"space"</string> <string name="menu_enter_shortcut_label" msgid="6709499510082897320">"enter"</string> <string name="menu_delete_shortcut_label" msgid="4365787714477739080">"delete"</string> - <string name="search_go" msgid="2141477624421347086">"Search"</string> + <string name="search_go" msgid="2141477624421347086">"തിരയുക"</string> <string name="search_hint" msgid="455364685740251925">"തിരയുക…"</string> - <string name="searchview_description_search" msgid="1045552007537359343">"Search"</string> + <string name="searchview_description_search" msgid="1045552007537359343">"തിരയുക"</string> <string name="searchview_description_query" msgid="7430242366971716338">"തിരയൽ അന്വേഷണം"</string> <string name="searchview_description_clear" msgid="1989371719192982900">"അന്വേഷണം മായ്ക്കുക"</string> <string name="searchview_description_submit" msgid="6771060386117334686">"ചോദ്യം സമർപ്പിക്കുക"</string> @@ -1467,7 +1467,7 @@ <string name="tutorial_double_tap_to_zoom_message_short" msgid="1842872462124648678">"സൂം നിയന്ത്രണം ലഭിക്കാൻ രണ്ടുതവണ ടാപ്പുചെയ്യുക"</string> <string name="gadget_host_error_inflating" msgid="2449961590495198720">"വിജറ്റ് ചേർക്കാനായില്ല."</string> <string name="ime_action_go" msgid="5536744546326495436">"പോവുക"</string> - <string name="ime_action_search" msgid="4501435960587287668">"Search"</string> + <string name="ime_action_search" msgid="4501435960587287668">"തിരയുക"</string> <string name="ime_action_send" msgid="8456843745664334138">"അയയ്ക്കുക"</string> <string name="ime_action_next" msgid="4169702997635728543">"അടുത്തത്"</string> <string name="ime_action_done" msgid="6299921014822891569">"പൂർത്തിയായി"</string> @@ -1972,7 +1972,7 @@ <string name="language_picker_section_suggested" msgid="6556199184638990447">"നിര്ദ്ദേശിച്ചത്"</string> <string name="language_picker_section_all" msgid="1985809075777564284">"എല്ലാ ഭാഷകളും"</string> <string name="region_picker_section_all" msgid="756441309928774155">"എല്ലാ പ്രദേശങ്ങളും"</string> - <string name="locale_search_menu" msgid="6258090710176422934">"Search"</string> + <string name="locale_search_menu" msgid="6258090710176422934">"തിരയുക"</string> <string name="app_suspended_title" msgid="888873445010322650">"ആപ്പ് ലഭ്യമല്ല"</string> <string name="app_suspended_default_message" msgid="6451215678552004172">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> ഇപ്പോൾ ലഭ്യമല്ല. <xliff:g id="APP_NAME_1">%2$s</xliff:g> ആണ് ഇത് മാനേജ് ചെയ്യുന്നത്."</string> <string name="app_suspended_more_details" msgid="211260942831587014">"കൂടുതലറിയുക"</string> diff --git a/core/res/res/values-mr/strings.xml b/core/res/res/values-mr/strings.xml index 1747bdb68515..6b2cf96d6a4e 100644 --- a/core/res/res/values-mr/strings.xml +++ b/core/res/res/values-mr/strings.xml @@ -815,7 +815,7 @@ <string name="phoneTypeTtyTdd" msgid="532038552105328779">"TTY TDD"</string> <string name="phoneTypeWorkMobile" msgid="7522314392003565121">"कार्य मोबाइल"</string> <string name="phoneTypeWorkPager" msgid="3748332310638505234">"कार्य पेजर"</string> - <string name="phoneTypeAssistant" msgid="757550783842231039">"असिस्टंट"</string> + <string name="phoneTypeAssistant" msgid="757550783842231039">"Assistant"</string> <string name="phoneTypeMms" msgid="1799747455131365989">"MMS"</string> <string name="eventTypeCustom" msgid="3257367158986466481">"कस्टम"</string> <string name="eventTypeBirthday" msgid="7770026752793912283">"वाढदिवस"</string> diff --git a/core/res/res/values-or/strings.xml b/core/res/res/values-or/strings.xml index 11d6e7f4cfa1..8ba02e606fb6 100644 --- a/core/res/res/values-or/strings.xml +++ b/core/res/res/values-or/strings.xml @@ -1038,9 +1038,9 @@ <string name="menu_space_shortcut_label" msgid="5949311515646872071">"ସ୍ପେସ୍"</string> <string name="menu_enter_shortcut_label" msgid="6709499510082897320">"ଏଣ୍ଟର୍"</string> <string name="menu_delete_shortcut_label" msgid="4365787714477739080">"ଡିଲିଟ୍ କରନ୍ତୁ"</string> - <string name="search_go" msgid="2141477624421347086">"Search"</string> - <string name="search_hint" msgid="455364685740251925">"ସର୍ଚ୍ଚ…"</string> - <string name="searchview_description_search" msgid="1045552007537359343">"Search"</string> + <string name="search_go" msgid="2141477624421347086">"ସନ୍ଧାନ କରନ୍ତୁ"</string> + <string name="search_hint" msgid="455364685740251925">"ସନ୍ଧାନ…"</string> + <string name="searchview_description_search" msgid="1045552007537359343">"ସନ୍ଧାନ କରନ୍ତୁ"</string> <string name="searchview_description_query" msgid="7430242366971716338">"କ୍ୱେରୀ ସର୍ଚ୍ଚ କରନ୍ତୁ"</string> <string name="searchview_description_clear" msgid="1989371719192982900">"କ୍ୱେରୀ ଖାଲି କରନ୍ତୁ"</string> <string name="searchview_description_submit" msgid="6771060386117334686">"କ୍ୱେରୀ ଦାଖଲ କରନ୍ତୁ"</string> @@ -1467,7 +1467,7 @@ <string name="tutorial_double_tap_to_zoom_message_short" msgid="1842872462124648678">"ଜୁମ୍ ନିୟନ୍ତ୍ରଣ ପାଇଁ ଦୁଇଥର ଟାପ୍ କରନ୍ତୁ"</string> <string name="gadget_host_error_inflating" msgid="2449961590495198720">"ୱିଜେଟ୍ ଯୋଡ଼ିପାରିବ ନାହିଁ।"</string> <string name="ime_action_go" msgid="5536744546326495436">"ଯାଆନ୍ତୁ"</string> - <string name="ime_action_search" msgid="4501435960587287668">"Search"</string> + <string name="ime_action_search" msgid="4501435960587287668">"ସନ୍ଧାନ କରନ୍ତୁ"</string> <string name="ime_action_send" msgid="8456843745664334138">"ପଠାନ୍ତୁ"</string> <string name="ime_action_next" msgid="4169702997635728543">"ପରବର୍ତ୍ତୀ"</string> <string name="ime_action_done" msgid="6299921014822891569">"ହୋଇଗଲା"</string> @@ -1972,7 +1972,7 @@ <string name="language_picker_section_suggested" msgid="6556199184638990447">"ପ୍ରସ୍ତାବିତ"</string> <string name="language_picker_section_all" msgid="1985809075777564284">"ସମସ୍ତ ଭାଷା"</string> <string name="region_picker_section_all" msgid="756441309928774155">"ସମସ୍ତ ଅଞ୍ଚଳ"</string> - <string name="locale_search_menu" msgid="6258090710176422934">"Search"</string> + <string name="locale_search_menu" msgid="6258090710176422934">"ସନ୍ଧାନ କରନ୍ତୁ"</string> <string name="app_suspended_title" msgid="888873445010322650">"ଆପ୍ ଉପଲବ୍ଧ ନାହିଁ"</string> <string name="app_suspended_default_message" msgid="6451215678552004172">"ବର୍ତ୍ତମାନ <xliff:g id="APP_NAME_0">%1$s</xliff:g> ଉପଲବ୍ଧ ନାହିଁ। ଏହା <xliff:g id="APP_NAME_1">%2$s</xliff:g> ଦ୍ଵାରା ପରିଚାଳିତ ହେଉଛି।"</string> <string name="app_suspended_more_details" msgid="211260942831587014">"ଅଧିକ ଜାଣନ୍ତୁ"</string> diff --git a/core/res/res/values-pa/strings.xml b/core/res/res/values-pa/strings.xml index 264829636af7..209c6a1fb88c 100644 --- a/core/res/res/values-pa/strings.xml +++ b/core/res/res/values-pa/strings.xml @@ -306,7 +306,7 @@ <string name="permgroupdesc_contacts" msgid="9163927941244182567">"ਆਪਣੇ ਸੰਪਰਕਾਂ ਤੱਕ ਪਹੁੰਚ ਕਰਨ"</string> <string name="permgrouplab_location" msgid="1858277002233964394">"ਟਿਕਾਣਾ"</string> <string name="permgroupdesc_location" msgid="1995955142118450685">"ਇਸ ਡੀਵਾਈਸ ਦੇ ਨਿਰਧਾਰਤ ਟਿਕਾਣੇ ਤੱਕ ਪਹੁੰਚੋ"</string> - <string name="permgrouplab_calendar" msgid="6426860926123033230">"Calendar"</string> + <string name="permgrouplab_calendar" msgid="6426860926123033230">"ਕੈਲੰਡਰ"</string> <string name="permgroupdesc_calendar" msgid="6762751063361489379">"ਤੁਹਾਡੇ ਕੈਲੰਡਰ ਤੱਕ ਪਹੁੰਚ ਕਰਨ"</string> <string name="permgrouplab_sms" msgid="795737735126084874">"SMS"</string> <string name="permgroupdesc_sms" msgid="5726462398070064542">"SMS ਸੁਨੇਹੇ ਭੇਜੋ ਅਤੇ ਦੇਖੋ"</string> @@ -815,7 +815,7 @@ <string name="phoneTypeTtyTdd" msgid="532038552105328779">"TTY TDD"</string> <string name="phoneTypeWorkMobile" msgid="7522314392003565121">"ਕੰਮ ਦਾ ਮੋਬਾਈਲ"</string> <string name="phoneTypeWorkPager" msgid="3748332310638505234">"ਦਫ਼ਤਰ ਦਾ ਪੇਜਰ"</string> - <string name="phoneTypeAssistant" msgid="757550783842231039">"ਸਹਾਇਕ"</string> + <string name="phoneTypeAssistant" msgid="757550783842231039">"Assistant"</string> <string name="phoneTypeMms" msgid="1799747455131365989">"MMS"</string> <string name="eventTypeCustom" msgid="3257367158986466481">"ਵਿਉਂਂਤੀ"</string> <string name="eventTypeBirthday" msgid="7770026752793912283">"ਜਨਮਦਿਨ"</string> diff --git a/core/res/res/values-sk/strings.xml b/core/res/res/values-sk/strings.xml index 67b0ce0d50b1..083c8464957e 100644 --- a/core/res/res/values-sk/strings.xml +++ b/core/res/res/values-sk/strings.xml @@ -322,7 +322,7 @@ <string name="permgroupdesc_microphone" msgid="1047786732792487722">"nahrávanie zvuku"</string> <string name="permgrouplab_activityRecognition" msgid="3324466667921775766">"Fyzická aktivita"</string> <string name="permgroupdesc_activityRecognition" msgid="4725624819457670704">"prístup k vašej fyzickej aktivite"</string> - <string name="permgrouplab_camera" msgid="9090413408963547706">"Fotoaparát"</string> + <string name="permgrouplab_camera" msgid="9090413408963547706">"Kamera"</string> <string name="permgroupdesc_camera" msgid="7585150538459320326">"fotenie a natáčanie videí"</string> <string name="permgrouplab_nearby_devices" msgid="5529147543651181991">"Zariadenia v okolí"</string> <string name="permgroupdesc_nearby_devices" msgid="3213561597116913508">"objavovať a pripájať zariadenia v okolí"</string> diff --git a/core/res/res/values-sw600dp/config.xml b/core/res/res/values-sw600dp/config.xml index 34b6a54be493..861e329f2de9 100644 --- a/core/res/res/values-sw600dp/config.xml +++ b/core/res/res/values-sw600dp/config.xml @@ -51,5 +51,10 @@ <!-- If true, show multiuser switcher by default unless the user specifically disables it. --> <bool name="config_showUserSwitcherByDefault">true</bool> + + <!-- Enable dynamic keyguard positioning for large-width screens. This will cause the keyguard + to be aligned to one side of the screen when in landscape mode. --> + <bool name="config_enableDynamicKeyguardPositioning">true</bool> + </resources> diff --git a/core/res/res/values-ta/strings.xml b/core/res/res/values-ta/strings.xml index 4a5be62120f6..9565db5c2296 100644 --- a/core/res/res/values-ta/strings.xml +++ b/core/res/res/values-ta/strings.xml @@ -100,7 +100,7 @@ <string name="peerTtyModeHco" msgid="5626377160840915617">"TTY Mode HCOஐ இணைச் செயல்பாடு கோரியது"</string> <string name="peerTtyModeVco" msgid="572208600818270944">"TTY Mode VCOஐ இணைச் செயல்பாடு கோரியது"</string> <string name="peerTtyModeOff" msgid="2420380956369226583">"TTY Mode OFFஐ இணைச் செயல்பாடு கோரியது"</string> - <string name="serviceClassVoice" msgid="2065556932043454987">"Voice"</string> + <string name="serviceClassVoice" msgid="2065556932043454987">"குரல்"</string> <string name="serviceClassData" msgid="4148080018967300248">"தரவு"</string> <string name="serviceClassFAX" msgid="2561653371698904118">"தொலைநகல்"</string> <string name="serviceClassSMS" msgid="1547664561704509004">"SMS"</string> @@ -815,7 +815,7 @@ <string name="phoneTypeTtyTdd" msgid="532038552105328779">"TTY TDD"</string> <string name="phoneTypeWorkMobile" msgid="7522314392003565121">"பணியிட மொபைல்"</string> <string name="phoneTypeWorkPager" msgid="3748332310638505234">"பணியிட பேஜர்"</string> - <string name="phoneTypeAssistant" msgid="757550783842231039">"Assistant"</string> + <string name="phoneTypeAssistant" msgid="757550783842231039">"உதவியாளர்"</string> <string name="phoneTypeMms" msgid="1799747455131365989">"MMS"</string> <string name="eventTypeCustom" msgid="3257367158986466481">"பிரத்தியேகம்"</string> <string name="eventTypeBirthday" msgid="7770026752793912283">"பிறந்தநாள்"</string> @@ -848,7 +848,7 @@ <string name="orgTypeOther" msgid="5450675258408005553">"மற்றவை"</string> <string name="orgTypeCustom" msgid="1126322047677329218">"பிரத்தியேகம்"</string> <string name="relationTypeCustom" msgid="282938315217441351">"பிரத்தியேகம்"</string> - <string name="relationTypeAssistant" msgid="4057605157116589315">"Assistant"</string> + <string name="relationTypeAssistant" msgid="4057605157116589315">"உதவியாளர்"</string> <string name="relationTypeBrother" msgid="7141662427379247820">"சகோதரர்"</string> <string name="relationTypeChild" msgid="9076258911292693601">"குழந்தை"</string> <string name="relationTypeDomesticPartner" msgid="7825306887697559238">"வாழ்வுத் துணை"</string> diff --git a/core/res/res/values-te/strings.xml b/core/res/res/values-te/strings.xml index 3e4f65c7f4d7..81d82b1ea051 100644 --- a/core/res/res/values-te/strings.xml +++ b/core/res/res/values-te/strings.xml @@ -71,10 +71,10 @@ <string name="RuacMmi" msgid="1876047385848991110">"అవాంఛిత అంతరాయ కాల్స్ల తిరస్కరణ"</string> <string name="CndMmi" msgid="185136449405618437">"కాలింగ్ నంబర్ బట్వాడా"</string> <string name="DndMmi" msgid="8797375819689129800">"అంతరాయం కలిగించవద్దు"</string> - <string name="CLIRDefaultOnNextCallOn" msgid="4511621022859867988">"కాలర్ ID డిఫాల్ట్గా పరిమితానికి ఉంటుంది. తర్వాత కాల్: పరిమితం చేయబడింది"</string> - <string name="CLIRDefaultOnNextCallOff" msgid="5036749051007098105">"కాలర్ ID డిఫాల్ట్గా పరిమితానికి ఉంటుంది. తర్వాత కాల్: అపరిమితం"</string> - <string name="CLIRDefaultOffNextCallOn" msgid="1022781126694885017">"కాలర్ ID డిఫాల్ట్గా అపరిమితానికి ఉంటుంది. తర్వాత కాల్: పరిమితం చేయబడింది"</string> - <string name="CLIRDefaultOffNextCallOff" msgid="2491576172356463443">"కాలర్ ID డిఫాల్ట్గా అపరిమితానికి ఉంటుంది. తర్వాత కాల్: అపరిమితం"</string> + <string name="CLIRDefaultOnNextCallOn" msgid="4511621022859867988">"కాలర్ ID ఆటోమేటిక్లపై పరిమితి ఉంటుంది. తర్వాత కాల్: పరిమితి ఉంటుంది"</string> + <string name="CLIRDefaultOnNextCallOff" msgid="5036749051007098105">"కాలర్ ID ఆటోమేటిక్లపై పరిమితి ఉంటుంది. తర్వాత కాల్: పరిమితి లేదు"</string> + <string name="CLIRDefaultOffNextCallOn" msgid="1022781126694885017">"కాలర్ ID ఆటోమేటిక్లపై పరిమితి లేదు. తర్వాత కాల్: పరిమితి ఉంటుంది"</string> + <string name="CLIRDefaultOffNextCallOff" msgid="2491576172356463443">"కాలర్ ID ఆటోమేటిక్లపై పరిమితి లేదు. తర్వాత కాల్: పరిమితి లేదు"</string> <string name="serviceNotProvisioned" msgid="8289333510236766193">"సేవ కేటాయించబడలేదు."</string> <string name="CLIRPermanent" msgid="166443681876381118">"మీరు కాలర్ ID సెట్టింగ్ను మార్చలేరు."</string> <string name="RestrictedOnDataTitle" msgid="1500576417268169774">"మొబైల్ డేటా సేవ లేదు"</string> @@ -100,7 +100,7 @@ <string name="peerTtyModeHco" msgid="5626377160840915617">"అవతలి వారు HCO TTY మోడ్ని అభ్యర్థించారు"</string> <string name="peerTtyModeVco" msgid="572208600818270944">"అవతలి వారు VCO TTY మోడ్ని అభ్యర్థించారు"</string> <string name="peerTtyModeOff" msgid="2420380956369226583">"అవతలి వారు OFF TTY మోడ్ని అభ్యర్థించారు"</string> - <string name="serviceClassVoice" msgid="2065556932043454987">"Voice"</string> + <string name="serviceClassVoice" msgid="2065556932043454987">"వాయిస్"</string> <string name="serviceClassData" msgid="4148080018967300248">"డేటా"</string> <string name="serviceClassFAX" msgid="2561653371698904118">"ఫ్యాక్స్"</string> <string name="serviceClassSMS" msgid="1547664561704509004">"SMS"</string> @@ -306,7 +306,7 @@ <string name="permgroupdesc_contacts" msgid="9163927941244182567">"మీ కాంటాక్ట్లను యాక్సెస్ చేయడానికి"</string> <string name="permgrouplab_location" msgid="1858277002233964394">"లొకేషన్"</string> <string name="permgroupdesc_location" msgid="1995955142118450685">"ఈ పరికర స్థానాన్ని యాక్సెస్ చేయడానికి"</string> - <string name="permgrouplab_calendar" msgid="6426860926123033230">"Calendar"</string> + <string name="permgrouplab_calendar" msgid="6426860926123033230">"క్యాలెండర్"</string> <string name="permgroupdesc_calendar" msgid="6762751063361489379">"మీ క్యాలెండర్ను యాక్సెస్ చేయడానికి"</string> <string name="permgrouplab_sms" msgid="795737735126084874">"SMS"</string> <string name="permgroupdesc_sms" msgid="5726462398070064542">"SMS మెసేజ్లను పంపడం మరియు వీక్షించడం"</string> @@ -435,8 +435,8 @@ <string name="permdesc_writeCalendar" product="tv" msgid="951246749004952706">"ఈ యాప్ మీ Android TV పరికరంలో క్యాలెండర్ ఈవెంట్లను జోడించగలదు, తీసివేయగలదు లేదా మార్చగలదు. ఈ యాప్ క్యాలెండర్ యజమానుల నుండి వచ్చినట్లుగా మెసేజ్లను పంపగలదు లేదా ఈవెంట్లను వాటి యజమానులకు తెలియకుండానే మార్చగలదు."</string> <string name="permdesc_writeCalendar" product="default" msgid="5416380074475634233">"ఈ యాప్ మీ ఫోన్లో క్యాలెండర్ ఈవెంట్లను జోడించగలదు, తీసివేయగలదు లేదా మార్చగలదు. ఈ యాప్ క్యాలెండర్ యజమానుల నుండి వచ్చినట్లుగా మెసేజ్లను పంపగలదు లేదా ఈవెంట్లను వాటి యజమానులకు తెలియకుండానే మార్చగలదు."</string> <string name="permlab_accessLocationExtraCommands" msgid="5162339812057983988">"అదనపు స్థాన ప్రదాత ఆదేశాలను యాక్సెస్ చేయడం"</string> - <string name="permdesc_accessLocationExtraCommands" msgid="355369611979907967">"అదనపు స్థాన ప్రదాత ఆదేశాలను యాక్సెస్ చేయడానికి యాప్ను అనుమతిస్తుంది. ఇది GPS లేదా ఇతర స్థాన మూలాల నిర్వహణలో యాప్ ప్రమేయం ఉండేలా అనుమతించవచ్చు."</string> - <string name="permlab_accessFineLocation" msgid="6426318438195622966">"స్క్రీన్పై ఉన్నప్పుడు మాత్రమే ఖచ్చితమైన స్థానాన్ని యాక్సెస్ చేయండి"</string> + <string name="permdesc_accessLocationExtraCommands" msgid="355369611979907967">"అదనపు లొకేషన్ ప్రొవైడర్ కమాండ్లను యాక్సెస్ చేయడానికి యాప్ను అనుమతిస్తుంది. ఇది GPS లేదా ఇతర లొకేషన్ సోర్స్ల నిర్వహణలో యాప్ ప్రమేయం ఉండేలా అనుమతించవచ్చు."</string> + <string name="permlab_accessFineLocation" msgid="6426318438195622966">"స్క్రీన్పై ఉన్నప్పుడు మాత్రమే ఖచ్చితమైన లొకేషన్ను యాక్సెస్ చేయండి"</string> <string name="permdesc_accessFineLocation" msgid="6732174080240016335">"యాప్ ఉపయోగంలో ఉన్నప్పుడు మాత్రమే ఈ యాప్ మీ ఖచ్చితమైన లొకేషన్ను లొకేషన్ సర్వీస్ల ద్వారా తెలుసుకోగలదు. లొకేషన్ను యాప్ పొందాలంటే, దాని కోసం మీ పరికరం యొక్క లొకేషన్ సర్వీస్లను తప్పనిసరిగా ఆన్ చేయాలి. ఇది బ్యాటరీ వినియోగాన్ని పెంచవచ్చు."</string> <string name="permlab_accessCoarseLocation" msgid="1561042925407799741">"స్క్రీన్పై ఉన్నప్పుడు మాత్రమే సుమారు లొకేషన్ను యాక్సెస్ చేయండి"</string> <string name="permdesc_accessCoarseLocation" msgid="778521847873199160">"యాప్ ఉపయోగంలో ఉన్నప్పుడు మాత్రమే ఈ యాప్ మీ ఇంచుమించు లొకేషన్ను లొకేషన్ సర్వీస్ల నుండి తెలుసుకోగలదు. లొకేషన్ను యాప్ పొందాలంటే, దాని కోసం మీ పరికరం యొక్క లొకేషన్ సర్వీస్లను తప్పనిసరిగా ఆన్ చేయాలి."</string> @@ -848,7 +848,7 @@ <string name="orgTypeOther" msgid="5450675258408005553">"ఇతరం"</string> <string name="orgTypeCustom" msgid="1126322047677329218">"అనుకూలం"</string> <string name="relationTypeCustom" msgid="282938315217441351">"అనుకూలం"</string> - <string name="relationTypeAssistant" msgid="4057605157116589315">"Assistant"</string> + <string name="relationTypeAssistant" msgid="4057605157116589315">"అసిస్టెంట్"</string> <string name="relationTypeBrother" msgid="7141662427379247820">"సోదరుడు"</string> <string name="relationTypeChild" msgid="9076258911292693601">"బిడ్డ"</string> <string name="relationTypeDomesticPartner" msgid="7825306887697559238">"జీవిత భాగస్వామి"</string> @@ -916,12 +916,12 @@ <string name="lockscreen_failed_attempts_almost_glogin" product="tablet" msgid="3069635524964070596">"మీరు మీ అన్లాక్ నమూనాని <xliff:g id="NUMBER_0">%1$d</xliff:g> సార్లు తప్పుగా గీసారు. మరో <xliff:g id="NUMBER_1">%2$d</xliff:g> విజయవంతం కాని ప్రయత్నాల తర్వాత, మీరు మీ Google సైన్ఇన్ను ఉపయోగించి మీ టాబ్లెట్ను అన్లాక్ చేయడానికి అడగబడతారు.\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> సెకన్లలో మళ్లీ ప్రయత్నించండి."</string> <string name="lockscreen_failed_attempts_almost_glogin" product="tv" msgid="6399092175942158529">"మీరు మీ అన్లాక్ నమూనాని <xliff:g id="NUMBER_0">%1$d</xliff:g> సార్లు తప్పుగా గీసారు. మరో <xliff:g id="NUMBER_1">%2$d</xliff:g> విఫల ప్రయత్నాల తర్వాత, మీరు మీ Google సైన్ఇన్ను ఉపయోగించి మీ Android TV పరికరాన్ని అన్లాక్ చేయాల్సిందిగా మీకు తెలపబడుతుంది.\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> సెకన్లలో మళ్లీ ప్రయత్నించండి."</string> <string name="lockscreen_failed_attempts_almost_glogin" product="default" msgid="5691623136957148335">"మీరు మీ అన్లాక్ నమూనాని <xliff:g id="NUMBER_0">%1$d</xliff:g> సార్లు తప్పుగా గీసారు. మరో <xliff:g id="NUMBER_1">%2$d</xliff:g> విజయవంతం కాని ప్రయత్నాల తర్వాత, మీరు మీ Google సైన్ఇన్ను ఉపయోగించి మీ ఫోన్ను అన్లాక్ చేయడానికి అడగబడతారు.\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> సెకన్లలో మళ్లీ ప్రయత్నించండి."</string> - <string name="lockscreen_failed_attempts_almost_at_wipe" product="tablet" msgid="7914445759242151426">"మీరు టాబ్లెట్ను అన్లాక్ చేయడానికి <xliff:g id="NUMBER_0">%1$d</xliff:g> సార్లు తప్పుగా ప్రయత్నించారు. మరో <xliff:g id="NUMBER_1">%2$d</xliff:g> వైఫల్య ప్రయత్నాల తర్వాత, టాబ్లెట్ ఫ్యాక్టరీ డిఫాల్ట్కు రీసెట్ చేయబడుతుంది మరియు మొత్తం వినియోగదారు డేటాను కోల్పోవడం సంభవిస్తుంది."</string> - <string name="lockscreen_failed_attempts_almost_at_wipe" product="tv" msgid="4275591249631864248">"మీరు మీ Android TV పరికరాన్ని అన్లాక్ చేయడానికి <xliff:g id="NUMBER_0">%1$d</xliff:g> సార్లు విఫల ప్రయత్నాలు చేశారు. మరో <xliff:g id="NUMBER_1">%2$d</xliff:g> విఫల ప్రయత్నాల తర్వాత, మీ Android TV పరికరం ఫ్యాక్టరీ డిఫాల్ట్కి రీసెట్ చేయబడుతుంది, అలాగే వినియోగదారు డేటా మొత్తాన్ని కోల్పోతారు."</string> - <string name="lockscreen_failed_attempts_almost_at_wipe" product="default" msgid="1166532464798446579">"మీరు ఫోన్ను అన్లాక్ చేయడానికి <xliff:g id="NUMBER_0">%1$d</xliff:g> సార్లు తప్పుగా ప్రయత్నించారు. మరో <xliff:g id="NUMBER_1">%2$d</xliff:g> వైఫల్య ప్రయత్నాల తర్వాత, ఫోన్ ఫ్యాక్టరీ డిఫాల్ట్కు రీసెట్ చేయబడుతుంది మరియు మొత్తం వినియోగదారు డేటాను కోల్పోవడం సంభవిస్తుంది."</string> - <string name="lockscreen_failed_attempts_now_wiping" product="tablet" msgid="8682445539263683414">"మీరు టాబ్లెట్ను అన్లాక్ చేయడానికి <xliff:g id="NUMBER">%d</xliff:g> సార్లు తప్పుగా ప్రయత్నించారు. టాబ్లెట్ ఇప్పుడు ఫ్యాక్టరీ డిఫాల్ట్కు రీసెట్ చేయబడుతుంది."</string> + <string name="lockscreen_failed_attempts_almost_at_wipe" product="tablet" msgid="7914445759242151426">"మీరు టాబ్లెట్ను అన్లాక్ చేయడానికి <xliff:g id="NUMBER_0">%1$d</xliff:g> సార్లు తప్పుగా ప్రయత్నించారు. మరో <xliff:g id="NUMBER_1">%2$d</xliff:g> విఫల ప్రయత్నాల తర్వాత, టాబ్లెట్ ఫ్యాక్టరీ ఆటోమేటిక్కు రీసెట్ చేయబడుతుంది, అలాగే మొత్తం యూజర్ డేటాను కోల్పోతారు."</string> + <string name="lockscreen_failed_attempts_almost_at_wipe" product="tv" msgid="4275591249631864248">"మీరు మీ Android TV పరికరాన్ని అన్లాక్ చేయడానికి <xliff:g id="NUMBER_0">%1$d</xliff:g> సార్లు విఫల ప్రయత్నాలు చేశారు. మరో <xliff:g id="NUMBER_1">%2$d</xliff:g> విఫల ప్రయత్నాల తర్వాత, మీ Android TV పరికరం ఫ్యాక్టరీ ఆటోమేటిక్కు రీసెట్ చేయబడుతుంది, అలాగే యూజర్ డేటా మొత్తాన్ని కోల్పోతారు."</string> + <string name="lockscreen_failed_attempts_almost_at_wipe" product="default" msgid="1166532464798446579">"మీరు ఫోన్ను అన్లాక్ చేయడానికి <xliff:g id="NUMBER_0">%1$d</xliff:g> సార్లు తప్పుగా ప్రయత్నించారు. మరో <xliff:g id="NUMBER_1">%2$d</xliff:g> విఫల ప్రయత్నాల తర్వాత, ఫోన్, ఫ్యాక్టరీ ఆటోమేటిక్కు రీసెట్ చేయబడుతుంది, అలాగే మొత్తం యూజర్ డేటాను కోల్పోతారు."</string> + <string name="lockscreen_failed_attempts_now_wiping" product="tablet" msgid="8682445539263683414">"మీరు టాబ్లెట్ను అన్లాక్ చేయడానికి <xliff:g id="NUMBER">%d</xliff:g> సార్లు తప్పుగా ప్రయత్నించారు. టాబ్లెట్ ఇప్పుడు ఫ్యాక్టరీ ఆటోమేటిక్కు రీసెట్ చేయబడుతుంది."</string> <string name="lockscreen_failed_attempts_now_wiping" product="tv" msgid="2205435033340091883">"మీరు మీ Android TV పరికరాన్ని అన్లాక్ చేయడానికి <xliff:g id="NUMBER">%d</xliff:g> సార్లు విఫల ప్రయత్నాలు చేశారు. మీ Android TV పరికరం ఇప్పుడు ఫ్యాక్టరీ రీసెట్ చేయబడుతుంది."</string> - <string name="lockscreen_failed_attempts_now_wiping" product="default" msgid="2203704707679895487">"మీరు ఫోన్ను అన్లాక్ చేయడానికి <xliff:g id="NUMBER">%d</xliff:g> సార్లు తప్పుగా ప్రయత్నించారు. ఫోన్ ఇప్పుడు ఫ్యాక్టరీ డిఫాల్ట్కు రీసెట్ చేయబడుతుంది."</string> + <string name="lockscreen_failed_attempts_now_wiping" product="default" msgid="2203704707679895487">"మీరు ఫోన్ను అన్లాక్ చేయడానికి <xliff:g id="NUMBER">%d</xliff:g> సార్లు తప్పుగా ప్రయత్నించారు. ఫోన్ ఇప్పుడు ఫ్యాక్టరీ ఆటోమేటిక్కు రీసెట్ చేయబడుతుంది."</string> <string name="lockscreen_too_many_failed_attempts_countdown" msgid="6807200118164539589">"<xliff:g id="NUMBER">%d</xliff:g> సెకన్లలో మళ్లీ ప్రయత్నించండి."</string> <string name="lockscreen_forgot_pattern_button_text" msgid="8362442730606839031">"నమూనాను మర్చిపోయారా?"</string> <string name="lockscreen_glogin_forgot_pattern" msgid="9218940117797602518">"ఖాతా అన్లాక్"</string> @@ -1014,7 +1014,7 @@ <string name="permlab_addVoicemail" msgid="4770245808840814471">"వాయిస్ మెయిల్ను జోడించడం"</string> <string name="permdesc_addVoicemail" msgid="5470312139820074324">"మీ వాయిస్ మెయిల్ ఇన్బాక్స్కి మెసేజ్లను జోడించడానికి యాప్ను అనుమతిస్తుంది."</string> <string name="permlab_writeGeolocationPermissions" msgid="8605631647492879449">"బ్రౌజర్ భౌగోళిక స్థానం అనుమతులను సవరించడం"</string> - <string name="permdesc_writeGeolocationPermissions" msgid="5817346421222227772">"బ్రౌజర్ యొక్క భౌగోళిక స్థానం అనుమతులను సవరించడానికి యాప్ను అనుమతిస్తుంది. హానికరమైన యాప్లు ఏకపక్ష వెబ్ సైట్లకు స్థాన సమాచారాన్ని అనుమతించడానికి దీన్ని ఉపయోగించవచ్చు."</string> + <string name="permdesc_writeGeolocationPermissions" msgid="5817346421222227772">"బ్రౌజర్ యొక్క భౌగోళిక లొకేషన్ అనుమతులను సవరించడానికి యాప్ను అనుమతిస్తుంది. హానికరమైన యాప్లు ఏకపక్ష వెబ్ సైట్లకు లొకేషన్ సమాచారాన్ని అనుమతించడానికి దీన్ని ఉపయోగించవచ్చు."</string> <string name="save_password_message" msgid="2146409467245462965">"మీరు బ్రౌజర్ ఈ పాస్వర్డ్ను గుర్తుపెట్టుకోవాలని కోరుకుంటున్నారా?"</string> <string name="save_password_notnow" msgid="2878327088951240061">"ఇప్పుడు కాదు"</string> <string name="save_password_remember" msgid="6490888932657708341">"గుర్తుంచుకో"</string> @@ -1039,7 +1039,7 @@ <string name="menu_enter_shortcut_label" msgid="6709499510082897320">"enter"</string> <string name="menu_delete_shortcut_label" msgid="4365787714477739080">"delete"</string> <string name="search_go" msgid="2141477624421347086">"సెర్చ్"</string> - <string name="search_hint" msgid="455364685740251925">"వెతుకు..."</string> + <string name="search_hint" msgid="455364685740251925">"సెర్చ్ చేయండి..."</string> <string name="searchview_description_search" msgid="1045552007537359343">"సెర్చ్"</string> <string name="searchview_description_query" msgid="7430242366971716338">"ప్రశ్నను వెతకండి"</string> <string name="searchview_description_clear" msgid="1989371719192982900">"ప్రశ్నను క్లియర్ చేయి"</string> @@ -1197,7 +1197,7 @@ <string name="whichEditApplicationNamed" msgid="8096494987978521514">"%1$sతో సవరించు"</string> <string name="whichEditApplicationLabel" msgid="1463288652070140285">"సవరించు"</string> <string name="whichSendApplication" msgid="4143847974460792029">"షేర్ చేయండి"</string> - <string name="whichSendApplicationNamed" msgid="4470386782693183461">"%1$sతో భాగస్వామ్యం చేయి"</string> + <string name="whichSendApplicationNamed" msgid="4470386782693183461">"%1$sతో షేర్ చేయండి"</string> <string name="whichSendApplicationLabel" msgid="7467813004769188515">"షేర్ చేయి"</string> <string name="whichSendToApplication" msgid="77101541959464018">"దీన్ని ఉపయోగించి పంపండి"</string> <string name="whichSendToApplicationNamed" msgid="3385686512014670003">"%1$sని ఉపయోగించి పంపండి"</string> @@ -1208,9 +1208,9 @@ <string name="whichImageCaptureApplication" msgid="2737413019463215284">"దీనితో చిత్రాన్ని క్యాప్చర్ చేయి"</string> <string name="whichImageCaptureApplicationNamed" msgid="8820702441847612202">"%1$sతో చిత్రాన్ని క్యాప్చర్ చేయండి"</string> <string name="whichImageCaptureApplicationLabel" msgid="6505433734824988277">"చిత్రాన్ని క్యాప్చర్ చేయి"</string> - <string name="alwaysUse" msgid="3153558199076112903">"ఈ చర్యకు డిఫాల్ట్గా ఉపయోగించండి."</string> + <string name="alwaysUse" msgid="3153558199076112903">"ఈ చర్యకు ఆటోమేటిక్గా ఉపయోగించండి."</string> <string name="use_a_different_app" msgid="4987790276170972776">"వేరొక యాప్ను ఉపయోగించండి"</string> - <string name="clearDefaultHintMsg" msgid="1325866337702524936">"సిస్టమ్ సెట్టింగ్లు > యాప్లు > డౌన్లోడ్ చేయబడినవిలో డిఫాల్ట్ను క్లియర్ చేయి."</string> + <string name="clearDefaultHintMsg" msgid="1325866337702524936">"సిస్టమ్ సెట్టింగ్లు > యాప్లు > డౌన్లోడ్ చేయబడినవిలో ఆటోమేటిక్ను క్లియర్ చేయి."</string> <string name="chooseActivity" msgid="8563390197659779956">"చర్యను ఎంచుకోండి"</string> <string name="chooseUsbActivity" msgid="2096269989990986612">"USB పరికరం కోసం యాప్ను ఎంచుకోండి"</string> <string name="noApplications" msgid="1186909265235544019">"ఈ చర్యను అమలు చేయగల యాప్లు ఏవీ లేవు."</string> @@ -1274,7 +1274,7 @@ <string name="dump_heap_notification" msgid="5316644945404825032">"<xliff:g id="PROC">%1$s</xliff:g> మెమరీ పరిమితిని మించిపోయింది"</string> <string name="dump_heap_ready_notification" msgid="2302452262927390268">"<xliff:g id="PROC">%1$s</xliff:g> హీప్ డంప్ సిద్ధంగా ఉంది"</string> <string name="dump_heap_notification_detail" msgid="8431586843001054050">"కుప్పలు తెప్పలుగా సేకరించబడింది. షేర్ చేయడానికి నొక్కండి"</string> - <string name="dump_heap_title" msgid="4367128917229233901">"హీప్ డంప్ను భాగస్వామ్యం చేయాలా?"</string> + <string name="dump_heap_title" msgid="4367128917229233901">"హీప్ డంప్ను షేర్ చేయాలా?"</string> <string name="dump_heap_text" msgid="1692649033835719336">"ఈ <xliff:g id="PROC">%1$s</xliff:g> ప్రాసెస్ దీని మెమరీ పరిమితి అయిన <xliff:g id="SIZE">%2$s</xliff:g>ని మించిపోయింది. మీరు దీని డెవలపర్తో షేర్ చేయడానికి హీప్ డంప్ అందుబాటులో ఉంది. జాగ్రత్త: ఈ హీప్ డంప్లో అప్లికేషన్ యాక్సెస్ కలిగి ఉన్న మీ వ్యక్తిగత సమాచారం ఏదైనా ఉండవచ్చు."</string> <string name="dump_heap_system_text" msgid="6805155514925350849">"ఈ <xliff:g id="PROC">%1$s</xliff:g> ప్రాసెస్ దాని మెమరీ పరిమితి <xliff:g id="SIZE">%2$s</xliff:g>ని మించిపోయింది. మీరు షేర్ చేయడానికి హీప్ డంప్ అందుబాటులో ఉంది. జాగ్రత్త: ఈ హీప్ డంప్ ప్రాసెస్ విధానంలో గోప్యమైన వ్యక్తిగత సమాచారం యాక్సెస్ చేసే అవకాశం ఉంది, వీటిలో మీరు టైప్ చేసే అంశాలు కూడా ఉండవచ్చు."</string> <string name="dump_heap_ready_text" msgid="5849618132123045516">"మీరు షేర్ చేయదలుచుకున్న <xliff:g id="PROC">%1$s</xliff:g> యొక్క హీప్ డంప్ ప్రాసెస్ విధానం అందుబాటులో ఉంది. జాగ్రత్త: ఈ హీప్ డంప్ ప్రాసెస్ విధానంలో గోప్యమైన వ్యక్తిగత సమాచారం యాక్సెస్ చేసే అవకాశం ఉంది, వీటిలో మీరు టైప్ చేసే అంశాలు కూడా ఉండవచ్చు."</string> @@ -1293,7 +1293,7 @@ <string name="volume_icon_description_incall" msgid="4491255105381227919">"కాల్ వాల్యూమ్"</string> <string name="volume_icon_description_media" msgid="4997633254078171233">"మీడియా వాల్యూమ్"</string> <string name="volume_icon_description_notification" msgid="579091344110747279">"నోటిఫికేషన్ వాల్యూమ్"</string> - <string name="ringtone_default" msgid="9118299121288174597">"డిఫాల్ట్ రింగ్టోన్"</string> + <string name="ringtone_default" msgid="9118299121288174597">"ఆటోమేటిక్ రింగ్టోన్"</string> <string name="ringtone_default_with_actual" msgid="2709686194556159773">"ఆటోమేటిక్ (<xliff:g id="ACTUAL_RINGTONE">%1$s</xliff:g>)"</string> <string name="ringtone_silent" msgid="397111123930141876">"ఏదీ వద్దు"</string> <string name="ringtone_picker_title" msgid="667342618626068253">"రింగ్టోన్లు"</string> @@ -1385,7 +1385,7 @@ <string name="usb_contaminant_not_detected_title" msgid="2651167729563264053">"USB పోర్ట్ను ఉపయోగించడం సురక్షితం"</string> <string name="usb_contaminant_not_detected_message" msgid="892863190942660462">"ఫోన్ ఇకపై ద్రవ లేదా వ్యర్థ పదార్థాలను గుర్తించదు."</string> <string name="taking_remote_bugreport_notification_title" msgid="1582531382166919850">"బగ్ రిపోర్ట్ను తీస్తోంది…"</string> - <string name="share_remote_bugreport_notification_title" msgid="6708897723753334999">"బగ్ రిపోర్ట్ను భాగస్వామ్యం చేయాలా?"</string> + <string name="share_remote_bugreport_notification_title" msgid="6708897723753334999">"బగ్ రిపోర్ట్ను షేర్ చేయాలా?"</string> <string name="sharing_remote_bugreport_notification_title" msgid="3077385149217638550">"బగ్ రిపోర్ట్ను భాగస్వామ్యం చేస్తోంది..."</string> <string name="share_remote_bugreport_notification_message_finished" msgid="7325635795739260135">"మీ నిర్వాహకులు ఈ పరికరం సమస్యకు పరిష్కారాన్ని కనుగొనడంలో సహాయం కోసం బగ్ రిపోర్ట్ను అభ్యర్థించారు. యాప్లు మరియు డేటా భాగస్వామ్యం చేయబడవచ్చు."</string> <string name="share_remote_bugreport_action" msgid="7630880678785123682">"షేర్ చేయి"</string> @@ -1525,8 +1525,8 @@ <string name="websearch" msgid="5624340204512793290">"వెబ్ శోధన"</string> <string name="find_next" msgid="5341217051549648153">"తదుపరిదాన్ని కనుగొను"</string> <string name="find_previous" msgid="4405898398141275532">"మునుపటిదాన్ని కనుగొను"</string> - <string name="gpsNotifTicker" msgid="3207361857637620780">"<xliff:g id="NAME">%s</xliff:g> నుండి స్థాన రిక్వెస్ట్"</string> - <string name="gpsNotifTitle" msgid="1590033371665669570">"స్థాన రిక్వెస్ట్"</string> + <string name="gpsNotifTicker" msgid="3207361857637620780">"<xliff:g id="NAME">%s</xliff:g> నుండి లొకేషన్ రిక్వెస్ట్"</string> + <string name="gpsNotifTitle" msgid="1590033371665669570">"లొకేషన్ రిక్వెస్ట్"</string> <string name="gpsNotifMessage" msgid="7346649122793758032">"<xliff:g id="NAME">%1$s</xliff:g> (<xliff:g id="SERVICE">%2$s</xliff:g>) ద్వారా అభ్యర్థించబడింది"</string> <string name="gpsVerifYes" msgid="3719843080744112940">"అవును"</string> <string name="gpsVerifNo" msgid="1671201856091564741">"కాదు"</string> @@ -1675,12 +1675,12 @@ <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="23741434207544038">"మీరు మీ పిన్ను <xliff:g id="NUMBER_0">%1$d</xliff:g> సార్లు తప్పుగా టైప్ చేశారు. \n\n<xliff:g id="NUMBER_1">%2$d</xliff:g> సెకన్లలో మళ్లీ ప్రయత్నించండి."</string> <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="3328686432962224215">"మీరు మీ పాస్వర్డ్ను <xliff:g id="NUMBER_0">%1$d</xliff:g> సార్లు తప్పుగా టైప్ చేశారు. \n\n<xliff:g id="NUMBER_1">%2$d</xliff:g> సెకన్లలో మళ్లీ ప్రయత్నించండి."</string> <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="7357404233979139075">"మీరు మీ అన్లాక్ నమూనాను <xliff:g id="NUMBER_0">%1$d</xliff:g> సార్లు తప్పుగా గీసారు. \n\n<xliff:g id="NUMBER_1">%2$d</xliff:g> సెకన్లలో మళ్లీ ప్రయత్నించండి."</string> - <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="3479940221343361587">"మీరు టాబ్లెట్ను అన్లాక్ చేయడానికి <xliff:g id="NUMBER_0">%1$d</xliff:g> చెల్లని ప్రయత్నాలు చేశారు. మరో <xliff:g id="NUMBER_1">%2$d</xliff:g> విఫల ప్రయత్నాల తర్వాత, టాబ్లెట్ ఫ్యాక్టరీ డిఫాల్ట్కు రీసెట్ చేయబడుతుంది మరియు మొత్తం వినియోగదారు డేటాను కోల్పోవడం సంభవిస్తుంది."</string> - <string name="kg_failed_attempts_almost_at_wipe" product="tv" msgid="9064457748587850217">"మీరు మీ Android TV పరికరాన్ని అన్లాక్ చేయడానికి <xliff:g id="NUMBER_0">%1$d</xliff:g> సార్లు విఫల ప్రయత్నాలు చేశారు. మరో <xliff:g id="NUMBER_1">%2$d</xliff:g> విఫల ప్రయత్నాల తర్వాత, మీ Android TV పరికరం ఫ్యాక్టరీ డిఫాల్ట్కి రీసెట్ చేయబడుతుంది, అలాగే వినియోగదారు డేటా మొత్తాన్ని కోల్పోతారు."</string> - <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="5955398963754432548">"మీరు ఫోన్ను అన్లాక్ చేయడానికి <xliff:g id="NUMBER_0">%1$d</xliff:g> చెల్లని ప్రయత్నాలు చేశారు. మరో <xliff:g id="NUMBER_1">%2$d</xliff:g> విఫల ప్రయత్నాల తర్వాత, ఫోన్ ఫ్యాక్టరీ డిఫాల్ట్కు రీసెట్ చేయబడుతుంది మరియు మొత్తం వినియోగదారు డేటాను కోల్పోవడం సంభవిస్తుంది."</string> - <string name="kg_failed_attempts_now_wiping" product="tablet" msgid="2299099385175083308">"మీరు టాబ్లెట్ను అన్లాక్ చేయడానికి <xliff:g id="NUMBER">%d</xliff:g> చెల్లని ప్రయత్నాలు చేశారు. టాబ్లెట్ ఇప్పుడు ఫ్యాక్టరీ డిఫాల్ట్కు రీసెట్ చేయబడుతుంది."</string> + <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="3479940221343361587">"మీరు టాబ్లెట్ను అన్లాక్ చేయడానికి <xliff:g id="NUMBER_0">%1$d</xliff:g> చెల్లని ప్రయత్నాలు చేశారు. మరో <xliff:g id="NUMBER_1">%2$d</xliff:g> విఫల ప్రయత్నాల తర్వాత, టాబ్లెట్ ఫ్యాక్టరీ ఆటోమేటిక్కు రీసెట్ చేయబడుతుంది, అలాగే మొత్తం యూజర్ డేటాను కోల్పోతారు."</string> + <string name="kg_failed_attempts_almost_at_wipe" product="tv" msgid="9064457748587850217">"మీరు మీ Android TV పరికరాన్ని అన్లాక్ చేయడానికి <xliff:g id="NUMBER_0">%1$d</xliff:g> సార్లు విఫల ప్రయత్నాలు చేశారు. మరో <xliff:g id="NUMBER_1">%2$d</xliff:g> విఫల ప్రయత్నాల తర్వాత, మీ Android TV పరికరం ఫ్యాక్టరీ ఆటోమేటిక్కు రీసెట్ చేయబడుతుంది, అలాగే యూజర్, డేటా మొత్తాన్ని కోల్పోతారు."</string> + <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="5955398963754432548">"మీరు ఫోన్ను అన్లాక్ చేయడానికి <xliff:g id="NUMBER_0">%1$d</xliff:g> చెల్లని ప్రయత్నాలు చేశారు. మరో <xliff:g id="NUMBER_1">%2$d</xliff:g> విఫల ప్రయత్నాల తర్వాత, ఫోన్ ఫ్యాక్టరీ ఆటోమేటిక్కు రీసెట్ చేయబడుతుంది, అలాగే మొత్తం యూజర్ డేటాను కోల్పోతారు."</string> + <string name="kg_failed_attempts_now_wiping" product="tablet" msgid="2299099385175083308">"మీరు టాబ్లెట్ను అన్లాక్ చేయడానికి <xliff:g id="NUMBER">%d</xliff:g> చెల్లని ప్రయత్నాలు చేశారు. టాబ్లెట్ ఇప్పుడు ఫ్యాక్టరీ ఆటోమేటిక్కు రీసెట్ చేయబడుతుంది."</string> <string name="kg_failed_attempts_now_wiping" product="tv" msgid="5045460916106267585">"మీరు మీ Android TV పరికరాన్ని అన్లాక్ చేయడానికి <xliff:g id="NUMBER">%d</xliff:g> సార్లు విఫల ప్రయత్నాలు చేశారు. మీ Android TV పరికరం ఇప్పుడు ఫ్యాక్టరీ రీసెట్ చేయబడుతుంది."</string> - <string name="kg_failed_attempts_now_wiping" product="default" msgid="5043730590446071189">"మీరు ఫోన్ను అన్లాక్ చేయడానికి <xliff:g id="NUMBER">%d</xliff:g> చెల్లని ప్రయత్నాలు చేశారు. ఫోన్ ఇప్పుడు ఫ్యాక్టరీ డిఫాల్ట్కు రీసెట్ చేయబడుతుంది."</string> + <string name="kg_failed_attempts_now_wiping" product="default" msgid="5043730590446071189">"మీరు ఫోన్ను అన్లాక్ చేయడానికి <xliff:g id="NUMBER">%d</xliff:g> చెల్లని ప్రయత్నాలు చేశారు. ఫోన్ ఇప్పుడు ఫ్యాక్టరీ ఆటోమేటిక్కు రీసెట్ చేయబడుతుంది."</string> <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="7086799295109717623">"మీరు మీ అన్లాక్ నమూనాను <xliff:g id="NUMBER_0">%1$d</xliff:g> సార్లు తప్పుగా గీసారు. మరో <xliff:g id="NUMBER_1">%2$d</xliff:g> విఫల ప్రయత్నాల తర్వాత, ఇమెయిల్ ఖాతాను ఉపయోగించి మీ టాబ్లెట్ను అన్లాక్ చేయాల్సిందిగా మిమ్మల్ని అడుగుతారు.\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> సెకన్లలో మళ్లీ ప్రయత్నించండి."</string> <string name="kg_failed_attempts_almost_at_login" product="tv" msgid="4670840383567106114">"మీరు మీ అన్లాక్ నమూనాను <xliff:g id="NUMBER_0">%1$d</xliff:g> సార్లు తప్పుగా గీశారు. మరో <xliff:g id="NUMBER_1">%2$d</xliff:g> విఫల ప్రయత్నాల తర్వాత మీ Android TV పరికరాన్ని ఇమెయిల్ ఖాతా ద్వారా అన్లాక్ చేయాల్సిందిగా మిమ్మల్ని కోరడం జరుగుతుంది.\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> సెకన్లలో మళ్లీ ప్రయత్నించండి."</string> <string name="kg_failed_attempts_almost_at_login" product="default" msgid="5270861875006378092">"మీరు మీ అన్లాక్ నమూనాను <xliff:g id="NUMBER_0">%1$d</xliff:g> సార్లు తప్పుగా గీసారు. మరో <xliff:g id="NUMBER_1">%2$d</xliff:g> విఫల ప్రయత్నాల తర్వాత, ఇమెయిల్ ఖాతాను ఉపయోగించి మీ ఫోన్ను అన్లాక్ చేయాల్సిందిగా మిమ్మల్ని అడుగుతారు.\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> సెకన్లలో మళ్లీ ప్రయత్నించండి."</string> diff --git a/data/etc/car/com.android.car.carlauncher.xml b/data/etc/car/com.android.car.carlauncher.xml index abde232a8a5a..33f885a45a3a 100644 --- a/data/etc/car/com.android.car.carlauncher.xml +++ b/data/etc/car/com.android.car.carlauncher.xml @@ -17,6 +17,7 @@ <permissions> <privapp-permissions package="com.android.car.carlauncher"> <permission name="android.permission.ACTIVITY_EMBEDDING"/> + <permission name="android.permission.CHANGE_COMPONENT_ENABLED_STATE"/> <permission name="android.permission.CONTROL_INCALL_EXPERIENCE"/> <permission name="android.permission.INTERACT_ACROSS_USERS"/> <permission name="android.permission.MANAGE_USERS"/> diff --git a/libs/WindowManager/Shell/res/color/split_divider_background.xml b/libs/WindowManager/Shell/res/color/split_divider_background.xml new file mode 100644 index 000000000000..84f4fdff4e1a --- /dev/null +++ b/libs/WindowManager/Shell/res/color/split_divider_background.xml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + ~ Copyright (C) 2021 The Android Open Source Project + ~ + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ 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. + --> +<selector xmlns:android="http://schemas.android.com/apk/res/android"> + <item android:color="@android:color/system_neutral2_500" android:lStar="35" /> +</selector>
\ No newline at end of file diff --git a/libs/WindowManager/Shell/res/layout/docked_stack_divider.xml b/libs/WindowManager/Shell/res/layout/docked_stack_divider.xml index ed5d2e1b49f5..d732b01ce106 100644 --- a/libs/WindowManager/Shell/res/layout/docked_stack_divider.xml +++ b/libs/WindowManager/Shell/res/layout/docked_stack_divider.xml @@ -22,7 +22,7 @@ <View style="@style/DockedDividerBackground" android:id="@+id/docked_divider_background" - android:background="@color/docked_divider_background"/> + android:background="@color/split_divider_background"/> <com.android.wm.shell.legacysplitscreen.MinimizedDockShadow style="@style/DockedDividerMinimizedShadow" diff --git a/libs/WindowManager/Shell/res/layout/split_divider.xml b/libs/WindowManager/Shell/res/layout/split_divider.xml index 7f583f3e6bac..a1dba5169f1b 100644 --- a/libs/WindowManager/Shell/res/layout/split_divider.xml +++ b/libs/WindowManager/Shell/res/layout/split_divider.xml @@ -21,8 +21,7 @@ <View style="@style/DockedDividerBackground" - android:id="@+id/docked_divider_background" - android:background="@color/docked_divider_background"/> + android:id="@+id/docked_divider_background"/> <com.android.wm.shell.common.split.DividerHandleView style="@style/DockedDividerHandle" diff --git a/libs/WindowManager/Shell/res/values-land/dimens.xml b/libs/WindowManager/Shell/res/values-land/dimens.xml index aafba58cef59..a95323fd4801 100644 --- a/libs/WindowManager/Shell/res/values-land/dimens.xml +++ b/libs/WindowManager/Shell/res/values-land/dimens.xml @@ -16,8 +16,12 @@ */ --> <resources> + <!-- Divider handle size for legacy split screen --> <dimen name="docked_divider_handle_width">2dp</dimen> <dimen name="docked_divider_handle_height">16dp</dimen> + <!-- Divider handle size for split screen --> + <dimen name="split_divider_handle_width">3dp</dimen> + <dimen name="split_divider_handle_height">72dp</dimen> <!-- Padding between status bar and bubbles when displayed in expanded state, smaller value in landscape since we have limited vertical space--> diff --git a/libs/WindowManager/Shell/res/values-land/styles.xml b/libs/WindowManager/Shell/res/values-land/styles.xml index 863bb69d4034..9eddac48e6de 100644 --- a/libs/WindowManager/Shell/res/values-land/styles.xml +++ b/libs/WindowManager/Shell/res/values-land/styles.xml @@ -19,6 +19,7 @@ <item name="android:layout_width">10dp</item> <item name="android:layout_height">match_parent</item> <item name="android:layout_gravity">center_horizontal</item> + <item name="android:background">@color/split_divider_background</item> </style> <style name="DockedDividerHandle"> diff --git a/libs/WindowManager/Shell/res/values/colors.xml b/libs/WindowManager/Shell/res/values/colors.xml index 350beafae961..93c0352a2ad3 100644 --- a/libs/WindowManager/Shell/res/values/colors.xml +++ b/libs/WindowManager/Shell/res/values/colors.xml @@ -17,7 +17,6 @@ */ --> <resources> - <color name="docked_divider_background">#ff000000</color> <color name="docked_divider_handle">#ffffff</color> <drawable name="forced_resizable_background">#59000000</drawable> <color name="minimize_dock_shadow_start">#60000000</color> diff --git a/libs/WindowManager/Shell/res/values/dimen.xml b/libs/WindowManager/Shell/res/values/dimen.xml index 130f741def86..26c619d92599 100644 --- a/libs/WindowManager/Shell/res/values/dimen.xml +++ b/libs/WindowManager/Shell/res/values/dimen.xml @@ -76,8 +76,12 @@ <!-- How high we lift the divider when touching --> <dimen name="docked_stack_divider_lift_elevation">4dp</dimen> + <!-- Divider handle size for legacy split screen --> <dimen name="docked_divider_handle_width">16dp</dimen> <dimen name="docked_divider_handle_height">2dp</dimen> + <!-- Divider handle size for split screen --> + <dimen name="split_divider_handle_width">72dp</dimen> + <dimen name="split_divider_handle_height">3dp</dimen> <!-- One-Handed Mode --> <!-- Threshold for dragging distance to enable one-handed mode --> diff --git a/libs/WindowManager/Shell/res/values/styles.xml b/libs/WindowManager/Shell/res/values/styles.xml index fffcd33f7992..3e4ca3ac6dce 100644 --- a/libs/WindowManager/Shell/res/values/styles.xml +++ b/libs/WindowManager/Shell/res/values/styles.xml @@ -34,6 +34,7 @@ <item name="android:layout_width">match_parent</item> <item name="android:layout_height">10dp</item> <item name="android:layout_gravity">center_vertical</item> + <item name="android:background">@color/split_divider_background</item> </style> <style name="DockedDividerMinimizedShadow"> diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/common/SyncTransactionQueue.java b/libs/WindowManager/Shell/src/com/android/wm/shell/common/SyncTransactionQueue.java index f3a8620b1693..4c0281dcc517 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/common/SyncTransactionQueue.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/common/SyncTransactionQueue.java @@ -68,6 +68,10 @@ public final class SyncTransactionQueue { * Queues a sync transaction to be sent serially to WM. */ public void queue(WindowContainerTransaction wct) { + if (wct.isEmpty()) { + if (DEBUG) Slog.d(TAG, "Skip queue due to transaction change is empty"); + return; + } SyncCallback cb = new SyncCallback(wct); synchronized (mQueue) { if (DEBUG) Slog.d(TAG, "Queueing up " + wct); @@ -83,6 +87,10 @@ public final class SyncTransactionQueue { */ public void queue(LegacyTransitions.ILegacyTransition transition, @WindowManager.TransitionType int type, WindowContainerTransaction wct) { + if (wct.isEmpty()) { + if (DEBUG) Slog.d(TAG, "Skip queue due to transaction change is empty"); + return; + } SyncCallback cb = new SyncCallback(transition, type, wct); synchronized (mQueue) { if (DEBUG) Slog.d(TAG, "Queueing up legacy transition " + wct); @@ -99,6 +107,10 @@ public final class SyncTransactionQueue { * @return {@code true} if queued, {@code false} if not. */ public boolean queueIfWaiting(WindowContainerTransaction wct) { + if (wct.isEmpty()) { + if (DEBUG) Slog.d(TAG, "Skip queueIfWaiting due to transaction change is empty"); + return false; + } synchronized (mQueue) { if (mQueue.isEmpty()) { if (DEBUG) Slog.d(TAG, "Nothing in queue, so skip queueing up " + wct); diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/common/split/DividerHandleView.java b/libs/WindowManager/Shell/src/com/android/wm/shell/common/split/DividerHandleView.java index 218bf47e24aa..c76937de6669 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/common/split/DividerHandleView.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/common/split/DividerHandleView.java @@ -70,7 +70,8 @@ public class DividerHandleView extends View { private final Paint mPaint = new Paint(); private final int mWidth; private final int mHeight; - private final int mCircleDiameter; + private final int mTouchingWidth; + private final int mTouchingHeight; private int mCurrentWidth; private int mCurrentHeight; private AnimatorSet mAnimator; @@ -80,11 +81,12 @@ public class DividerHandleView extends View { super(context, attrs); mPaint.setColor(getResources().getColor(R.color.docked_divider_handle, null)); mPaint.setAntiAlias(true); - mWidth = getResources().getDimensionPixelSize(R.dimen.docked_divider_handle_width); - mHeight = getResources().getDimensionPixelSize(R.dimen.docked_divider_handle_height); + mWidth = getResources().getDimensionPixelSize(R.dimen.split_divider_handle_width); + mHeight = getResources().getDimensionPixelSize(R.dimen.split_divider_handle_height); mCurrentWidth = mWidth; mCurrentHeight = mHeight; - mCircleDiameter = (mWidth + mHeight) / 3; + mTouchingWidth = mWidth > mHeight ? mWidth / 2 : mWidth; + mTouchingHeight = mHeight > mWidth ? mHeight / 2 : mHeight; } /** Sets touching state for this handle view. */ @@ -98,16 +100,16 @@ public class DividerHandleView extends View { } if (!animate) { if (touching) { - mCurrentWidth = mCircleDiameter; - mCurrentHeight = mCircleDiameter; + mCurrentWidth = mTouchingWidth; + mCurrentHeight = mTouchingHeight; } else { mCurrentWidth = mWidth; mCurrentHeight = mHeight; } invalidate(); } else { - animateToTarget(touching ? mCircleDiameter : mWidth, - touching ? mCircleDiameter : mHeight, touching); + animateToTarget(touching ? mTouchingWidth : mWidth, + touching ? mTouchingHeight : mHeight, touching); } mTouching = touching; } diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/common/split/SplitLayout.java b/libs/WindowManager/Shell/src/com/android/wm/shell/common/split/SplitLayout.java index 3b9bcd36bea8..f9c681c1ae4b 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/common/split/SplitLayout.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/common/split/SplitLayout.java @@ -50,6 +50,7 @@ import androidx.annotation.Nullable; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.policy.DividerSnapAlgorithm; +import com.android.internal.policy.DockedDividerUtils; import com.android.wm.shell.ShellTaskOrganizer; import com.android.wm.shell.animation.Interpolators; import com.android.wm.shell.common.DisplayImeController; @@ -93,7 +94,8 @@ public final class SplitLayout { private final Rect mDividerBounds = new Rect(); private final Rect mBounds1 = new Rect(); private final Rect mBounds2 = new Rect(); - private final Rect mTmpBounds = new Rect(); + private final Rect mWinBounds1 = new Rect(); + private final Rect mWinBounds2 = new Rect(); private final SplitLayoutHandler mSplitLayoutHandler; private final SplitWindowManager mSplitWindowManager; private final DisplayImeController mDisplayImeController; @@ -103,6 +105,8 @@ public final class SplitLayout { private Context mContext; private DividerSnapAlgorithm mDividerSnapAlgorithm; + private WindowContainerToken mWinToken1; + private WindowContainerToken mWinToken2; private int mDividePosition; private boolean mInitialized = false; private int mOrientation; @@ -189,10 +193,10 @@ public final class SplitLayout { final int rotation = configuration.windowConfiguration.getRotation(); final Rect rootBounds = configuration.windowConfiguration.getBounds(); if (rotation != mRotation || !mRootBounds.equals(rootBounds)) { - mTmpBounds.set(mRootBounds); + mTempRect.set(mRootBounds); mRootBounds.set(rootBounds); mDividerSnapAlgorithm = getSnapAlgorithm(mContext, mRootBounds); - initDividerPosition(mTmpBounds); + initDividerPosition(mTempRect); affectsLayout = true; } @@ -236,6 +240,8 @@ public final class SplitLayout { mBounds1.bottom = position; mBounds2.top = mBounds1.bottom + mDividerSize; } + DockedDividerUtils.sanitizeStackBounds(mBounds1, true /** topLeft */); + DockedDividerUtils.sanitizeStackBounds(mBounds2, false /** topLeft */); mDismissingParallaxPolicy.applyDividerPosition(position, isLandscape); } @@ -403,8 +409,16 @@ public final class SplitLayout { return; } - wct.setBounds(task1.token, mBounds1) - .setBounds(task2.token, mBounds2); + if (!mBounds1.equals(mWinBounds1) || !task1.token.equals(mWinToken1)) { + wct.setBounds(task1.token, mBounds1); + mWinBounds1.set(mBounds1); + mWinToken1 = task1.token; + } + if (!mBounds2.equals(mWinBounds2) || !task2.token.equals(mWinToken2)) { + wct.setBounds(task2.token, mBounds2); + mWinBounds2.set(mBounds2); + mWinToken2 = task2.token; + } } /** diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/legacysplitscreen/LegacySplitDisplayLayout.java b/libs/WindowManager/Shell/src/com/android/wm/shell/legacysplitscreen/LegacySplitDisplayLayout.java index 40244fbb4503..f201634d3d4a 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/legacysplitscreen/LegacySplitDisplayLayout.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/legacysplitscreen/LegacySplitDisplayLayout.java @@ -62,6 +62,7 @@ public class LegacySplitDisplayLayout { Rect mSecondary = null; Rect mAdjustedPrimary = null; Rect mAdjustedSecondary = null; + final Rect mTmpBounds = new Rect(); public LegacySplitDisplayLayout(Context ctx, DisplayLayout dl, LegacySplitScreenTaskListener taskTiles) { @@ -136,31 +137,41 @@ public class LegacySplitDisplayLayout { return mMinimizedSnapAlgorithm; } - void resizeSplits(int position) { + /** + * Resize primary bounds and secondary bounds by divider position. + * + * @param position divider position. + * @return true if calculated bounds changed. + */ + boolean resizeSplits(int position) { mPrimary = mPrimary == null ? new Rect() : mPrimary; mSecondary = mSecondary == null ? new Rect() : mSecondary; - calcSplitBounds(position, mPrimary, mSecondary); - } - - void resizeSplits(int position, WindowContainerTransaction t) { - resizeSplits(position); - t.setBounds(mTiles.mPrimary.token, mPrimary); - t.setBounds(mTiles.mSecondary.token, mSecondary); - - t.setSmallestScreenWidthDp(mTiles.mPrimary.token, - getSmallestWidthDpForBounds(mContext, mDisplayLayout, mPrimary)); - t.setSmallestScreenWidthDp(mTiles.mSecondary.token, - getSmallestWidthDpForBounds(mContext, mDisplayLayout, mSecondary)); - } - - void calcSplitBounds(int position, @NonNull Rect outPrimary, @NonNull Rect outSecondary) { int dockSide = getPrimarySplitSide(); - DockedDividerUtils.calculateBoundsForPosition(position, dockSide, outPrimary, + boolean boundsChanged; + + mTmpBounds.set(mPrimary); + DockedDividerUtils.calculateBoundsForPosition(position, dockSide, mPrimary, mDisplayLayout.width(), mDisplayLayout.height(), mDividerSize); + boundsChanged = !mPrimary.equals(mTmpBounds); + mTmpBounds.set(mSecondary); DockedDividerUtils.calculateBoundsForPosition(position, - DockedDividerUtils.invertDockSide(dockSide), outSecondary, mDisplayLayout.width(), + DockedDividerUtils.invertDockSide(dockSide), mSecondary, mDisplayLayout.width(), mDisplayLayout.height(), mDividerSize); + boundsChanged |= !mSecondary.equals(mTmpBounds); + return boundsChanged; + } + + void resizeSplits(int position, WindowContainerTransaction t) { + if (resizeSplits(position)) { + t.setBounds(mTiles.mPrimary.token, mPrimary); + t.setBounds(mTiles.mSecondary.token, mSecondary); + + t.setSmallestScreenWidthDp(mTiles.mPrimary.token, + getSmallestWidthDpForBounds(mContext, mDisplayLayout, mPrimary)); + t.setSmallestScreenWidthDp(mTiles.mSecondary.token, + getSmallestWidthDpForBounds(mContext, mDisplayLayout, mSecondary)); + } } Rect calcResizableMinimizedHomeStackBounds() { diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitScreenController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitScreenController.java index 67223c3590a5..5bfecf2ef7ae 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitScreenController.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitScreenController.java @@ -67,6 +67,8 @@ import com.android.wm.shell.transition.LegacyTransitions; import com.android.wm.shell.transition.Transitions; import java.io.PrintWriter; +import java.util.Arrays; +import java.util.Comparator; import java.util.concurrent.Executor; /** @@ -295,11 +297,15 @@ public class SplitScreenController implements DragAndDropPolicy.Starter, mRootTDAOrganizer.attachToDisplayArea(DEFAULT_DISPLAY, builder); SurfaceControl sc = builder.build(); SurfaceControl.Transaction transaction = new SurfaceControl.Transaction(); + + // Ensure that we order these in the parent in the right z-order as their previous order + Arrays.sort(apps, (a1, a2) -> a1.prefixOrderIndex - a2.prefixOrderIndex); + int layer = 1; for (RemoteAnimationTarget appTarget : apps) { - // TODO(b/195958376) set the correct layer/z-order in transaction for the new surface transaction.reparent(appTarget.leash, sc); transaction.setPosition(appTarget.leash, appTarget.screenSpaceBounds.left, appTarget.screenSpaceBounds.top); + transaction.setLayer(appTarget.leash, layer++); } transaction.apply(); transaction.close(); diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/PipLegacySplitScreenTest.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/PipLegacySplitScreenTest.kt index 050beb377978..086165289d2d 100644 --- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/PipLegacySplitScreenTest.kt +++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/PipLegacySplitScreenTest.kt @@ -27,13 +27,15 @@ import com.android.server.wm.flicker.annotation.Group3 import com.android.server.wm.flicker.dsl.FlickerBuilder import com.android.server.wm.flicker.helpers.launchSplitScreen import com.android.server.wm.flicker.helpers.wakeUpAndGoToHomeScreen -import com.android.wm.shell.flicker.helpers.ImeAppHelper -import com.android.wm.shell.flicker.helpers.FixedAppHelper import com.android.server.wm.flicker.repetitions import com.android.server.wm.flicker.rules.RemoveAllTasksButHomeRule.Companion.removeAllTasksButHome import com.android.wm.shell.flicker.helpers.BaseAppHelper.Companion.isShellTransitionsEnabled +import com.android.wm.shell.flicker.helpers.FixedAppHelper +import com.android.wm.shell.flicker.helpers.ImeAppHelper +import com.android.wm.shell.flicker.helpers.SplitScreenHelper import com.android.wm.shell.flicker.testapp.Components.PipActivity.EXTRA_ENTER_PIP import org.junit.Assume.assumeFalse +import org.junit.Assume.assumeTrue import org.junit.Before import org.junit.FixMethodOrder import org.junit.Test @@ -56,6 +58,8 @@ class PipLegacySplitScreenTest(testSpec: FlickerTestParameter) : PipTransition(t @Before open fun setup() { + // Only run legacy split tests when the system is using legacy split screen. + assumeTrue(SplitScreenHelper.isUsingLegacySplit()) // Legacy split is having some issue with Shell transition, and will be deprecated soon. assumeFalse(isShellTransitionsEnabled()) } diff --git a/media/java/android/media/AudioAttributes.java b/media/java/android/media/AudioAttributes.java index a031b4cfc911..c22ab9463736 100644 --- a/media/java/android/media/AudioAttributes.java +++ b/media/java/android/media/AudioAttributes.java @@ -447,13 +447,26 @@ public final class AudioAttributes implements Parcelable { */ public static final int FLAG_CAPTURE_PRIVATE = 0x1 << 13; + /** + * @hide + * Flag indicating the audio content has been processed to provide a virtual multichannel + * audio experience + */ + public static final int FLAG_CONTENT_SPATIALIZED = 0x1 << 14; + + /** + * @hide + * Flag indicating the audio content is to never be spatialized + */ + public static final int FLAG_NEVER_SPATIALIZE = 0x1 << 15; // Note that even though FLAG_MUTE_HAPTIC is stored as a flag bit, it is not here since // it is known as a boolean value outside of AudioAttributes. private static final int FLAG_ALL = FLAG_AUDIBILITY_ENFORCED | FLAG_SECURE | FLAG_SCO | FLAG_BEACON | FLAG_HW_AV_SYNC | FLAG_HW_HOTWORD | FLAG_BYPASS_INTERRUPTION_POLICY | FLAG_BYPASS_MUTE | FLAG_LOW_LATENCY | FLAG_DEEP_BUFFER | FLAG_NO_MEDIA_PROJECTION - | FLAG_NO_SYSTEM_CAPTURE | FLAG_CAPTURE_PRIVATE; + | FLAG_NO_SYSTEM_CAPTURE | FLAG_CAPTURE_PRIVATE | FLAG_CONTENT_SPATIALIZED + | FLAG_NEVER_SPATIALIZE; private final static int FLAG_ALL_PUBLIC = FLAG_AUDIBILITY_ENFORCED | FLAG_HW_AV_SYNC | FLAG_LOW_LATENCY; /* mask of flags that can be set by SDK and System APIs through the Builder */ @@ -615,6 +628,49 @@ public final class AudioAttributes implements Parcelable { } /** + * Return true if the audio content associated with these attributes has already been + * spatialized, that is it has already been processed to offer a binaural or transaural + * immersive audio experience. + * @return {@code true} if the content has been processed + */ + public boolean isContentSpatialized() { + return (mFlags & FLAG_CONTENT_SPATIALIZED) != 0; + } + + /** @hide */ + @IntDef(flag = false, value = { + SPATIALIZATION_BEHAVIOR_AUTO, + SPATIALIZATION_BEHAVIOR_NEVER, + }) + @Retention(RetentionPolicy.SOURCE) + public @interface SpatializationBehavior {}; + + /** + * Constant indicating the audio content associated with these attributes will follow the + * default platform behavior with regards to which content will be spatialized or not. + * @see #getSpatializationBehavior() + * @see Spatializer + */ + public static final int SPATIALIZATION_BEHAVIOR_AUTO = 0; + + /** + * Constant indicating the audio content associated with these attributes should never + * be virtualized. + * @see #getSpatializationBehavior() + * @see Spatializer + */ + public static final int SPATIALIZATION_BEHAVIOR_NEVER = 1; + + /** + * Return the behavior affecting whether spatialization will be used. + * @return the spatialization behavior + */ + public @SpatializationBehavior int getSpatializationBehavior() { + return ((mFlags & FLAG_NEVER_SPATIALIZE) != 0) + ? SPATIALIZATION_BEHAVIOR_NEVER : SPATIALIZATION_BEHAVIOR_AUTO; + } + + /** * Return the capture policy. * @return the capture policy set by {@link Builder#setAllowedCapturePolicy(int)} or * the default if it was not called. @@ -657,6 +713,8 @@ public final class AudioAttributes implements Parcelable { private int mSource = MediaRecorder.AudioSource.AUDIO_SOURCE_INVALID; private int mFlags = 0x0; private boolean mMuteHapticChannels = true; + private boolean mIsContentSpatialized = false; + private int mSpatializationBehavior = SPATIALIZATION_BEHAVIOR_AUTO; private HashSet<String> mTags = new HashSet<String>(); private Bundle mBundle; private int mPrivacySensitive = PRIVACY_SENSITIVE_DEFAULT; @@ -687,6 +745,8 @@ public final class AudioAttributes implements Parcelable { mFlags = aa.getAllFlags(); mTags = (HashSet<String>) aa.mTags.clone(); mMuteHapticChannels = aa.areHapticChannelsMuted(); + mIsContentSpatialized = aa.isContentSpatialized(); + mSpatializationBehavior = aa.getSpatializationBehavior(); } /** @@ -719,6 +779,12 @@ public final class AudioAttributes implements Parcelable { if (mMuteHapticChannels) { aa.mFlags |= FLAG_MUTE_HAPTIC; } + if (mIsContentSpatialized) { + aa.mFlags |= FLAG_CONTENT_SPATIALIZED; + } + if (mSpatializationBehavior == SPATIALIZATION_BEHAVIOR_NEVER) { + aa.mFlags |= FLAG_NEVER_SPATIALIZE; + } if (mPrivacySensitive == PRIVACY_SENSITIVE_DEFAULT) { // capturing for camcorder or communication is private by default to @@ -906,6 +972,35 @@ public final class AudioAttributes implements Parcelable { } /** + * Specifies whether the content has already been processed for spatialization. + * If it has, setting this to true will prevent issues such as double-processing. + * @param isSpatialized + * @return the same Builder instance + */ + public @NonNull Builder setIsContentSpatialized(boolean isSpatialized) { + mIsContentSpatialized = isSpatialized; + return this; + } + + /** + * Sets the behavior affecting whether spatialization will be used. + * @param sb the spatialization behavior + * @return the same Builder instance + * + */ + public @NonNull Builder setSpatializationBehavior(@SpatializationBehavior int sb) { + switch (sb) { + case SPATIALIZATION_BEHAVIOR_NEVER: + case SPATIALIZATION_BEHAVIOR_AUTO: + break; + default: + throw new IllegalArgumentException("Invalid spatialization behavior " + sb); + } + mSpatializationBehavior = sb; + return this; + } + + /** * @hide * Replaces flags. * @param flags any combination of {@link AudioAttributes#FLAG_ALL}. @@ -990,6 +1085,8 @@ public final class AudioAttributes implements Parcelable { mContentType = attributes.mContentType; mFlags = attributes.getAllFlags(); mMuteHapticChannels = attributes.areHapticChannelsMuted(); + mIsContentSpatialized = attributes.isContentSpatialized(); + mSpatializationBehavior = attributes.getSpatializationBehavior(); mTags = attributes.mTags; mBundle = attributes.mBundle; mSource = attributes.mSource; diff --git a/media/java/android/media/AudioManager.java b/media/java/android/media/AudioManager.java index 3b9c05bbe64f..5db9ddfac870 100644 --- a/media/java/android/media/AudioManager.java +++ b/media/java/android/media/AudioManager.java @@ -805,7 +805,7 @@ public class AudioManager { } @UnsupportedAppUsage - private static IAudioService getService() + static IAudioService getService() { if (sService != null) { return sService; @@ -2439,6 +2439,25 @@ public class AudioManager { } //==================================================================== + // Immersive audio + + /** + * Return a handle to the optional platform's {@link Spatializer} + * @return {@code null} if spatialization is not supported, the {@code Spatializer} instance + * otherwise. + */ + public @Nullable Spatializer getSpatializer() { + int level = Spatializer.SPATIALIZER_IMMERSIVE_LEVEL_NONE; + try { + level = getService().getSpatializerImmersiveAudioLevel(); + } catch (Exception e) { /* using NONE */ } + if (level == Spatializer.SPATIALIZER_IMMERSIVE_LEVEL_NONE) { + return null; + } + return new Spatializer(this); + } + + //==================================================================== // Bluetooth SCO control /** * Sticky broadcast intent action indicating that the Bluetooth SCO audio diff --git a/media/java/android/media/IAudioService.aidl b/media/java/android/media/IAudioService.aidl index 0b35ebed966a..8480c5289d15 100755 --- a/media/java/android/media/IAudioService.aidl +++ b/media/java/android/media/IAudioService.aidl @@ -20,6 +20,7 @@ import android.bluetooth.BluetoothDevice; import android.content.ComponentName; import android.media.AudioAttributes; import android.media.AudioDeviceAttributes; +import android.media.AudioFormat; import android.media.AudioFocusInfo; import android.media.AudioPlaybackConfiguration; import android.media.AudioRecordingConfiguration; @@ -34,6 +35,7 @@ import android.media.IPlaybackConfigDispatcher; import android.media.IRecordingConfigDispatcher; import android.media.IRingtonePlayer; import android.media.IStrategyPreferredDevicesDispatcher; +import android.media.ISpatializerCallback; import android.media.IVolumeController; import android.media.IVolumeController; import android.media.PlayerBase; @@ -392,4 +394,24 @@ interface IAudioService { void registerModeDispatcher(IAudioModeDispatcher dispatcher); oneway void unregisterModeDispatcher(IAudioModeDispatcher dispatcher); + + int getSpatializerImmersiveAudioLevel(); + + boolean isSpatializerEnabled(); + + boolean isSpatializerAvailable(); + + void setSpatializerEnabled(boolean enabled); + + boolean canBeSpatialized(in AudioAttributes aa, in AudioFormat af); + + void registerSpatializerCallback(in ISpatializerCallback callback); + + void unregisterSpatializerCallback(in ISpatializerCallback callback); + + List<AudioDeviceAttributes> getSpatializerCompatibleAudioDevices(); + + void addSpatializerCompatibleAudioDevice(in AudioDeviceAttributes ada); + + void removeSpatializerCompatibleAudioDevice(in AudioDeviceAttributes ada); } diff --git a/media/java/android/media/ISpatializerCallback.aidl b/media/java/android/media/ISpatializerCallback.aidl new file mode 100644 index 000000000000..50f91e737fc5 --- /dev/null +++ b/media/java/android/media/ISpatializerCallback.aidl @@ -0,0 +1,29 @@ +/* + * Copyright (C) 2021 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.media; + +/** + * AIDL for the AudioService to signal Spatializer state changes. + * + * {@hide} + */ +oneway interface ISpatializerCallback { + + void dispatchSpatializerEnabledChanged(boolean enabled); + + void dispatchSpatializerAvailableChanged(boolean available); +} diff --git a/media/java/android/media/Spatializer.java b/media/java/android/media/Spatializer.java new file mode 100644 index 000000000000..3ed8b58959a1 --- /dev/null +++ b/media/java/android/media/Spatializer.java @@ -0,0 +1,404 @@ +/* + * Copyright (C) 2021 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.media; + +import android.annotation.CallbackExecutor; +import android.annotation.IntDef; +import android.annotation.NonNull; +import android.annotation.Nullable; +import android.annotation.RequiresPermission; +import android.annotation.SystemApi; +import android.media.permission.ClearCallingIdentityContext; +import android.media.permission.SafeCloseable; +import android.os.RemoteException; +import android.util.Log; + +import com.android.internal.annotations.GuardedBy; + +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; +import java.util.concurrent.Executor; + +/** + * Spatializer provides access to querying capabilities and behavior of sound spatialization + * on the device. + * Sound spatialization simulates sounds originating around the listener as if they were coming + * from virtual speakers placed around the listener.<br> + * Support for spatialization is optional, use {@link AudioManager#getSpatializer()} to obtain an + * instance of this class if the feature is supported. + * + */ +public class Spatializer { + + private final @NonNull AudioManager mAm; + + private final Object mStateListenerLock = new Object(); + + private static final String TAG = "Spatializer"; + + /** + * List of listeners for state listener and their associated Executor. + * List is lazy-initialized on first registration + */ + @GuardedBy("mStateListenerLock") + private @Nullable ArrayList<StateListenerInfo> mStateListeners; + + @GuardedBy("mStateListenerLock") + private SpatializerInfoDispatcherStub mInfoDispatcherStub; + + /** + * @hide + * Constructor with AudioManager acting as proxy to AudioService + * @param am a non-null AudioManager + */ + protected Spatializer(@NonNull AudioManager am) { + mAm = Objects.requireNonNull(am); + } + + /** + * Returns whether spatialization is enabled or not. + * A false value can originate for instance from the user electing to + * disable the feature.<br> + * Note that this state reflects a platform-wide state of the "desire" to use spatialization, + * but availability of the audio processing is still dictated by the compatibility between + * the effect and the hardware configuration, as indicated by {@link #isAvailable()}. + * @return {@code true} if spatialization is enabled + * @see #isAvailable() + */ + public boolean isEnabled() { + try { + return mAm.getService().isSpatializerEnabled(); + } catch (RemoteException e) { + Log.e(TAG, "Error querying isSpatializerEnabled, returning false", e); + return false; + } + } + + /** + * Returns whether spatialization is available. + * Reasons for spatialization being unavailable include situations where audio output is + * incompatible with sound spatialization, such as playback on a monophonic speaker.<br> + * Note that spatialization can be available, but disabled by the user, in which case this + * method would still return {@code true}, whereas {@link #isEnabled()} + * would return {@code false}. + * @return {@code true} if the spatializer effect is available and capable + * of processing the audio for the current configuration of the device, + * {@code false} otherwise. + * @see #isEnabled() + */ + public boolean isAvailable() { + try { + return mAm.getService().isSpatializerAvailable(); + } catch (RemoteException e) { + Log.e(TAG, "Error querying isSpatializerAvailable, returning false", e); + return false; + } + } + + /** @hide */ + @IntDef(flag = false, value = { + SPATIALIZER_IMMERSIVE_LEVEL_NONE, + SPATIALIZER_IMMERSIVE_LEVEL_MULTICHANNEL, + }) + @Retention(RetentionPolicy.SOURCE) + public @interface ImmersiveAudioLevel {}; + + /** + * @hide + * Constant indicating there are no spatialization capabilities supported on this device. + * @see AudioManager#getImmersiveAudioLevel() + */ + public static final int SPATIALIZER_IMMERSIVE_LEVEL_NONE = 0; + + /** + * @hide + * Constant indicating the {@link Spatializer} on this device supports multichannel + * spatialization. + * @see AudioManager#getImmersiveAudioLevel() + */ + public static final int SPATIALIZER_IMMERSIVE_LEVEL_MULTICHANNEL = 1; + + /** + * @hide + * Enables / disables the spatializer effect. + * Changing the enabled state will trigger the public + * {@link OnSpatializerStateChangedListener#onSpatializerEnabledChanged(Spatializer, boolean)} + * registered listeners. + * @param enabled {@code true} for enabling the effect + */ + @SystemApi(client = SystemApi.Client.PRIVILEGED_APPS) + @RequiresPermission(android.Manifest.permission.MODIFY_DEFAULT_AUDIO_EFFECTS) + public void setEnabled(boolean enabled) { + try { + mAm.getService().setSpatializerEnabled(enabled); + } catch (RemoteException e) { + Log.e(TAG, "Error calling setSpatializerEnabled", e); + } + } + + /** + * An interface to be notified of changes to the state of the spatializer. + */ + public interface OnSpatializerStateChangedListener { + /** + * Called when the enabled state of the spatializer effect changes + * @param spat the {@code Spatializer} instance whose state changed + * @param enabled {@code true} if the spatializer effect is enabled on the device, + * {@code false} otherwise + * @see #isEnabled() + */ + void onSpatializerEnabledChanged(@NonNull Spatializer spat, boolean enabled); + + /** + * Called when the availability of the spatializer effect changes + * @param spat the {@code Spatializer} instance whose state changed + * @param available {@code true} if the spatializer effect is available and capable + * of processing the audio for the current configuration of the device, + * {@code false} otherwise. + * @see #isAvailable() + */ + void onSpatializerAvailableChanged(@NonNull Spatializer spat, boolean available); + } + + /** + * Returns whether audio of the given {@link AudioFormat}, played with the given + * {@link AudioAttributes} can be spatialized. + * Note that the result reflects the capabilities of the device and may change when + * audio accessories are connected/disconnected (e.g. wired headphones plugged in or not). + * The result is independent from whether spatialization processing is enabled or not. + * @param attributes the {@code AudioAttributes} of the content as used for playback + * @param format the {@code AudioFormat} of the content as used for playback + * @return {@code true} if the device is capable of spatializing the combination of audio format + * and attributes, {@code false} otherwise. + */ + public boolean canBeSpatialized( + @NonNull AudioAttributes attributes, @NonNull AudioFormat format) { + try { + return mAm.getService().canBeSpatialized( + Objects.requireNonNull(attributes), Objects.requireNonNull(format)); + } catch (RemoteException e) { + Log.e(TAG, "Error querying canBeSpatialized for attr:" + attributes + + " format:" + format + " returning false", e); + return false; + } + } + + /** + * Adds a listener to be notified of changes to the enabled state of the + * {@code Spatializer}. + * @param executor the {@code Executor} handling the callback + * @param listener the listener to receive enabled state updates + * @see #isEnabled() + */ + public void addOnSpatializerStateChangedListener( + @NonNull @CallbackExecutor Executor executor, + @NonNull OnSpatializerStateChangedListener listener) { + Objects.requireNonNull(executor); + Objects.requireNonNull(listener); + synchronized (mStateListenerLock) { + if (hasSpatializerStateListener(listener)) { + throw new IllegalArgumentException( + "Called addOnSpatializerStateChangedListener() " + + "on a previously registered listener"); + } + // lazy initialization of the list of strategy-preferred device listener + if (mStateListeners == null) { + mStateListeners = new ArrayList<>(); + } + mStateListeners.add(new StateListenerInfo(listener, executor)); + if (mStateListeners.size() == 1) { + // register binder for callbacks + if (mInfoDispatcherStub == null) { + mInfoDispatcherStub = + new SpatializerInfoDispatcherStub(); + } + try { + mAm.getService().registerSpatializerCallback( + mInfoDispatcherStub); + } catch (RemoteException e) { + throw e.rethrowFromSystemServer(); + } + } + } + } + + /** + * Removes a previously added listener for changes to the enabled state of the + * {@code Spatializer}. + * @param listener the listener to receive enabled state updates + * @see #isEnabled() + */ + public void removeOnSpatializerStateChangedListener( + @NonNull OnSpatializerStateChangedListener listener) { + Objects.requireNonNull(listener); + synchronized (mStateListenerLock) { + if (!removeStateListener(listener)) { + throw new IllegalArgumentException( + "Called removeOnSpatializerStateChangedListener() " + + "on an unregistered listener"); + } + if (mStateListeners.size() == 0) { + // unregister binder for callbacks + try { + mAm.getService().unregisterSpatializerCallback(mInfoDispatcherStub); + } catch (RemoteException e) { + throw e.rethrowFromSystemServer(); + } finally { + mInfoDispatcherStub = null; + mStateListeners = null; + } + } + } + } + + /** + * @hide + * Returns the list of playback devices that are compatible with the playback of multichannel + * audio through virtualization + * @return a list of devices. An empty list indicates virtualization is not supported. + */ + @SystemApi(client = SystemApi.Client.PRIVILEGED_APPS) + @RequiresPermission(android.Manifest.permission.MODIFY_DEFAULT_AUDIO_EFFECTS) + public @NonNull List<AudioDeviceAttributes> getCompatibleAudioDevices() { + try { + return mAm.getService().getSpatializerCompatibleAudioDevices(); + } catch (RemoteException e) { + Log.e(TAG, "Error querying getSpatializerCompatibleAudioDevices(), " + + " returning empty list", e); + return new ArrayList<AudioDeviceAttributes>(0); + } + } + + /** + * @hide + * Adds a playback device to the list of devices compatible with the playback of multichannel + * audio through spatialization. + * @see #getCompatibleAudioDevices() + * @param ada the audio device compatible with spatialization + */ + @SystemApi(client = SystemApi.Client.PRIVILEGED_APPS) + @RequiresPermission(android.Manifest.permission.MODIFY_DEFAULT_AUDIO_EFFECTS) + public void addCompatibleAudioDevice(@NonNull AudioDeviceAttributes ada) { + try { + mAm.getService().addSpatializerCompatibleAudioDevice(Objects.requireNonNull(ada)); + } catch (RemoteException e) { + Log.e(TAG, "Error calling addSpatializerCompatibleAudioDevice(), ", e); + } + } + + /** + * @hide + * Remove a playback device from the list of devices compatible with the playback of + * multichannel audio through spatialization. + * @see #getCompatibleAudioDevices() + * @param ada the audio device incompatible with spatialization + */ + @SystemApi(client = SystemApi.Client.PRIVILEGED_APPS) + @RequiresPermission(android.Manifest.permission.MODIFY_DEFAULT_AUDIO_EFFECTS) + public void removeCompatibleAudioDevice(@NonNull AudioDeviceAttributes ada) { + try { + mAm.getService().removeSpatializerCompatibleAudioDevice(Objects.requireNonNull(ada)); + } catch (RemoteException e) { + Log.e(TAG, "Error calling removeSpatializerCompatibleAudioDevice(), ", e); + } + } + + private final class SpatializerInfoDispatcherStub extends ISpatializerCallback.Stub { + @Override + public void dispatchSpatializerEnabledChanged(boolean enabled) { + // make a shallow copy of listeners so callback is not executed under lock + final ArrayList<StateListenerInfo> stateListeners; + synchronized (mStateListenerLock) { + if (mStateListeners == null || mStateListeners.size() == 0) { + return; + } + stateListeners = (ArrayList<StateListenerInfo>) mStateListeners.clone(); + } + try (SafeCloseable ignored = ClearCallingIdentityContext.create()) { + for (StateListenerInfo info : stateListeners) { + info.mExecutor.execute(() -> + info.mListener.onSpatializerEnabledChanged(Spatializer.this, enabled)); + } + } + } + + @Override + public void dispatchSpatializerAvailableChanged(boolean available) { + // make a shallow copy of listeners so callback is not executed under lock + final ArrayList<StateListenerInfo> stateListeners; + synchronized (mStateListenerLock) { + if (mStateListeners == null || mStateListeners.size() == 0) { + return; + } + stateListeners = (ArrayList<StateListenerInfo>) mStateListeners.clone(); + } + try (SafeCloseable ignored = ClearCallingIdentityContext.create()) { + for (StateListenerInfo info : stateListeners) { + info.mExecutor.execute(() -> + info.mListener.onSpatializerAvailableChanged( + Spatializer.this, available)); + } + } + } + } + + private static class StateListenerInfo { + final @NonNull OnSpatializerStateChangedListener mListener; + final @NonNull Executor mExecutor; + + StateListenerInfo(@NonNull OnSpatializerStateChangedListener listener, + @NonNull Executor exe) { + mListener = listener; + mExecutor = exe; + } + } + + @GuardedBy("mStateListenerLock") + private boolean hasSpatializerStateListener(OnSpatializerStateChangedListener listener) { + return getStateListenerInfo(listener) != null; + } + + @GuardedBy("mStateListenerLock") + private @Nullable StateListenerInfo getStateListenerInfo( + OnSpatializerStateChangedListener listener) { + if (mStateListeners == null) { + return null; + } + for (StateListenerInfo info : mStateListeners) { + if (info.mListener == listener) { + return info; + } + } + return null; + } + + @GuardedBy("mStateListenerLock") + /** + * @return true if the listener was removed from the list + */ + private boolean removeStateListener(OnSpatializerStateChangedListener listener) { + final StateListenerInfo infoToRemove = getStateListenerInfo(listener); + if (infoToRemove != null) { + mStateListeners.remove(infoToRemove); + return true; + } + return false; + } +} diff --git a/packages/PrintSpooler/res/values-as/strings.xml b/packages/PrintSpooler/res/values-as/strings.xml index b6b287ff66aa..a93fceb87959 100644 --- a/packages/PrintSpooler/res/values-as/strings.xml +++ b/packages/PrintSpooler/res/values-as/strings.xml @@ -47,7 +47,7 @@ <string name="savetopdf_button" msgid="2976186791686924743">"PDFৰ জৰিয়তে ছেভ কৰক"</string> <string name="print_options_expanded" msgid="6944679157471691859">"প্ৰিণ্ট বিকল্পসমূহ বিস্তাৰ কৰা হ’ল"</string> <string name="print_options_collapsed" msgid="7455930445670414332">"প্ৰিণ্ট বিকল্পসমূহ সংকুচিত কৰা হ’ল"</string> - <string name="search" msgid="5421724265322228497">"Search"</string> + <string name="search" msgid="5421724265322228497">"সন্ধান কৰক"</string> <string name="all_printers_label" msgid="3178848870161526399">"সকলো প্ৰিণ্টাৰ"</string> <string name="add_print_service_label" msgid="5356702546188981940">"সেৱা যোগ কৰক"</string> <string name="print_search_box_shown_utterance" msgid="7967404953901376090">"সন্ধান বাকচটো দেখুওৱা হ’ল"</string> diff --git a/packages/PrintSpooler/res/values-kn/strings.xml b/packages/PrintSpooler/res/values-kn/strings.xml index 261fe4b0de9a..150ede4f8e62 100644 --- a/packages/PrintSpooler/res/values-kn/strings.xml +++ b/packages/PrintSpooler/res/values-kn/strings.xml @@ -47,7 +47,7 @@ <string name="savetopdf_button" msgid="2976186791686924743">"PDF ಗೆ ಉಳಿಸು"</string> <string name="print_options_expanded" msgid="6944679157471691859">"ಪ್ರಿಂಟ್ ಆಯ್ಕೆಗಳನ್ನು ವಿಸ್ತರಿಸಲಾಗಿದೆ"</string> <string name="print_options_collapsed" msgid="7455930445670414332">"ಪ್ರಿಂಟ್ ಆಯ್ಕೆಗಳನ್ನು ಮುಚ್ಚಲಾಗಿದೆ"</string> - <string name="search" msgid="5421724265322228497">"Search"</string> + <string name="search" msgid="5421724265322228497">"ಹುಡುಕಿ"</string> <string name="all_printers_label" msgid="3178848870161526399">"ಎಲ್ಲಾ ಪ್ರಿಂಟರ್ಗಳು"</string> <string name="add_print_service_label" msgid="5356702546188981940">"ಸೇವೆಯನ್ನು ಸೇರಿಸು"</string> <string name="print_search_box_shown_utterance" msgid="7967404953901376090">"ಹುಡುಕಾಟ ಪೆಟ್ಟಿಗೆಯನ್ನು ತೋರಿಸಲಾಗಿದೆ"</string> diff --git a/packages/PrintSpooler/res/values-ml/strings.xml b/packages/PrintSpooler/res/values-ml/strings.xml index 73af95d2e117..dbcd34b1360d 100644 --- a/packages/PrintSpooler/res/values-ml/strings.xml +++ b/packages/PrintSpooler/res/values-ml/strings.xml @@ -47,7 +47,7 @@ <string name="savetopdf_button" msgid="2976186791686924743">"PDF-ൽ സംരക്ഷിക്കുക"</string> <string name="print_options_expanded" msgid="6944679157471691859">"പ്രിന്റ് ചെയ്യാനുള്ള ഓപ്ഷനുകൾ വിപുലീകരിച്ചു"</string> <string name="print_options_collapsed" msgid="7455930445670414332">"പ്രിന്റ് ചെയ്യാനുള്ള ഓപ്ഷനുകൾ ചുരുക്കി"</string> - <string name="search" msgid="5421724265322228497">"Search"</string> + <string name="search" msgid="5421724265322228497">"തിരയൽ"</string> <string name="all_printers_label" msgid="3178848870161526399">"എല്ലാ പ്രിന്ററുകളും"</string> <string name="add_print_service_label" msgid="5356702546188981940">"സേവനം ചേർക്കുക"</string> <string name="print_search_box_shown_utterance" msgid="7967404953901376090">"തിരയൽ ബോക്സ് ദൃശ്യമാക്കിയിരിക്കുന്നു"</string> diff --git a/packages/PrintSpooler/res/values-mr/strings.xml b/packages/PrintSpooler/res/values-mr/strings.xml index 81194399c00e..e1fa3902cdf0 100644 --- a/packages/PrintSpooler/res/values-mr/strings.xml +++ b/packages/PrintSpooler/res/values-mr/strings.xml @@ -47,7 +47,7 @@ <string name="savetopdf_button" msgid="2976186791686924743">"पीडीएफ वर सेव्ह करा"</string> <string name="print_options_expanded" msgid="6944679157471691859">"प्रिंट पर्याय विस्तृत झाले"</string> <string name="print_options_collapsed" msgid="7455930445670414332">"प्रिंट पर्याय संक्षिप्त झाले"</string> - <string name="search" msgid="5421724265322228497">"Search"</string> + <string name="search" msgid="5421724265322228497">"शोधा"</string> <string name="all_printers_label" msgid="3178848870161526399">"सर्व प्रिंटर"</string> <string name="add_print_service_label" msgid="5356702546188981940">"सेवा जोडा"</string> <string name="print_search_box_shown_utterance" msgid="7967404953901376090">"शोध बॉक्स दर्शविला"</string> diff --git a/packages/PrintSpooler/res/values-or/strings.xml b/packages/PrintSpooler/res/values-or/strings.xml index d6f920fa217a..fa10909b92ed 100644 --- a/packages/PrintSpooler/res/values-or/strings.xml +++ b/packages/PrintSpooler/res/values-or/strings.xml @@ -47,7 +47,7 @@ <string name="savetopdf_button" msgid="2976186791686924743">"PDFରେ ସେଭ୍ କରନ୍ତୁ"</string> <string name="print_options_expanded" msgid="6944679157471691859">"ପ୍ରିଣ୍ଟ ବିକଳ୍ପକୁ ବଡ଼ କରାଯାଇଛି"</string> <string name="print_options_collapsed" msgid="7455930445670414332">"ପ୍ରିଣ୍ଟ ବିକଳ୍ପକୁ ଛୋଟ କରାଯାଇଛି"</string> - <string name="search" msgid="5421724265322228497">"Search"</string> + <string name="search" msgid="5421724265322228497">"ସନ୍ଧାନ କରନ୍ତୁ"</string> <string name="all_printers_label" msgid="3178848870161526399">"ସମସ୍ତ ପ୍ରିଣ୍ଟର୍"</string> <string name="add_print_service_label" msgid="5356702546188981940">"ସେବା ଯୋଗ କରନ୍ତୁ"</string> <string name="print_search_box_shown_utterance" msgid="7967404953901376090">"ସର୍ଚ୍ଚ ବକ୍ସ ଦେଖାଯାଇଛି"</string> diff --git a/packages/SettingsLib/res/values-te/arrays.xml b/packages/SettingsLib/res/values-te/arrays.xml index e0ba52006c66..67decc9eff68 100644 --- a/packages/SettingsLib/res/values-te/arrays.xml +++ b/packages/SettingsLib/res/values-te/arrays.xml @@ -76,7 +76,7 @@ <item msgid="1963366694959681026">"avrcp16"</item> </string-array> <string-array name="bluetooth_map_versions"> - <item msgid="8786402640610987099">"MAP 1.2 (డిఫాల్ట్)"</item> + <item msgid="8786402640610987099">"MAP 1.2 (ఆటోమేటిక్)"</item> <item msgid="6817922176194686449">"MAP 1.3"</item> <item msgid="3423518690032737851">"MAP 1.4"</item> </string-array> diff --git a/packages/SettingsLib/res/values-te/strings.xml b/packages/SettingsLib/res/values-te/strings.xml index 1c03e225e0d8..8d6c64284a74 100644 --- a/packages/SettingsLib/res/values-te/strings.xml +++ b/packages/SettingsLib/res/values-te/strings.xml @@ -116,7 +116,7 @@ <string name="bluetooth_pairing_accept" msgid="2054232610815498004">"జత చేయి"</string> <string name="bluetooth_pairing_accept_all_caps" msgid="2734383073450506220">"జత చేయి"</string> <string name="bluetooth_pairing_decline" msgid="6483118841204885890">"రద్దు చేయి"</string> - <string name="bluetooth_pairing_will_share_phonebook" msgid="3064334458659165176">"జత చేయడం వలన కనెక్ట్ చేయబడినప్పుడు మీ పరిచయాలకు మరియు కాల్ చరిత్రకు యాక్సెస్ను మంజూరు చేస్తుంది."</string> + <string name="bluetooth_pairing_will_share_phonebook" msgid="3064334458659165176">"పెయిర్ చేయడం వలన కనెక్ట్ చేయబడినప్పుడు మీ కాంటాక్ట్లకు అలాగే కాల్ హిస్టరీకి యాక్సెస్ను మంజూరు చేస్తుంది."</string> <string name="bluetooth_pairing_error_message" msgid="6626399020672335565">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>తో జత చేయడం సాధ్యపడలేదు."</string> <string name="bluetooth_pairing_pin_error_message" msgid="264422127613704940">"పిన్ లేదా పాస్కీ చెల్లని కారణంగా <xliff:g id="DEVICE_NAME">%1$s</xliff:g>తో పెయిర్ చేయడం సాధ్యపడలేదు."</string> <string name="bluetooth_pairing_device_down_error_message" msgid="2554424863101358857">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>తో కమ్యూనికేట్ చేయడం సాధ్యపడదు."</string> @@ -153,7 +153,7 @@ <string name="user_guest" msgid="6939192779649870792">"గెస్ట్"</string> <string name="unknown" msgid="3544487229740637809">"తెలియదు"</string> <string name="running_process_item_user_label" msgid="3988506293099805796">"యూజర్: <xliff:g id="USER_NAME">%1$s</xliff:g>"</string> - <string name="launch_defaults_some" msgid="3631650616557252926">"కొన్ని డిఫాల్ట్లు సెట్ చేయబడ్డాయి"</string> + <string name="launch_defaults_some" msgid="3631650616557252926">"కొన్ని ఆటోమేటిక్ సెట్టింగ్లు సెట్ చేయబడ్డాయి"</string> <string name="launch_defaults_none" msgid="8049374306261262709">"ఆటోమేటిక్ ఆప్షన్లు ఏవీ సెట్ చేయలేదు"</string> <string name="tts_settings" msgid="8130616705989351312">"వచనం నుండి ప్రసంగం సెట్టింగ్లు"</string> <string name="tts_settings_title" msgid="7602210956640483039">"టెక్స్ట్-టు-స్పీచ్ అవుట్పుట్"</string> @@ -246,8 +246,8 @@ <string name="confirm_enable_oem_unlock_title" msgid="8249318129774367535">"OEM అన్లాకింగ్ను అనుమతించాలా?"</string> <string name="confirm_enable_oem_unlock_text" msgid="854131050791011970">"హెచ్చరిక: ఈ సెట్టింగ్ ఆన్ చేయబడినప్పుడు పరికరం రక్షణ లక్షణాలు ఈ పరికరంలో పని చేయవు."</string> <string name="mock_location_app" msgid="6269380172542248304">"డమ్మీ లొకేషన్ యాప్ను ఎంచుకోండి"</string> - <string name="mock_location_app_not_set" msgid="6972032787262831155">"అనుకృత స్థాన యాప్ ఏదీ సెట్ చేయబడలేదు"</string> - <string name="mock_location_app_set" msgid="4706722469342913843">"కృత్రిమ స్థాన యాప్: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="mock_location_app_not_set" msgid="6972032787262831155">"డమ్మీ లొకేషన్ యాప్ ఏదీ సెట్ చేయబడలేదు"</string> + <string name="mock_location_app_set" msgid="4706722469342913843">"డమ్మీ లొకేషన్ యాప్: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> <string name="debug_networking_category" msgid="6829757985772659599">"నెట్వర్కింగ్"</string> <string name="wifi_display_certification" msgid="1805579519992520381">"వైర్లెస్ డిస్ప్లే సర్టిఫికేషన్"</string> <string name="wifi_verbose_logging" msgid="1785910450009679371">"Wi‑Fi విశదీకృత లాగింగ్ను ప్రారంభించండి"</string> diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProtoDumpUtil.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProtoDumpUtil.java index 90cec3fb6913..20735cba44a3 100644 --- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProtoDumpUtil.java +++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProtoDumpUtil.java @@ -763,9 +763,6 @@ class SettingsProtoDumpUtil { Settings.Global.ANGLE_GL_DRIVER_SELECTION_VALUES, GlobalSettingsProto.Gpu.ANGLE_GL_DRIVER_SELECTION_VALUES); dumpSetting(s, p, - Settings.Global.ANGLE_ALLOWLIST, - GlobalSettingsProto.Gpu.ANGLE_ALLOWLIST); - dumpSetting(s, p, Settings.Global.ANGLE_EGL_FEATURES, GlobalSettingsProto.Gpu.ANGLE_EGL_FEATURES); dumpSetting(s, p, diff --git a/packages/SettingsProvider/test/src/android/provider/SettingsBackupTest.java b/packages/SettingsProvider/test/src/android/provider/SettingsBackupTest.java index 9362a1886215..06cadaf3bdb5 100644 --- a/packages/SettingsProvider/test/src/android/provider/SettingsBackupTest.java +++ b/packages/SettingsProvider/test/src/android/provider/SettingsBackupTest.java @@ -508,7 +508,6 @@ public class SettingsBackupTest { Settings.Global.ANGLE_GL_DRIVER_ALL_ANGLE, Settings.Global.ANGLE_GL_DRIVER_SELECTION_PKGS, Settings.Global.ANGLE_GL_DRIVER_SELECTION_VALUES, - Settings.Global.ANGLE_ALLOWLIST, Settings.Global.ANGLE_EGL_FEATURES, Settings.Global.UPDATABLE_DRIVER_ALL_APPS, Settings.Global.UPDATABLE_DRIVER_PRODUCTION_OPT_IN_APPS, diff --git a/packages/Shell/res/values-te/strings.xml b/packages/Shell/res/values-te/strings.xml index 50b5c8550ef2..2f8623283273 100644 --- a/packages/Shell/res/values-te/strings.xml +++ b/packages/Shell/res/values-te/strings.xml @@ -23,9 +23,9 @@ <string name="bugreport_updating_title" msgid="4423539949559634214">"బగ్ రిపోర్ట్కు వివరాలను జోడిస్తోంది"</string> <string name="bugreport_updating_wait" msgid="3322151947853929470">"దయచేసి వేచి ఉండండి..."</string> <string name="bugreport_finished_text" product="watch" msgid="1223616207145252689">"బగ్ రిపోర్ట్ త్వరలో ఫోన్లో కనిపిస్తుంది"</string> - <string name="bugreport_finished_text" product="tv" msgid="5758325479058638893">"మీ బగ్ రిపోర్ట్ను భాగస్వామ్యం చేయడానికి ఎంచుకోండి"</string> + <string name="bugreport_finished_text" product="tv" msgid="5758325479058638893">"మీ బగ్ రిపోర్ట్ను షేర్ చేయడానికి ఎంచుకోండి"</string> <string name="bugreport_finished_text" product="default" msgid="8353769438382138847">"మీ బగ్ రిపోర్ట్ను షేర్ చేయడానికి నొక్కండి"</string> - <string name="bugreport_finished_pending_screenshot_text" product="tv" msgid="2343263822812016950">"స్క్రీన్షాట్ లేకుండా మీ బగ్ రిపోర్ట్ను భాగస్వామ్యం చేయడానికి ఎంచుకోండి లేదా స్క్రీన్షాట్ ముగిసేదాకా వేచి ఉండండి"</string> + <string name="bugreport_finished_pending_screenshot_text" product="tv" msgid="2343263822812016950">"స్క్రీన్షాట్ లేకుండా మీ బగ్ రిపోర్ట్ను షేర్ చేయడానికి ఎంచుకోండి లేదా స్క్రీన్షాట్ ముగిసేదాకా వేచి ఉండండి"</string> <string name="bugreport_finished_pending_screenshot_text" product="watch" msgid="1474435374470177193">"స్క్రీన్షాట్ లేకుండా మీ బగ్ నివే. భాగ. చేయడానికి నొక్కండి లేదా స్క్రీన్షాట్ ముగిసేదాకా వేచి ఉండండి"</string> <string name="bugreport_finished_pending_screenshot_text" product="default" msgid="1474435374470177193">"స్క్రీన్షాట్ లేకుండా మీ బగ్ నివే. భాగ. చేయడానికి నొక్కండి లేదా స్క్రీన్షాట్ ముగిసేదాకా వేచి ఉండండి"</string> <string name="bugreport_confirm" msgid="5917407234515812495">"బగ్ రిపోర్ట్స్లో మీరు గోప్యమైనదిగా పరిగణించే (యాప్ వినియోగం, లొకేషన్ డేటా వంటి) డేటాతో పాటు సిస్టమ్కు సంబంధించిన విభిన్న లాగ్ ఫైళ్ల డేటా ఉంటుంది. బగ్ రిపోర్ట్లను మీరు విశ్వసించే యాప్లు, వ్యక్తులతో మాత్రమే షేర్ చేయండి."</string> diff --git a/packages/SoundPicker/res/values-te/strings.xml b/packages/SoundPicker/res/values-te/strings.xml index 10b4e7cfe615..8f5c34a8018c 100644 --- a/packages/SoundPicker/res/values-te/strings.xml +++ b/packages/SoundPicker/res/values-te/strings.xml @@ -16,7 +16,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="ringtone_default" msgid="798836092118824500">"డిఫాల్ట్ రింగ్టోన్"</string> + <string name="ringtone_default" msgid="798836092118824500">"ఆటోమేటిక్ రింగ్టోన్"</string> <string name="notification_sound_default" msgid="8133121186242636840">"నోటిఫికేషన్ ఆటోమేటిక్ సౌండ్"</string> <string name="alarm_sound_default" msgid="4787646764557462649">"అలారం ఆటోమేటిక్ సౌండ్"</string> <string name="add_ringtone_text" msgid="6642389991738337529">"రింగ్టోన్ను జోడించు"</string> diff --git a/packages/SystemUI/res/color/settingslib_state_off.xml b/packages/SystemUI/res/color/settingslib_state_off.xml new file mode 100644 index 000000000000..e8218259087d --- /dev/null +++ b/packages/SystemUI/res/color/settingslib_state_off.xml @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="utf-8"?> +<selector xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:androidprv="http://schemas.android.com/apk/prv/res/android"> + <item android:color="?androidprv:attr/colorAccentSecondaryVariant"/> +</selector>
\ No newline at end of file diff --git a/packages/SystemUI/res/color/settingslib_state_on.xml b/packages/SystemUI/res/color/settingslib_state_on.xml new file mode 100644 index 000000000000..6d2133c5bacf --- /dev/null +++ b/packages/SystemUI/res/color/settingslib_state_on.xml @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="utf-8"?> +<selector xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:androidprv="http://schemas.android.com/apk/prv/res/android"> + <item android:color="?androidprv:attr/colorAccentPrimary"/> +</selector>
\ No newline at end of file diff --git a/packages/SystemUI/res/color/settingslib_track_off.xml b/packages/SystemUI/res/color/settingslib_track_off.xml new file mode 100644 index 000000000000..21d1dccbf900 --- /dev/null +++ b/packages/SystemUI/res/color/settingslib_track_off.xml @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="utf-8"?> +<selector xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:androidprv="http://schemas.android.com/apk/prv/res/android"> + <item android:color="?androidprv:attr/colorAccentSecondary"/> +</selector>
\ No newline at end of file diff --git a/packages/SystemUI/res/color/settingslib_track_on.xml b/packages/SystemUI/res/color/settingslib_track_on.xml new file mode 100644 index 000000000000..ba7848a5d23e --- /dev/null +++ b/packages/SystemUI/res/color/settingslib_track_on.xml @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="utf-8"?> +<selector xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:androidprv="http://schemas.android.com/apk/prv/res/android"> + <item android:color="?androidprv:attr/colorAccentPrimaryVariant"/> +</selector>
\ No newline at end of file diff --git a/packages/SystemUI/res/layout/global_screenshot_static.xml b/packages/SystemUI/res/layout/global_screenshot_static.xml index e4a96947aa6a..6a9254cad8f4 100644 --- a/packages/SystemUI/res/layout/global_screenshot_static.xml +++ b/packages/SystemUI/res/layout/global_screenshot_static.xml @@ -36,7 +36,6 @@ android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginEnd="@dimen/screenshot_action_container_margin_horizontal" - android:layout_marginBottom="@dimen/screenshot_action_container_offset_y" android:paddingEnd="@dimen/screenshot_action_container_padding_right" android:paddingVertical="@dimen/screenshot_action_container_padding_vertical" android:elevation="1dp" diff --git a/packages/SystemUI/res/layout/internet_connectivity_dialog.xml b/packages/SystemUI/res/layout/internet_connectivity_dialog.xml index 5b58fe8c0b58..b841419c1c75 100644 --- a/packages/SystemUI/res/layout/internet_connectivity_dialog.xml +++ b/packages/SystemUI/res/layout/internet_connectivity_dialog.xml @@ -30,7 +30,7 @@ style="@style/Widget.SliceView.Panel" android:gravity="center_vertical|center_horizontal" android:layout_marginTop="24dp" - android:layout_marginBottom="16dp" + android:layout_marginBottom="@dimen/internet_dialog_network_layout_margin" android:orientation="vertical"> <TextView @@ -57,7 +57,7 @@ <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginBottom="16dp" + android:layout_marginBottom="@dimen/internet_dialog_network_layout_margin" android:orientation="vertical"> <View @@ -101,8 +101,8 @@ android:background="?android:attr/selectableItemBackground" android:layout_gravity="center_vertical|start" android:orientation="horizontal" - android:layout_marginEnd="@dimen/settingslib_switchbar_margin" - android:layout_marginStart="@dimen/settingslib_switchbar_margin" + android:layout_marginEnd="@dimen/internet_dialog_network_layout_margin" + android:layout_marginStart="@dimen/internet_dialog_network_layout_margin" android:paddingStart="22dp" android:paddingEnd="22dp"> @@ -130,24 +130,24 @@ <TextView android:id="@+id/mobile_title" android:textDirection="locale" - android:layout_marginStart="16dp" + android:layout_marginStart="@dimen/internet_dialog_network_layout_margin" + android:layout_marginEnd="7dp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical|start" android:ellipsize="end" - android:maxLines="1" android:textColor="?android:attr/textColorPrimary" android:textSize="16sp" android:fontFamily="google-sans"/> <TextView android:id="@+id/mobile_summary" android:textDirection="locale" - android:layout_marginStart="16dp" + android:layout_marginStart="@dimen/internet_dialog_network_layout_margin" + android:layout_marginEnd="34dp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical|start" android:ellipsize="end" - android:maxLines="1" android:textColor="?android:attr/textColorTertiary" android:textSize="14sp" android:fontFamily="google-sans"/> @@ -179,8 +179,8 @@ android:background="?android:attr/selectableItemBackground" android:gravity="center" android:orientation="horizontal" - android:layout_marginEnd="@dimen/settingslib_switchbar_margin" - android:layout_marginStart="@dimen/settingslib_switchbar_margin" + android:layout_marginEnd="@dimen/internet_dialog_network_layout_margin" + android:layout_marginStart="@dimen/internet_dialog_network_layout_margin" android:paddingStart="22dp" android:paddingEnd="22dp"> @@ -191,6 +191,7 @@ android:layout_width="wrap_content" android:layout_height="match_parent"> <TextView + android:id="@+id/wifi_toggle_title" android:text="@string/turn_on_wifi" android:textDirection="locale" android:layout_width="wrap_content" @@ -229,10 +230,10 @@ android:visibility="gone" android:background="?android:attr/selectableItemBackground" android:orientation="horizontal" - android:layout_marginEnd="@dimen/settingslib_switchbar_margin" - android:layout_marginStart="@dimen/settingslib_switchbar_margin" - android:paddingStart="22dp" - android:paddingEnd="22dp"> + android:layout_marginStart="@dimen/internet_dialog_network_layout_margin" + android:layout_marginEnd="@dimen/internet_dialog_network_layout_margin" + android:paddingStart="20dp" + android:paddingEnd="24dp"> <FrameLayout android:layout_width="24dp" @@ -247,12 +248,13 @@ </FrameLayout> <LinearLayout - android:layout_weight="3" android:id="@+id/wifi_connected_list" android:orientation="vertical" android:clickable="false" android:layout_width="wrap_content" android:layout_height="72dp" + android:layout_marginEnd="30dp" + android:layout_weight="1" android:gravity="start|center_vertical"> <TextView android:id="@+id/wifi_connected_title" @@ -260,9 +262,8 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical|start" - android:layout_marginStart="16dp" + android:layout_marginStart="@dimen/internet_dialog_network_layout_margin" android:ellipsize="end" - android:maxLines="1" android:textColor="?android:attr/textColorPrimary" android:textSize="14sp" android:fontFamily="google-sans"/> @@ -272,9 +273,8 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical|start" - android:layout_marginStart="16dp" + android:layout_marginStart="@dimen/internet_dialog_network_layout_margin" android:ellipsize="end" - android:maxLines="1" android:textColor="?android:attr/textColorTertiary" android:textSize="14sp" android:fontFamily="google-sans"/> @@ -283,14 +283,14 @@ <FrameLayout android:layout_width="24dp" android:layout_height="match_parent" - android:layout_marginEnd="5dp" android:clickable="false" + android:layout_gravity="end|center_vertical" android:gravity="center"> <ImageView android:id="@+id/wifi_settings_icon" android:src="@drawable/ic_settings_24dp" android:layout_width="24dp" - android:layout_gravity="center" + android:layout_gravity="end|center_vertical" android:layout_height="wrap_content"/> </FrameLayout> @@ -323,7 +323,7 @@ android:layout_height="24dp" android:clickable="false" android:layout_gravity="center_vertical|start" - android:layout_marginStart="16dp"> + android:layout_marginStart="@dimen/internet_dialog_network_layout_margin"> <ImageView android:id="@+id/arrow_forward" android:src="@drawable/ic_arrow_forward" @@ -337,7 +337,7 @@ android:clickable="false" android:layout_width="match_parent" android:layout_height="match_parent" - android:layout_marginStart="16dp"> + android:layout_marginStart="@dimen/internet_dialog_network_layout_margin"> <TextView android:text="@string/see_all_networks" android:textDirection="locale" diff --git a/packages/SystemUI/res/layout/internet_list_item.xml b/packages/SystemUI/res/layout/internet_list_item.xml index 19b1ef90bdfa..b52933da818d 100644 --- a/packages/SystemUI/res/layout/internet_list_item.xml +++ b/packages/SystemUI/res/layout/internet_list_item.xml @@ -31,15 +31,14 @@ android:focusable="true" android:background="?android:attr/selectableItemBackground" android:orientation="horizontal" - android:paddingStart="22dp" - android:paddingEnd="22dp"> - + android:paddingStart="20dp" + android:paddingEnd="40dp"> <FrameLayout android:layout_width="24dp" android:layout_height="24dp" android:clickable="false" android:layout_gravity="center_vertical|start" - android:layout_marginStart="16dp"> + android:layout_marginStart="@dimen/internet_dialog_network_layout_margin"> <ImageView android:id="@+id/wifi_icon" android:layout_width="wrap_content" @@ -48,52 +47,47 @@ </FrameLayout> <LinearLayout - android:layout_weight="3" android:id="@+id/wifi_network_layout" android:orientation="vertical" android:clickable="false" android:layout_width="wrap_content" - android:layout_height="72dp"> + android:layout_height="72dp" + android:layout_weight="1" + android:gravity="start|center_vertical" + android:layout_marginStart="@dimen/internet_dialog_network_layout_margin"> <TextView android:id="@+id/wifi_title" android:textDirection="locale" - android:layout_weight="1" android:layout_width="wrap_content" - android:layout_height="0dp" - android:layout_gravity="center_vertical|start" + android:layout_height="20dp" android:gravity="start|center_vertical" - android:layout_marginStart="16dp" android:ellipsize="end" - android:maxLines="1" android:textColor="?android:attr/textColorPrimary" android:textSize="14sp" - android:fontFamily="google-sans"/> + android:fontFamily="google-sans" + android:layout_marginEnd="18dp"/> <TextView android:id="@+id/wifi_summary" android:textDirection="locale" - android:layout_weight="1" android:layout_width="wrap_content" - android:layout_height="0dp" - android:layout_gravity="center_vertical|start" + android:layout_height="20dp" android:gravity="start|center_vertical" - android:layout_marginStart="16dp" android:ellipsize="end" - android:maxLines="1" android:textColor="?android:attr/textColorSecondary" android:textSize="14sp" - android:fontFamily="google-sans"/> + android:fontFamily="google-sans" + android:layout_marginEnd="18dp"/> </LinearLayout> <FrameLayout android:layout_width="24dp" android:layout_height="match_parent" - android:layout_marginEnd="@dimen/settingslib_switchbar_padding_right" android:clickable="false" - android:gravity="center"> + android:layout_gravity="end|center_vertical"> <ImageView android:id="@+id/wifi_locked_icon" + android:layout_gravity="end|center_vertical" android:layout_width="wrap_content" - android:layout_gravity="center" android:layout_height="wrap_content"/> </FrameLayout> diff --git a/packages/SystemUI/res/layout/status_bar_expanded.xml b/packages/SystemUI/res/layout/status_bar_expanded.xml index d31d1df8697a..435575104f0b 100644 --- a/packages/SystemUI/res/layout/status_bar_expanded.xml +++ b/packages/SystemUI/res/layout/status_bar_expanded.xml @@ -115,6 +115,7 @@ android:layout_width="@dimen/notification_panel_width" android:layout_height="match_parent" android:layout_marginBottom="@dimen/close_handle_underlap" + android:importantForAccessibility="no" systemui:layout_constraintStart_toStartOf="parent" systemui:layout_constraintEnd_toEndOf="parent" /> diff --git a/packages/SystemUI/res/values-af/strings.xml b/packages/SystemUI/res/values-af/strings.xml index b88962d5869f..f1c94d5bae9b 100644 --- a/packages/SystemUI/res/values-af/strings.xml +++ b/packages/SystemUI/res/values-af/strings.xml @@ -1162,4 +1162,19 @@ <string name="keyguard_try_fingerprint" msgid="2825130772993061165">"Gebruik vingerafdruk om oop te maak"</string> <string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"Stawing word vereis. Raak die vingerafdruksensor om te staaf."</string> <string name="ongoing_phone_call_content_description" msgid="5332334388483099947">"Oproep aan die gang"</string> + <string name="airplane_mode" msgid="2536350001462130668">"Vliegtuigmodus"</string> + <string name="mobile_data_settings_title" msgid="3955246641380064901">"Mobiele data"</string> + <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g>/<xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> + <string name="mobile_data_connection_active" msgid="944490013299018227">"Gekoppel"</string> + <string name="mobile_data_off_summary" msgid="5621158216585822679">"Internet sal nie outomaties koppel nie"</string> + <string name="mobile_data_no_connection" msgid="1713872434869947377">"Geen verbinding nie"</string> + <string name="non_carrier_network_unavailable" msgid="770049357024492372">"Geen ander netwerke beskikbaar nie"</string> + <string name="all_network_unavailable" msgid="4112774339909373349">"Geen netwerke beskikbaar nie"</string> + <string name="turn_on_wifi" msgid="1308379840799281023">"Wi-fi"</string> + <string name="pref_title_network_details" msgid="1639455355897668883">"Netwerkbesonderhede"</string> + <string name="tap_a_network_to_connect" msgid="1565073330852369558">"Tik op \'n netwerk om te koppel"</string> + <string name="unlock_to_view_networks" msgid="5072880496312015676">"Ontsluit om netwerke te bekyk"</string> + <string name="wifi_empty_list_wifi_on" msgid="3864376632067585377">"Soek tans na netwerke …"</string> + <string name="wifi_failed_connect_message" msgid="4161863112079000071">"Kon nie aan netwerk koppel nie"</string> + <string name="see_all_networks" msgid="3773666844913168122">"Sien alles"</string> </resources> diff --git a/packages/SystemUI/res/values-am/strings.xml b/packages/SystemUI/res/values-am/strings.xml index 1110c99aa89b..17aa7db7132c 100644 --- a/packages/SystemUI/res/values-am/strings.xml +++ b/packages/SystemUI/res/values-am/strings.xml @@ -1162,4 +1162,19 @@ <string name="keyguard_try_fingerprint" msgid="2825130772993061165">"ለመክፈት የጣት አሻራ ይጠቀሙ"</string> <string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"ማረጋገጥ ያስፈልጋል። ለማረጋገጥ የጣት አሻራ ዳሳሹን ይንኩ።"</string> <string name="ongoing_phone_call_content_description" msgid="5332334388483099947">"በመካሄድ ላይ የስልክ ጥሪ"</string> + <string name="airplane_mode" msgid="2536350001462130668">"የአውሮፕላን ሁነታ"</string> + <string name="mobile_data_settings_title" msgid="3955246641380064901">"የተንቀሳቃሽ ስልክ ውሂብ"</string> + <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> + <string name="mobile_data_connection_active" msgid="944490013299018227">"ተገናኝቷል"</string> + <string name="mobile_data_off_summary" msgid="5621158216585822679">"በይነመረብ በራስ-ሰር አይገናኝም"</string> + <string name="mobile_data_no_connection" msgid="1713872434869947377">"ግንኙነት የለም"</string> + <string name="non_carrier_network_unavailable" msgid="770049357024492372">"ሌላ አውታረ መረብ የሉም"</string> + <string name="all_network_unavailable" msgid="4112774339909373349">"ምንም አውታረ መረቦች የሉም"</string> + <string name="turn_on_wifi" msgid="1308379840799281023">"Wi‑Fi"</string> + <string name="pref_title_network_details" msgid="1639455355897668883">"የአውታረ መረብ ዝርዝሮች"</string> + <string name="tap_a_network_to_connect" msgid="1565073330852369558">"ለመገናኘት አንድ አውታረ መረብ መታ ያድርጉ"</string> + <string name="unlock_to_view_networks" msgid="5072880496312015676">"አውታረ መረቦችን ለመመልከት ይክፈቱ"</string> + <string name="wifi_empty_list_wifi_on" msgid="3864376632067585377">"አውታረ መረቦችን በመፈለግ ላይ…"</string> + <string name="wifi_failed_connect_message" msgid="4161863112079000071">"ከአውታረ መረቡ ጋር መገናኘት አልተሳካም"</string> + <string name="see_all_networks" msgid="3773666844913168122">"ሁሉንም ይመልከቱ"</string> </resources> diff --git a/packages/SystemUI/res/values-ar/strings.xml b/packages/SystemUI/res/values-ar/strings.xml index 6d6674869088..1e2ba9100419 100644 --- a/packages/SystemUI/res/values-ar/strings.xml +++ b/packages/SystemUI/res/values-ar/strings.xml @@ -1186,4 +1186,19 @@ <string name="keyguard_try_fingerprint" msgid="2825130772993061165">"يمكنك استخدام بصمة الإصبع للفتح"</string> <string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"المصادقة مطلوبة. المس مستشعر بصمات الإصبع للمصادقة."</string> <string name="ongoing_phone_call_content_description" msgid="5332334388483099947">"مكالمة هاتفية جارية"</string> + <string name="airplane_mode" msgid="2536350001462130668">"وضع الطيران"</string> + <string name="mobile_data_settings_title" msgid="3955246641380064901">"بيانات الجوّال"</string> + <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> + <string name="mobile_data_connection_active" msgid="944490013299018227">"متصلة بالإنترنت"</string> + <string name="mobile_data_off_summary" msgid="5621158216585822679">"لن يتم الاتصال بالإنترنت تلقائيًا."</string> + <string name="mobile_data_no_connection" msgid="1713872434869947377">"لا يتوفّر اتصال بالإنترنت"</string> + <string name="non_carrier_network_unavailable" msgid="770049357024492372">"لا تتوفّر شبكات أخرى."</string> + <string name="all_network_unavailable" msgid="4112774339909373349">"لا تتوفّر أي شبكات."</string> + <string name="turn_on_wifi" msgid="1308379840799281023">"Wi-Fi"</string> + <string name="pref_title_network_details" msgid="1639455355897668883">"تفاصيل الشبكة"</string> + <string name="tap_a_network_to_connect" msgid="1565073330852369558">"انقر على إحدى الشبكات للاتصال بالإنترنت"</string> + <string name="unlock_to_view_networks" msgid="5072880496312015676">"فتح القفل لعرض الشبكات"</string> + <string name="wifi_empty_list_wifi_on" msgid="3864376632067585377">"جارٍ البحث عن شبكات…"</string> + <string name="wifi_failed_connect_message" msgid="4161863112079000071">"تعذّر الاتصال بالشبكة."</string> + <string name="see_all_networks" msgid="3773666844913168122">"عرض الكل"</string> </resources> diff --git a/packages/SystemUI/res/values-as/strings.xml b/packages/SystemUI/res/values-as/strings.xml index ee9ae882d8cc..39618813f9f8 100644 --- a/packages/SystemUI/res/values-as/strings.xml +++ b/packages/SystemUI/res/values-as/strings.xml @@ -133,7 +133,7 @@ <string name="accessibility_accessibility_button" msgid="4089042473497107709">"দিব্যাংগসকলৰ বাবে থকা সুবিধাসমূহ"</string> <string name="accessibility_rotate_button" msgid="1238584767612362586">"স্ক্ৰীণ ঘূৰাওক"</string> <string name="accessibility_recent" msgid="901641734769533575">"অৱলোকন"</string> - <string name="accessibility_search_light" msgid="524741790416076988">"Search"</string> + <string name="accessibility_search_light" msgid="524741790416076988">"সন্ধান কৰক"</string> <string name="accessibility_camera_button" msgid="2938898391716647247">"কেমেৰা"</string> <string name="accessibility_phone_button" msgid="4256353121703100427">"ফ\'ন"</string> <string name="accessibility_voice_assist_button" msgid="6497706615649754510">"কণ্ঠধ্বনিৰে সহায়"</string> @@ -442,7 +442,7 @@ <string name="expanded_header_battery_charging_with_time" msgid="757991461445765011">"বেটাৰিৰ চ্চাৰ্জ সম্পূর্ণ হ\'বলৈ <xliff:g id="CHARGING_TIME">%s</xliff:g> বাকী"</string> <string name="expanded_header_battery_not_charging" msgid="809409140358955848">"চ্চার্জ কৰি থকা নাই"</string> <string name="ssl_ca_cert_warning" msgid="8373011375250324005">"নেটৱৰ্ক \nনিৰীক্ষণ কৰা হ\'ব পাৰে"</string> - <string name="description_target_search" msgid="3875069993128855865">"Search"</string> + <string name="description_target_search" msgid="3875069993128855865">"সন্ধান কৰক"</string> <string name="description_direction_up" msgid="3632251507574121434">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>ৰ বাবে ওপৰলৈ শ্লাইড কৰক।"</string> <string name="description_direction_left" msgid="4762708739096907741">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>ৰ বাবে বাওঁফাললৈ শ্লাইড কৰক।"</string> <string name="zen_priority_introduction" msgid="3159291973383796646">"আপুনি নিৰ্দিষ্ট কৰা এলাৰ্ম, ৰিমাইণ্ডাৰ, ইভেন্ট আৰু কল কৰোঁতাৰ বাহিৰে আন কোনো শব্দৰ পৰা আপুনি অসুবিধা নাপাব। কিন্তু, সংগীত, ভিডিঅ\' আৰু খেলসমূহকে ধৰি আপুনি প্লে কৰিব খোজা যিকোনো বস্তু তথাপি শুনিব পাৰিব।"</string> @@ -1014,7 +1014,7 @@ <string name="ongoing_privacy_dialog_enterprise" msgid="3003314125311966061">"(কৰ্মস্থান)"</string> <string name="ongoing_privacy_dialog_phonecall" msgid="4487370562589839298">"ফ’ন কল"</string> <string name="ongoing_privacy_dialog_attribution_text" msgid="4738795925380373994">"(<xliff:g id="APPLICATION_NAME_S_">%s</xliff:g>ৰ জৰিয়তে)"</string> - <string name="privacy_type_camera" msgid="7974051382167078332">"কেমেৰা"</string> + <string name="privacy_type_camera" msgid="7974051382167078332">"Camera"</string> <string name="privacy_type_location" msgid="7991481648444066703">"অৱস্থান"</string> <string name="privacy_type_microphone" msgid="9136763906797732428">"মাইক্ৰ\'ফ\'ন"</string> <string name="sensor_privacy_mode" msgid="4462866919026513692">"ছেন্সৰ অফ হৈ আছে"</string> @@ -1162,4 +1162,19 @@ <string name="keyguard_try_fingerprint" msgid="2825130772993061165">"খুলিবলৈ ফিংগাৰপ্ৰিণ্ট ব্যৱহাৰ কৰক"</string> <string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"বিশ্বাসযোগ্যতা প্ৰমাণীকৰণৰ আৱশ্যক। বিশ্বাসযোগ্যতা প্ৰমাণীকৰণ কৰিবলৈ ফিংগাৰপ্ৰিণ্ট ছেন্সৰটো স্পৰ্শ কৰক।"</string> <string name="ongoing_phone_call_content_description" msgid="5332334388483099947">"চলি থকা ফ’ন কল"</string> + <string name="airplane_mode" msgid="2536350001462130668">"এয়াৰপ্লেন ম\'ড"</string> + <string name="mobile_data_settings_title" msgid="3955246641380064901">"ম’বাইল ডেটা"</string> + <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> + <string name="mobile_data_connection_active" msgid="944490013299018227">"সংযোজিত হৈ আছে"</string> + <string name="mobile_data_off_summary" msgid="5621158216585822679">"ইণ্টাৰনেট স্বয়ংক্ৰিয়ভাৱে সংযুক্ত নহ’ব"</string> + <string name="mobile_data_no_connection" msgid="1713872434869947377">"সংযোগ নাই"</string> + <string name="non_carrier_network_unavailable" msgid="770049357024492372">"অন্য কোনো নেটৱৰ্ক উপলব্ধ নহয়"</string> + <string name="all_network_unavailable" msgid="4112774339909373349">"কোনো নেটৱৰ্ক উপলব্ধ নহয়"</string> + <string name="turn_on_wifi" msgid="1308379840799281023">"ৱাই-ফাই"</string> + <string name="pref_title_network_details" msgid="1639455355897668883">"নেটৱৰ্কৰ সবিশেষ"</string> + <string name="tap_a_network_to_connect" msgid="1565073330852369558">"সংযোগ কৰিবলৈ এটা নেটৱৰ্কত টিপক"</string> + <string name="unlock_to_view_networks" msgid="5072880496312015676">"নেটৱর্ক চাবলৈ আনলক কৰক"</string> + <string name="wifi_empty_list_wifi_on" msgid="3864376632067585377">"নেটৱৰ্ক সন্ধান কৰি থকা হৈছে…"</string> + <string name="wifi_failed_connect_message" msgid="4161863112079000071">"নেটৱৰ্কৰ সৈতে সংযোগ কৰিব পৰা নগ\'ল"</string> + <string name="see_all_networks" msgid="3773666844913168122">"আটাইবোৰ চাওক"</string> </resources> diff --git a/packages/SystemUI/res/values-az/strings.xml b/packages/SystemUI/res/values-az/strings.xml index 677983405276..930c90ca81cd 100644 --- a/packages/SystemUI/res/values-az/strings.xml +++ b/packages/SystemUI/res/values-az/strings.xml @@ -1162,4 +1162,19 @@ <string name="keyguard_try_fingerprint" msgid="2825130772993061165">"Açmaq üçün barmaq izindən istifadə edin"</string> <string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"Doğrulanma tələb olunur. Doğrulamaq üçün barmaq izi sensoruna toxunun."</string> <string name="ongoing_phone_call_content_description" msgid="5332334388483099947">"Davam edən zəng"</string> + <string name="airplane_mode" msgid="2536350001462130668">"Uçuş rejimi"</string> + <string name="mobile_data_settings_title" msgid="3955246641380064901">"Mobil data"</string> + <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> + <string name="mobile_data_connection_active" msgid="944490013299018227">"Qoşulub"</string> + <string name="mobile_data_off_summary" msgid="5621158216585822679">"İnternet avtomatik qoşulmayacaq"</string> + <string name="mobile_data_no_connection" msgid="1713872434869947377">"Bağlantı yoxdur"</string> + <string name="non_carrier_network_unavailable" msgid="770049357024492372">"Heç bir başqa şəbəkə əlçatan deyil"</string> + <string name="all_network_unavailable" msgid="4112774339909373349">"Əlçatan şəbəkə yoxdur"</string> + <string name="turn_on_wifi" msgid="1308379840799281023">"Wi-Fi"</string> + <string name="pref_title_network_details" msgid="1639455355897668883">"Şəbəkə məlumatları"</string> + <string name="tap_a_network_to_connect" msgid="1565073330852369558">"Qoşulmaq üçün şəbəkəyə toxunun"</string> + <string name="unlock_to_view_networks" msgid="5072880496312015676">"Şəbəkələrə baxmaq üçün kilidi açın"</string> + <string name="wifi_empty_list_wifi_on" msgid="3864376632067585377">"Şəbəkə axtarılır…"</string> + <string name="wifi_failed_connect_message" msgid="4161863112079000071">"Şəbəkəyə qoşulmaq alınmadı"</string> + <string name="see_all_networks" msgid="3773666844913168122">"Hamısına baxın"</string> </resources> diff --git a/packages/SystemUI/res/values-b+sr+Latn/strings.xml b/packages/SystemUI/res/values-b+sr+Latn/strings.xml index 607391a7f440..6956da74e961 100644 --- a/packages/SystemUI/res/values-b+sr+Latn/strings.xml +++ b/packages/SystemUI/res/values-b+sr+Latn/strings.xml @@ -1168,4 +1168,19 @@ <string name="keyguard_try_fingerprint" msgid="2825130772993061165">"Otvorite pomoću otiska prsta"</string> <string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"Potrebna je potvrda identiteta. Dodirnite senzor za otisak prsta da biste potvrdili identitet."</string> <string name="ongoing_phone_call_content_description" msgid="5332334388483099947">"Aktuelni telefonski poziv"</string> + <string name="airplane_mode" msgid="2536350001462130668">"Režim rada u avionu"</string> + <string name="mobile_data_settings_title" msgid="3955246641380064901">"Mobilni podaci"</string> + <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g>/<xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> + <string name="mobile_data_connection_active" msgid="944490013299018227">"Povezano"</string> + <string name="mobile_data_off_summary" msgid="5621158216585822679">"Automatsko povezivanje na internet nije moguće"</string> + <string name="mobile_data_no_connection" msgid="1713872434869947377">"Veza nije uspostavljena"</string> + <string name="non_carrier_network_unavailable" msgid="770049357024492372">"Nije dostupna nijedna druga mreža"</string> + <string name="all_network_unavailable" msgid="4112774339909373349">"Nema dostupnih mreža"</string> + <string name="turn_on_wifi" msgid="1308379840799281023">"WiFi"</string> + <string name="pref_title_network_details" msgid="1639455355897668883">"Detalji o mreži"</string> + <string name="tap_a_network_to_connect" msgid="1565073330852369558">"Dodirnite mrežu da biste se povezali"</string> + <string name="unlock_to_view_networks" msgid="5072880496312015676">"Otključajte da biste videli mreže"</string> + <string name="wifi_empty_list_wifi_on" msgid="3864376632067585377">"Traže se mreže…"</string> + <string name="wifi_failed_connect_message" msgid="4161863112079000071">"Povezivanje sa mrežom nije uspelo"</string> + <string name="see_all_networks" msgid="3773666844913168122">"Pogledajte sve"</string> </resources> diff --git a/packages/SystemUI/res/values-be/strings.xml b/packages/SystemUI/res/values-be/strings.xml index d4954c1a2bc0..b8027b09ab54 100644 --- a/packages/SystemUI/res/values-be/strings.xml +++ b/packages/SystemUI/res/values-be/strings.xml @@ -1174,4 +1174,19 @@ <string name="keyguard_try_fingerprint" msgid="2825130772993061165">"Каб адкрыць, скарыстайце адбітак пальца"</string> <string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"Патрабуецца аўтэнтыфікацыя. Дакраніцеся да сканера адбіткаў пальцаў."</string> <string name="ongoing_phone_call_content_description" msgid="5332334388483099947">"Бягучы тэлефонны выклік"</string> + <string name="airplane_mode" msgid="2536350001462130668">"Рэжым палёту"</string> + <string name="mobile_data_settings_title" msgid="3955246641380064901">"Мабільная перадача даных"</string> + <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> + <string name="mobile_data_connection_active" msgid="944490013299018227">"Падключана"</string> + <string name="mobile_data_off_summary" msgid="5621158216585822679">"Аўтаматычнае падключэнне да інтэрнэту адсутнічае"</string> + <string name="mobile_data_no_connection" msgid="1713872434869947377">"Няма падключэння"</string> + <string name="non_carrier_network_unavailable" msgid="770049357024492372">"Больш няма даступных сетак"</string> + <string name="all_network_unavailable" msgid="4112774339909373349">"Няма даступных сетак"</string> + <string name="turn_on_wifi" msgid="1308379840799281023">"Wi-Fi"</string> + <string name="pref_title_network_details" msgid="1639455355897668883">"Інфармацыя пра сетку"</string> + <string name="tap_a_network_to_connect" msgid="1565073330852369558">"Каб падключыцца, націсніце на сетку"</string> + <string name="unlock_to_view_networks" msgid="5072880496312015676">"Разблакіраваць для прагляду сетак"</string> + <string name="wifi_empty_list_wifi_on" msgid="3864376632067585377">"Выконваецца пошук сетак…"</string> + <string name="wifi_failed_connect_message" msgid="4161863112079000071">"Не ўдалося падключыцца да сеткі"</string> + <string name="see_all_networks" msgid="3773666844913168122">"Паказаць усе"</string> </resources> diff --git a/packages/SystemUI/res/values-bg/strings.xml b/packages/SystemUI/res/values-bg/strings.xml index b938880f8e31..dd269f565892 100644 --- a/packages/SystemUI/res/values-bg/strings.xml +++ b/packages/SystemUI/res/values-bg/strings.xml @@ -1162,4 +1162,19 @@ <string name="keyguard_try_fingerprint" msgid="2825130772993061165">"Използвайте отпечатък за отваряне"</string> <string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"Изисква се удостоверяване на самоличността. За целта докоснете сензора за отпечатъци."</string> <string name="ongoing_phone_call_content_description" msgid="5332334388483099947">"Текущо телефонно обаждане"</string> + <string name="airplane_mode" msgid="2536350001462130668">"Самолетен режим"</string> + <string name="mobile_data_settings_title" msgid="3955246641380064901">"Мобилни данни"</string> + <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g>/<xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> + <string name="mobile_data_connection_active" msgid="944490013299018227">"Свързано"</string> + <string name="mobile_data_off_summary" msgid="5621158216585822679">"Няма автоматично да се установи връзка с интернет"</string> + <string name="mobile_data_no_connection" msgid="1713872434869947377">"Няма връзка"</string> + <string name="non_carrier_network_unavailable" msgid="770049357024492372">"Няма други налични мрежи"</string> + <string name="all_network_unavailable" msgid="4112774339909373349">"Няма налични мрежи"</string> + <string name="turn_on_wifi" msgid="1308379840799281023">"Wi‑Fi"</string> + <string name="pref_title_network_details" msgid="1639455355897668883">"Подробности за мрежата"</string> + <string name="tap_a_network_to_connect" msgid="1565073330852369558">"Докоснете мрежа, за да се свържете"</string> + <string name="unlock_to_view_networks" msgid="5072880496312015676">"Отключване с цел преглед на мрежите"</string> + <string name="wifi_empty_list_wifi_on" msgid="3864376632067585377">"Търсят се мрежи…"</string> + <string name="wifi_failed_connect_message" msgid="4161863112079000071">"Свързването с мрежата не бе успешно"</string> + <string name="see_all_networks" msgid="3773666844913168122">"Вижте всички"</string> </resources> diff --git a/packages/SystemUI/res/values-bn/strings.xml b/packages/SystemUI/res/values-bn/strings.xml index 811b6a500357..9d1865065951 100644 --- a/packages/SystemUI/res/values-bn/strings.xml +++ b/packages/SystemUI/res/values-bn/strings.xml @@ -77,8 +77,7 @@ <string name="compat_mode_on" msgid="4963711187149440884">"স্ক্রীণ পূরণ করতে জুম করুন"</string> <string name="compat_mode_off" msgid="7682459748279487945">"ফুল স্ক্রিন করুন"</string> <string name="global_action_screenshot" msgid="2760267567509131654">"স্ক্রিনশট নিন"</string> - <!-- no translation found for global_action_smart_lock_disabled (9097102067802412936) --> - <skip /> + <string name="global_action_smart_lock_disabled" msgid="9097102067802412936">"Smart Lock বন্ধ করা হয়েছে"</string> <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"একটি ছবি পাঠানো হয়েছে"</string> <string name="screenshot_saving_ticker" msgid="6519186952674544916">"স্ক্রিনশট সেভ করা হচ্ছে..."</string> <string name="screenshot_saving_title" msgid="2298349784913287333">"স্ক্রিনশট সেভ করা হচ্ছে..."</string> @@ -1163,4 +1162,19 @@ <string name="keyguard_try_fingerprint" msgid="2825130772993061165">"খুলতে ফিঙ্গারপ্রিন্ট ব্যবহার করুন"</string> <string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"যাচাইকরণ করতে হবে। যাচাইকরণ করতে আঙুলের ছাপের সেন্সরে টাচ করুন।"</string> <string name="ongoing_phone_call_content_description" msgid="5332334388483099947">"ব্যবহারকারী এখন ফোনে কথা বলছেন"</string> + <string name="airplane_mode" msgid="2536350001462130668">"বিমান মোড"</string> + <string name="mobile_data_settings_title" msgid="3955246641380064901">"মোবাইল ডেটা"</string> + <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> + <string name="mobile_data_connection_active" msgid="944490013299018227">"কানেক্ট করা আছে"</string> + <string name="mobile_data_off_summary" msgid="5621158216585822679">"ইন্টারনেট অটোমেটিক কানেক্ট হবে না"</string> + <string name="mobile_data_no_connection" msgid="1713872434869947377">"কানেকশন নেই"</string> + <string name="non_carrier_network_unavailable" msgid="770049357024492372">"অন্য কোনও নেটওয়ার্ক উপলভ্য নেই"</string> + <string name="all_network_unavailable" msgid="4112774339909373349">"কোনও নেটওয়ার্ক উপলভ্য নেই"</string> + <string name="turn_on_wifi" msgid="1308379840799281023">"ওয়াই-ফাই"</string> + <string name="pref_title_network_details" msgid="1639455355897668883">"নেটওয়ার্কের বিবরণ"</string> + <string name="tap_a_network_to_connect" msgid="1565073330852369558">"কানেক্ট করতে একটি নেটওয়ার্কে ট্যাপ করুন"</string> + <string name="unlock_to_view_networks" msgid="5072880496312015676">"নেটওয়ার্ক দেখার জন্য আনলক করুন"</string> + <string name="wifi_empty_list_wifi_on" msgid="3864376632067585377">"নেটওয়ার্ক সার্চ করা হচ্ছে…"</string> + <string name="wifi_failed_connect_message" msgid="4161863112079000071">"নেটওয়ার্কে কানেক্ট করা যায়নি"</string> + <string name="see_all_networks" msgid="3773666844913168122">"সবকটি দেখুন"</string> </resources> diff --git a/packages/SystemUI/res/values-bs/strings.xml b/packages/SystemUI/res/values-bs/strings.xml index d326a51bcb4b..9be319bfd890 100644 --- a/packages/SystemUI/res/values-bs/strings.xml +++ b/packages/SystemUI/res/values-bs/strings.xml @@ -1168,4 +1168,19 @@ <string name="keyguard_try_fingerprint" msgid="2825130772993061165">"Otvorite pomoću otiska prsta"</string> <string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"Potrebna je autentifikacija. Dodirnite senzor za otisak prsta da autentificirate."</string> <string name="ongoing_phone_call_content_description" msgid="5332334388483099947">"Telefonski poziv u toku"</string> + <string name="airplane_mode" msgid="2536350001462130668">"Način rada u avionu"</string> + <string name="mobile_data_settings_title" msgid="3955246641380064901">"Prijenos podataka na mobilnoj mreži"</string> + <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g>/<xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> + <string name="mobile_data_connection_active" msgid="944490013299018227">"Povezano"</string> + <string name="mobile_data_off_summary" msgid="5621158216585822679">"Nije se moguće automatski povezati s internetom"</string> + <string name="mobile_data_no_connection" msgid="1713872434869947377">"Niste povezani s mrežom"</string> + <string name="non_carrier_network_unavailable" msgid="770049357024492372">"Druge mreže nisu dostupne"</string> + <string name="all_network_unavailable" msgid="4112774339909373349">"Nema dostupnih mreža"</string> + <string name="turn_on_wifi" msgid="1308379840799281023">"WiFi"</string> + <string name="pref_title_network_details" msgid="1639455355897668883">"Detalji o mreži"</string> + <string name="tap_a_network_to_connect" msgid="1565073330852369558">"Dodirnite mrežu da se povežete"</string> + <string name="unlock_to_view_networks" msgid="5072880496312015676">"Otključajte da vidite mreže"</string> + <string name="wifi_empty_list_wifi_on" msgid="3864376632067585377">"Traženje mreža…"</string> + <string name="wifi_failed_connect_message" msgid="4161863112079000071">"Povezivanje s mrežom nije uspjelo"</string> + <string name="see_all_networks" msgid="3773666844913168122">"Prikaži sve"</string> </resources> diff --git a/packages/SystemUI/res/values-ca/strings.xml b/packages/SystemUI/res/values-ca/strings.xml index 431505798411..b5b5cd9ed9ee 100644 --- a/packages/SystemUI/res/values-ca/strings.xml +++ b/packages/SystemUI/res/values-ca/strings.xml @@ -1162,4 +1162,19 @@ <string name="keyguard_try_fingerprint" msgid="2825130772993061165">"Utilitza l\'empremta digital per obrir"</string> <string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"Autenticació necessària. Toca el sensor d\'empremtes digitals per autenticar-te."</string> <string name="ongoing_phone_call_content_description" msgid="5332334388483099947">"Trucada en curs"</string> + <string name="airplane_mode" msgid="2536350001462130668">"Mode d\'avió"</string> + <string name="mobile_data_settings_title" msgid="3955246641380064901">"Dades mòbils"</string> + <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g>/<xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> + <string name="mobile_data_connection_active" msgid="944490013299018227">"Connectat"</string> + <string name="mobile_data_off_summary" msgid="5621158216585822679">"Internet no es connectarà automàticament"</string> + <string name="mobile_data_no_connection" msgid="1713872434869947377">"Sense connexió"</string> + <string name="non_carrier_network_unavailable" msgid="770049357024492372">"No hi ha cap altra xarxa disponible"</string> + <string name="all_network_unavailable" msgid="4112774339909373349">"No hi ha cap xarxa disponible"</string> + <string name="turn_on_wifi" msgid="1308379840799281023">"Wi‑Fi"</string> + <string name="pref_title_network_details" msgid="1639455355897668883">"Detalls de la xarxa"</string> + <string name="tap_a_network_to_connect" msgid="1565073330852369558">"Toca una xarxa per connectar-te"</string> + <string name="unlock_to_view_networks" msgid="5072880496312015676">"Desbloqueja per veure xarxes"</string> + <string name="wifi_empty_list_wifi_on" msgid="3864376632067585377">"S\'estan cercant xarxes…"</string> + <string name="wifi_failed_connect_message" msgid="4161863112079000071">"No s\'ha pogut connectar a la xarxa"</string> + <string name="see_all_networks" msgid="3773666844913168122">"Mostra-ho tot"</string> </resources> diff --git a/packages/SystemUI/res/values-cs/strings.xml b/packages/SystemUI/res/values-cs/strings.xml index 1cac5f70171c..30927d388d04 100644 --- a/packages/SystemUI/res/values-cs/strings.xml +++ b/packages/SystemUI/res/values-cs/strings.xml @@ -1174,4 +1174,19 @@ <string name="keyguard_try_fingerprint" msgid="2825130772993061165">"K otevření použijte otisk prstu"</string> <string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"Je vyžadováno ověření. Dotkněte se snímače otisků prstů."</string> <string name="ongoing_phone_call_content_description" msgid="5332334388483099947">"Probíhající hovor"</string> + <string name="airplane_mode" msgid="2536350001462130668">"Režim Letadlo"</string> + <string name="mobile_data_settings_title" msgid="3955246641380064901">"Mobilní data"</string> + <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> + <string name="mobile_data_connection_active" msgid="944490013299018227">"Připojeno"</string> + <string name="mobile_data_off_summary" msgid="5621158216585822679">"Internet se nebude automaticky připojovat"</string> + <string name="mobile_data_no_connection" msgid="1713872434869947377">"Žádné připojení"</string> + <string name="non_carrier_network_unavailable" msgid="770049357024492372">"Žádné další sítě nejsou k dispozici"</string> + <string name="all_network_unavailable" msgid="4112774339909373349">"Nejsou k dispozici žádné sítě"</string> + <string name="turn_on_wifi" msgid="1308379840799281023">"Wi-Fi"</string> + <string name="pref_title_network_details" msgid="1639455355897668883">"Podrobnosti sítě"</string> + <string name="tap_a_network_to_connect" msgid="1565073330852369558">"Klepněte na síť, ke které se chcete připojit"</string> + <string name="unlock_to_view_networks" msgid="5072880496312015676">"Sítě uvidíte po odemknutí"</string> + <string name="wifi_empty_list_wifi_on" msgid="3864376632067585377">"Vyhledávání sítí…"</string> + <string name="wifi_failed_connect_message" msgid="4161863112079000071">"Připojení k síti se nezdařilo"</string> + <string name="see_all_networks" msgid="3773666844913168122">"Zobrazit vše"</string> </resources> diff --git a/packages/SystemUI/res/values-da/strings.xml b/packages/SystemUI/res/values-da/strings.xml index 48f8086f9019..dc6b6d998aeb 100644 --- a/packages/SystemUI/res/values-da/strings.xml +++ b/packages/SystemUI/res/values-da/strings.xml @@ -1162,4 +1162,19 @@ <string name="keyguard_try_fingerprint" msgid="2825130772993061165">"Brug fingeraftryk for at åbne"</string> <string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"Godkendelse er påkrævet. Sæt fingeren på fingeraftrykslæseren for at godkende."</string> <string name="ongoing_phone_call_content_description" msgid="5332334388483099947">"Igangværende telefonopkald"</string> + <string name="airplane_mode" msgid="2536350001462130668">"Flytilstand"</string> + <string name="mobile_data_settings_title" msgid="3955246641380064901">"Mobildata"</string> + <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g>/<xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> + <string name="mobile_data_connection_active" msgid="944490013299018227">"Forbundet"</string> + <string name="mobile_data_off_summary" msgid="5621158216585822679">"Der oprettes ikke automatisk internetforbindelse"</string> + <string name="mobile_data_no_connection" msgid="1713872434869947377">"Der er ingen forbindelse"</string> + <string name="non_carrier_network_unavailable" msgid="770049357024492372">"Der er ingen andre tilgængelige netværk"</string> + <string name="all_network_unavailable" msgid="4112774339909373349">"Der er ingen tilgængelige netværk"</string> + <string name="turn_on_wifi" msgid="1308379840799281023">"Wi-Fi"</string> + <string name="pref_title_network_details" msgid="1639455355897668883">"Netværksoplysninger"</string> + <string name="tap_a_network_to_connect" msgid="1565073330852369558">"Tryk på et netværk for at oprette forbindelse"</string> + <string name="unlock_to_view_networks" msgid="5072880496312015676">"Lås op for at se netværk"</string> + <string name="wifi_empty_list_wifi_on" msgid="3864376632067585377">"Søger efter netværk…"</string> + <string name="wifi_failed_connect_message" msgid="4161863112079000071">"Der kunne ikke oprettes forbindelse til netværket"</string> + <string name="see_all_networks" msgid="3773666844913168122">"Se alle"</string> </resources> diff --git a/packages/SystemUI/res/values-de/strings.xml b/packages/SystemUI/res/values-de/strings.xml index 4c4a87603d55..e3be7821d7be 100644 --- a/packages/SystemUI/res/values-de/strings.xml +++ b/packages/SystemUI/res/values-de/strings.xml @@ -1162,4 +1162,19 @@ <string name="keyguard_try_fingerprint" msgid="2825130772993061165">"Mit Fingerabdruck öffnen"</string> <string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"Authentifizierung erforderlich. Tippe dazu einfach auf den Fingerabdrucksensor."</string> <string name="ongoing_phone_call_content_description" msgid="5332334388483099947">"Aktiver Anruf"</string> + <string name="airplane_mode" msgid="2536350001462130668">"Flugmodus"</string> + <string name="mobile_data_settings_title" msgid="3955246641380064901">"Mobile Daten"</string> + <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g>/<xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> + <string name="mobile_data_connection_active" msgid="944490013299018227">"Verbunden"</string> + <string name="mobile_data_off_summary" msgid="5621158216585822679">"Keine automatische Verbindung mit dem Internet"</string> + <string name="mobile_data_no_connection" msgid="1713872434869947377">"Keine Verbindung"</string> + <string name="non_carrier_network_unavailable" msgid="770049357024492372">"Keine anderen Netzwerke verfügbar"</string> + <string name="all_network_unavailable" msgid="4112774339909373349">"Keine Netzwerke verfügbar"</string> + <string name="turn_on_wifi" msgid="1308379840799281023">"WLAN"</string> + <string name="pref_title_network_details" msgid="1639455355897668883">"Netzwerkdetails"</string> + <string name="tap_a_network_to_connect" msgid="1565073330852369558">"Tippe auf ein Netzwerk, um eine Verbindung herzustellen"</string> + <string name="unlock_to_view_networks" msgid="5072880496312015676">"Entsperren, um Netzwerke anzuzeigen"</string> + <string name="wifi_empty_list_wifi_on" msgid="3864376632067585377">"Netzwerke werden gesucht…"</string> + <string name="wifi_failed_connect_message" msgid="4161863112079000071">"Netzwerkverbindung konnte nicht hergestellt werden"</string> + <string name="see_all_networks" msgid="3773666844913168122">"Alle ansehen"</string> </resources> diff --git a/packages/SystemUI/res/values-el/strings.xml b/packages/SystemUI/res/values-el/strings.xml index 0b37ed86bc7d..a406d286cfe0 100644 --- a/packages/SystemUI/res/values-el/strings.xml +++ b/packages/SystemUI/res/values-el/strings.xml @@ -1162,4 +1162,19 @@ <string name="keyguard_try_fingerprint" msgid="2825130772993061165">"Χρήση δακτυλικού αποτυπώματος για άνοιγμα"</string> <string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"Απαιτείται έλεγχος ταυτότητας. Αγγίξτε τον αισθητήρα δακτυλικών αποτυπωμάτων για έλεγχο ταυτότητας."</string> <string name="ongoing_phone_call_content_description" msgid="5332334388483099947">"Τηλεφωνική κλήση σε εξέλιξη"</string> + <string name="airplane_mode" msgid="2536350001462130668">"Λειτουργία πτήσης"</string> + <string name="mobile_data_settings_title" msgid="3955246641380064901">"Δεδομένα κινητής τηλεφωνίας"</string> + <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> + <string name="mobile_data_connection_active" msgid="944490013299018227">"Συνδέθηκε"</string> + <string name="mobile_data_off_summary" msgid="5621158216585822679">"Χωρίς αυτόματη σύνδεση στο διαδίκτυο"</string> + <string name="mobile_data_no_connection" msgid="1713872434869947377">"Χωρίς σύνδεση"</string> + <string name="non_carrier_network_unavailable" msgid="770049357024492372">"Δεν υπάρχουν άλλα διαθέσιμα δίκτυα"</string> + <string name="all_network_unavailable" msgid="4112774339909373349">"Δεν υπάρχουν διαθέσιμα δίκτυα"</string> + <string name="turn_on_wifi" msgid="1308379840799281023">"Wi‑Fi"</string> + <string name="pref_title_network_details" msgid="1639455355897668883">"Λεπτομέρειες δικτύου"</string> + <string name="tap_a_network_to_connect" msgid="1565073330852369558">"Πατήστε ένα δίκτυο για να συνδεθείτε"</string> + <string name="unlock_to_view_networks" msgid="5072880496312015676">"Ξεκλειδώστε για προβολή δικτύων"</string> + <string name="wifi_empty_list_wifi_on" msgid="3864376632067585377">"Αναζήτηση δικτύων…"</string> + <string name="wifi_failed_connect_message" msgid="4161863112079000071">"Αποτυχία σύνδεσης στο δίκτυο"</string> + <string name="see_all_networks" msgid="3773666844913168122">"Εμφάνιση όλων"</string> </resources> diff --git a/packages/SystemUI/res/values-en-rAU/strings.xml b/packages/SystemUI/res/values-en-rAU/strings.xml index e50c00e4fbed..a0d9accb43b7 100644 --- a/packages/SystemUI/res/values-en-rAU/strings.xml +++ b/packages/SystemUI/res/values-en-rAU/strings.xml @@ -1162,4 +1162,19 @@ <string name="keyguard_try_fingerprint" msgid="2825130772993061165">"Use fingerprint to open"</string> <string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"Authentication required. Touch the fingerprint sensor to authenticate."</string> <string name="ongoing_phone_call_content_description" msgid="5332334388483099947">"Ongoing phone call"</string> + <string name="airplane_mode" msgid="2536350001462130668">"Aeroplane mode"</string> + <string name="mobile_data_settings_title" msgid="3955246641380064901">"Mobile data"</string> + <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g>/<xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> + <string name="mobile_data_connection_active" msgid="944490013299018227">"Connected"</string> + <string name="mobile_data_off_summary" msgid="5621158216585822679">"Internet won\'t auto‑connect"</string> + <string name="mobile_data_no_connection" msgid="1713872434869947377">"No connection"</string> + <string name="non_carrier_network_unavailable" msgid="770049357024492372">"No other networks available"</string> + <string name="all_network_unavailable" msgid="4112774339909373349">"No networks available"</string> + <string name="turn_on_wifi" msgid="1308379840799281023">"Wi‑Fi"</string> + <string name="pref_title_network_details" msgid="1639455355897668883">"Network details"</string> + <string name="tap_a_network_to_connect" msgid="1565073330852369558">"Tap a network to connect"</string> + <string name="unlock_to_view_networks" msgid="5072880496312015676">"Unlock to view networks"</string> + <string name="wifi_empty_list_wifi_on" msgid="3864376632067585377">"Searching for networks…"</string> + <string name="wifi_failed_connect_message" msgid="4161863112079000071">"Failed to connect to network"</string> + <string name="see_all_networks" msgid="3773666844913168122">"See all"</string> </resources> diff --git a/packages/SystemUI/res/values-en-rCA/strings.xml b/packages/SystemUI/res/values-en-rCA/strings.xml index fba313ee04c4..d6519cb9562f 100644 --- a/packages/SystemUI/res/values-en-rCA/strings.xml +++ b/packages/SystemUI/res/values-en-rCA/strings.xml @@ -1162,4 +1162,19 @@ <string name="keyguard_try_fingerprint" msgid="2825130772993061165">"Use fingerprint to open"</string> <string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"Authentication required. Touch the fingerprint sensor to authenticate."</string> <string name="ongoing_phone_call_content_description" msgid="5332334388483099947">"Ongoing phone call"</string> + <string name="airplane_mode" msgid="2536350001462130668">"Aeroplane mode"</string> + <string name="mobile_data_settings_title" msgid="3955246641380064901">"Mobile data"</string> + <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g>/<xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> + <string name="mobile_data_connection_active" msgid="944490013299018227">"Connected"</string> + <string name="mobile_data_off_summary" msgid="5621158216585822679">"Internet won\'t auto‑connect"</string> + <string name="mobile_data_no_connection" msgid="1713872434869947377">"No connection"</string> + <string name="non_carrier_network_unavailable" msgid="770049357024492372">"No other networks available"</string> + <string name="all_network_unavailable" msgid="4112774339909373349">"No networks available"</string> + <string name="turn_on_wifi" msgid="1308379840799281023">"Wi‑Fi"</string> + <string name="pref_title_network_details" msgid="1639455355897668883">"Network details"</string> + <string name="tap_a_network_to_connect" msgid="1565073330852369558">"Tap a network to connect"</string> + <string name="unlock_to_view_networks" msgid="5072880496312015676">"Unlock to view networks"</string> + <string name="wifi_empty_list_wifi_on" msgid="3864376632067585377">"Searching for networks…"</string> + <string name="wifi_failed_connect_message" msgid="4161863112079000071">"Failed to connect to network"</string> + <string name="see_all_networks" msgid="3773666844913168122">"See all"</string> </resources> diff --git a/packages/SystemUI/res/values-en-rGB/strings.xml b/packages/SystemUI/res/values-en-rGB/strings.xml index e50c00e4fbed..a0d9accb43b7 100644 --- a/packages/SystemUI/res/values-en-rGB/strings.xml +++ b/packages/SystemUI/res/values-en-rGB/strings.xml @@ -1162,4 +1162,19 @@ <string name="keyguard_try_fingerprint" msgid="2825130772993061165">"Use fingerprint to open"</string> <string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"Authentication required. Touch the fingerprint sensor to authenticate."</string> <string name="ongoing_phone_call_content_description" msgid="5332334388483099947">"Ongoing phone call"</string> + <string name="airplane_mode" msgid="2536350001462130668">"Aeroplane mode"</string> + <string name="mobile_data_settings_title" msgid="3955246641380064901">"Mobile data"</string> + <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g>/<xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> + <string name="mobile_data_connection_active" msgid="944490013299018227">"Connected"</string> + <string name="mobile_data_off_summary" msgid="5621158216585822679">"Internet won\'t auto‑connect"</string> + <string name="mobile_data_no_connection" msgid="1713872434869947377">"No connection"</string> + <string name="non_carrier_network_unavailable" msgid="770049357024492372">"No other networks available"</string> + <string name="all_network_unavailable" msgid="4112774339909373349">"No networks available"</string> + <string name="turn_on_wifi" msgid="1308379840799281023">"Wi‑Fi"</string> + <string name="pref_title_network_details" msgid="1639455355897668883">"Network details"</string> + <string name="tap_a_network_to_connect" msgid="1565073330852369558">"Tap a network to connect"</string> + <string name="unlock_to_view_networks" msgid="5072880496312015676">"Unlock to view networks"</string> + <string name="wifi_empty_list_wifi_on" msgid="3864376632067585377">"Searching for networks…"</string> + <string name="wifi_failed_connect_message" msgid="4161863112079000071">"Failed to connect to network"</string> + <string name="see_all_networks" msgid="3773666844913168122">"See all"</string> </resources> diff --git a/packages/SystemUI/res/values-en-rIN/strings.xml b/packages/SystemUI/res/values-en-rIN/strings.xml index e50c00e4fbed..a0d9accb43b7 100644 --- a/packages/SystemUI/res/values-en-rIN/strings.xml +++ b/packages/SystemUI/res/values-en-rIN/strings.xml @@ -1162,4 +1162,19 @@ <string name="keyguard_try_fingerprint" msgid="2825130772993061165">"Use fingerprint to open"</string> <string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"Authentication required. Touch the fingerprint sensor to authenticate."</string> <string name="ongoing_phone_call_content_description" msgid="5332334388483099947">"Ongoing phone call"</string> + <string name="airplane_mode" msgid="2536350001462130668">"Aeroplane mode"</string> + <string name="mobile_data_settings_title" msgid="3955246641380064901">"Mobile data"</string> + <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g>/<xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> + <string name="mobile_data_connection_active" msgid="944490013299018227">"Connected"</string> + <string name="mobile_data_off_summary" msgid="5621158216585822679">"Internet won\'t auto‑connect"</string> + <string name="mobile_data_no_connection" msgid="1713872434869947377">"No connection"</string> + <string name="non_carrier_network_unavailable" msgid="770049357024492372">"No other networks available"</string> + <string name="all_network_unavailable" msgid="4112774339909373349">"No networks available"</string> + <string name="turn_on_wifi" msgid="1308379840799281023">"Wi‑Fi"</string> + <string name="pref_title_network_details" msgid="1639455355897668883">"Network details"</string> + <string name="tap_a_network_to_connect" msgid="1565073330852369558">"Tap a network to connect"</string> + <string name="unlock_to_view_networks" msgid="5072880496312015676">"Unlock to view networks"</string> + <string name="wifi_empty_list_wifi_on" msgid="3864376632067585377">"Searching for networks…"</string> + <string name="wifi_failed_connect_message" msgid="4161863112079000071">"Failed to connect to network"</string> + <string name="see_all_networks" msgid="3773666844913168122">"See all"</string> </resources> diff --git a/packages/SystemUI/res/values-en-rXC/strings.xml b/packages/SystemUI/res/values-en-rXC/strings.xml index a42a53170513..6d0d0eb01d0a 100644 --- a/packages/SystemUI/res/values-en-rXC/strings.xml +++ b/packages/SystemUI/res/values-en-rXC/strings.xml @@ -1162,4 +1162,19 @@ <string name="keyguard_try_fingerprint" msgid="2825130772993061165">"Use fingerprint to open"</string> <string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"Authentication required. Touch the fingerprint sensor to authenticate."</string> <string name="ongoing_phone_call_content_description" msgid="5332334388483099947">"Ongoing phone call"</string> + <string name="airplane_mode" msgid="2536350001462130668">"Airplane mode"</string> + <string name="mobile_data_settings_title" msgid="3955246641380064901">"Mobile data"</string> + <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> + <string name="mobile_data_connection_active" msgid="944490013299018227">"Connected"</string> + <string name="mobile_data_off_summary" msgid="5621158216585822679">"Internet won\'t auto‑connect"</string> + <string name="mobile_data_no_connection" msgid="1713872434869947377">"No connection"</string> + <string name="non_carrier_network_unavailable" msgid="770049357024492372">"No other networks available"</string> + <string name="all_network_unavailable" msgid="4112774339909373349">"No networks available"</string> + <string name="turn_on_wifi" msgid="1308379840799281023">"Wi‑Fi"</string> + <string name="pref_title_network_details" msgid="1639455355897668883">"Network details"</string> + <string name="tap_a_network_to_connect" msgid="1565073330852369558">"Tap a network to connect"</string> + <string name="unlock_to_view_networks" msgid="5072880496312015676">"Unlock to view networks"</string> + <string name="wifi_empty_list_wifi_on" msgid="3864376632067585377">"Searching for networks…"</string> + <string name="wifi_failed_connect_message" msgid="4161863112079000071">"Failed to connect to network"</string> + <string name="see_all_networks" msgid="3773666844913168122">"See all"</string> </resources> diff --git a/packages/SystemUI/res/values-es-rUS/strings.xml b/packages/SystemUI/res/values-es-rUS/strings.xml index 992902049eb1..ccda660ba131 100644 --- a/packages/SystemUI/res/values-es-rUS/strings.xml +++ b/packages/SystemUI/res/values-es-rUS/strings.xml @@ -1162,4 +1162,19 @@ <string name="keyguard_try_fingerprint" msgid="2825130772993061165">"Usa la huella dactilar para abrir"</string> <string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"Se requiere de una autenticación. Toca el sensor de huellas dactilares para autenticarte."</string> <string name="ongoing_phone_call_content_description" msgid="5332334388483099947">"Llamada en curso"</string> + <string name="airplane_mode" msgid="2536350001462130668">"Modo de avión"</string> + <string name="mobile_data_settings_title" msgid="3955246641380064901">"Datos móviles"</string> + <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g>/<xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> + <string name="mobile_data_connection_active" msgid="944490013299018227">"Conexión establecida"</string> + <string name="mobile_data_off_summary" msgid="5621158216585822679">"No se conectará automáticamente a Internet"</string> + <string name="mobile_data_no_connection" msgid="1713872434869947377">"Sin conexión"</string> + <string name="non_carrier_network_unavailable" msgid="770049357024492372">"No hay otras redes disponibles"</string> + <string name="all_network_unavailable" msgid="4112774339909373349">"No hay redes disponibles"</string> + <string name="turn_on_wifi" msgid="1308379840799281023">"Wi-Fi"</string> + <string name="pref_title_network_details" msgid="1639455355897668883">"Detalles de la red"</string> + <string name="tap_a_network_to_connect" msgid="1565073330852369558">"Presiona una red para conectarte a ella"</string> + <string name="unlock_to_view_networks" msgid="5072880496312015676">"Desbloquea para ver las redes"</string> + <string name="wifi_empty_list_wifi_on" msgid="3864376632067585377">"Buscando redes…"</string> + <string name="wifi_failed_connect_message" msgid="4161863112079000071">"Se produjo un error al establecer conexión con la red"</string> + <string name="see_all_networks" msgid="3773666844913168122">"Ver todo"</string> </resources> diff --git a/packages/SystemUI/res/values-es/strings.xml b/packages/SystemUI/res/values-es/strings.xml index 6a424607023e..2d117017f47a 100644 --- a/packages/SystemUI/res/values-es/strings.xml +++ b/packages/SystemUI/res/values-es/strings.xml @@ -1162,4 +1162,19 @@ <string name="keyguard_try_fingerprint" msgid="2825130772993061165">"Usa la huella digital para abrir"</string> <string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"Autenticación obligatoria. Toca el sensor de huellas digitales para autenticarte."</string> <string name="ongoing_phone_call_content_description" msgid="5332334388483099947">"Llamada en curso"</string> + <string name="airplane_mode" msgid="2536350001462130668">"Modo avión"</string> + <string name="mobile_data_settings_title" msgid="3955246641380064901">"Datos móviles"</string> + <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g>/<xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> + <string name="mobile_data_connection_active" msgid="944490013299018227">"Conectado"</string> + <string name="mobile_data_off_summary" msgid="5621158216585822679">"Internet no se conecta automáticamente"</string> + <string name="mobile_data_no_connection" msgid="1713872434869947377">"Sin conexión"</string> + <string name="non_carrier_network_unavailable" msgid="770049357024492372">"No hay otras redes disponibles"</string> + <string name="all_network_unavailable" msgid="4112774339909373349">"No hay redes disponibles"</string> + <string name="turn_on_wifi" msgid="1308379840799281023">"Wi-Fi"</string> + <string name="pref_title_network_details" msgid="1639455355897668883">"Detalles de la red"</string> + <string name="tap_a_network_to_connect" msgid="1565073330852369558">"Toca una red para conectarte"</string> + <string name="unlock_to_view_networks" msgid="5072880496312015676">"Desbloquea para ver redes"</string> + <string name="wifi_empty_list_wifi_on" msgid="3864376632067585377">"Buscando redes…"</string> + <string name="wifi_failed_connect_message" msgid="4161863112079000071">"No se ha podido conectar a la red"</string> + <string name="see_all_networks" msgid="3773666844913168122">"Ver todo"</string> </resources> diff --git a/packages/SystemUI/res/values-et/strings.xml b/packages/SystemUI/res/values-et/strings.xml index 10becfb037dd..64922594a524 100644 --- a/packages/SystemUI/res/values-et/strings.xml +++ b/packages/SystemUI/res/values-et/strings.xml @@ -1162,4 +1162,19 @@ <string name="keyguard_try_fingerprint" msgid="2825130772993061165">"Kasutage avamiseks sõrmejälge"</string> <string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"Vajalik on autentimine. Puudutage autentimiseks sõrmejäljeandurit."</string> <string name="ongoing_phone_call_content_description" msgid="5332334388483099947">"Käimasolev telefonikõne"</string> + <string name="airplane_mode" msgid="2536350001462130668">"Lennukirežiim"</string> + <string name="mobile_data_settings_title" msgid="3955246641380064901">"Mobiilne andmeside"</string> + <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> + <string name="mobile_data_connection_active" msgid="944490013299018227">"Ühendatud"</string> + <string name="mobile_data_off_summary" msgid="5621158216585822679">"Internetiühendust ei looda automaatselt"</string> + <string name="mobile_data_no_connection" msgid="1713872434869947377">"Ühendus puudub"</string> + <string name="non_carrier_network_unavailable" msgid="770049357024492372">"Ühtegi muud võrku pole saadaval"</string> + <string name="all_network_unavailable" msgid="4112774339909373349">"Ühtegi võrku pole saadaval"</string> + <string name="turn_on_wifi" msgid="1308379840799281023">"WiFi"</string> + <string name="pref_title_network_details" msgid="1639455355897668883">"Võrgu üksikasjad"</string> + <string name="tap_a_network_to_connect" msgid="1565073330852369558">"Puudutage ühendamiseks võrku"</string> + <string name="unlock_to_view_networks" msgid="5072880496312015676">"Võrkude vaatamiseks avage"</string> + <string name="wifi_empty_list_wifi_on" msgid="3864376632067585377">"Võrkude otsimine …"</string> + <string name="wifi_failed_connect_message" msgid="4161863112079000071">"Võrguühenduse loomine ebaõnnestus"</string> + <string name="see_all_networks" msgid="3773666844913168122">"Kuva kõik"</string> </resources> diff --git a/packages/SystemUI/res/values-eu/strings.xml b/packages/SystemUI/res/values-eu/strings.xml index 3dbbc07c645e..304fc2ad5812 100644 --- a/packages/SystemUI/res/values-eu/strings.xml +++ b/packages/SystemUI/res/values-eu/strings.xml @@ -1162,4 +1162,19 @@ <string name="keyguard_try_fingerprint" msgid="2825130772993061165">"Erabili hatz-marka irekitzeko"</string> <string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"Autentifikazioa behar da. Autentifikatzeko, ukitu hatz-marken sentsorea."</string> <string name="ongoing_phone_call_content_description" msgid="5332334388483099947">"Telefono-dei bat abian da"</string> + <string name="airplane_mode" msgid="2536350001462130668">"Hegaldi modua"</string> + <string name="mobile_data_settings_title" msgid="3955246641380064901">"Datu-konexioa"</string> + <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g> (<xliff:g id="NETWORKMODE">%2$s</xliff:g>)"</string> + <string name="mobile_data_connection_active" msgid="944490013299018227">"Konektatuta"</string> + <string name="mobile_data_off_summary" msgid="5621158216585822679">"Ez da automatikoki konektatuko Internetera"</string> + <string name="mobile_data_no_connection" msgid="1713872434869947377">"Konexiorik gabe"</string> + <string name="non_carrier_network_unavailable" msgid="770049357024492372">"Ez dago beste sare erabilgarririk"</string> + <string name="all_network_unavailable" msgid="4112774339909373349">"Ez dago sare erabilgarririk"</string> + <string name="turn_on_wifi" msgid="1308379840799281023">"Wifia"</string> + <string name="pref_title_network_details" msgid="1639455355897668883">"Sarearen xehetasunak"</string> + <string name="tap_a_network_to_connect" msgid="1565073330852369558">"Sakatu sare bat hartara konektatzeko"</string> + <string name="unlock_to_view_networks" msgid="5072880496312015676">"Sareak ikusteko, desblokeatu pantaila"</string> + <string name="wifi_empty_list_wifi_on" msgid="3864376632067585377">"Sareak bilatzen…"</string> + <string name="wifi_failed_connect_message" msgid="4161863112079000071">"Ezin izan da konektatu sarera"</string> + <string name="see_all_networks" msgid="3773666844913168122">"Ikusi guztiak"</string> </resources> diff --git a/packages/SystemUI/res/values-fa/strings.xml b/packages/SystemUI/res/values-fa/strings.xml index 4606ae7751aa..231a20525102 100644 --- a/packages/SystemUI/res/values-fa/strings.xml +++ b/packages/SystemUI/res/values-fa/strings.xml @@ -1162,4 +1162,19 @@ <string name="keyguard_try_fingerprint" msgid="2825130772993061165">"از اثر انگشت برای باز کردن قفل استفاده کنید"</string> <string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"اصالتسنجی لازم است. برای اصالتسنجی، حسگر اثر انگشت را لمس کنید."</string> <string name="ongoing_phone_call_content_description" msgid="5332334388483099947">"تماس تلفنی درحال انجام"</string> + <string name="airplane_mode" msgid="2536350001462130668">"حالت هواپیما"</string> + <string name="mobile_data_settings_title" msgid="3955246641380064901">"داده تلفن همراه"</string> + <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> + <string name="mobile_data_connection_active" msgid="944490013299018227">"متصل است"</string> + <string name="mobile_data_off_summary" msgid="5621158216585822679">"اینترنت بهطور خودکار متصل نخواهد شد"</string> + <string name="mobile_data_no_connection" msgid="1713872434869947377">"اتصال برقرار نیست"</string> + <string name="non_carrier_network_unavailable" msgid="770049357024492372">"شبکه دیگری وجود ندارد"</string> + <string name="all_network_unavailable" msgid="4112774339909373349">"شبکهای در دسترس نیست"</string> + <string name="turn_on_wifi" msgid="1308379840799281023">"Wi-Fi"</string> + <string name="pref_title_network_details" msgid="1639455355897668883">"جزئیات شبکه"</string> + <string name="tap_a_network_to_connect" msgid="1565073330852369558">"برای اتصال به شبکه روی آن ضربه بزنید"</string> + <string name="unlock_to_view_networks" msgid="5072880496312015676">"برای مشاهده شبکهها، قفل صفحه را باز کنید"</string> + <string name="wifi_empty_list_wifi_on" msgid="3864376632067585377">"درحال جستجوی شبکه…"</string> + <string name="wifi_failed_connect_message" msgid="4161863112079000071">"اتصال به شبکه برقرار نشد"</string> + <string name="see_all_networks" msgid="3773666844913168122">"مشاهده همه"</string> </resources> diff --git a/packages/SystemUI/res/values-fi/strings.xml b/packages/SystemUI/res/values-fi/strings.xml index 9d9b152c3a98..554d2061b0b1 100644 --- a/packages/SystemUI/res/values-fi/strings.xml +++ b/packages/SystemUI/res/values-fi/strings.xml @@ -1162,4 +1162,19 @@ <string name="keyguard_try_fingerprint" msgid="2825130772993061165">"Avaa sormenjäljellä"</string> <string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"Todennus vaaditaan. Todenna koskettamalla sormenjälkitunnistinta."</string> <string name="ongoing_phone_call_content_description" msgid="5332334388483099947">"Puhelu käynnissä"</string> + <string name="airplane_mode" msgid="2536350001462130668">"Lentokonetila"</string> + <string name="mobile_data_settings_title" msgid="3955246641380064901">"Mobiilidata"</string> + <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g>/<xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> + <string name="mobile_data_connection_active" msgid="944490013299018227">"Yhdistetty"</string> + <string name="mobile_data_off_summary" msgid="5621158216585822679">"Internetyhteyttä ei muodosteta automaattisesti"</string> + <string name="mobile_data_no_connection" msgid="1713872434869947377">"Ei yhteyttä"</string> + <string name="non_carrier_network_unavailable" msgid="770049357024492372">"Ei muita verkkoja käytettävissä"</string> + <string name="all_network_unavailable" msgid="4112774339909373349">"Ei verkkoja käytettävissä"</string> + <string name="turn_on_wifi" msgid="1308379840799281023">"Wi-Fi"</string> + <string name="pref_title_network_details" msgid="1639455355897668883">"Verkon tiedot"</string> + <string name="tap_a_network_to_connect" msgid="1565073330852369558">"Muodosta yhteys napauttamalla verkkoa"</string> + <string name="unlock_to_view_networks" msgid="5072880496312015676">"Avaa lukitus nähdäksesi verkot"</string> + <string name="wifi_empty_list_wifi_on" msgid="3864376632067585377">"Etsitään verkkoja…"</string> + <string name="wifi_failed_connect_message" msgid="4161863112079000071">"Yhteyden muodostaminen verkkoon epäonnistui"</string> + <string name="see_all_networks" msgid="3773666844913168122">"Näytä kaikki"</string> </resources> diff --git a/packages/SystemUI/res/values-fr-rCA/strings.xml b/packages/SystemUI/res/values-fr-rCA/strings.xml index 22e77a03b003..90fc0f77c76e 100644 --- a/packages/SystemUI/res/values-fr-rCA/strings.xml +++ b/packages/SystemUI/res/values-fr-rCA/strings.xml @@ -77,8 +77,7 @@ <string name="compat_mode_on" msgid="4963711187149440884">"Zoomer pour remplir l\'écran"</string> <string name="compat_mode_off" msgid="7682459748279487945">"Étirer pour remplir l\'écran"</string> <string name="global_action_screenshot" msgid="2760267567509131654">"Capture d\'écran"</string> - <!-- no translation found for global_action_smart_lock_disabled (9097102067802412936) --> - <skip /> + <string name="global_action_smart_lock_disabled" msgid="9097102067802412936">"Fonctionnalité Smart Lock désactivée"</string> <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"a envoyé une image"</string> <string name="screenshot_saving_ticker" msgid="6519186952674544916">"Enregistrement capture écran…"</string> <string name="screenshot_saving_title" msgid="2298349784913287333">"Enregistrement capture écran…"</string> @@ -1163,4 +1162,19 @@ <string name="keyguard_try_fingerprint" msgid="2825130772993061165">"Servez-vous de votre empreinte digitale pour ouvrir"</string> <string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"Authentification requise. Touchez le capteur d\'empreintes digitales pour vous authentifier."</string> <string name="ongoing_phone_call_content_description" msgid="5332334388483099947">"Appel téléphonique en cours…"</string> + <string name="airplane_mode" msgid="2536350001462130668">"Mode Avion"</string> + <string name="mobile_data_settings_title" msgid="3955246641380064901">"Données cellulaires"</string> + <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g>/<xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> + <string name="mobile_data_connection_active" msgid="944490013299018227">"Connexion active"</string> + <string name="mobile_data_off_summary" msgid="5621158216585822679">"Connexion automatique à Internet impossible"</string> + <string name="mobile_data_no_connection" msgid="1713872434869947377">"Aucune connexion"</string> + <string name="non_carrier_network_unavailable" msgid="770049357024492372">"Aucun autre réseau n\'est accessible"</string> + <string name="all_network_unavailable" msgid="4112774339909373349">"Aucun réseau n\'est accessible"</string> + <string name="turn_on_wifi" msgid="1308379840799281023">"Wi-Fi"</string> + <string name="pref_title_network_details" msgid="1639455355897668883">"Détails du réseau"</string> + <string name="tap_a_network_to_connect" msgid="1565073330852369558">"Touchez un réseau pour vous y connecter"</string> + <string name="unlock_to_view_networks" msgid="5072880496312015676">"Déverrouillez l\'écran pour afficher les réseaux Wi-Fi"</string> + <string name="wifi_empty_list_wifi_on" msgid="3864376632067585377">"Recherche de réseaux en cours…"</string> + <string name="wifi_failed_connect_message" msgid="4161863112079000071">"Échec de la connexion au réseau"</string> + <string name="see_all_networks" msgid="3773666844913168122">"Tout afficher"</string> </resources> diff --git a/packages/SystemUI/res/values-fr/strings.xml b/packages/SystemUI/res/values-fr/strings.xml index 5510ef1c32c6..9930fde15885 100644 --- a/packages/SystemUI/res/values-fr/strings.xml +++ b/packages/SystemUI/res/values-fr/strings.xml @@ -1162,4 +1162,19 @@ <string name="keyguard_try_fingerprint" msgid="2825130772993061165">"Utilisez votre empreinte pour ouvrir"</string> <string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"Authentification requise. Appuyez sur le lecteur d\'empreintes digitales pour vous authentifier."</string> <string name="ongoing_phone_call_content_description" msgid="5332334388483099947">"Appel téléphonique en cours"</string> + <string name="airplane_mode" msgid="2536350001462130668">"Mode Avion"</string> + <string name="mobile_data_settings_title" msgid="3955246641380064901">"Données mobiles"</string> + <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g>/<xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> + <string name="mobile_data_connection_active" msgid="944490013299018227">"Connecté"</string> + <string name="mobile_data_off_summary" msgid="5621158216585822679">"Pas de connexion automatique à Internet"</string> + <string name="mobile_data_no_connection" msgid="1713872434869947377">"Aucune connexion"</string> + <string name="non_carrier_network_unavailable" msgid="770049357024492372">"Aucun autre réseau disponible"</string> + <string name="all_network_unavailable" msgid="4112774339909373349">"Aucun réseau disponible"</string> + <string name="turn_on_wifi" msgid="1308379840799281023">"Wi-Fi"</string> + <string name="pref_title_network_details" msgid="1639455355897668883">"Détails du réseau"</string> + <string name="tap_a_network_to_connect" msgid="1565073330852369558">"Appuyez sur un réseau pour vous connecter"</string> + <string name="unlock_to_view_networks" msgid="5072880496312015676">"Déverrouiller pour afficher les réseaux"</string> + <string name="wifi_empty_list_wifi_on" msgid="3864376632067585377">"Recherche de réseaux…"</string> + <string name="wifi_failed_connect_message" msgid="4161863112079000071">"Échec de la connexion au réseau"</string> + <string name="see_all_networks" msgid="3773666844913168122">"Tout afficher"</string> </resources> diff --git a/packages/SystemUI/res/values-gl/strings.xml b/packages/SystemUI/res/values-gl/strings.xml index a9f059325058..766281a1c4f8 100644 --- a/packages/SystemUI/res/values-gl/strings.xml +++ b/packages/SystemUI/res/values-gl/strings.xml @@ -1162,4 +1162,19 @@ <string name="keyguard_try_fingerprint" msgid="2825130772993061165">"Usa a impresión dixital para abrir"</string> <string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"Requírese autenticación. Para autenticarte, toca o sensor de impresión dixital."</string> <string name="ongoing_phone_call_content_description" msgid="5332334388483099947">"Chamada telefónica en curso"</string> + <string name="airplane_mode" msgid="2536350001462130668">"Modo avión"</string> + <string name="mobile_data_settings_title" msgid="3955246641380064901">"Datos móbiles"</string> + <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g>/<xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> + <string name="mobile_data_connection_active" msgid="944490013299018227">"Conectada"</string> + <string name="mobile_data_off_summary" msgid="5621158216585822679">"Internet non se conectará automaticamente"</string> + <string name="mobile_data_no_connection" msgid="1713872434869947377">"Sen conexión"</string> + <string name="non_carrier_network_unavailable" msgid="770049357024492372">"Non hai outras redes dispoñibles"</string> + <string name="all_network_unavailable" msgid="4112774339909373349">"Non hai redes dispoñibles"</string> + <string name="turn_on_wifi" msgid="1308379840799281023">"Wifi"</string> + <string name="pref_title_network_details" msgid="1639455355897668883">"Detalles da rede"</string> + <string name="tap_a_network_to_connect" msgid="1565073330852369558">"Toca unha rede para conectarte a ela"</string> + <string name="unlock_to_view_networks" msgid="5072880496312015676">"Desbloquea a pantalla para ver as redes"</string> + <string name="wifi_empty_list_wifi_on" msgid="3864376632067585377">"Buscando redes…"</string> + <string name="wifi_failed_connect_message" msgid="4161863112079000071">"Produciuse un erro ao conectarse á rede"</string> + <string name="see_all_networks" msgid="3773666844913168122">"Ver todo"</string> </resources> diff --git a/packages/SystemUI/res/values-gu/strings.xml b/packages/SystemUI/res/values-gu/strings.xml index 9f05de581d51..cb140821ff0f 100644 --- a/packages/SystemUI/res/values-gu/strings.xml +++ b/packages/SystemUI/res/values-gu/strings.xml @@ -77,8 +77,7 @@ <string name="compat_mode_on" msgid="4963711187149440884">"સ્ક્રીન ભરવા માટે ઝૂમ કરો"</string> <string name="compat_mode_off" msgid="7682459748279487945">"સ્ક્રીન ભરવા માટે ખેંચો"</string> <string name="global_action_screenshot" msgid="2760267567509131654">"સ્ક્રીનશૉટ"</string> - <!-- no translation found for global_action_smart_lock_disabled (9097102067802412936) --> - <skip /> + <string name="global_action_smart_lock_disabled" msgid="9097102067802412936">"Smart Lock બંધ કરેલું છે"</string> <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"છબી મોકલી"</string> <string name="screenshot_saving_ticker" msgid="6519186952674544916">"સ્ક્રીનશોટ સાચવી રહ્યું છે…"</string> <string name="screenshot_saving_title" msgid="2298349784913287333">"સ્ક્રીનશોટ સાચવી રહ્યું છે…"</string> @@ -135,7 +134,7 @@ <string name="accessibility_rotate_button" msgid="1238584767612362586">"સ્ક્રીન ફેરવો"</string> <string name="accessibility_recent" msgid="901641734769533575">"ઝલક"</string> <string name="accessibility_search_light" msgid="524741790416076988">"શોધ"</string> - <string name="accessibility_camera_button" msgid="2938898391716647247">"કૅમેરો"</string> + <string name="accessibility_camera_button" msgid="2938898391716647247">"કૅમેરા"</string> <string name="accessibility_phone_button" msgid="4256353121703100427">"ફોન"</string> <string name="accessibility_voice_assist_button" msgid="6497706615649754510">"વૉઇસ સહાય"</string> <string name="accessibility_wallet_button" msgid="1458258783460555507">"વૉલેટ"</string> @@ -984,7 +983,7 @@ <string name="qs_dnd_prompt_app" msgid="4027984447935396820">"ખલેલ પાડશો નહીં એક ઍપ્લિકેશન દ્વારા ચાલુ કરાયું હતું (<xliff:g id="ID_1">%s</xliff:g>)."</string> <string name="qs_dnd_prompt_auto_rule_app" msgid="1841469944118486580">"ખલેલ પાડશો નહીં એક સ્વચાલિત નિયમ અથવા ઍપ્લિકેશન દ્વારા ચાલુ કરાયું હતું."</string> <string name="qs_dnd_until" msgid="7844269319043747955">"<xliff:g id="ID_1">%s</xliff:g> સુધી"</string> - <string name="qs_dnd_keep" msgid="3829697305432866434">"Keep"</string> + <string name="qs_dnd_keep" msgid="3829697305432866434">"રાખો"</string> <string name="qs_dnd_replace" msgid="7712119051407052689">"બદલો"</string> <string name="running_foreground_services_title" msgid="5137313173431186685">"પૃષ્ઠભૂમિમાં ચાલી રહેલ ઍપ્લિકેશનો"</string> <string name="running_foreground_services_msg" msgid="3009459259222695385">"બૅટરી અને ડેટા વપરાશ વિશેની વિગતો માટે ટૅપ કરો"</string> @@ -1163,4 +1162,19 @@ <string name="keyguard_try_fingerprint" msgid="2825130772993061165">"ખોલવા માટે ફિંગરપ્રિન્ટનો ઉપયોગ કરો"</string> <string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"પ્રમાણીકરણ આવશ્યક છે. પ્રમાણિત કરવા માટે ફિંગરપ્રિન્ટ સેન્સરને ટચ કરો."</string> <string name="ongoing_phone_call_content_description" msgid="5332334388483099947">"ફોન કૉલ ચાલુ છે"</string> + <string name="airplane_mode" msgid="2536350001462130668">"એરપ્લેન મોડ"</string> + <string name="mobile_data_settings_title" msgid="3955246641380064901">"મોબાઇલ ડેટા"</string> + <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> + <string name="mobile_data_connection_active" msgid="944490013299018227">"કનેક્ટ કરેલું"</string> + <string name="mobile_data_off_summary" msgid="5621158216585822679">"ઇન્ટરનેટ ઑટોમૅટિક રીતે કનેક્ટ થશે નહીં"</string> + <string name="mobile_data_no_connection" msgid="1713872434869947377">"કોઈ કનેક્શન નથી"</string> + <string name="non_carrier_network_unavailable" msgid="770049357024492372">"બીજાં કોઈ નેટવર્ક ઉપલબ્ધ નથી"</string> + <string name="all_network_unavailable" msgid="4112774339909373349">"કોઈ નેટવર્ક ઉપલબ્ધ નથી"</string> + <string name="turn_on_wifi" msgid="1308379840799281023">"વાઇ-ફાઇ"</string> + <string name="pref_title_network_details" msgid="1639455355897668883">"નેટવર્કની વિગતો"</string> + <string name="tap_a_network_to_connect" msgid="1565073330852369558">"કનેક્ટ કરવા માટે નેટવર્ક પર ટૅપ કરો"</string> + <string name="unlock_to_view_networks" msgid="5072880496312015676">"વાઇ-ફાઇ નેટવર્ક જોવા માટે અનલૉક કરો"</string> + <string name="wifi_empty_list_wifi_on" msgid="3864376632067585377">"નેટવર્ક શોધી રહ્યાં છીએ…"</string> + <string name="wifi_failed_connect_message" msgid="4161863112079000071">"નેટવર્ક સાથે કનેક્ટ કરવામાં નિષ્ફળ થયાં"</string> + <string name="see_all_networks" msgid="3773666844913168122">"બધા જુઓ"</string> </resources> diff --git a/packages/SystemUI/res/values-hi/strings.xml b/packages/SystemUI/res/values-hi/strings.xml index ffe3a5ba4359..d5283b3bcdec 100644 --- a/packages/SystemUI/res/values-hi/strings.xml +++ b/packages/SystemUI/res/values-hi/strings.xml @@ -848,7 +848,7 @@ <string name="keyboard_shortcut_group_applications_sms" msgid="6912633831752843566">"मैसेज (एसएमएस) करें"</string> <string name="keyboard_shortcut_group_applications_music" msgid="9032078456666204025">"संगीत"</string> <string name="keyboard_shortcut_group_applications_youtube" msgid="5078136084632450333">"YouTube"</string> - <string name="keyboard_shortcut_group_applications_calendar" msgid="4229602992120154157">"कैलेंडर"</string> + <string name="keyboard_shortcut_group_applications_calendar" msgid="4229602992120154157">"Calendar"</string> <string name="tuner_full_zen_title" msgid="5120366354224404511">"वॉल्यूम नियंत्रणों के साथ दिखाएं"</string> <string name="volume_and_do_not_disturb" msgid="502044092739382832">"परेशान न करें"</string> <string name="volume_dnd_silent" msgid="4154597281458298093">"वॉल्यूम बटन का शॉर्टकट"</string> @@ -1162,4 +1162,19 @@ <string name="keyguard_try_fingerprint" msgid="2825130772993061165">"खोलने के लिए, फ़िंगरप्रिंट का इस्तेमाल करें"</string> <string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"पुष्टि करना ज़रूरी है. पुष्टि करने के लिए, फ़िंगरप्रिंट सेंसर को छुएं."</string> <string name="ongoing_phone_call_content_description" msgid="5332334388483099947">"फ़ोन कॉल चल रहा है"</string> + <string name="airplane_mode" msgid="2536350001462130668">"हवाई जहाज़ मोड"</string> + <string name="mobile_data_settings_title" msgid="3955246641380064901">"मोबाइल डेटा"</string> + <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> + <string name="mobile_data_connection_active" msgid="944490013299018227">"कनेक्ट हो गया"</string> + <string name="mobile_data_off_summary" msgid="5621158216585822679">"इंटरनेट अपने-आप कनेक्ट नहीं होगा"</string> + <string name="mobile_data_no_connection" msgid="1713872434869947377">"इंटरनेट कनेक्शन नहीं है"</string> + <string name="non_carrier_network_unavailable" msgid="770049357024492372">"कोई दूसरा नेटवर्क उपलब्ध नहीं है"</string> + <string name="all_network_unavailable" msgid="4112774339909373349">"कोई नेटवर्क उपलब्ध नहीं है"</string> + <string name="turn_on_wifi" msgid="1308379840799281023">"वाई-फ़ाई"</string> + <string name="pref_title_network_details" msgid="1639455355897668883">"नेटवर्क की जानकारी"</string> + <string name="tap_a_network_to_connect" msgid="1565073330852369558">"इंटरनेट से कनेक्ट करने के लिए, किसी नेटवर्क पर टैप करें"</string> + <string name="unlock_to_view_networks" msgid="5072880496312015676">"वाई-फ़ाई नेटवर्क देखने के लिए, स्क्रीन को अनलॉक करें"</string> + <string name="wifi_empty_list_wifi_on" msgid="3864376632067585377">"नेटवर्क खोजे जा रहे हैं…"</string> + <string name="wifi_failed_connect_message" msgid="4161863112079000071">"नेटवर्क से कनेक्ट नहीं किया जा सका"</string> + <string name="see_all_networks" msgid="3773666844913168122">"सभी देखें"</string> </resources> diff --git a/packages/SystemUI/res/values-hr/strings.xml b/packages/SystemUI/res/values-hr/strings.xml index 260dba99416d..28a528fa15e3 100644 --- a/packages/SystemUI/res/values-hr/strings.xml +++ b/packages/SystemUI/res/values-hr/strings.xml @@ -1168,4 +1168,19 @@ <string name="keyguard_try_fingerprint" msgid="2825130772993061165">"Otvorite pomoću otiska prsta"</string> <string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"Potrebna je autentifikacija. Dodirnite senzor otiska prsta da biste se autentificirali."</string> <string name="ongoing_phone_call_content_description" msgid="5332334388483099947">"Telefonski poziv u tijeku"</string> + <string name="airplane_mode" msgid="2536350001462130668">"Način rada u zrakoplovu"</string> + <string name="mobile_data_settings_title" msgid="3955246641380064901">"Mobilni podaci"</string> + <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g>/<xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> + <string name="mobile_data_connection_active" msgid="944490013299018227">"Povezano"</string> + <string name="mobile_data_off_summary" msgid="5621158216585822679">"Neće biti automatskog povezivanja s internetom"</string> + <string name="mobile_data_no_connection" msgid="1713872434869947377">"Niste povezani"</string> + <string name="non_carrier_network_unavailable" msgid="770049357024492372">"Nije dostupna nijedna druga mreža"</string> + <string name="all_network_unavailable" msgid="4112774339909373349">"Nema dostupnih mreža"</string> + <string name="turn_on_wifi" msgid="1308379840799281023">"Wi-Fi"</string> + <string name="pref_title_network_details" msgid="1639455355897668883">"Pojedinosti o mreži"</string> + <string name="tap_a_network_to_connect" msgid="1565073330852369558">"Dodirnite mrežu da biste se povezali"</string> + <string name="unlock_to_view_networks" msgid="5072880496312015676">"Otključajte za prikaz mreža"</string> + <string name="wifi_empty_list_wifi_on" msgid="3864376632067585377">"Traženje mreža…"</string> + <string name="wifi_failed_connect_message" msgid="4161863112079000071">"Povezivanje s mrežom nije uspjelo"</string> + <string name="see_all_networks" msgid="3773666844913168122">"Prikaži sve"</string> </resources> diff --git a/packages/SystemUI/res/values-hu/strings.xml b/packages/SystemUI/res/values-hu/strings.xml index 4a7182677cd4..ee536664ecef 100644 --- a/packages/SystemUI/res/values-hu/strings.xml +++ b/packages/SystemUI/res/values-hu/strings.xml @@ -1162,4 +1162,19 @@ <string name="keyguard_try_fingerprint" msgid="2825130772993061165">"Ujjlenyomat használata a megnyitáshoz"</string> <string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"Hitelesítés szükséges. Érintse meg az ujjlenyomat-érzékelőt a hitelesítéshez."</string> <string name="ongoing_phone_call_content_description" msgid="5332334388483099947">"Folyamatban lévő telefonhívás"</string> + <string name="airplane_mode" msgid="2536350001462130668">"Repülős üzemmód"</string> + <string name="mobile_data_settings_title" msgid="3955246641380064901">"Mobiladat"</string> + <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="NETWORKMODE">%2$s</xliff:g>/<xliff:g id="STATE">%1$s</xliff:g>"</string> + <string name="mobile_data_connection_active" msgid="944490013299018227">"Csatlakozva"</string> + <string name="mobile_data_off_summary" msgid="5621158216585822679">"Az internetre történő csatlakozás nem automatikus"</string> + <string name="mobile_data_no_connection" msgid="1713872434869947377">"Nincs kapcsolat"</string> + <string name="non_carrier_network_unavailable" msgid="770049357024492372">"Nincs több rendelkezésre álló hálózat"</string> + <string name="all_network_unavailable" msgid="4112774339909373349">"Nincs rendelkezésre álló hálózat"</string> + <string name="turn_on_wifi" msgid="1308379840799281023">"Wi-Fi"</string> + <string name="pref_title_network_details" msgid="1639455355897668883">"Hálózati információk"</string> + <string name="tap_a_network_to_connect" msgid="1565073330852369558">"A kapcsolódáshoz koppintson a kívánt hálózatra"</string> + <string name="unlock_to_view_networks" msgid="5072880496312015676">"Zárolás feloldása a hálózatok megtekintéséhez"</string> + <string name="wifi_empty_list_wifi_on" msgid="3864376632067585377">"Hálózatok keresése…"</string> + <string name="wifi_failed_connect_message" msgid="4161863112079000071">"Nem sikerült hálózathoz csatlakozni."</string> + <string name="see_all_networks" msgid="3773666844913168122">"Megtekintés"</string> </resources> diff --git a/packages/SystemUI/res/values-hy/strings.xml b/packages/SystemUI/res/values-hy/strings.xml index bdebdadaf397..57781f918ead 100644 --- a/packages/SystemUI/res/values-hy/strings.xml +++ b/packages/SystemUI/res/values-hy/strings.xml @@ -1162,4 +1162,19 @@ <string name="keyguard_try_fingerprint" msgid="2825130772993061165">"Բացելու համար օգտագործեք մատնահետքը"</string> <string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"Պահանջվում է նույնականացում։ Դրա համար մատը հպեք մատնահետքի սկաներին։"</string> <string name="ongoing_phone_call_content_description" msgid="5332334388483099947">"Ընթացիկ հեռախոսազանգ"</string> + <string name="airplane_mode" msgid="2536350001462130668">"Ավիառեժիմ"</string> + <string name="mobile_data_settings_title" msgid="3955246641380064901">"Բջջային ինտերնետ"</string> + <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g>/<xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> + <string name="mobile_data_connection_active" msgid="944490013299018227">"Միացած է"</string> + <string name="mobile_data_off_summary" msgid="5621158216585822679">"Չհաջողվեց ավտոմատ միանալ համացանցին"</string> + <string name="mobile_data_no_connection" msgid="1713872434869947377">"Կապ չկա"</string> + <string name="non_carrier_network_unavailable" msgid="770049357024492372">"Այլ հասանելի ցանցեր չկան"</string> + <string name="all_network_unavailable" msgid="4112774339909373349">"Հասանելի ցանցեր չկան"</string> + <string name="turn_on_wifi" msgid="1308379840799281023">"Wi‑Fi"</string> + <string name="pref_title_network_details" msgid="1639455355897668883">"Ցանցի տվյալներ"</string> + <string name="tap_a_network_to_connect" msgid="1565073330852369558">"Հպեք ցանցին՝ միանալու համար"</string> + <string name="unlock_to_view_networks" msgid="5072880496312015676">"Ապակողպեք՝ ցանցերը դիտելու համար"</string> + <string name="wifi_empty_list_wifi_on" msgid="3864376632067585377">"Ցանցերի որոնում…"</string> + <string name="wifi_failed_connect_message" msgid="4161863112079000071">"Չհաջողվեց միանալ ցանցին"</string> + <string name="see_all_networks" msgid="3773666844913168122">"Տեսնել բոլորը"</string> </resources> diff --git a/packages/SystemUI/res/values-in/strings.xml b/packages/SystemUI/res/values-in/strings.xml index 15b64c661b04..b4155db737b5 100644 --- a/packages/SystemUI/res/values-in/strings.xml +++ b/packages/SystemUI/res/values-in/strings.xml @@ -1162,4 +1162,19 @@ <string name="keyguard_try_fingerprint" msgid="2825130772993061165">"Gunakan sidik jari untuk membuka"</string> <string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"Perlu autentikasi. Sentuh sensor sidik jari untuk melakukan autentikasi."</string> <string name="ongoing_phone_call_content_description" msgid="5332334388483099947">"Panggilan telepon sedang berlangsung"</string> + <string name="airplane_mode" msgid="2536350001462130668">"Mode pesawat"</string> + <string name="mobile_data_settings_title" msgid="3955246641380064901">"Data seluler"</string> + <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g>/<xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> + <string name="mobile_data_connection_active" msgid="944490013299018227">"Terhubung"</string> + <string name="mobile_data_off_summary" msgid="5621158216585822679">"Internet tidak akan terhubung otomatis"</string> + <string name="mobile_data_no_connection" msgid="1713872434869947377">"Tidak ada koneksi"</string> + <string name="non_carrier_network_unavailable" msgid="770049357024492372">"Jaringan lain tidak tersedia"</string> + <string name="all_network_unavailable" msgid="4112774339909373349">"Jaringan tidak tersedia"</string> + <string name="turn_on_wifi" msgid="1308379840799281023">"Wi-Fi"</string> + <string name="pref_title_network_details" msgid="1639455355897668883">"Detail jaringan"</string> + <string name="tap_a_network_to_connect" msgid="1565073330852369558">"Ketuk jaringan untuk menghubungkan"</string> + <string name="unlock_to_view_networks" msgid="5072880496312015676">"Buka kunci untuk melihat jaringan"</string> + <string name="wifi_empty_list_wifi_on" msgid="3864376632067585377">"Mencari jaringan …"</string> + <string name="wifi_failed_connect_message" msgid="4161863112079000071">"Gagal menghubungkan ke jaringan"</string> + <string name="see_all_networks" msgid="3773666844913168122">"Lihat semua"</string> </resources> diff --git a/packages/SystemUI/res/values-is/strings.xml b/packages/SystemUI/res/values-is/strings.xml index e0ff373572f2..a9199da2c000 100644 --- a/packages/SystemUI/res/values-is/strings.xml +++ b/packages/SystemUI/res/values-is/strings.xml @@ -1162,4 +1162,19 @@ <string name="keyguard_try_fingerprint" msgid="2825130772993061165">"Opna með fingrafari"</string> <string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"Auðkenningar krafist. Auðkenndu með því að snerta fingrafaralesarann."</string> <string name="ongoing_phone_call_content_description" msgid="5332334388483099947">"Símtal í gangi"</string> + <string name="airplane_mode" msgid="2536350001462130668">"Flugstilling"</string> + <string name="mobile_data_settings_title" msgid="3955246641380064901">"Farsímagögn"</string> + <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> + <string name="mobile_data_connection_active" msgid="944490013299018227">"Tengt"</string> + <string name="mobile_data_off_summary" msgid="5621158216585822679">"Internetið tengist ekki sjálfkrafa"</string> + <string name="mobile_data_no_connection" msgid="1713872434869947377">"Engin tenging"</string> + <string name="non_carrier_network_unavailable" msgid="770049357024492372">"Engin önnur net í boði"</string> + <string name="all_network_unavailable" msgid="4112774339909373349">"Ekkert net í boði"</string> + <string name="turn_on_wifi" msgid="1308379840799281023">"Wi-Fi"</string> + <string name="pref_title_network_details" msgid="1639455355897668883">"Upplýsingar um net"</string> + <string name="tap_a_network_to_connect" msgid="1565073330852369558">"Ýttu á net til að tengjast"</string> + <string name="unlock_to_view_networks" msgid="5072880496312015676">"Taktu úr lás til að skoða netkerfi"</string> + <string name="wifi_empty_list_wifi_on" msgid="3864376632067585377">"Leitar að netum…"</string> + <string name="wifi_failed_connect_message" msgid="4161863112079000071">"Ekki tókst að tengjast neti"</string> + <string name="see_all_networks" msgid="3773666844913168122">"Sjá allt"</string> </resources> diff --git a/packages/SystemUI/res/values-it/strings.xml b/packages/SystemUI/res/values-it/strings.xml index 3d26cbbf41ca..9e66f823f7bd 100644 --- a/packages/SystemUI/res/values-it/strings.xml +++ b/packages/SystemUI/res/values-it/strings.xml @@ -1162,4 +1162,19 @@ <string name="keyguard_try_fingerprint" msgid="2825130772993061165">"Usa l\'impronta per aprire"</string> <string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"Autenticazione obbligatoria. Eseguila toccando il sensore di impronte digitali."</string> <string name="ongoing_phone_call_content_description" msgid="5332334388483099947">"Telefonata in corso"</string> + <string name="airplane_mode" msgid="2536350001462130668">"Modalità aereo"</string> + <string name="mobile_data_settings_title" msgid="3955246641380064901">"Dati mobili"</string> + <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g>/<xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> + <string name="mobile_data_connection_active" msgid="944490013299018227">"Connessione attiva"</string> + <string name="mobile_data_off_summary" msgid="5621158216585822679">"Internet non si connetterà automaticamente"</string> + <string name="mobile_data_no_connection" msgid="1713872434869947377">"Nessuna connessione"</string> + <string name="non_carrier_network_unavailable" msgid="770049357024492372">"Nessun\'altra rete disponibile"</string> + <string name="all_network_unavailable" msgid="4112774339909373349">"Nessuna rete disponibile"</string> + <string name="turn_on_wifi" msgid="1308379840799281023">"Wi‑Fi"</string> + <string name="pref_title_network_details" msgid="1639455355897668883">"Dettagli rete"</string> + <string name="tap_a_network_to_connect" msgid="1565073330852369558">"Tocca una rete per connetterti"</string> + <string name="unlock_to_view_networks" msgid="5072880496312015676">"Sblocca per visualizzare le reti"</string> + <string name="wifi_empty_list_wifi_on" msgid="3864376632067585377">"Ricerca di reti in corso…"</string> + <string name="wifi_failed_connect_message" msgid="4161863112079000071">"Connessione alla rete non riuscita"</string> + <string name="see_all_networks" msgid="3773666844913168122">"Mostra tutte"</string> </resources> diff --git a/packages/SystemUI/res/values-iw/strings.xml b/packages/SystemUI/res/values-iw/strings.xml index ed1ea366814f..1212b1a6d286 100644 --- a/packages/SystemUI/res/values-iw/strings.xml +++ b/packages/SystemUI/res/values-iw/strings.xml @@ -77,8 +77,7 @@ <string name="compat_mode_on" msgid="4963711187149440884">"הגדלת התצוגה למילוי המסך"</string> <string name="compat_mode_off" msgid="7682459748279487945">"מתיחה למילוי של המסך"</string> <string name="global_action_screenshot" msgid="2760267567509131654">"צילום מסך"</string> - <!-- no translation found for global_action_smart_lock_disabled (9097102067802412936) --> - <skip /> + <string name="global_action_smart_lock_disabled" msgid="9097102067802412936">"השבתת את Smart Lock"</string> <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"נשלחה תמונה"</string> <string name="screenshot_saving_ticker" msgid="6519186952674544916">"צילום המסך נשמר..."</string> <string name="screenshot_saving_title" msgid="2298349784913287333">"המערכת שומרת את צילום המסך..."</string> @@ -1175,4 +1174,19 @@ <string name="keyguard_try_fingerprint" msgid="2825130772993061165">"שימוש בטביעת אצבע כדי לפתוח"</string> <string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"נדרש אימות. יש לגעת בחיישן טביעות האצבע כדי לבצע אימות."</string> <string name="ongoing_phone_call_content_description" msgid="5332334388483099947">"מתקיימת שיחה"</string> + <string name="airplane_mode" msgid="2536350001462130668">"מצב טיסה"</string> + <string name="mobile_data_settings_title" msgid="3955246641380064901">"חבילת גלישה"</string> + <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> + <string name="mobile_data_connection_active" msgid="944490013299018227">"מחובר"</string> + <string name="mobile_data_off_summary" msgid="5621158216585822679">"לא ניתן להתחבר לאינטרנט באופן אוטומטי"</string> + <string name="mobile_data_no_connection" msgid="1713872434869947377">"אין חיבור"</string> + <string name="non_carrier_network_unavailable" msgid="770049357024492372">"אין רשתות זמינות אחרות"</string> + <string name="all_network_unavailable" msgid="4112774339909373349">"אין רשתות זמינות"</string> + <string name="turn_on_wifi" msgid="1308379840799281023">"Wi-Fi"</string> + <string name="pref_title_network_details" msgid="1639455355897668883">"פרטי הרשת"</string> + <string name="tap_a_network_to_connect" msgid="1565073330852369558">"צריך להקיש על רשת כדי להתחבר"</string> + <string name="unlock_to_view_networks" msgid="5072880496312015676">"צריך לבטל את הנעילה כדי להציג את הרשתות"</string> + <string name="wifi_empty_list_wifi_on" msgid="3864376632067585377">"בתהליך חיפוש רשתות…"</string> + <string name="wifi_failed_connect_message" msgid="4161863112079000071">"נכשל הניסיון להתחבר לרשת"</string> + <string name="see_all_networks" msgid="3773666844913168122">"הצגת הכול"</string> </resources> diff --git a/packages/SystemUI/res/values-ja/strings.xml b/packages/SystemUI/res/values-ja/strings.xml index 502f9625d6cd..4cf379724653 100644 --- a/packages/SystemUI/res/values-ja/strings.xml +++ b/packages/SystemUI/res/values-ja/strings.xml @@ -1162,4 +1162,19 @@ <string name="keyguard_try_fingerprint" msgid="2825130772993061165">"指紋を使って開いてください"</string> <string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"認証が必要です。指紋認証センサーをタッチして認証してください。"</string> <string name="ongoing_phone_call_content_description" msgid="5332334388483099947">"通話中"</string> + <string name="airplane_mode" msgid="2536350001462130668">"機内モード"</string> + <string name="mobile_data_settings_title" msgid="3955246641380064901">"モバイルデータ"</string> + <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> + <string name="mobile_data_connection_active" msgid="944490013299018227">"接続済み"</string> + <string name="mobile_data_off_summary" msgid="5621158216585822679">"インターネットに自動的に接続されません"</string> + <string name="mobile_data_no_connection" msgid="1713872434869947377">"接続なし"</string> + <string name="non_carrier_network_unavailable" msgid="770049357024492372">"利用できるネットワークはありません"</string> + <string name="all_network_unavailable" msgid="4112774339909373349">"ネットワークを利用できません"</string> + <string name="turn_on_wifi" msgid="1308379840799281023">"Wi-Fi"</string> + <string name="pref_title_network_details" msgid="1639455355897668883">"ネットワークの詳細"</string> + <string name="tap_a_network_to_connect" msgid="1565073330852369558">"ネットワークをタップして接続"</string> + <string name="unlock_to_view_networks" msgid="5072880496312015676">"ネットワークを表示するにはロック解除してください"</string> + <string name="wifi_empty_list_wifi_on" msgid="3864376632067585377">"ネットワークを検索しています…"</string> + <string name="wifi_failed_connect_message" msgid="4161863112079000071">"ネットワークに接続できませんでした"</string> + <string name="see_all_networks" msgid="3773666844913168122">"すべて表示"</string> </resources> diff --git a/packages/SystemUI/res/values-ka/strings.xml b/packages/SystemUI/res/values-ka/strings.xml index 38c59bff0edf..4e950201495b 100644 --- a/packages/SystemUI/res/values-ka/strings.xml +++ b/packages/SystemUI/res/values-ka/strings.xml @@ -1162,4 +1162,19 @@ <string name="keyguard_try_fingerprint" msgid="2825130772993061165">"გასახსნელად გამოიყენეთ თითის ანაბეჭდი"</string> <string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"საჭიროა ავტორიზაცია. ავტორიზაციისთვის შეეხეთ თითის ანაბეჭდის სენსორს."</string> <string name="ongoing_phone_call_content_description" msgid="5332334388483099947">"მიმდინარე სატელეფონო ზარი"</string> + <string name="airplane_mode" msgid="2536350001462130668">"თვითმფრინავის რეჟიმი"</string> + <string name="mobile_data_settings_title" msgid="3955246641380064901">"მობილური ინტერნეტი"</string> + <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> + <string name="mobile_data_connection_active" msgid="944490013299018227">"დაკავშირებული"</string> + <string name="mobile_data_off_summary" msgid="5621158216585822679">"ინტერნეტს ავტომატურად არ დაუკავშირდება"</string> + <string name="mobile_data_no_connection" msgid="1713872434869947377">"კავშირი არ არის"</string> + <string name="non_carrier_network_unavailable" msgid="770049357024492372">"სხვა ქსელები მიუწვდომელია"</string> + <string name="all_network_unavailable" msgid="4112774339909373349">"ქსელები მიუწვდომელია"</string> + <string name="turn_on_wifi" msgid="1308379840799281023">"Wi‑Fi"</string> + <string name="pref_title_network_details" msgid="1639455355897668883">"ქსელის დეტალები"</string> + <string name="tap_a_network_to_connect" msgid="1565073330852369558">"დასაკავშირებლად შეეხეთ ქსელს"</string> + <string name="unlock_to_view_networks" msgid="5072880496312015676">"განბლოკვა ქსელების სანახავად"</string> + <string name="wifi_empty_list_wifi_on" msgid="3864376632067585377">"მიმდინარეობს ქსელების ძიება…"</string> + <string name="wifi_failed_connect_message" msgid="4161863112079000071">"ქსელთან დაკავშირება ვერ ხერხდება"</string> + <string name="see_all_networks" msgid="3773666844913168122">"ყველას ნახვა"</string> </resources> diff --git a/packages/SystemUI/res/values-kk/strings.xml b/packages/SystemUI/res/values-kk/strings.xml index afb46e800aba..48760c587c15 100644 --- a/packages/SystemUI/res/values-kk/strings.xml +++ b/packages/SystemUI/res/values-kk/strings.xml @@ -1162,4 +1162,19 @@ <string name="keyguard_try_fingerprint" msgid="2825130772993061165">"Ашу үшін саусақ ізін пайдаланыңыз."</string> <string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"Аутентификациядан өту қажет. Ол үшін саусақ ізін оқу сканерін түртіңіз."</string> <string name="ongoing_phone_call_content_description" msgid="5332334388483099947">"Телефон қоңырауы бар"</string> + <string name="airplane_mode" msgid="2536350001462130668">"Ұшақ режимі"</string> + <string name="mobile_data_settings_title" msgid="3955246641380064901">"Мобильдік интернет"</string> + <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g>/<xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> + <string name="mobile_data_connection_active" msgid="944490013299018227">"Жалғанды"</string> + <string name="mobile_data_off_summary" msgid="5621158216585822679">"Интернет автоматты түрде қосылмайды."</string> + <string name="mobile_data_no_connection" msgid="1713872434869947377">"Байланыс жоқ"</string> + <string name="non_carrier_network_unavailable" msgid="770049357024492372">"Басқа қолжетімді желі жоқ"</string> + <string name="all_network_unavailable" msgid="4112774339909373349">"Қолжетімді желілер жоқ"</string> + <string name="turn_on_wifi" msgid="1308379840799281023">"Wi-Fi"</string> + <string name="pref_title_network_details" msgid="1639455355897668883">"Желі деректері"</string> + <string name="tap_a_network_to_connect" msgid="1565073330852369558">"Желіге қосылу үшін оны түртіңіз."</string> + <string name="unlock_to_view_networks" msgid="5072880496312015676">"Желілерді көру үшін құлыпты ашыңыз."</string> + <string name="wifi_empty_list_wifi_on" msgid="3864376632067585377">"Маңайдағы желілер ізделуде…"</string> + <string name="wifi_failed_connect_message" msgid="4161863112079000071">"Желіге қосылмады."</string> + <string name="see_all_networks" msgid="3773666844913168122">"Барлығын көру"</string> </resources> diff --git a/packages/SystemUI/res/values-km/strings.xml b/packages/SystemUI/res/values-km/strings.xml index 9f4ddf3a6a93..6bed3d73e4a0 100644 --- a/packages/SystemUI/res/values-km/strings.xml +++ b/packages/SystemUI/res/values-km/strings.xml @@ -1162,4 +1162,19 @@ <string name="keyguard_try_fingerprint" msgid="2825130772993061165">"ប្រើស្នាមម្រាមដៃ ដើម្បីបើក"</string> <string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"តម្រូវឱ្យមានការផ្ទៀងផ្ទាត់។ សូមចុចឧបករណ៍ចាប់ស្នាមម្រាមដៃ ដើម្បីផ្ទៀងផ្ទាត់។"</string> <string name="ongoing_phone_call_content_description" msgid="5332334388483099947">"ការហៅទូរសព្ទដែលកំពុងដំណើរការ"</string> + <string name="airplane_mode" msgid="2536350001462130668">"ពេលជិះយន្តហោះ"</string> + <string name="mobile_data_settings_title" msgid="3955246641380064901">"ទិន្នន័យទូរសព្ទចល័ត"</string> + <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> + <string name="mobile_data_connection_active" msgid="944490013299018227">"បានភ្ជាប់"</string> + <string name="mobile_data_off_summary" msgid="5621158216585822679">"អ៊ីនធឺណិតនឹងមិនភ្ជាប់ដោយស្វ័យប្រវត្តិទេ"</string> + <string name="mobile_data_no_connection" msgid="1713872434869947377">"មិនមានការតភ្ជាប់ទេ"</string> + <string name="non_carrier_network_unavailable" msgid="770049357024492372">"មិនមានបណ្ដាញផ្សេងទៀតដែលអាចប្រើបានទេ"</string> + <string name="all_network_unavailable" msgid="4112774339909373349">"មិនមានបណ្ដាញដែលអាចប្រើបានទេ"</string> + <string name="turn_on_wifi" msgid="1308379840799281023">"Wi‑Fi"</string> + <string name="pref_title_network_details" msgid="1639455355897668883">"ព័ត៌មានលម្អិតអំពីបណ្ដាញ"</string> + <string name="tap_a_network_to_connect" msgid="1565073330852369558">"ចុចលើបណ្ដាញណាមួយ ដើម្បីភ្ជាប់"</string> + <string name="unlock_to_view_networks" msgid="5072880496312015676">"ដោះសោដើម្បីមើលបណ្ដាញ"</string> + <string name="wifi_empty_list_wifi_on" msgid="3864376632067585377">"កំពុងស្វែងរកបណ្ដាញ…"</string> + <string name="wifi_failed_connect_message" msgid="4161863112079000071">"មិនអាចភ្ជាប់បណ្ដាញបានទេ"</string> + <string name="see_all_networks" msgid="3773666844913168122">"មើលទាំងអស់"</string> </resources> diff --git a/packages/SystemUI/res/values-kn/strings.xml b/packages/SystemUI/res/values-kn/strings.xml index 36d3d7d79c20..c0f74d5d92ef 100644 --- a/packages/SystemUI/res/values-kn/strings.xml +++ b/packages/SystemUI/res/values-kn/strings.xml @@ -77,8 +77,7 @@ <string name="compat_mode_on" msgid="4963711187149440884">"ಪರದೆ ತುಂಬಿಸಲು ಝೂಮ್ ಮಾಡು"</string> <string name="compat_mode_off" msgid="7682459748279487945">"ಪರದೆ ತುಂಬಿಸಲು ವಿಸ್ತಾರಗೊಳಿಸು"</string> <string name="global_action_screenshot" msgid="2760267567509131654">"ಸ್ಕ್ರೀನ್ಶಾಟ್"</string> - <!-- no translation found for global_action_smart_lock_disabled (9097102067802412936) --> - <skip /> + <string name="global_action_smart_lock_disabled" msgid="9097102067802412936">"Smart Lock ಅನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ"</string> <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"ಚಿತ್ರವನ್ನು ಕಳುಹಿಸಲಾಗಿದೆ"</string> <string name="screenshot_saving_ticker" msgid="6519186952674544916">"ಸ್ಕ್ರೀನ್ಶಾಟ್ ಉಳಿಸಲಾಗುತ್ತಿದೆ…"</string> <string name="screenshot_saving_title" msgid="2298349784913287333">"ಸ್ಕ್ರೀನ್ಶಾಟ್ ಉಳಿಸಲಾಗುತ್ತಿದೆ…"</string> @@ -134,7 +133,7 @@ <string name="accessibility_accessibility_button" msgid="4089042473497107709">"ಪ್ರವೇಶಿಸುವಿಕೆ"</string> <string name="accessibility_rotate_button" msgid="1238584767612362586">"ಪರದೆಯನ್ನು ತಿರುಗಿಸಿ"</string> <string name="accessibility_recent" msgid="901641734769533575">"ಸಮಗ್ರ ನೋಟ"</string> - <string name="accessibility_search_light" msgid="524741790416076988">"Search"</string> + <string name="accessibility_search_light" msgid="524741790416076988">"ಹುಡುಕಿ"</string> <string name="accessibility_camera_button" msgid="2938898391716647247">"ಕ್ಯಾಮರಾ"</string> <string name="accessibility_phone_button" msgid="4256353121703100427">"ಫೋನ್"</string> <string name="accessibility_voice_assist_button" msgid="6497706615649754510">"ಧ್ವನಿ ಸಹಾಯಕ"</string> @@ -443,7 +442,7 @@ <string name="expanded_header_battery_charging_with_time" msgid="757991461445765011">"<xliff:g id="CHARGING_TIME">%s</xliff:g> ಪೂರ್ಣಗೊಳ್ಳುವವರೆಗೆ"</string> <string name="expanded_header_battery_not_charging" msgid="809409140358955848">"ಚಾರ್ಜ್ ಆಗುತ್ತಿಲ್ಲ"</string> <string name="ssl_ca_cert_warning" msgid="8373011375250324005">"ನೆಟ್ವರ್ಕ್\n ವೀಕ್ಷಿಸಬಹುದಾಗಿರುತ್ತದೆ"</string> - <string name="description_target_search" msgid="3875069993128855865">"Search"</string> + <string name="description_target_search" msgid="3875069993128855865">"ಹುಡುಕಿ"</string> <string name="description_direction_up" msgid="3632251507574121434">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> ಗಾಗಿ ಮೇಲಕ್ಕೆ ಸ್ಲೈಡ್ ಮಾಡಿ."</string> <string name="description_direction_left" msgid="4762708739096907741">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> ಗಾಗಿ ಎಡಕ್ಕೆ ಸ್ಲೈಡ್ ಮಾಡಿ."</string> <string name="zen_priority_introduction" msgid="3159291973383796646">"ಅಲಾರಾಂಗಳು, ಜ್ಞಾಪನೆಗಳು, ಈವೆಂಟ್ಗಳು ಹಾಗೂ ನೀವು ಸೂಚಿಸಿರುವ ಕರೆದಾರರನ್ನು ಹೊರತುಪಡಿಸಿ ಬೇರಾವುದೇ ಸದ್ದುಗಳು ಅಥವಾ ವೈಬ್ರೇಶನ್ಗಳು ನಿಮಗೆ ತೊಂದರೆ ನೀಡುವುದಿಲ್ಲ. ಹಾಗಿದ್ದರೂ, ನೀವು ಪ್ಲೇ ಮಾಡುವ ಸಂಗೀತ, ವೀಡಿಯೊಗಳು ಮತ್ತು ಆಟಗಳ ಆಡಿಯೊವನ್ನು ನೀವು ಕೇಳಿಸಿಕೊಳ್ಳುತ್ತೀರಿ."</string> @@ -1163,4 +1162,19 @@ <string name="keyguard_try_fingerprint" msgid="2825130772993061165">"ತೆರೆಯುವುದಕ್ಕಾಗಿ ಫಿಂಗರ್ಪ್ರಿಂಟ್ ಅನ್ನು ಬಳಸಿ"</string> <string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"ದೃಢೀಕರಣದ ಅವಶ್ಯಕತೆಯಿದೆ. ದೃಢೀಕರಿಸಲು ಫಿಂಗರ್ಪ್ರಿಂಟ್ ಸೆನ್ಸರ್ ಅನ್ನು ಸ್ಪರ್ಶಿಸಿ."</string> <string name="ongoing_phone_call_content_description" msgid="5332334388483099947">"ಚಾಲ್ತಿಯಲ್ಲಿರುವ ಫೋನ್ ಕರೆ"</string> + <string name="airplane_mode" msgid="2536350001462130668">"ಏರ್ಪ್ಲೇನ್ ಮೋಡ್"</string> + <string name="mobile_data_settings_title" msgid="3955246641380064901">"ಮೊಬೈಲ್ ಡೇಟಾ"</string> + <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> + <string name="mobile_data_connection_active" msgid="944490013299018227">"ಕನೆಕ್ಟ್ ಆಗಿದೆ"</string> + <string name="mobile_data_off_summary" msgid="5621158216585822679">"ಇಂಟರ್ನೆಟ್ ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಕನೆಕ್ಟ್ ಆಗುವುದಿಲ್ಲ"</string> + <string name="mobile_data_no_connection" msgid="1713872434869947377">"ಯಾವುದೇ ಕನೆಕ್ಷನ್ ಇಲ್ಲ"</string> + <string name="non_carrier_network_unavailable" msgid="770049357024492372">"ಇತರ ಯಾವುದೇ ನೆಟ್ವರ್ಕ್ಗಳು ಲಭ್ಯವಿಲ್ಲ"</string> + <string name="all_network_unavailable" msgid="4112774339909373349">"ಯಾವುದೇ ನೆಟ್ವರ್ಕ್ಗಳು ಲಭ್ಯವಿಲ್ಲ"</string> + <string name="turn_on_wifi" msgid="1308379840799281023">"ವೈ‑ಫೈ"</string> + <string name="pref_title_network_details" msgid="1639455355897668883">"ನೆಟ್ವರ್ಕ್ ವಿವರಗಳು"</string> + <string name="tap_a_network_to_connect" msgid="1565073330852369558">"ಕನೆಕ್ಟ್ ಮಾಡಲು ಒಂದು ನೆಟ್ವರ್ಕ್ ಅನ್ನು ಟ್ಯಾಪ್ ಮಾಡಿ"</string> + <string name="unlock_to_view_networks" msgid="5072880496312015676">"ನೆಟ್ವರ್ಕ್ಗಳನ್ನು ವೀಕ್ಷಿಸಲು ಅನ್ಲಾಕ್ ಮಾಡಿ"</string> + <string name="wifi_empty_list_wifi_on" msgid="3864376632067585377">"ನೆಟ್ವರ್ಕ್ಗಳನ್ನು ಹುಡುಕಲಾಗುತ್ತಿದೆ…"</string> + <string name="wifi_failed_connect_message" msgid="4161863112079000071">"ನೆಟ್ವರ್ಕ್ಗೆ ಕನೆಕ್ಟ್ ಮಾಡಲು ವಿಫಲವಾಗಿದೆ"</string> + <string name="see_all_networks" msgid="3773666844913168122">"ಎಲ್ಲವನ್ನೂ ನೋಡಿ"</string> </resources> diff --git a/packages/SystemUI/res/values-ko/strings.xml b/packages/SystemUI/res/values-ko/strings.xml index a846bc1fc23a..d23d2a942173 100644 --- a/packages/SystemUI/res/values-ko/strings.xml +++ b/packages/SystemUI/res/values-ko/strings.xml @@ -1162,4 +1162,19 @@ <string name="keyguard_try_fingerprint" msgid="2825130772993061165">"지문으로 열기"</string> <string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"인증이 필요합니다. 지문 센서를 터치하여 인증하세요."</string> <string name="ongoing_phone_call_content_description" msgid="5332334388483099947">"진행 중인 전화 통화"</string> + <string name="airplane_mode" msgid="2536350001462130668">"비행기 모드"</string> + <string name="mobile_data_settings_title" msgid="3955246641380064901">"모바일 데이터"</string> + <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g>/<xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> + <string name="mobile_data_connection_active" msgid="944490013299018227">"연결됨"</string> + <string name="mobile_data_off_summary" msgid="5621158216585822679">"인터넷에 자동으로 연결되지 않음"</string> + <string name="mobile_data_no_connection" msgid="1713872434869947377">"연결되지 않음"</string> + <string name="non_carrier_network_unavailable" msgid="770049357024492372">"사용 가능한 다른 네트워크가 없음"</string> + <string name="all_network_unavailable" msgid="4112774339909373349">"사용 가능한 네트워크가 없음"</string> + <string name="turn_on_wifi" msgid="1308379840799281023">"Wi-Fi"</string> + <string name="pref_title_network_details" msgid="1639455355897668883">"네트워크 세부정보"</string> + <string name="tap_a_network_to_connect" msgid="1565073330852369558">"연결하려면 네트워크를 탭하세요"</string> + <string name="unlock_to_view_networks" msgid="5072880496312015676">"네트워크를 보려면 잠금 해제하세요"</string> + <string name="wifi_empty_list_wifi_on" msgid="3864376632067585377">"네트워크 검색 중…"</string> + <string name="wifi_failed_connect_message" msgid="4161863112079000071">"네트워크에 연결하지 못했습니다."</string> + <string name="see_all_networks" msgid="3773666844913168122">"모두 보기"</string> </resources> diff --git a/packages/SystemUI/res/values-ky/strings.xml b/packages/SystemUI/res/values-ky/strings.xml index 124dc53e1dcd..46e9499a0f1f 100644 --- a/packages/SystemUI/res/values-ky/strings.xml +++ b/packages/SystemUI/res/values-ky/strings.xml @@ -1162,4 +1162,19 @@ <string name="keyguard_try_fingerprint" msgid="2825130772993061165">"Манжаңыздын изи менен ачыңыз"</string> <string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"Аныктыкты текшерүү талап кылынат. Аныктыгын текшерүү үчүн манжа изинин сенсоруна тийип коюңуз."</string> <string name="ongoing_phone_call_content_description" msgid="5332334388483099947">"Учурдагы телефон чалуу"</string> + <string name="airplane_mode" msgid="2536350001462130668">"Учак режими"</string> + <string name="mobile_data_settings_title" msgid="3955246641380064901">"Мобилдик трафик"</string> + <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> + <string name="mobile_data_connection_active" msgid="944490013299018227">"Туташты"</string> + <string name="mobile_data_off_summary" msgid="5621158216585822679">"Интернет автоматтык түрдө туташпайт"</string> + <string name="mobile_data_no_connection" msgid="1713872434869947377">"Байланыш жок"</string> + <string name="non_carrier_network_unavailable" msgid="770049357024492372">"Башка тармактар жеткиликсиз"</string> + <string name="all_network_unavailable" msgid="4112774339909373349">"Тармактар жеткиликтүү эмес"</string> + <string name="turn_on_wifi" msgid="1308379840799281023">"Wi‑Fi"</string> + <string name="pref_title_network_details" msgid="1639455355897668883">"Тармактын чоо-жайы"</string> + <string name="tap_a_network_to_connect" msgid="1565073330852369558">"Кайсы тармакка туташасыз?"</string> + <string name="unlock_to_view_networks" msgid="5072880496312015676">"Тармактарды көрүү үчүн кулпусун ачыңыз"</string> + <string name="wifi_empty_list_wifi_on" msgid="3864376632067585377">"Тармактар изделүүдө…"</string> + <string name="wifi_failed_connect_message" msgid="4161863112079000071">"Тармакка туташпай калды"</string> + <string name="see_all_networks" msgid="3773666844913168122">"Баарын көрүү"</string> </resources> diff --git a/packages/SystemUI/res/values-lo/strings.xml b/packages/SystemUI/res/values-lo/strings.xml index c27394c79bc3..7833ccaf7466 100644 --- a/packages/SystemUI/res/values-lo/strings.xml +++ b/packages/SystemUI/res/values-lo/strings.xml @@ -1162,4 +1162,19 @@ <string name="keyguard_try_fingerprint" msgid="2825130772993061165">"ໃຊ້ລາຍນິ້ວມືເພື່ອເປີດ"</string> <string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"ຕ້ອງພິສູດຢືນຢັນ. ແຕະໃສ່ເຊັນເຊີລາຍນິ້ວມືເພື່ອພິສູດຢືນຢັນ."</string> <string name="ongoing_phone_call_content_description" msgid="5332334388483099947">"ສາຍໂທອອກ"</string> + <string name="airplane_mode" msgid="2536350001462130668">"ໂໝດຢູ່ໃນຍົນ"</string> + <string name="mobile_data_settings_title" msgid="3955246641380064901">"ອິນເຕີເນັດມືຖື"</string> + <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> + <string name="mobile_data_connection_active" msgid="944490013299018227">"ເຊື່ອມຕໍ່ແລ້ວ"</string> + <string name="mobile_data_off_summary" msgid="5621158216585822679">"ຈະບໍ່ເຊື່ອມຕໍ່ອິນເຕີເນັດອັດຕະໂນມັດ"</string> + <string name="mobile_data_no_connection" msgid="1713872434869947377">"ບໍ່ມີການເຊື່ອມຕໍ່"</string> + <string name="non_carrier_network_unavailable" msgid="770049357024492372">"ບໍ່ມີເຄືອຂ່າຍອື່ນທີ່ສາມາດໃຊ້ໄດ້"</string> + <string name="all_network_unavailable" msgid="4112774339909373349">"ບໍ່ມີເຄືອຂ່າຍທີ່ສາມາດໃຊ້ໄດ້"</string> + <string name="turn_on_wifi" msgid="1308379840799281023">"Wi-Fi"</string> + <string name="pref_title_network_details" msgid="1639455355897668883">"ລາຍລະອຽດເຄືອຂ່າຍ"</string> + <string name="tap_a_network_to_connect" msgid="1565073330852369558">"ແຕະເຄືອຂ່າຍໃດໜຶ່ງເພື່ອເຊື່ອມຕໍ່"</string> + <string name="unlock_to_view_networks" msgid="5072880496312015676">"ປົດລັອກເພື່ອເບິ່ງເຄືອຂ່າຍ"</string> + <string name="wifi_empty_list_wifi_on" msgid="3864376632067585377">"ກຳລັງຊອກຫາເຄືອຂ່າຍ…"</string> + <string name="wifi_failed_connect_message" msgid="4161863112079000071">"ເຊື່ອມຕໍ່ເຄືອຂ່າຍບໍ່ສຳເລັດ"</string> + <string name="see_all_networks" msgid="3773666844913168122">"ເບິ່ງທັງໝົດ"</string> </resources> diff --git a/packages/SystemUI/res/values-lt/strings.xml b/packages/SystemUI/res/values-lt/strings.xml index a1cd602417f0..347e3e8040e3 100644 --- a/packages/SystemUI/res/values-lt/strings.xml +++ b/packages/SystemUI/res/values-lt/strings.xml @@ -1174,4 +1174,19 @@ <string name="keyguard_try_fingerprint" msgid="2825130772993061165">"Naudokite kontrolinį kodą, kad atidarytumėte"</string> <string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"Reikia nustatyti tapatybę. Nustatykite tapatybę palietę kontrolinio kodo jutiklį."</string> <string name="ongoing_phone_call_content_description" msgid="5332334388483099947">"Vykstantis telefono skambutis"</string> + <string name="airplane_mode" msgid="2536350001462130668">"Lėktuvo režimas"</string> + <string name="mobile_data_settings_title" msgid="3955246641380064901">"Mobiliojo ryšio duomenys"</string> + <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> + <string name="mobile_data_connection_active" msgid="944490013299018227">"Prisijungta"</string> + <string name="mobile_data_off_summary" msgid="5621158216585822679">"Prie interneto nebus jungiamasi automatiškai"</string> + <string name="mobile_data_no_connection" msgid="1713872434869947377">"Nėra ryšio"</string> + <string name="non_carrier_network_unavailable" msgid="770049357024492372">"Nėra kitų pasiekiamų tinklų"</string> + <string name="all_network_unavailable" msgid="4112774339909373349">"Nėra pasiekiamų tinklų"</string> + <string name="turn_on_wifi" msgid="1308379840799281023">"Wi-Fi"</string> + <string name="pref_title_network_details" msgid="1639455355897668883">"Išsami tinklo informacija"</string> + <string name="tap_a_network_to_connect" msgid="1565073330852369558">"Palieskite tinklą, kad prisijungtumėte"</string> + <string name="unlock_to_view_networks" msgid="5072880496312015676">"Atrakinkite, kad peržiūrėtumėte visus tinklus"</string> + <string name="wifi_empty_list_wifi_on" msgid="3864376632067585377">"Ieškoma tinklų…"</string> + <string name="wifi_failed_connect_message" msgid="4161863112079000071">"Jungiantis prie tinklo įvyko klaida"</string> + <string name="see_all_networks" msgid="3773666844913168122">"Žiūrėti viską"</string> </resources> diff --git a/packages/SystemUI/res/values-lv/strings.xml b/packages/SystemUI/res/values-lv/strings.xml index b0da7f75c64c..8b31382b2e0c 100644 --- a/packages/SystemUI/res/values-lv/strings.xml +++ b/packages/SystemUI/res/values-lv/strings.xml @@ -1168,4 +1168,19 @@ <string name="keyguard_try_fingerprint" msgid="2825130772993061165">"Atvēršanai izmantojiet pirksta nospiedumu"</string> <string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"Nepieciešama autentifikācija. Pieskarieties pirksta nospieduma sensoram, lai veiktu autentificēšanu."</string> <string name="ongoing_phone_call_content_description" msgid="5332334388483099947">"Notiekošs tālruņa zvans"</string> + <string name="airplane_mode" msgid="2536350001462130668">"Lidojuma režīms"</string> + <string name="mobile_data_settings_title" msgid="3955246641380064901">"Mobilie dati"</string> + <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g>/<xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> + <string name="mobile_data_connection_active" msgid="944490013299018227">"Ir izveidots savienojums"</string> + <string name="mobile_data_off_summary" msgid="5621158216585822679">"Interneta savienojums netiks izveidots automātiski"</string> + <string name="mobile_data_no_connection" msgid="1713872434869947377">"Nav savienojuma"</string> + <string name="non_carrier_network_unavailable" msgid="770049357024492372">"Nav pieejams neviens cits tīkls"</string> + <string name="all_network_unavailable" msgid="4112774339909373349">"Nav pieejams neviens tīkls"</string> + <string name="turn_on_wifi" msgid="1308379840799281023">"Wi-Fi"</string> + <string name="pref_title_network_details" msgid="1639455355897668883">"Dati par tīklu"</string> + <string name="tap_a_network_to_connect" msgid="1565073330852369558">"Pieskarieties tīklam, lai izveidotu savienojumu"</string> + <string name="unlock_to_view_networks" msgid="5072880496312015676">"Lai skatītu tīklus, atbloķējiet"</string> + <string name="wifi_empty_list_wifi_on" msgid="3864376632067585377">"Notiek tīklu meklēšana…"</string> + <string name="wifi_failed_connect_message" msgid="4161863112079000071">"Neizdevās izveidot savienojumu ar tīklu"</string> + <string name="see_all_networks" msgid="3773666844913168122">"Visu tīklu skatīšana"</string> </resources> diff --git a/packages/SystemUI/res/values-mk/strings.xml b/packages/SystemUI/res/values-mk/strings.xml index bee9bffc74c3..9315aee102e8 100644 --- a/packages/SystemUI/res/values-mk/strings.xml +++ b/packages/SystemUI/res/values-mk/strings.xml @@ -1162,4 +1162,19 @@ <string name="keyguard_try_fingerprint" msgid="2825130772993061165">"Користете отпечаток за да се отвори"</string> <string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"Потребна е проверка. Допрете го сензорот за отпечаток за да автентицирате."</string> <string name="ongoing_phone_call_content_description" msgid="5332334388483099947">"Тековен телефонски повик"</string> + <string name="airplane_mode" msgid="2536350001462130668">"Авионски режим"</string> + <string name="mobile_data_settings_title" msgid="3955246641380064901">"Мобилен интернет"</string> + <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g>/<xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> + <string name="mobile_data_connection_active" msgid="944490013299018227">"Поврзано"</string> + <string name="mobile_data_off_summary" msgid="5621158216585822679">"Не може автоматски да се поврзе на интернет"</string> + <string name="mobile_data_no_connection" msgid="1713872434869947377">"Нема интернет-врска"</string> + <string name="non_carrier_network_unavailable" msgid="770049357024492372">"Нема други достапни мрежи"</string> + <string name="all_network_unavailable" msgid="4112774339909373349">"Нема достапни мрежи"</string> + <string name="turn_on_wifi" msgid="1308379840799281023">"Wi-Fi"</string> + <string name="pref_title_network_details" msgid="1639455355897668883">"Детали за мрежата"</string> + <string name="tap_a_network_to_connect" msgid="1565073330852369558">"Допрете на мрежа за да се поврзете"</string> + <string name="unlock_to_view_networks" msgid="5072880496312015676">"Отклучете за да се прикажат мрежите"</string> + <string name="wifi_empty_list_wifi_on" msgid="3864376632067585377">"Се пребаруваат мрежи…"</string> + <string name="wifi_failed_connect_message" msgid="4161863112079000071">"Не успеа да се поврзе на мрежата"</string> + <string name="see_all_networks" msgid="3773666844913168122">"Прикажи ги сите"</string> </resources> diff --git a/packages/SystemUI/res/values-ml/strings.xml b/packages/SystemUI/res/values-ml/strings.xml index 061f43c30302..173a6ee0b041 100644 --- a/packages/SystemUI/res/values-ml/strings.xml +++ b/packages/SystemUI/res/values-ml/strings.xml @@ -133,7 +133,7 @@ <string name="accessibility_accessibility_button" msgid="4089042473497107709">"ഉപയോഗസഹായി"</string> <string name="accessibility_rotate_button" msgid="1238584767612362586">"സ്ക്രീൻ തിരിക്കുക"</string> <string name="accessibility_recent" msgid="901641734769533575">"അവലോകനം"</string> - <string name="accessibility_search_light" msgid="524741790416076988">"Search"</string> + <string name="accessibility_search_light" msgid="524741790416076988">"തിരയൽ"</string> <string name="accessibility_camera_button" msgid="2938898391716647247">"ക്യാമറ"</string> <string name="accessibility_phone_button" msgid="4256353121703100427">"ഫോണ്"</string> <string name="accessibility_voice_assist_button" msgid="6497706615649754510">"വോയ്സ് സഹായം"</string> @@ -442,7 +442,7 @@ <string name="expanded_header_battery_charging_with_time" msgid="757991461445765011">"ഫുൾ ചാർജാകാൻ, <xliff:g id="CHARGING_TIME">%s</xliff:g>"</string> <string name="expanded_header_battery_not_charging" msgid="809409140358955848">"ചാർജ്ജുചെയ്യുന്നില്ല"</string> <string name="ssl_ca_cert_warning" msgid="8373011375250324005">"നെറ്റ്വർക്ക്\nനിരീക്ഷിക്കപ്പെടാം"</string> - <string name="description_target_search" msgid="3875069993128855865">"Search"</string> + <string name="description_target_search" msgid="3875069993128855865">"തിരയൽ"</string> <string name="description_direction_up" msgid="3632251507574121434">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> എന്നതിനായി മുകളിലേയ്ക്ക് സ്ലൈഡുചെയ്യുക."</string> <string name="description_direction_left" msgid="4762708739096907741">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> എന്നതിനായി ഇടത്തേയ്ക്ക് സ്ലൈഡുചെയ്യുക."</string> <string name="zen_priority_introduction" msgid="3159291973383796646">"നിങ്ങൾ സജ്ജീകരിച്ച അലാറങ്ങൾ, റിമൈൻഡറുകൾ, ഇവന്റുകൾ, കോളർമാർ എന്നിവയിൽ നിന്നുള്ള ശബ്ദങ്ങളും വൈബ്രേഷനുകളുമൊഴികെ മറ്റൊന്നും നിങ്ങളെ ശല്യപ്പെടുത്തുകയില്ല. സംഗീതം, വീഡിയോകൾ, ഗെയിമുകൾ എന്നിവയുൾപ്പെടെ പ്ലേ ചെയ്യുന്നതെന്തും നിങ്ങൾക്ക് തുടർന്നും കേൾക്കാൻ കഴിയും."</string> @@ -1162,4 +1162,19 @@ <string name="keyguard_try_fingerprint" msgid="2825130772993061165">"തുറക്കുന്നതിന് നിങ്ങളുടെ ഫിംഗർപ്രിന്റ് ഉപയോഗിക്കുക"</string> <string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"പരിശോധിച്ചുറപ്പിക്കേണ്ടതുണ്ട്. പരിശോധിച്ചുറപ്പിക്കാൻ, വിരലടയാള സെൻസറിൽ സ്പർശിക്കുക."</string> <string name="ongoing_phone_call_content_description" msgid="5332334388483099947">"സജീവമായ ഫോൺ കോൾ"</string> + <string name="airplane_mode" msgid="2536350001462130668">"ഫ്ലൈറ്റ് മോഡ്"</string> + <string name="mobile_data_settings_title" msgid="3955246641380064901">"മൊബൈൽ ഡാറ്റ"</string> + <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> + <string name="mobile_data_connection_active" msgid="944490013299018227">"കണക്റ്റ് ചെയ്തു"</string> + <string name="mobile_data_off_summary" msgid="5621158216585822679">"ഇന്റർനെറ്റ് സ്വയമേവ കണക്റ്റ് ചെയ്യില്ല"</string> + <string name="mobile_data_no_connection" msgid="1713872434869947377">"കണക്ഷനില്ല"</string> + <string name="non_carrier_network_unavailable" msgid="770049357024492372">"മറ്റ് നെറ്റ്വർക്കുകളൊന്നും ലഭ്യമല്ല"</string> + <string name="all_network_unavailable" msgid="4112774339909373349">"നെറ്റ്വർക്കുകളൊന്നും ലഭ്യമല്ല"</string> + <string name="turn_on_wifi" msgid="1308379840799281023">"വൈഫൈ"</string> + <string name="pref_title_network_details" msgid="1639455355897668883">"നെറ്റ്വർക്ക് വിശദാംശങ്ങൾ"</string> + <string name="tap_a_network_to_connect" msgid="1565073330852369558">"കണക്റ്റ് ചെയ്യാൻ ഒരു നെറ്റ്വർക്കിൽ ടാപ്പ് ചെയ്യുക"</string> + <string name="unlock_to_view_networks" msgid="5072880496312015676">"നെറ്റ്വർക്കുകൾ കാണാൻ അൺലോക്ക് ചെയ്യുക"</string> + <string name="wifi_empty_list_wifi_on" msgid="3864376632067585377">"നെറ്റ്വർക്കുകൾ തിരയുന്നു…"</string> + <string name="wifi_failed_connect_message" msgid="4161863112079000071">"നെറ്റ്വർക്കിൽ കണക്റ്റ് ചെയ്യാനായില്ല"</string> + <string name="see_all_networks" msgid="3773666844913168122">"എല്ലാം കാണുക"</string> </resources> diff --git a/packages/SystemUI/res/values-mn/strings.xml b/packages/SystemUI/res/values-mn/strings.xml index 8bf0dbc001cb..3e2b36e894a7 100644 --- a/packages/SystemUI/res/values-mn/strings.xml +++ b/packages/SystemUI/res/values-mn/strings.xml @@ -1162,4 +1162,19 @@ <string name="keyguard_try_fingerprint" msgid="2825130772993061165">"Нээхийн тулд хурууны хээг ашиглана уу"</string> <string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"Баталгаажуулалт шаардлагатай. Баталгаажуулахын тулд хурууны хээ мэдрэгчид хүрнэ үү."</string> <string name="ongoing_phone_call_content_description" msgid="5332334388483099947">"Үргэлжилж буй утасны дуудлага"</string> + <string name="airplane_mode" msgid="2536350001462130668">"Нислэгийн горим"</string> + <string name="mobile_data_settings_title" msgid="3955246641380064901">"Мобайл дата"</string> + <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> + <string name="mobile_data_connection_active" msgid="944490013299018227">"Холбогдсон"</string> + <string name="mobile_data_off_summary" msgid="5621158216585822679">"Интернэт автоматаар холбогдохгүй"</string> + <string name="mobile_data_no_connection" msgid="1713872434869947377">"Холболт алга"</string> + <string name="non_carrier_network_unavailable" msgid="770049357024492372">"Өөр боломжтой сүлжээ байхгүй байна"</string> + <string name="all_network_unavailable" msgid="4112774339909373349">"Боломжтой сүлжээ байхгүй байна"</string> + <string name="turn_on_wifi" msgid="1308379840799281023">"Wi‑Fi"</string> + <string name="pref_title_network_details" msgid="1639455355897668883">"Сүлжээний дэлгэрэнгүй мэдээлэл"</string> + <string name="tap_a_network_to_connect" msgid="1565073330852369558">"Холбогдохын тулд сүлжээг товшино уу"</string> + <string name="unlock_to_view_networks" msgid="5072880496312015676">"Сүлжээг харахын тулд түгжээг тайлах"</string> + <string name="wifi_empty_list_wifi_on" msgid="3864376632067585377">"Сүлжээ хайж байна…"</string> + <string name="wifi_failed_connect_message" msgid="4161863112079000071">"Сүлжээнд холбогдож чадсангүй"</string> + <string name="see_all_networks" msgid="3773666844913168122">"Бүгдийг харах"</string> </resources> diff --git a/packages/SystemUI/res/values-mr/strings.xml b/packages/SystemUI/res/values-mr/strings.xml index 7d2372936d76..f00125357a3d 100644 --- a/packages/SystemUI/res/values-mr/strings.xml +++ b/packages/SystemUI/res/values-mr/strings.xml @@ -77,8 +77,7 @@ <string name="compat_mode_on" msgid="4963711187149440884">"स्क्रीन भरण्यासाठी झूम करा"</string> <string name="compat_mode_off" msgid="7682459748279487945">"स्क्रीन भरण्यासाठी ताणा"</string> <string name="global_action_screenshot" msgid="2760267567509131654">"स्क्रीनशॉट"</string> - <!-- no translation found for global_action_smart_lock_disabled (9097102067802412936) --> - <skip /> + <string name="global_action_smart_lock_disabled" msgid="9097102067802412936">"Smart Lock बंद केले"</string> <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"इमेज पाठवली आहे"</string> <string name="screenshot_saving_ticker" msgid="6519186952674544916">"स्क्रीनशॉट सेव्ह करत आहे…"</string> <string name="screenshot_saving_title" msgid="2298349784913287333">"स्क्रीनशॉट सेव्ह करत आहे…"</string> @@ -134,7 +133,7 @@ <string name="accessibility_accessibility_button" msgid="4089042473497107709">"अॅक्सेसिबिलिटी"</string> <string name="accessibility_rotate_button" msgid="1238584767612362586">"स्क्रीन फिरवा"</string> <string name="accessibility_recent" msgid="901641734769533575">"अवलोकन"</string> - <string name="accessibility_search_light" msgid="524741790416076988">"Search"</string> + <string name="accessibility_search_light" msgid="524741790416076988">"शोधा"</string> <string name="accessibility_camera_button" msgid="2938898391716647247">"कॅमेरा"</string> <string name="accessibility_phone_button" msgid="4256353121703100427">"फोन"</string> <string name="accessibility_voice_assist_button" msgid="6497706615649754510">"व्हॉइस सहाय्य"</string> @@ -443,7 +442,7 @@ <string name="expanded_header_battery_charging_with_time" msgid="757991461445765011">"<xliff:g id="CHARGING_TIME">%s</xliff:g> पूर्ण होईपर्यंत"</string> <string name="expanded_header_battery_not_charging" msgid="809409140358955848">"चार्ज होत नाही"</string> <string name="ssl_ca_cert_warning" msgid="8373011375250324005">"नेटवर्कचे परीक्षण\nकेले जाऊ शकते"</string> - <string name="description_target_search" msgid="3875069993128855865">"Search"</string> + <string name="description_target_search" msgid="3875069993128855865">"शोध"</string> <string name="description_direction_up" msgid="3632251507574121434">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> साठी वर स्लाइड करा."</string> <string name="description_direction_left" msgid="4762708739096907741">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> साठी डावीकडे स्लाइड करा."</string> <string name="zen_priority_introduction" msgid="3159291973383796646">"अलार्म, रिमाइंडर, इव्हेंट आणि तुम्ही निश्चित केलेल्या कॉलर व्यतिरिक्त तुम्हाला कोणत्याही आवाज आणि कंपनांचा व्यत्त्यय आणला जाणार नाही. तरीही तुम्ही प्ले करायचे ठरवलेले कोणतेही संगीत, व्हिडिओ आणि गेमचे आवाज ऐकू शकतात."</string> @@ -1015,7 +1014,7 @@ <string name="ongoing_privacy_dialog_enterprise" msgid="3003314125311966061">"(ऑफिस)"</string> <string name="ongoing_privacy_dialog_phonecall" msgid="4487370562589839298">"फोन कॉल"</string> <string name="ongoing_privacy_dialog_attribution_text" msgid="4738795925380373994">"(<xliff:g id="APPLICATION_NAME_S_">%s</xliff:g> द्वारे)"</string> - <string name="privacy_type_camera" msgid="7974051382167078332">"कॅमेरा"</string> + <string name="privacy_type_camera" msgid="7974051382167078332">"camera"</string> <string name="privacy_type_location" msgid="7991481648444066703">"स्थान"</string> <string name="privacy_type_microphone" msgid="9136763906797732428">"मायक्रोफोन"</string> <string name="sensor_privacy_mode" msgid="4462866919026513692">"सेन्सर बंद आहेत"</string> @@ -1163,4 +1162,19 @@ <string name="keyguard_try_fingerprint" msgid="2825130772993061165">"उघडण्यासाठी फिंगरप्रिंट वापरा"</string> <string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"ऑथेंटिकेशन आवश्यक आहे. ऑथेंटिकेट करण्यासाठी फिंगरप्रिंट सेन्सरला स्पर्श करा."</string> <string name="ongoing_phone_call_content_description" msgid="5332334388483099947">"फोन कॉल सुरू आहे"</string> + <string name="airplane_mode" msgid="2536350001462130668">"विमान मोड"</string> + <string name="mobile_data_settings_title" msgid="3955246641380064901">"मोबाइल डेटा"</string> + <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> + <string name="mobile_data_connection_active" msgid="944490013299018227">"कनेक्ट केले आहे"</string> + <string name="mobile_data_off_summary" msgid="5621158216585822679">"इंटरनेट ऑटो-कनेक्ट होणार नाही"</string> + <string name="mobile_data_no_connection" msgid="1713872434869947377">"कोणतेही कनेक्शन नाही"</string> + <string name="non_carrier_network_unavailable" msgid="770049357024492372">"इतर कोणतेही नेटवर्क उपलब्ध नाहीत"</string> + <string name="all_network_unavailable" msgid="4112774339909373349">"कोणतेही नेटवर्क उपलब्ध नाही"</string> + <string name="turn_on_wifi" msgid="1308379840799281023">"वाय-फाय"</string> + <string name="pref_title_network_details" msgid="1639455355897668883">"नेटवर्कचे तपशील"</string> + <string name="tap_a_network_to_connect" msgid="1565073330852369558">"कनेक्ट करण्यासाठी नेटवर्कवर टॅप करा"</string> + <string name="unlock_to_view_networks" msgid="5072880496312015676">"नेटवर्क पाहण्यासाठी स्क्रीन अनलॉक करा"</string> + <string name="wifi_empty_list_wifi_on" msgid="3864376632067585377">"नेटवर्क शोधत आहे…"</string> + <string name="wifi_failed_connect_message" msgid="4161863112079000071">"नेटवर्कशी कनेक्ट करता आले नाही"</string> + <string name="see_all_networks" msgid="3773666844913168122">"सर्व पहा"</string> </resources> diff --git a/packages/SystemUI/res/values-ms/strings.xml b/packages/SystemUI/res/values-ms/strings.xml index b662271d9e1e..a59b3ff6a987 100644 --- a/packages/SystemUI/res/values-ms/strings.xml +++ b/packages/SystemUI/res/values-ms/strings.xml @@ -1162,4 +1162,19 @@ <string name="keyguard_try_fingerprint" msgid="2825130772993061165">"Gunakan cap jari untuk membuka"</string> <string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"Pengesahan diperlukan. Sentuh penderia cap jari untuk pengesahan."</string> <string name="ongoing_phone_call_content_description" msgid="5332334388483099947">"Panggilan telefon yang sedang berjalan"</string> + <string name="airplane_mode" msgid="2536350001462130668">"Mod pesawat"</string> + <string name="mobile_data_settings_title" msgid="3955246641380064901">"Data mudah alih"</string> + <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> + <string name="mobile_data_connection_active" msgid="944490013299018227">"Disambungkan"</string> + <string name="mobile_data_off_summary" msgid="5621158216585822679">"Internet tidak akan bersambung secara automatik"</string> + <string name="mobile_data_no_connection" msgid="1713872434869947377">"Tiada sambungan"</string> + <string name="non_carrier_network_unavailable" msgid="770049357024492372">"Tiada rangkaian lain yang tersedia"</string> + <string name="all_network_unavailable" msgid="4112774339909373349">"Tiada rangkaian tersedia"</string> + <string name="turn_on_wifi" msgid="1308379840799281023">"Wi‑Fi"</string> + <string name="pref_title_network_details" msgid="1639455355897668883">"Butiran rangkaian"</string> + <string name="tap_a_network_to_connect" msgid="1565073330852369558">"Ketik rangkaian untuk membuat sambungan"</string> + <string name="unlock_to_view_networks" msgid="5072880496312015676">"Buka kunci untuk melihat rangkaian"</string> + <string name="wifi_empty_list_wifi_on" msgid="3864376632067585377">"Mencari rangkaian…"</string> + <string name="wifi_failed_connect_message" msgid="4161863112079000071">"Gagal menyambung kepada rangkaian"</string> + <string name="see_all_networks" msgid="3773666844913168122">"Lihat semua"</string> </resources> diff --git a/packages/SystemUI/res/values-my/strings.xml b/packages/SystemUI/res/values-my/strings.xml index 900b98a0f3b9..ec37d60cde84 100644 --- a/packages/SystemUI/res/values-my/strings.xml +++ b/packages/SystemUI/res/values-my/strings.xml @@ -1162,4 +1162,19 @@ <string name="keyguard_try_fingerprint" msgid="2825130772993061165">"ဖွင့်ရန် လက်ဗွေကို သုံးပါ"</string> <string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"အထောက်အထားစိစစ်ခြင်း လိုအပ်သည်။ အထောက်အထားစိစစ်ရန် လက်ဗွေ အာရုံခံကိရိယာကို ထိပါ။"</string> <string name="ongoing_phone_call_content_description" msgid="5332334388483099947">"လက်ရှိ ဖုန်းခေါ်ဆိုမှု"</string> + <string name="airplane_mode" msgid="2536350001462130668">"လေယာဉ်ပျံမုဒ်"</string> + <string name="mobile_data_settings_title" msgid="3955246641380064901">"မိုဘိုင်းဒေတာ"</string> + <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> + <string name="mobile_data_connection_active" msgid="944490013299018227">"ချိတ်ဆက်ထားသည်"</string> + <string name="mobile_data_off_summary" msgid="5621158216585822679">"အင်တာနက်က အလိုအလျောက် ချိတ်ဆက်မည်မဟုတ်ပါ"</string> + <string name="mobile_data_no_connection" msgid="1713872434869947377">"ချိတ်ဆက်မှုမရှိပါ"</string> + <string name="non_carrier_network_unavailable" msgid="770049357024492372">"အခြားကွန်ရက်များ မရှိပါ"</string> + <string name="all_network_unavailable" msgid="4112774339909373349">"ကွန်ရက်များ မရှိပါ"</string> + <string name="turn_on_wifi" msgid="1308379840799281023">"Wi-Fi"</string> + <string name="pref_title_network_details" msgid="1639455355897668883">"ကွန်ရက် အသေးစိတ်များ"</string> + <string name="tap_a_network_to_connect" msgid="1565073330852369558">"ချိတ်ဆက်ရန် ကွန်ရက်ကို တို့ပါ"</string> + <string name="unlock_to_view_networks" msgid="5072880496312015676">"ကွန်ရက်များကြည့်ရန် ဖွင့်ပါ"</string> + <string name="wifi_empty_list_wifi_on" msgid="3864376632067585377">"ကွန်ရက်များကို ရှာဖွေနေသည်…"</string> + <string name="wifi_failed_connect_message" msgid="4161863112079000071">"ကွန်ရက်သို့ ချိတ်ဆက်၍မရပါ"</string> + <string name="see_all_networks" msgid="3773666844913168122">"အားလုံးကြည့်ရန်"</string> </resources> diff --git a/packages/SystemUI/res/values-nb/strings.xml b/packages/SystemUI/res/values-nb/strings.xml index 938234d11181..499154fdbb53 100644 --- a/packages/SystemUI/res/values-nb/strings.xml +++ b/packages/SystemUI/res/values-nb/strings.xml @@ -1162,4 +1162,19 @@ <string name="keyguard_try_fingerprint" msgid="2825130772993061165">"Bruk fingeravtrykk for å åpne"</string> <string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"Autentisering kreves. Trykk på fingeravtrykkssensoren for å autentisere."</string> <string name="ongoing_phone_call_content_description" msgid="5332334388483099947">"Pågående telefonsamtale"</string> + <string name="airplane_mode" msgid="2536350001462130668">"Flymodus"</string> + <string name="mobile_data_settings_title" msgid="3955246641380064901">"Mobildata"</string> + <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g>/<xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> + <string name="mobile_data_connection_active" msgid="944490013299018227">"Tilkoblet"</string> + <string name="mobile_data_off_summary" msgid="5621158216585822679">"Internett kobles ikke til automatisk"</string> + <string name="mobile_data_no_connection" msgid="1713872434869947377">"Ingen tilkobling"</string> + <string name="non_carrier_network_unavailable" msgid="770049357024492372">"Ingen andre nettverk er tilgjengelige"</string> + <string name="all_network_unavailable" msgid="4112774339909373349">"Ingen nettverk er tilgjengelige"</string> + <string name="turn_on_wifi" msgid="1308379840799281023">"Wi-Fi"</string> + <string name="pref_title_network_details" msgid="1639455355897668883">"Nettverksdetaljer"</string> + <string name="tap_a_network_to_connect" msgid="1565073330852369558">"Trykk på et nettverk for å koble til"</string> + <string name="unlock_to_view_networks" msgid="5072880496312015676">"Lås opp for å se nettverk"</string> + <string name="wifi_empty_list_wifi_on" msgid="3864376632067585377">"Søker etter nettverk …"</string> + <string name="wifi_failed_connect_message" msgid="4161863112079000071">"Kunne ikke koble til nettverket"</string> + <string name="see_all_networks" msgid="3773666844913168122">"Se alle"</string> </resources> diff --git a/packages/SystemUI/res/values-ne/strings.xml b/packages/SystemUI/res/values-ne/strings.xml index 440e8af6190c..33e0e173bb3f 100644 --- a/packages/SystemUI/res/values-ne/strings.xml +++ b/packages/SystemUI/res/values-ne/strings.xml @@ -77,8 +77,7 @@ <string name="compat_mode_on" msgid="4963711187149440884">"स्क्रिन भर्न जुम गर्नुहोस्"</string> <string name="compat_mode_off" msgid="7682459748279487945">"स्क्रिन भर्न तन्काउनुहोस्"</string> <string name="global_action_screenshot" msgid="2760267567509131654">"स्क्रिनसट"</string> - <!-- no translation found for global_action_smart_lock_disabled (9097102067802412936) --> - <skip /> + <string name="global_action_smart_lock_disabled" msgid="9097102067802412936">"स्मार्ट लक अफ गरिएको छ"</string> <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"कुनै छवि पठाइयो"</string> <string name="screenshot_saving_ticker" msgid="6519186952674544916">"स्क्रिनसट बचत गर्दै…"</string> <string name="screenshot_saving_title" msgid="2298349784913287333">"स्क्रिनसट बचत गर्दै…"</string> @@ -1163,4 +1162,19 @@ <string name="keyguard_try_fingerprint" msgid="2825130772993061165">"फिंगरप्रिन्ट प्रयोग गरी खोल्नुहोस्"</string> <string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"पुष्टि गर्नु पर्ने हुन्छ। पुष्टि गर्न फिंगरप्रिन्ट सेन्सर छुनुहोस्।"</string> <string name="ongoing_phone_call_content_description" msgid="5332334388483099947">"जारी फोन कल"</string> + <string name="airplane_mode" msgid="2536350001462130668">"हवाइजहाज मोड"</string> + <string name="mobile_data_settings_title" msgid="3955246641380064901">"मोबाइल डेटा"</string> + <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> + <string name="mobile_data_connection_active" msgid="944490013299018227">"इन्टरनेटमा कनेक्ट गरिएको छ"</string> + <string name="mobile_data_off_summary" msgid="5621158216585822679">"इन्टरनेट स्वतः कनेक्ट हुँदैन"</string> + <string name="mobile_data_no_connection" msgid="1713872434869947377">"इन्टरनेट छैन"</string> + <string name="non_carrier_network_unavailable" msgid="770049357024492372">"अन्य नेटवर्क उपलब्ध छैनन्"</string> + <string name="all_network_unavailable" msgid="4112774339909373349">"कुनै पनि नेटवर्क उपलब्ध छैन"</string> + <string name="turn_on_wifi" msgid="1308379840799281023">"Wi-Fi"</string> + <string name="pref_title_network_details" msgid="1639455355897668883">"नेटवर्कसम्बन्धी विवरण"</string> + <string name="tap_a_network_to_connect" msgid="1565073330852369558">"इन्टरनेट कनेक्ट गर्न कुनै नेटवर्कमा ट्याप गर्नुहोस्"</string> + <string name="unlock_to_view_networks" msgid="5072880496312015676">"नेटवर्कहरू हेर्न आफ्नो स्क्रिन अनलक गर्नुहोस्"</string> + <string name="wifi_empty_list_wifi_on" msgid="3864376632067585377">"नेटवर्कहरू खोजिँदै छन्…"</string> + <string name="wifi_failed_connect_message" msgid="4161863112079000071">"नेटवर्कमा कनेक्ट गर्न सकिएन"</string> + <string name="see_all_networks" msgid="3773666844913168122">"सबै नेटवर्क हेर्नुहोस्"</string> </resources> diff --git a/packages/SystemUI/res/values-nl/strings.xml b/packages/SystemUI/res/values-nl/strings.xml index 66ec98ab7f68..8d04acad41ce 100644 --- a/packages/SystemUI/res/values-nl/strings.xml +++ b/packages/SystemUI/res/values-nl/strings.xml @@ -1162,4 +1162,19 @@ <string name="keyguard_try_fingerprint" msgid="2825130772993061165">"Gebruik vingerafdruk om te openen"</string> <string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"Verificatie vereist. Raak de vingerafdruksensor aan om de verificatie uit te voeren."</string> <string name="ongoing_phone_call_content_description" msgid="5332334388483099947">"Actief telefoongesprek"</string> + <string name="airplane_mode" msgid="2536350001462130668">"Vliegtuigmodus"</string> + <string name="mobile_data_settings_title" msgid="3955246641380064901">"Mobiele data"</string> + <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g>/<xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> + <string name="mobile_data_connection_active" msgid="944490013299018227">"Verbonden"</string> + <string name="mobile_data_off_summary" msgid="5621158216585822679">"Internet maakt niet automatisch verbinding"</string> + <string name="mobile_data_no_connection" msgid="1713872434869947377">"Geen verbinding"</string> + <string name="non_carrier_network_unavailable" msgid="770049357024492372">"Geen andere netwerken beschikbaar"</string> + <string name="all_network_unavailable" msgid="4112774339909373349">"Geen netwerken beschikbaar"</string> + <string name="turn_on_wifi" msgid="1308379840799281023">"Wifi"</string> + <string name="pref_title_network_details" msgid="1639455355897668883">"Netwerkgegevens"</string> + <string name="tap_a_network_to_connect" msgid="1565073330852369558">"Tik op een netwerk om verbinding te maken"</string> + <string name="unlock_to_view_networks" msgid="5072880496312015676">"Ontgrendel het scherm om netwerken te bekijken"</string> + <string name="wifi_empty_list_wifi_on" msgid="3864376632067585377">"Netwerken zoeken…"</string> + <string name="wifi_failed_connect_message" msgid="4161863112079000071">"Kan geen verbinding maken met het netwerk"</string> + <string name="see_all_networks" msgid="3773666844913168122">"Alles tonen"</string> </resources> diff --git a/packages/SystemUI/res/values-or/strings.xml b/packages/SystemUI/res/values-or/strings.xml index f76adfa7f09e..3ceb13a53b09 100644 --- a/packages/SystemUI/res/values-or/strings.xml +++ b/packages/SystemUI/res/values-or/strings.xml @@ -77,8 +77,7 @@ <string name="compat_mode_on" msgid="4963711187149440884">"ସ୍କ୍ରୀନ ଭରିବା ପାଇଁ ଜୁମ୍ କରନ୍ତୁ"</string> <string name="compat_mode_off" msgid="7682459748279487945">"ସ୍କ୍ରୀନ୍କୁ ଭରିବା ପାଇଁ ଟାଣନ୍ତୁ"</string> <string name="global_action_screenshot" msgid="2760267567509131654">"ସ୍କ୍ରିନ୍ସଟ୍ ନିଅନ୍ତୁ"</string> - <!-- no translation found for global_action_smart_lock_disabled (9097102067802412936) --> - <skip /> + <string name="global_action_smart_lock_disabled" msgid="9097102067802412936">"ସ୍ମାର୍ଟ ଲକ୍ ଅକ୍ଷମ କରାଯାଇଛି"</string> <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"ଏକ ଛବି ପଠାଯାଇଛି"</string> <string name="screenshot_saving_ticker" msgid="6519186952674544916">"ସ୍କ୍ରୀନଶଟ୍ ସେଭ୍ କରାଯାଉଛି…"</string> <string name="screenshot_saving_title" msgid="2298349784913287333">"ସ୍କ୍ରୀନଶଟ୍ ସେଭ୍ କରାଯାଉଛି…"</string> @@ -134,7 +133,7 @@ <string name="accessibility_accessibility_button" msgid="4089042473497107709">"ଆକ୍ସେସିବିଲିଟୀ"</string> <string name="accessibility_rotate_button" msgid="1238584767612362586">"ସ୍କ୍ରୀନ୍କୁ ଘୁରାନ୍ତୁ"</string> <string name="accessibility_recent" msgid="901641734769533575">"ଓଭରଭିଉ"</string> - <string name="accessibility_search_light" msgid="524741790416076988">"Search"</string> + <string name="accessibility_search_light" msgid="524741790416076988">"ସନ୍ଧାନ କରନ୍ତୁ"</string> <string name="accessibility_camera_button" msgid="2938898391716647247">"କ୍ୟାମେରା"</string> <string name="accessibility_phone_button" msgid="4256353121703100427">"ଫୋନ୍"</string> <string name="accessibility_voice_assist_button" msgid="6497706615649754510">"ଭଏସ୍ ସହାୟକ"</string> @@ -443,7 +442,7 @@ <string name="expanded_header_battery_charging_with_time" msgid="757991461445765011">"ପୂର୍ଣ୍ଣ ଚାର୍ଜ ହେବାକୁ ଆଉ <xliff:g id="CHARGING_TIME">%s</xliff:g> ଅଛି"</string> <string name="expanded_header_battery_not_charging" msgid="809409140358955848">"ଚାର୍ଜ ହେଉନାହିଁ"</string> <string name="ssl_ca_cert_warning" msgid="8373011375250324005">"ନେଟ୍ୱର୍କ\nମନିଟର୍ କରାଯାଇପାରେ"</string> - <string name="description_target_search" msgid="3875069993128855865">"Search"</string> + <string name="description_target_search" msgid="3875069993128855865">"ସନ୍ଧାନ କରନ୍ତୁ"</string> <string name="description_direction_up" msgid="3632251507574121434">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> ପାଇଁ ଉପରକୁ ସ୍ଲାଇଡ୍ କରନ୍ତୁ।"</string> <string name="description_direction_left" msgid="4762708739096907741">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> ପାଇଁ ବାମକୁ ସ୍ଲାଇଡ୍ କରନ୍ତୁ"</string> <string name="zen_priority_introduction" msgid="3159291973383796646">"ଆଲାର୍ମ, ରିମାଇଣ୍ଡର୍, ଇଭେଣ୍ଟ ଏବଂ ଆପଣ ନିର୍ଦ୍ଦିଷ୍ଟ କରିଥିବା କଲର୍ଙ୍କ ବ୍ୟତୀତ ଆପଣଙ୍କ ଧ୍ୟାନ ଅନ୍ୟ କୌଣସି ଧ୍ୱନୀ ଏବଂ ଭାଇବ୍ରେଶନ୍ରେ ଆକର୍ଷଣ କରାଯିବନାହିଁ। ମ୍ୟୁଜିକ୍, ଭିଡିଓ ଏବଂ ଗେମ୍ ସମେତ ନିଜେ ଚଲାଇବାକୁ ବାଛିଥିବା ଅନ୍ୟ ସବୁକିଛି ଆପଣ ଶୁଣିପାରିବେ।"</string> @@ -1163,4 +1162,19 @@ <string name="keyguard_try_fingerprint" msgid="2825130772993061165">"ଖୋଲିବାକୁ ଟିପଚିହ୍ନ ବ୍ୟବହାର କରନ୍ତୁ"</string> <string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"ପ୍ରମାଣୀକରଣ ଆବଶ୍ୟକ। ପ୍ରମାଣୀକରଣ କରିବାକୁ ଟିପଚିହ୍ନ ସେନ୍ସରକୁ ସ୍ପର୍ଶ କରନ୍ତୁ।"</string> <string name="ongoing_phone_call_content_description" msgid="5332334388483099947">"ଚାଲୁଥିବା ଫୋନ୍ କଲ୍"</string> + <string name="airplane_mode" msgid="2536350001462130668">"ଏୟାରପ୍ଲେନ୍ ମୋଡ୍"</string> + <string name="mobile_data_settings_title" msgid="3955246641380064901">"ମୋବାଇଲ ଡାଟା"</string> + <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> + <string name="mobile_data_connection_active" msgid="944490013299018227">"ସଂଯୋଗ କରାଯାଇଛି"</string> + <string name="mobile_data_off_summary" msgid="5621158216585822679">"ଇଣ୍ଟରନେଟ୍ ସ୍ଵତଃ-ସଂଯୋଗ ହେବ ନାହିଁ"</string> + <string name="mobile_data_no_connection" msgid="1713872434869947377">"ସଂଯୋଗ ନାହିଁ"</string> + <string name="non_carrier_network_unavailable" msgid="770049357024492372">"ଅନ୍ୟ କୌଣସି ନେଟୱାର୍କ ଉପଲବ୍ଧ ନାହିଁ"</string> + <string name="all_network_unavailable" msgid="4112774339909373349">"କୌଣସି ନେଟୱାର୍କ ଉପଲବ୍ଧ ନାହିଁ"</string> + <string name="turn_on_wifi" msgid="1308379840799281023">"ୱାଇ-ଫାଇ"</string> + <string name="pref_title_network_details" msgid="1639455355897668883">"ନେଟୱାର୍କ ବିବରଣୀ"</string> + <string name="tap_a_network_to_connect" msgid="1565073330852369558">"ସଂଯୋଗ କରିବାକୁ ଏକ ନେଟୱାର୍କରେ ଟାପ୍ କରନ୍ତୁ"</string> + <string name="unlock_to_view_networks" msgid="5072880496312015676">"ନେଟୱାର୍କଗୁଡ଼ିକୁ ଦେଖିବା ପାଇଁ ଅନଲକ୍ କରନ୍ତୁ"</string> + <string name="wifi_empty_list_wifi_on" msgid="3864376632067585377">"ନେଟୱାର୍କଗୁଡ଼ିକ ସନ୍ଧାନ କରାଯାଉଛି…"</string> + <string name="wifi_failed_connect_message" msgid="4161863112079000071">"ନେଟୱାର୍କକୁ ସଂଯୋଗ କରିବାରେ ବିଫଳ ହୋଇଛି"</string> + <string name="see_all_networks" msgid="3773666844913168122">"ସବୁ ଦେଖନ୍ତୁ"</string> </resources> diff --git a/packages/SystemUI/res/values-pa/strings.xml b/packages/SystemUI/res/values-pa/strings.xml index 9d1edfa53383..f35efcf72c94 100644 --- a/packages/SystemUI/res/values-pa/strings.xml +++ b/packages/SystemUI/res/values-pa/strings.xml @@ -77,8 +77,7 @@ <string name="compat_mode_on" msgid="4963711187149440884">"ਸਕ੍ਰੀਨ ਭਰਨ ਲਈ ਜ਼ੂਮ ਕਰੋ"</string> <string name="compat_mode_off" msgid="7682459748279487945">"ਸਕ੍ਰੀਨ ਭਰਨ ਲਈ ਸਟ੍ਰੈਚ ਕਰੋ"</string> <string name="global_action_screenshot" msgid="2760267567509131654">"ਸਕ੍ਰੀਨਸ਼ਾਟ"</string> - <!-- no translation found for global_action_smart_lock_disabled (9097102067802412936) --> - <skip /> + <string name="global_action_smart_lock_disabled" msgid="9097102067802412936">"Smart Lock ਬੰਦ ਕੀਤਾ ਗਿਆ"</string> <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"ਚਿੱਤਰ ਭੇਜਿਆ ਗਿਆ"</string> <string name="screenshot_saving_ticker" msgid="6519186952674544916">"ਸਕ੍ਰੀਨਸ਼ਾਟ ਸੁਰੱਖਿਅਤ ਕਰ ਰਿਹਾ ਹੈ…"</string> <string name="screenshot_saving_title" msgid="2298349784913287333">"ਸਕ੍ਰੀਨਸ਼ਾਟ ਸੁਰੱਖਿਅਤ ਕਰ ਰਿਹਾ ਹੈ…"</string> @@ -1163,4 +1162,19 @@ <string name="keyguard_try_fingerprint" msgid="2825130772993061165">"ਖੋਲ੍ਹਣ ਲਈ ਫਿੰਗਰਪ੍ਰਿੰਟ ਵਰਤੋ"</string> <string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"ਪ੍ਰਮਾਣੀਕਰਨ ਲੋੜੀਂਦਾ ਹੈ। ਪ੍ਰਮਾਣਿਤ ਕਰਨ ਲਈ ਫਿੰਗਰਪ੍ਰਿੰਟ ਸੈਂਸਰ ਨੂੰ ਸਪਰਸ਼ ਕਰੋ।"</string> <string name="ongoing_phone_call_content_description" msgid="5332334388483099947">"ਜਾਰੀ ਫ਼ੋਨ ਕਾਲ"</string> + <string name="airplane_mode" msgid="2536350001462130668">"ਹਵਾਈ-ਜਹਾਜ਼ ਮੋਡ"</string> + <string name="mobile_data_settings_title" msgid="3955246641380064901">"ਮੋਬਾਈਲ ਡਾਟਾ"</string> + <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> + <string name="mobile_data_connection_active" msgid="944490013299018227">"ਕਨੈਕਟ ਹੈ"</string> + <string name="mobile_data_off_summary" msgid="5621158216585822679">"ਇੰਟਰਨੈੱਟ ਸਵੈ-ਕਨੈਕਟ ਨਹੀਂ ਹੋਵੇਗਾ"</string> + <string name="mobile_data_no_connection" msgid="1713872434869947377">"ਕੋਈ ਕਨੈਕਸ਼ਨ ਨਹੀਂ"</string> + <string name="non_carrier_network_unavailable" msgid="770049357024492372">"ਕੋਈ ਹੋਰ ਨੈੱਟਵਰਕ ਉਪਲਬਧ ਨਹੀਂ ਹੈ"</string> + <string name="all_network_unavailable" msgid="4112774339909373349">"ਕੋਈ ਨੈੱਟਵਰਕ ਉਪਲਬਧ ਨਹੀਂ ਹੈ"</string> + <string name="turn_on_wifi" msgid="1308379840799281023">"ਵਾਈ-ਫਾਈ"</string> + <string name="pref_title_network_details" msgid="1639455355897668883">"ਨੈੱਟਵਰਕ ਵੇਰਵੇ"</string> + <string name="tap_a_network_to_connect" msgid="1565073330852369558">"ਕਨੈਕਟ ਕਰਨ ਲਈ ਕਿਸੇ ਨੈੱਟਵਰਕ \'ਤੇ ਟੈਪ ਕਰੋ"</string> + <string name="unlock_to_view_networks" msgid="5072880496312015676">"ਨੈੱਟਵਰਕਾਂ ਨੂੰ ਦੇਖਣ ਲਈ ਅਣਲਾਕ ਕਰੋ"</string> + <string name="wifi_empty_list_wifi_on" msgid="3864376632067585377">"ਨੈੱਟਵਰਕ ਖੋਜੇ ਜਾ ਰਹੇ ਹਨ…"</string> + <string name="wifi_failed_connect_message" msgid="4161863112079000071">"ਨੈੱਟਵਰਕ ਨਾਲ ਕਨੈਕਟ ਕਰਨਾ ਅਸਫਲ ਰਿਹਾ"</string> + <string name="see_all_networks" msgid="3773666844913168122">"ਸਭ ਦੇਖੋ"</string> </resources> diff --git a/packages/SystemUI/res/values-pl/strings.xml b/packages/SystemUI/res/values-pl/strings.xml index b6412e7805ea..d201d5ccff08 100644 --- a/packages/SystemUI/res/values-pl/strings.xml +++ b/packages/SystemUI/res/values-pl/strings.xml @@ -1174,4 +1174,19 @@ <string name="keyguard_try_fingerprint" msgid="2825130772993061165">"By otworzyć, użyj odcisku palca"</string> <string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"Wymagane uwierzytelnienie. Dotknij czytnika liniii papilarnych, by uwierzytelnić."</string> <string name="ongoing_phone_call_content_description" msgid="5332334388483099947">"Aktywne połączenie"</string> + <string name="airplane_mode" msgid="2536350001462130668">"Tryb samolotowy"</string> + <string name="mobile_data_settings_title" msgid="3955246641380064901">"Mobilna transmisja danych"</string> + <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g>/<xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> + <string name="mobile_data_connection_active" msgid="944490013299018227">"Połączono"</string> + <string name="mobile_data_off_summary" msgid="5621158216585822679">"Nie połączy się automatycznie z internetem"</string> + <string name="mobile_data_no_connection" msgid="1713872434869947377">"Brak połączenia"</string> + <string name="non_carrier_network_unavailable" msgid="770049357024492372">"Brak innych dostępnych sieci"</string> + <string name="all_network_unavailable" msgid="4112774339909373349">"Brak dostępnych sieci"</string> + <string name="turn_on_wifi" msgid="1308379840799281023">"Wi‑Fi"</string> + <string name="pref_title_network_details" msgid="1639455355897668883">"Szczegóły sieci"</string> + <string name="tap_a_network_to_connect" msgid="1565073330852369558">"Kliknij sieć, aby połączyć"</string> + <string name="unlock_to_view_networks" msgid="5072880496312015676">"Odblokuj, by wyświetlić sieci"</string> + <string name="wifi_empty_list_wifi_on" msgid="3864376632067585377">"Szukam sieci…"</string> + <string name="wifi_failed_connect_message" msgid="4161863112079000071">"Nie udało się połączyć z siecią"</string> + <string name="see_all_networks" msgid="3773666844913168122">"Pokaż wszystko"</string> </resources> diff --git a/packages/SystemUI/res/values-pt-rBR/strings.xml b/packages/SystemUI/res/values-pt-rBR/strings.xml index 7c3f864caa1c..0c06ada2c996 100644 --- a/packages/SystemUI/res/values-pt-rBR/strings.xml +++ b/packages/SystemUI/res/values-pt-rBR/strings.xml @@ -1162,4 +1162,19 @@ <string name="keyguard_try_fingerprint" msgid="2825130772993061165">"Use a impressão digital para abrir"</string> <string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"Autenticação obrigatória. Toque no sensor de impressão digital para autenticar."</string> <string name="ongoing_phone_call_content_description" msgid="5332334388483099947">"Chamada em andamento"</string> + <string name="airplane_mode" msgid="2536350001462130668">"Modo avião"</string> + <string name="mobile_data_settings_title" msgid="3955246641380064901">"Dados móveis"</string> + <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> + <string name="mobile_data_connection_active" msgid="944490013299018227">"Conectado"</string> + <string name="mobile_data_off_summary" msgid="5621158216585822679">"A Internet não será conectada automaticamente"</string> + <string name="mobile_data_no_connection" msgid="1713872434869947377">"Sem conexão"</string> + <string name="non_carrier_network_unavailable" msgid="770049357024492372">"Nenhuma outra rede disponível"</string> + <string name="all_network_unavailable" msgid="4112774339909373349">"Nenhuma rede disponível"</string> + <string name="turn_on_wifi" msgid="1308379840799281023">"Wi-Fi"</string> + <string name="pref_title_network_details" msgid="1639455355897668883">"Detalhes da rede"</string> + <string name="tap_a_network_to_connect" msgid="1565073330852369558">"Toque em uma rede para se conectar"</string> + <string name="unlock_to_view_networks" msgid="5072880496312015676">"Desbloqueie para ver as redes"</string> + <string name="wifi_empty_list_wifi_on" msgid="3864376632067585377">"Procurando redes…"</string> + <string name="wifi_failed_connect_message" msgid="4161863112079000071">"Falha ao conectar à rede"</string> + <string name="see_all_networks" msgid="3773666844913168122">"Ver tudo"</string> </resources> diff --git a/packages/SystemUI/res/values-pt-rPT/strings.xml b/packages/SystemUI/res/values-pt-rPT/strings.xml index df487734e1f3..87b70495adf1 100644 --- a/packages/SystemUI/res/values-pt-rPT/strings.xml +++ b/packages/SystemUI/res/values-pt-rPT/strings.xml @@ -1162,4 +1162,19 @@ <string name="keyguard_try_fingerprint" msgid="2825130772993061165">"Utilize a impressão digital para abrir"</string> <string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"Autenticação necessária. Toque no sensor de impressões digitais para autenticar."</string> <string name="ongoing_phone_call_content_description" msgid="5332334388483099947">"Chamada telefónica em curso"</string> + <string name="airplane_mode" msgid="2536350001462130668">"Modo de avião"</string> + <string name="mobile_data_settings_title" msgid="3955246641380064901">"Dados móveis"</string> + <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g>/<xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> + <string name="mobile_data_connection_active" msgid="944490013299018227">"Ligado"</string> + <string name="mobile_data_off_summary" msgid="5621158216585822679">"A Internet não estabelece ligação automaticamente"</string> + <string name="mobile_data_no_connection" msgid="1713872434869947377">"Sem ligação"</string> + <string name="non_carrier_network_unavailable" msgid="770049357024492372">"Nenhuma outra rede disponível"</string> + <string name="all_network_unavailable" msgid="4112774339909373349">"Sem redes disponíveis"</string> + <string name="turn_on_wifi" msgid="1308379840799281023">"Wi‑Fi"</string> + <string name="pref_title_network_details" msgid="1639455355897668883">"Detalhes da rede"</string> + <string name="tap_a_network_to_connect" msgid="1565073330852369558">"Toque numa rede para estabelecer ligação"</string> + <string name="unlock_to_view_networks" msgid="5072880496312015676">"Desbloqueie para ver as redes"</string> + <string name="wifi_empty_list_wifi_on" msgid="3864376632067585377">"A procurar redes…"</string> + <string name="wifi_failed_connect_message" msgid="4161863112079000071">"Não foi possível estabelecer ligação à rede"</string> + <string name="see_all_networks" msgid="3773666844913168122">"Veja tudo"</string> </resources> diff --git a/packages/SystemUI/res/values-pt/strings.xml b/packages/SystemUI/res/values-pt/strings.xml index 7c3f864caa1c..0c06ada2c996 100644 --- a/packages/SystemUI/res/values-pt/strings.xml +++ b/packages/SystemUI/res/values-pt/strings.xml @@ -1162,4 +1162,19 @@ <string name="keyguard_try_fingerprint" msgid="2825130772993061165">"Use a impressão digital para abrir"</string> <string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"Autenticação obrigatória. Toque no sensor de impressão digital para autenticar."</string> <string name="ongoing_phone_call_content_description" msgid="5332334388483099947">"Chamada em andamento"</string> + <string name="airplane_mode" msgid="2536350001462130668">"Modo avião"</string> + <string name="mobile_data_settings_title" msgid="3955246641380064901">"Dados móveis"</string> + <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> + <string name="mobile_data_connection_active" msgid="944490013299018227">"Conectado"</string> + <string name="mobile_data_off_summary" msgid="5621158216585822679">"A Internet não será conectada automaticamente"</string> + <string name="mobile_data_no_connection" msgid="1713872434869947377">"Sem conexão"</string> + <string name="non_carrier_network_unavailable" msgid="770049357024492372">"Nenhuma outra rede disponível"</string> + <string name="all_network_unavailable" msgid="4112774339909373349">"Nenhuma rede disponível"</string> + <string name="turn_on_wifi" msgid="1308379840799281023">"Wi-Fi"</string> + <string name="pref_title_network_details" msgid="1639455355897668883">"Detalhes da rede"</string> + <string name="tap_a_network_to_connect" msgid="1565073330852369558">"Toque em uma rede para se conectar"</string> + <string name="unlock_to_view_networks" msgid="5072880496312015676">"Desbloqueie para ver as redes"</string> + <string name="wifi_empty_list_wifi_on" msgid="3864376632067585377">"Procurando redes…"</string> + <string name="wifi_failed_connect_message" msgid="4161863112079000071">"Falha ao conectar à rede"</string> + <string name="see_all_networks" msgid="3773666844913168122">"Ver tudo"</string> </resources> diff --git a/packages/SystemUI/res/values-ro/strings.xml b/packages/SystemUI/res/values-ro/strings.xml index c36f7e7e50da..0821a83dc379 100644 --- a/packages/SystemUI/res/values-ro/strings.xml +++ b/packages/SystemUI/res/values-ro/strings.xml @@ -1168,4 +1168,19 @@ <string name="keyguard_try_fingerprint" msgid="2825130772993061165">"Folosiți amprenta ca să deschideți"</string> <string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"Autentificare obligatorie. Atingeți senzorul de amprentă pentru a vă autentifica."</string> <string name="ongoing_phone_call_content_description" msgid="5332334388483099947">"Apel telefonic în desfășurare"</string> + <string name="airplane_mode" msgid="2536350001462130668">"Modul Avion"</string> + <string name="mobile_data_settings_title" msgid="3955246641380064901">"Date mobile"</string> + <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g>/<xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> + <string name="mobile_data_connection_active" msgid="944490013299018227">"Conectat"</string> + <string name="mobile_data_off_summary" msgid="5621158216585822679">"Nu se conectează automat la internet"</string> + <string name="mobile_data_no_connection" msgid="1713872434869947377">"Nicio conexiune"</string> + <string name="non_carrier_network_unavailable" msgid="770049357024492372">"Nu sunt disponibile alte rețele"</string> + <string name="all_network_unavailable" msgid="4112774339909373349">"Nicio rețea disponibilă"</string> + <string name="turn_on_wifi" msgid="1308379840799281023">"Wi-Fi"</string> + <string name="pref_title_network_details" msgid="1639455355897668883">"Detalii despre rețea"</string> + <string name="tap_a_network_to_connect" msgid="1565073330852369558">"Atingeți o rețea pentru a vă conecta"</string> + <string name="unlock_to_view_networks" msgid="5072880496312015676">"Deblocați pentru a vedea rețelele"</string> + <string name="wifi_empty_list_wifi_on" msgid="3864376632067585377">"Se caută rețele…"</string> + <string name="wifi_failed_connect_message" msgid="4161863112079000071">"Nu s-a realizat conexiunea la rețea"</string> + <string name="see_all_networks" msgid="3773666844913168122">"Afișează-le pe toate"</string> </resources> diff --git a/packages/SystemUI/res/values-ru/strings.xml b/packages/SystemUI/res/values-ru/strings.xml index cc63a91b5fe8..a5295ff5dd9d 100644 --- a/packages/SystemUI/res/values-ru/strings.xml +++ b/packages/SystemUI/res/values-ru/strings.xml @@ -1174,4 +1174,19 @@ <string name="keyguard_try_fingerprint" msgid="2825130772993061165">"Используйте отпечаток пальца для входа."</string> <string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"Требуется аутентификация. Приложите палец к сканеру отпечатков."</string> <string name="ongoing_phone_call_content_description" msgid="5332334388483099947">"Текущий вызов"</string> + <string name="airplane_mode" msgid="2536350001462130668">"Режим полета"</string> + <string name="mobile_data_settings_title" msgid="3955246641380064901">"Мобильный интернет"</string> + <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g>/<xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> + <string name="mobile_data_connection_active" msgid="944490013299018227">"Подключено"</string> + <string name="mobile_data_off_summary" msgid="5621158216585822679">"Без автоподключения к интернету"</string> + <string name="mobile_data_no_connection" msgid="1713872434869947377">"Нет подключения к интернету"</string> + <string name="non_carrier_network_unavailable" msgid="770049357024492372">"Нет других доступных сетей"</string> + <string name="all_network_unavailable" msgid="4112774339909373349">"Нет доступных сетей"</string> + <string name="turn_on_wifi" msgid="1308379840799281023">"Wi-Fi"</string> + <string name="pref_title_network_details" msgid="1639455355897668883">"Сведения о сети"</string> + <string name="tap_a_network_to_connect" msgid="1565073330852369558">"Выберите сеть, чтобы подключиться"</string> + <string name="unlock_to_view_networks" msgid="5072880496312015676">"Разблокируйте, чтобы посмотреть сети Wi-Fi."</string> + <string name="wifi_empty_list_wifi_on" msgid="3864376632067585377">"Поиск сетей…"</string> + <string name="wifi_failed_connect_message" msgid="4161863112079000071">"Не удалось подключиться к сети"</string> + <string name="see_all_networks" msgid="3773666844913168122">"Показать все"</string> </resources> diff --git a/packages/SystemUI/res/values-si/strings.xml b/packages/SystemUI/res/values-si/strings.xml index c08d6f707bc1..4aab3740349c 100644 --- a/packages/SystemUI/res/values-si/strings.xml +++ b/packages/SystemUI/res/values-si/strings.xml @@ -1162,4 +1162,19 @@ <string name="keyguard_try_fingerprint" msgid="2825130772993061165">"විවෘත කිරීමට ඇඟිලි සලකුණ භාවිත කරන්න"</string> <string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"සත්යාපනය අවශ්යයි. සත්යාපනය කිරීමට ඇඟිලි සලකුණු සංවේදකය ස්පර්ශ කරන්න."</string> <string name="ongoing_phone_call_content_description" msgid="5332334388483099947">"ක්රියාත්මක වන දුරකථන ඇමතුම"</string> + <string name="airplane_mode" msgid="2536350001462130668">"ගුවන් යානා ප්රකාරය"</string> + <string name="mobile_data_settings_title" msgid="3955246641380064901">"ජංගම දත්ත"</string> + <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> + <string name="mobile_data_connection_active" msgid="944490013299018227">"සම්බන්ධයි"</string> + <string name="mobile_data_off_summary" msgid="5621158216585822679">"අන්තර්ජාලය ස්වයංක්රියව සම්බන්ධ නොවනු ඇත"</string> + <string name="mobile_data_no_connection" msgid="1713872434869947377">"සම්බන්ධතාවයක් නැත"</string> + <string name="non_carrier_network_unavailable" msgid="770049357024492372">"ලබා ගත හැකි වෙනත් ජාල නැත"</string> + <string name="all_network_unavailable" msgid="4112774339909373349">"ජාලය නොතිබේ"</string> + <string name="turn_on_wifi" msgid="1308379840799281023">"Wi-Fi"</string> + <string name="pref_title_network_details" msgid="1639455355897668883">"ජාල විස්තර"</string> + <string name="tap_a_network_to_connect" msgid="1565073330852369558">"සම්බන්ධ වීමට ජාලයක් තට්ටු කරන්න"</string> + <string name="unlock_to_view_networks" msgid="5072880496312015676">"ජාල බැලීමට අගුලු හරින්න"</string> + <string name="wifi_empty_list_wifi_on" msgid="3864376632067585377">"ජාල සඳහා සොයමින්…"</string> + <string name="wifi_failed_connect_message" msgid="4161863112079000071">"ජාලය වෙත සම්බන්ධ වීම අසාර්ථක විය"</string> + <string name="see_all_networks" msgid="3773666844913168122">"සියල්ල බලන්න"</string> </resources> diff --git a/packages/SystemUI/res/values-sk/strings.xml b/packages/SystemUI/res/values-sk/strings.xml index 0aabf7c48d8f..64501dfadd11 100644 --- a/packages/SystemUI/res/values-sk/strings.xml +++ b/packages/SystemUI/res/values-sk/strings.xml @@ -1174,4 +1174,19 @@ <string name="keyguard_try_fingerprint" msgid="2825130772993061165">"Otvorte odtlačkom prsta"</string> <string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"Vyžaduje sa overenie. Dotknite sa senzora odtlačkov prstov."</string> <string name="ongoing_phone_call_content_description" msgid="5332334388483099947">"Prebiehajúci telefonický hovor"</string> + <string name="airplane_mode" msgid="2536350001462130668">"Režim v lietadle"</string> + <string name="mobile_data_settings_title" msgid="3955246641380064901">"Mobilné dáta"</string> + <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g>/<xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> + <string name="mobile_data_connection_active" msgid="944490013299018227">"Pripojené"</string> + <string name="mobile_data_off_summary" msgid="5621158216585822679">"Internet sa nepripojí automaticky"</string> + <string name="mobile_data_no_connection" msgid="1713872434869947377">"Bez pripojenia"</string> + <string name="non_carrier_network_unavailable" msgid="770049357024492372">"Nie sú k dispozícii žiadne ďalšie siete"</string> + <string name="all_network_unavailable" msgid="4112774339909373349">"Nie sú k dispozícii žiadne siete"</string> + <string name="turn_on_wifi" msgid="1308379840799281023">"Wi‑Fi"</string> + <string name="pref_title_network_details" msgid="1639455355897668883">"Podrobnosti siete"</string> + <string name="tap_a_network_to_connect" msgid="1565073330852369558">"Ak sa chcete pripojiť, klepnite na sieť"</string> + <string name="unlock_to_view_networks" msgid="5072880496312015676">"Odomknutím si zobrazte siete"</string> + <string name="wifi_empty_list_wifi_on" msgid="3864376632067585377">"Vyhľadávajú sa siete…"</string> + <string name="wifi_failed_connect_message" msgid="4161863112079000071">"Nepodarilo sa pripojiť k sieti"</string> + <string name="see_all_networks" msgid="3773666844913168122">"Zobraziť všetko"</string> </resources> diff --git a/packages/SystemUI/res/values-sl/strings.xml b/packages/SystemUI/res/values-sl/strings.xml index ecf5ca7c33a1..64ccc726c1b2 100644 --- a/packages/SystemUI/res/values-sl/strings.xml +++ b/packages/SystemUI/res/values-sl/strings.xml @@ -1174,4 +1174,19 @@ <string name="keyguard_try_fingerprint" msgid="2825130772993061165">"Odprite s prstnim odtisom"</string> <string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"Zahtevano je preverjanje pristnosti. Za preverjanje pristnosti se dotaknite tipala prstnih odtisov."</string> <string name="ongoing_phone_call_content_description" msgid="5332334388483099947">"Poteka klic"</string> + <string name="airplane_mode" msgid="2536350001462130668">"Način za letalo"</string> + <string name="mobile_data_settings_title" msgid="3955246641380064901">"Prenos podatkov v mobilnem omrežju"</string> + <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g>/<xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> + <string name="mobile_data_connection_active" msgid="944490013299018227">"Povezano"</string> + <string name="mobile_data_off_summary" msgid="5621158216585822679">"Samodejna povezava z internetom ni mogoča."</string> + <string name="mobile_data_no_connection" msgid="1713872434869947377">"Ni povezave"</string> + <string name="non_carrier_network_unavailable" msgid="770049357024492372">"Nobeno drugo omrežje ni na voljo"</string> + <string name="all_network_unavailable" msgid="4112774339909373349">"Na voljo ni nobeno omrežje"</string> + <string name="turn_on_wifi" msgid="1308379840799281023">"Wi‑Fi"</string> + <string name="pref_title_network_details" msgid="1639455355897668883">"Podatki o omrežju"</string> + <string name="tap_a_network_to_connect" msgid="1565073330852369558">"Za vzpostavitev povezave se dotaknite omrežja."</string> + <string name="unlock_to_view_networks" msgid="5072880496312015676">"Odklenite za ogled omrežij"</string> + <string name="wifi_empty_list_wifi_on" msgid="3864376632067585377">"Iskanje omrežij …"</string> + <string name="wifi_failed_connect_message" msgid="4161863112079000071">"Vzpostavljanje povezave z omrežjem ni uspelo."</string> + <string name="see_all_networks" msgid="3773666844913168122">"Prikaz vseh omrežij"</string> </resources> diff --git a/packages/SystemUI/res/values-sq/strings.xml b/packages/SystemUI/res/values-sq/strings.xml index 86bd5a1c6fe8..fc606bb3bd81 100644 --- a/packages/SystemUI/res/values-sq/strings.xml +++ b/packages/SystemUI/res/values-sq/strings.xml @@ -77,8 +77,7 @@ <string name="compat_mode_on" msgid="4963711187149440884">"Zmadho për të mbushur ekranin"</string> <string name="compat_mode_off" msgid="7682459748279487945">"Shtrije për të mbushur ekranin"</string> <string name="global_action_screenshot" msgid="2760267567509131654">"Pamja e ekranit"</string> - <!-- no translation found for global_action_smart_lock_disabled (9097102067802412936) --> - <skip /> + <string name="global_action_smart_lock_disabled" msgid="9097102067802412936">"Smart Lock është çaktivizuar"</string> <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"dërgoi një imazh"</string> <string name="screenshot_saving_ticker" msgid="6519186952674544916">"Po ruan pamjen e ekranit..."</string> <string name="screenshot_saving_title" msgid="2298349784913287333">"Po ruan pamjen e ekranit…"</string> @@ -1163,4 +1162,19 @@ <string name="keyguard_try_fingerprint" msgid="2825130772993061165">"Përdor gjurmën e gishtit për ta hapur"</string> <string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"Kërkohet vërtetimi. Prek sensorin e gjurmës së gishtit për t\'u vërtetuar."</string> <string name="ongoing_phone_call_content_description" msgid="5332334388483099947">"Telefonatë në vazhdim"</string> + <string name="airplane_mode" msgid="2536350001462130668">"Modaliteti i aeroplanit"</string> + <string name="mobile_data_settings_title" msgid="3955246641380064901">"Të dhënat celulare"</string> + <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g>/<xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> + <string name="mobile_data_connection_active" msgid="944490013299018227">"Lidhur"</string> + <string name="mobile_data_off_summary" msgid="5621158216585822679">"Interneti nuk do të lidhet automatikisht"</string> + <string name="mobile_data_no_connection" msgid="1713872434869947377">"Nuk ka lidhje"</string> + <string name="non_carrier_network_unavailable" msgid="770049357024492372">"Nuk ofrohet asnjë rrjet tjetër"</string> + <string name="all_network_unavailable" msgid="4112774339909373349">"Nuk ofrohet asnjë rrjet"</string> + <string name="turn_on_wifi" msgid="1308379840799281023">"Wi-Fi"</string> + <string name="pref_title_network_details" msgid="1639455355897668883">"Detajet e rrjetit"</string> + <string name="tap_a_network_to_connect" msgid="1565073330852369558">"Trokit te një rrjet për t\'u lidhur"</string> + <string name="unlock_to_view_networks" msgid="5072880496312015676">"Shkyçe për të parë rrjetet"</string> + <string name="wifi_empty_list_wifi_on" msgid="3864376632067585377">"Po kërkon për rrjete…"</string> + <string name="wifi_failed_connect_message" msgid="4161863112079000071">"Lidhja me rrjetin dështoi"</string> + <string name="see_all_networks" msgid="3773666844913168122">"Shiko të gjitha"</string> </resources> diff --git a/packages/SystemUI/res/values-sr/strings.xml b/packages/SystemUI/res/values-sr/strings.xml index 83317d2faf8a..1c2ba5da61be 100644 --- a/packages/SystemUI/res/values-sr/strings.xml +++ b/packages/SystemUI/res/values-sr/strings.xml @@ -1168,4 +1168,19 @@ <string name="keyguard_try_fingerprint" msgid="2825130772993061165">"Отворите помоћу отиска прста"</string> <string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"Потребна је потврда идентитета. Додирните сензор за отисак прста да бисте потврдили идентитет."</string> <string name="ongoing_phone_call_content_description" msgid="5332334388483099947">"Актуелни телефонски позив"</string> + <string name="airplane_mode" msgid="2536350001462130668">"Режим рада у авиону"</string> + <string name="mobile_data_settings_title" msgid="3955246641380064901">"Мобилни подаци"</string> + <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g>/<xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> + <string name="mobile_data_connection_active" msgid="944490013299018227">"Повезано"</string> + <string name="mobile_data_off_summary" msgid="5621158216585822679">"Аутоматско повезивање на интернет није могуће"</string> + <string name="mobile_data_no_connection" msgid="1713872434869947377">"Веза није успостављена"</string> + <string name="non_carrier_network_unavailable" msgid="770049357024492372">"Није доступна ниједна друга мрежа"</string> + <string name="all_network_unavailable" msgid="4112774339909373349">"Нема доступних мрежа"</string> + <string name="turn_on_wifi" msgid="1308379840799281023">"WiFi"</string> + <string name="pref_title_network_details" msgid="1639455355897668883">"Детаљи о мрежи"</string> + <string name="tap_a_network_to_connect" msgid="1565073330852369558">"Додирните мрежу да бисте се повезали"</string> + <string name="unlock_to_view_networks" msgid="5072880496312015676">"Откључајте да бисте видели мреже"</string> + <string name="wifi_empty_list_wifi_on" msgid="3864376632067585377">"Траже се мреже…"</string> + <string name="wifi_failed_connect_message" msgid="4161863112079000071">"Повезивање са мрежом није успело"</string> + <string name="see_all_networks" msgid="3773666844913168122">"Погледајте све"</string> </resources> diff --git a/packages/SystemUI/res/values-sv/strings.xml b/packages/SystemUI/res/values-sv/strings.xml index 86b0fc7c9473..8c828a53e119 100644 --- a/packages/SystemUI/res/values-sv/strings.xml +++ b/packages/SystemUI/res/values-sv/strings.xml @@ -1162,4 +1162,19 @@ <string name="keyguard_try_fingerprint" msgid="2825130772993061165">"Öppna med fingeravtryck"</string> <string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"Autentisering krävs. Identifiera dig genom att trycka på fingeravtryckssensorn."</string> <string name="ongoing_phone_call_content_description" msgid="5332334388483099947">"Pågående samtal"</string> + <string name="airplane_mode" msgid="2536350001462130668">"Flygplansläge"</string> + <string name="mobile_data_settings_title" msgid="3955246641380064901">"Mobildata"</string> + <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g>/<xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> + <string name="mobile_data_connection_active" msgid="944490013299018227">"Ansluten"</string> + <string name="mobile_data_off_summary" msgid="5621158216585822679">"Du ansluts inte automatiskt till internet"</string> + <string name="mobile_data_no_connection" msgid="1713872434869947377">"Ingen anslutning"</string> + <string name="non_carrier_network_unavailable" msgid="770049357024492372">"Inga andra nätverk är tillgängliga"</string> + <string name="all_network_unavailable" msgid="4112774339909373349">"Det finns inga tillgängliga nätverk"</string> + <string name="turn_on_wifi" msgid="1308379840799281023">"Wifi"</string> + <string name="pref_title_network_details" msgid="1639455355897668883">"Nätverksinformation"</string> + <string name="tap_a_network_to_connect" msgid="1565073330852369558">"Tryck på ett nätverk för att ansluta"</string> + <string name="unlock_to_view_networks" msgid="5072880496312015676">"Lås upp för att visa nätverk"</string> + <string name="wifi_empty_list_wifi_on" msgid="3864376632067585377">"Söker efter nätverk …"</string> + <string name="wifi_failed_connect_message" msgid="4161863112079000071">"Det gick inte att ansluta till nätverket"</string> + <string name="see_all_networks" msgid="3773666844913168122">"Visa alla"</string> </resources> diff --git a/packages/SystemUI/res/values-sw/strings.xml b/packages/SystemUI/res/values-sw/strings.xml index 58401b5e1030..bf17d638b33c 100644 --- a/packages/SystemUI/res/values-sw/strings.xml +++ b/packages/SystemUI/res/values-sw/strings.xml @@ -1162,4 +1162,19 @@ <string name="keyguard_try_fingerprint" msgid="2825130772993061165">"Tumia alama ya kidole kufungua"</string> <string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"Uthibitishaji unahitajika. Gusa kitambua alama ya kidole ili uthibitishe."</string> <string name="ongoing_phone_call_content_description" msgid="5332334388483099947">"Simu inayoendelea"</string> + <string name="airplane_mode" msgid="2536350001462130668">"Hali ya ndegeni"</string> + <string name="mobile_data_settings_title" msgid="3955246641380064901">"Data ya mtandao wa simu"</string> + <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> + <string name="mobile_data_connection_active" msgid="944490013299018227">"Imeunganishwa"</string> + <string name="mobile_data_off_summary" msgid="5621158216585822679">"Intaneti haitaunganishwa kiotomatiki"</string> + <string name="mobile_data_no_connection" msgid="1713872434869947377">"Hakuna muunganisho"</string> + <string name="non_carrier_network_unavailable" msgid="770049357024492372">"Hakuna mitandao mingine inayopatikana"</string> + <string name="all_network_unavailable" msgid="4112774339909373349">"Hakuna mitandao inayopatikana"</string> + <string name="turn_on_wifi" msgid="1308379840799281023">"Wi-Fi"</string> + <string name="pref_title_network_details" msgid="1639455355897668883">"Maelezo ya mtandao"</string> + <string name="tap_a_network_to_connect" msgid="1565073330852369558">"Gusa mtandao ili uunganishe"</string> + <string name="unlock_to_view_networks" msgid="5072880496312015676">"Fungua ili uangalie mitandao"</string> + <string name="wifi_empty_list_wifi_on" msgid="3864376632067585377">"Inatafuta mitandao…"</string> + <string name="wifi_failed_connect_message" msgid="4161863112079000071">"Imeshindwa kuunganisha kwenye mtandao"</string> + <string name="see_all_networks" msgid="3773666844913168122">"Angalia yote"</string> </resources> diff --git a/packages/SystemUI/res/values-sw600dp/dimens.xml b/packages/SystemUI/res/values-sw600dp/dimens.xml index c2aad2d11c1d..d921d4958090 100644 --- a/packages/SystemUI/res/values-sw600dp/dimens.xml +++ b/packages/SystemUI/res/values-sw600dp/dimens.xml @@ -103,4 +103,7 @@ <!-- When split shade is used, this panel should be aligned to the top --> <dimen name="qs_detail_margin_top">0dp</dimen> + + <!-- Internet panel related dimensions --> + <dimen name="internet_dialog_list_max_width">624dp</dimen> </resources> diff --git a/packages/SystemUI/res/values-ta/strings.xml b/packages/SystemUI/res/values-ta/strings.xml index efb704f523b8..cf1017763d60 100644 --- a/packages/SystemUI/res/values-ta/strings.xml +++ b/packages/SystemUI/res/values-ta/strings.xml @@ -1162,4 +1162,19 @@ <string name="keyguard_try_fingerprint" msgid="2825130772993061165">"கைரேகையைப் பயன்படுத்தி திறந்திடுங்கள்"</string> <string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"அங்கீகாரம் தேவை. கைரேகை சென்சாரைத் தொட்டு அங்கீகரியுங்கள்."</string> <string name="ongoing_phone_call_content_description" msgid="5332334388483099947">"செயலில் உள்ள மொபைல் அழைப்பு"</string> + <string name="airplane_mode" msgid="2536350001462130668">"விமானப் பயன்முறை"</string> + <string name="mobile_data_settings_title" msgid="3955246641380064901">"மொபைல் டேட்டா"</string> + <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> + <string name="mobile_data_connection_active" msgid="944490013299018227">"இணைக்கப்பட்டது"</string> + <string name="mobile_data_off_summary" msgid="5621158216585822679">"இணையத்துடன் தானாகவே இணைக்காது"</string> + <string name="mobile_data_no_connection" msgid="1713872434869947377">"இணைப்பு இல்லை"</string> + <string name="non_carrier_network_unavailable" msgid="770049357024492372">"வேறு நெட்வொர்க்குகள் எதுவும் கிடைக்கவில்லை"</string> + <string name="all_network_unavailable" msgid="4112774339909373349">"நெட்வொர்க்குகள் எதுவும் கிடைக்கவில்லை"</string> + <string name="turn_on_wifi" msgid="1308379840799281023">"வைஃபை"</string> + <string name="pref_title_network_details" msgid="1639455355897668883">"நெட்வொர்க் விவரங்கள்"</string> + <string name="tap_a_network_to_connect" msgid="1565073330852369558">"இணையத்துடன் இணைய நெட்வொர்க்கைத் தட்டுங்கள்"</string> + <string name="unlock_to_view_networks" msgid="5072880496312015676">"நெட்வொர்க்குகளைப் பார்க்க அன்லாக் செய்யுங்கள்"</string> + <string name="wifi_empty_list_wifi_on" msgid="3864376632067585377">"நெட்வொர்க்குகளைத் தேடுகிறது…"</string> + <string name="wifi_failed_connect_message" msgid="4161863112079000071">"நெட்வொர்க்குடன் இணைக்க முடியவில்லை"</string> + <string name="see_all_networks" msgid="3773666844913168122">"அனைத்தையும் காட்டு"</string> </resources> diff --git a/packages/SystemUI/res/values-te/strings.xml b/packages/SystemUI/res/values-te/strings.xml index 654605991aaf..145de48d0553 100644 --- a/packages/SystemUI/res/values-te/strings.xml +++ b/packages/SystemUI/res/values-te/strings.xml @@ -77,8 +77,7 @@ <string name="compat_mode_on" msgid="4963711187149440884">"స్క్రీన్కు నింపేలా జూమ్ చేయండి"</string> <string name="compat_mode_off" msgid="7682459748279487945">"స్క్రీన్కు నింపేలా విస్తరించండి"</string> <string name="global_action_screenshot" msgid="2760267567509131654">"స్క్రీన్షాట్"</string> - <!-- no translation found for global_action_smart_lock_disabled (9097102067802412936) --> - <skip /> + <string name="global_action_smart_lock_disabled" msgid="9097102067802412936">"Smart Lock డిజేబుల్ చేయబడింది"</string> <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"ఇమేజ్ను పంపారు"</string> <string name="screenshot_saving_ticker" msgid="6519186952674544916">"స్క్రీన్షాట్ను సేవ్ చేస్తోంది…"</string> <string name="screenshot_saving_title" msgid="2298349784913287333">"స్క్రీన్షాట్ను సేవ్ చేస్తోంది…"</string> @@ -276,8 +275,8 @@ <string name="accessibility_quick_settings_bluetooth_connected" msgid="5237625393869747261">"బ్లూటూత్ కనెక్ట్ చేయబడింది."</string> <string name="accessibility_quick_settings_bluetooth_changed_off" msgid="3344226652293797283">"బ్లూటూత్ ఆఫ్ చేయబడింది."</string> <string name="accessibility_quick_settings_bluetooth_changed_on" msgid="1263282011749437549">"బ్లూటూత్ ఆన్ చేయబడింది."</string> - <string name="accessibility_quick_settings_location_off" msgid="6122523378294740598">"స్థాన నివేదన ఆఫ్లో ఉంది."</string> - <string name="accessibility_quick_settings_location_on" msgid="6869947200325467243">"స్థాన నివేదన ఆన్లో ఉంది."</string> + <string name="accessibility_quick_settings_location_off" msgid="6122523378294740598">"లొకేషన్ రిపోర్టింగ్ ఆఫ్లో ఉంది."</string> + <string name="accessibility_quick_settings_location_on" msgid="6869947200325467243">"లొకేషన్ రిపోర్టింగ్ ఆన్లో ఉంది."</string> <string name="accessibility_quick_settings_location_changed_off" msgid="5132776369388699133">"స్థాన నివేదన ఆఫ్ చేయబడింది."</string> <string name="accessibility_quick_settings_location_changed_on" msgid="7159115433070112154">"స్థాన నివేదన ఆన్ చేయబడింది."</string> <string name="accessibility_quick_settings_alarm" msgid="558094529584082090">"<xliff:g id="TIME">%s</xliff:g>కి అలారం సెట్ చేయబడింది."</string> @@ -310,7 +309,7 @@ <string name="data_usage_disabled_dialog_enable" msgid="2796648546086408937">"పునఃప్రారంభించు"</string> <string name="gps_notification_searching_text" msgid="231304732649348313">"GPS కోసం శోధిస్తోంది"</string> <string name="gps_notification_found_text" msgid="3145873880174658526">"స్థానం GPS ద్వారా సెట్ చేయబడింది"</string> - <string name="accessibility_location_active" msgid="2845747916764660369">"స్థాన రిక్వెస్ట్లు సక్రియంగా ఉన్నాయి"</string> + <string name="accessibility_location_active" msgid="2845747916764660369">"లొకేషన్ రిక్వెస్ట్లు యాక్టివ్గా ఉన్నాయి"</string> <string name="accessibility_sensors_off_active" msgid="2619725434618911551">"సెన్సార్లు ఆఫ్ యాక్టివ్లో ఉంది"</string> <string name="accessibility_clear_all" msgid="970525598287244592">"అన్ని నోటిఫికేషన్లను క్లియర్ చేయండి."</string> <string name="notification_group_overflow_indicator" msgid="7605120293801012648">"+ <xliff:g id="NUMBER">%s</xliff:g>"</string> @@ -570,7 +569,7 @@ <string name="monitoring_description_personal_profile_named_vpn" msgid="8179722332380953673">"మీ వ్యక్తిగత ప్రొఫైల్ ఇమెయిల్లు, యాప్లు మరియు వెబ్సైట్లతో సహా మీ నెట్వర్క్ కార్యాచరణను పర్యవేక్షించగల <xliff:g id="VPN_APP">%1$s</xliff:g>కి కనెక్ట్ చేయబడింది."</string> <string name="monitoring_description_do_header_generic" msgid="6130190408164834986">"మీ పరికరం <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g> ద్వారా నిర్వహించబడుతోంది."</string> <string name="monitoring_description_do_header_with_name" msgid="2696255132542779511">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> మీ పరికరాన్ని నిర్వహించడానికి <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g>ని ఉపయోగిస్తుంది."</string> - <string name="monitoring_description_do_body" msgid="7700878065625769970">"మీ పరికరంతో అనుబంధించబడిన సెట్టింగ్లు, కార్పొరేట్ యాక్సెస్, యాప్లు, డేటా మరియు మీ పరికరం యొక్క స్థాన సమాచారాన్ని మీ నిర్వాహకులు పర్యవేక్షించగలరు మరియు నిర్వహించగలరు."</string> + <string name="monitoring_description_do_body" msgid="7700878065625769970">"మీ పరికరంతో అనుబంధించబడిన సెట్టింగ్లు, కార్పొరేట్ యాక్సెస్, యాప్లు, డేటా మరియు మీ పరికరం యొక్క లొకేషన్ సమాచారాన్ని మీ అడ్మిన్ పర్యవేక్షించగలరు, మేనేజ్ చేయగలరు."</string> <string name="monitoring_description_do_learn_more_separator" msgid="1467280496376492558">" "</string> <string name="monitoring_description_do_learn_more" msgid="645149183455573790">"మరింత తెలుసుకోండి"</string> <string name="monitoring_description_do_body_vpn" msgid="7699280130070502303">"మీరు <xliff:g id="VPN_APP">%1$s</xliff:g>కి కనెక్ట్ చేయబడ్డారు, ఇది ఇమెయిల్లు, యాప్లు మరియు వెబ్సైట్లతో సహా మీ వ్యక్తిగత నెట్వర్క్ కార్యాచరణను పర్యవేక్షించగలదు."</string> @@ -871,7 +870,7 @@ <string name="nav_bar_layout" msgid="4716392484772899544">"లేఅవుట్"</string> <string name="left_nav_bar_button_type" msgid="2634852842345192790">"అత్యంత ఎడమ వైపు ఉన్న బటన్ రకం"</string> <string name="right_nav_bar_button_type" msgid="4472566498647364715">"అత్యంత కుడివైపు ఉన్న బటన్ రకం"</string> - <string name="nav_bar_default" msgid="8386559913240761526">"(డిఫాల్ట్)"</string> + <string name="nav_bar_default" msgid="8386559913240761526">"(ఆటోమేటిక్)"</string> <string-array name="nav_bar_buttons"> <item msgid="2681220472659720036">"క్లిప్బోర్డ్"</item> <item msgid="4795049793625565683">"కీకోడ్"</item> @@ -902,12 +901,12 @@ <string name="tuner_time" msgid="2450785840990529997">"సమయం"</string> <string-array name="clock_options"> <item msgid="3986445361435142273">"గంటలు, నిమిషాలు మరియు సెకన్లను చూపు"</item> - <item msgid="1271006222031257266">"గంటలు మరియు నిమిషాలను చూపు (డిఫాల్ట్)"</item> + <item msgid="1271006222031257266">"గంటలు, నిమిషాలను చూపు (ఆటోమేటిక్)"</item> <item msgid="6135970080453877218">"ఈ చిహ్నాన్ని చూపవద్దు"</item> </string-array> <string-array name="battery_options"> <item msgid="7714004721411852551">"ఎల్లప్పుడూ శాతాన్ని చూపు"</item> - <item msgid="3805744470661798712">"ఛార్జ్ అవుతున్నప్పుడు శాతాన్ని చూపు (డిఫాల్ట్)"</item> + <item msgid="3805744470661798712">"ఛార్జ్ అవుతున్నప్పుడు శాతాన్ని చూపు (ఆటోమేటిక్)"</item> <item msgid="8619482474544321778">"ఈ చిహ్నాన్ని చూపవద్దు"</item> </string-array> <string name="tuner_low_priority" msgid="8412666814123009820">"తక్కువ ప్రాధాన్యత నోటిఫికేషన్ చిహ్నాలను చూపించు"</string> @@ -1163,4 +1162,19 @@ <string name="keyguard_try_fingerprint" msgid="2825130772993061165">"తెరవడానికి వేలిముద్రను ఉపయోగించండి"</string> <string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"ప్రామాణీకరణ అవసరం. ప్రామాణీకరించడానికి వేలిముద్ర సెన్సార్ను తాకండి."</string> <string name="ongoing_phone_call_content_description" msgid="5332334388483099947">"ఫోన్ కాల్ జరుగుతోంది"</string> + <string name="airplane_mode" msgid="2536350001462130668">"విమానం మోడ్"</string> + <string name="mobile_data_settings_title" msgid="3955246641380064901">"మొబైల్ డేటా"</string> + <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> + <string name="mobile_data_connection_active" msgid="944490013299018227">"కనెక్ట్ చేయబడింది"</string> + <string name="mobile_data_off_summary" msgid="5621158216585822679">"ఇంటర్నెట్ ఆటోమెటిక్గా కనెక్ట్ అవ్వదు"</string> + <string name="mobile_data_no_connection" msgid="1713872434869947377">"కనెక్షన్ లేదు"</string> + <string name="non_carrier_network_unavailable" msgid="770049357024492372">"ఇతర నెట్వర్క్లేవీ అందుబాటులో లేవు"</string> + <string name="all_network_unavailable" msgid="4112774339909373349">"నెట్వర్క్లు అందుబాటులో లేవు"</string> + <string name="turn_on_wifi" msgid="1308379840799281023">"Wi‑Fi"</string> + <string name="pref_title_network_details" msgid="1639455355897668883">"నెట్వర్క్ వివరాలు"</string> + <string name="tap_a_network_to_connect" msgid="1565073330852369558">"కనెక్ట్ చేయడానికి నెట్వర్క్ను ట్యాప్ చేయండి"</string> + <string name="unlock_to_view_networks" msgid="5072880496312015676">"నెట్వర్క్లను చూడటానికి అన్లాక్ చేయండి"</string> + <string name="wifi_empty_list_wifi_on" msgid="3864376632067585377">"నెట్వర్క్ల కోసం సెర్చ్ చేస్తోంది…"</string> + <string name="wifi_failed_connect_message" msgid="4161863112079000071">"నెట్వర్క్కు కనెక్ట్ చేయడం విఫలమైంది"</string> + <string name="see_all_networks" msgid="3773666844913168122">"అన్నీ చూడండి"</string> </resources> diff --git a/packages/SystemUI/res/values-th/strings.xml b/packages/SystemUI/res/values-th/strings.xml index df358a3c27d8..d998a0056537 100644 --- a/packages/SystemUI/res/values-th/strings.xml +++ b/packages/SystemUI/res/values-th/strings.xml @@ -1162,4 +1162,19 @@ <string name="keyguard_try_fingerprint" msgid="2825130772993061165">"ใช้ลายนิ้วมือเพื่อเปิด"</string> <string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"ต้องมีการตรวจสอบสิทธิ์ แตะเซ็นเซอร์ลายนิ้วมือเพื่อตรวจสอบสิทธิ์"</string> <string name="ongoing_phone_call_content_description" msgid="5332334388483099947">"กำลังโทรอยู่"</string> + <string name="airplane_mode" msgid="2536350001462130668">"โหมดบนเครื่องบิน"</string> + <string name="mobile_data_settings_title" msgid="3955246641380064901">"อินเทอร์เน็ตมือถือ"</string> + <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> + <string name="mobile_data_connection_active" msgid="944490013299018227">"เชื่อมต่อแล้ว"</string> + <string name="mobile_data_off_summary" msgid="5621158216585822679">"อินเทอร์เน็ตจะไม่เชื่อมต่ออัตโนมัติ"</string> + <string name="mobile_data_no_connection" msgid="1713872434869947377">"ไม่มีการเชื่อมต่อ"</string> + <string name="non_carrier_network_unavailable" msgid="770049357024492372">"ไม่มีเครือข่ายอื่นๆ ที่พร้อมใช้งาน"</string> + <string name="all_network_unavailable" msgid="4112774339909373349">"ไม่มีเครือข่ายที่พร้อมใช้งาน"</string> + <string name="turn_on_wifi" msgid="1308379840799281023">"Wi-Fi"</string> + <string name="pref_title_network_details" msgid="1639455355897668883">"รายละเอียดเครือข่าย"</string> + <string name="tap_a_network_to_connect" msgid="1565073330852369558">"แตะเครือข่ายเพื่อเชื่อมต่อ"</string> + <string name="unlock_to_view_networks" msgid="5072880496312015676">"ปลดล็อกเพื่อดูเครือข่าย"</string> + <string name="wifi_empty_list_wifi_on" msgid="3864376632067585377">"กำลังค้นหาเครือข่าย…"</string> + <string name="wifi_failed_connect_message" msgid="4161863112079000071">"เชื่อมต่อเครือข่ายไม่สำเร็จ"</string> + <string name="see_all_networks" msgid="3773666844913168122">"ดูทั้งหมด"</string> </resources> diff --git a/packages/SystemUI/res/values-tl/strings.xml b/packages/SystemUI/res/values-tl/strings.xml index a74345d4f0ca..c5fb7feff7fc 100644 --- a/packages/SystemUI/res/values-tl/strings.xml +++ b/packages/SystemUI/res/values-tl/strings.xml @@ -1162,4 +1162,19 @@ <string name="keyguard_try_fingerprint" msgid="2825130772993061165">"Gamitin ang fingerprint para buksan"</string> <string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"Kailangan ng pag-authenticate. Pindutin ang sensor para sa fingerprint para mag-authenticate."</string> <string name="ongoing_phone_call_content_description" msgid="5332334388483099947">"Kasalukuyang may tawag sa telepono"</string> + <string name="airplane_mode" msgid="2536350001462130668">"Airplane mode"</string> + <string name="mobile_data_settings_title" msgid="3955246641380064901">"Mobile data"</string> + <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> + <string name="mobile_data_connection_active" msgid="944490013299018227">"Nakakonekta"</string> + <string name="mobile_data_off_summary" msgid="5621158216585822679">"Hindi awtomatikong kokonekta ang Internet"</string> + <string name="mobile_data_no_connection" msgid="1713872434869947377">"Walang koneksyon"</string> + <string name="non_carrier_network_unavailable" msgid="770049357024492372">"Walang available na iba pang network"</string> + <string name="all_network_unavailable" msgid="4112774339909373349">"Walang available na network"</string> + <string name="turn_on_wifi" msgid="1308379840799281023">"Wi‑Fi"</string> + <string name="pref_title_network_details" msgid="1639455355897668883">"Mga detalye ng network"</string> + <string name="tap_a_network_to_connect" msgid="1565073330852369558">"Mag-tap ng network para kumonekta"</string> + <string name="unlock_to_view_networks" msgid="5072880496312015676">"I-unlock para tingnan ang mga network"</string> + <string name="wifi_empty_list_wifi_on" msgid="3864376632067585377">"Naghahanap ng mga network…"</string> + <string name="wifi_failed_connect_message" msgid="4161863112079000071">"Hind nakakonekta sa network"</string> + <string name="see_all_networks" msgid="3773666844913168122">"Tingnan lahat"</string> </resources> diff --git a/packages/SystemUI/res/values-tr/strings.xml b/packages/SystemUI/res/values-tr/strings.xml index 51e324588bf3..39ccec1c4d63 100644 --- a/packages/SystemUI/res/values-tr/strings.xml +++ b/packages/SystemUI/res/values-tr/strings.xml @@ -1162,4 +1162,19 @@ <string name="keyguard_try_fingerprint" msgid="2825130772993061165">"Açmak için parmak izi kullanın"</string> <string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"Kimlik doğrulaması gerekiyor. Kimlik doğrulaması için parmak izi sensörüne dokunun."</string> <string name="ongoing_phone_call_content_description" msgid="5332334388483099947">"Devam eden telefon görüşmesi"</string> + <string name="airplane_mode" msgid="2536350001462130668">"Uçak modu"</string> + <string name="mobile_data_settings_title" msgid="3955246641380064901">"Mobil veri"</string> + <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> + <string name="mobile_data_connection_active" msgid="944490013299018227">"Bağlı"</string> + <string name="mobile_data_off_summary" msgid="5621158216585822679">"İnternete otomatik olarak bağlanmaz"</string> + <string name="mobile_data_no_connection" msgid="1713872434869947377">"Bağlantı yok"</string> + <string name="non_carrier_network_unavailable" msgid="770049357024492372">"Kullanılabilir başka ağ yok"</string> + <string name="all_network_unavailable" msgid="4112774339909373349">"Kullanılabilir ağ yok"</string> + <string name="turn_on_wifi" msgid="1308379840799281023">"Kablosuz"</string> + <string name="pref_title_network_details" msgid="1639455355897668883">"Ağ bilgileri"</string> + <string name="tap_a_network_to_connect" msgid="1565073330852369558">"Bağlanmak için bir ağa dokunun"</string> + <string name="unlock_to_view_networks" msgid="5072880496312015676">"Ağları görmek için kilidi açın"</string> + <string name="wifi_empty_list_wifi_on" msgid="3864376632067585377">"Ağlar aranıyor…"</string> + <string name="wifi_failed_connect_message" msgid="4161863112079000071">"Ağa bağlanılamadı"</string> + <string name="see_all_networks" msgid="3773666844913168122">"Tümünü göster"</string> </resources> diff --git a/packages/SystemUI/res/values-uk/strings.xml b/packages/SystemUI/res/values-uk/strings.xml index b1febf53f736..97cdf35c3d2a 100644 --- a/packages/SystemUI/res/values-uk/strings.xml +++ b/packages/SystemUI/res/values-uk/strings.xml @@ -1174,4 +1174,19 @@ <string name="keyguard_try_fingerprint" msgid="2825130772993061165">"Щоб відкрити, використайте відбиток пальця"</string> <string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"Пройдіть автентифікацію. Для цього торкніться сканера відбитків пальців."</string> <string name="ongoing_phone_call_content_description" msgid="5332334388483099947">"Активний телефонний виклик"</string> + <string name="airplane_mode" msgid="2536350001462130668">"Режим польоту"</string> + <string name="mobile_data_settings_title" msgid="3955246641380064901">"Мобільний трафік"</string> + <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g>/<xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> + <string name="mobile_data_connection_active" msgid="944490013299018227">"Підключено"</string> + <string name="mobile_data_off_summary" msgid="5621158216585822679">"Автоматичне інтернет-з’єднання вимкнено"</string> + <string name="mobile_data_no_connection" msgid="1713872434869947377">"Немає з\'єднання"</string> + <string name="non_carrier_network_unavailable" msgid="770049357024492372">"Інші мережі недоступні"</string> + <string name="all_network_unavailable" msgid="4112774339909373349">"Немає доступних мереж"</string> + <string name="turn_on_wifi" msgid="1308379840799281023">"Wi-Fi"</string> + <string name="pref_title_network_details" msgid="1639455355897668883">"Деталі мережі"</string> + <string name="tap_a_network_to_connect" msgid="1565073330852369558">"Натисніть мережу, до якої потрібно підключитися"</string> + <string name="unlock_to_view_networks" msgid="5072880496312015676">"Розблокувати, щоб переглянути мережі"</string> + <string name="wifi_empty_list_wifi_on" msgid="3864376632067585377">"Пошук мереж…"</string> + <string name="wifi_failed_connect_message" msgid="4161863112079000071">"Не вдалося підключитися до мережі"</string> + <string name="see_all_networks" msgid="3773666844913168122">"Показати все"</string> </resources> diff --git a/packages/SystemUI/res/values-ur/strings.xml b/packages/SystemUI/res/values-ur/strings.xml index fcb53a466714..558eb0f7693f 100644 --- a/packages/SystemUI/res/values-ur/strings.xml +++ b/packages/SystemUI/res/values-ur/strings.xml @@ -1162,4 +1162,19 @@ <string name="keyguard_try_fingerprint" msgid="2825130772993061165">"کھولنے کے لیے فنگر پرنٹ کا استعمال کریں"</string> <string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"توثیق مطلوب ہے۔ توثیق کرنے کے لیے فنگر پرنٹ سینسر کو ٹچ کریں۔"</string> <string name="ongoing_phone_call_content_description" msgid="5332334388483099947">"جاری فون کال"</string> + <string name="airplane_mode" msgid="2536350001462130668">"ہوائی جہاز وضع"</string> + <string name="mobile_data_settings_title" msgid="3955246641380064901">"موبائل ڈیٹا"</string> + <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="NETWORKMODE">%2$s</xliff:g> / <xliff:g id="STATE">%1$s</xliff:g>"</string> + <string name="mobile_data_connection_active" msgid="944490013299018227">"منسلک ہے"</string> + <string name="mobile_data_off_summary" msgid="5621158216585822679">"انٹرنیٹ خود کار طور پر منسلک نہیں ہوگا"</string> + <string name="mobile_data_no_connection" msgid="1713872434869947377">"کوئی کنکشن نہیں"</string> + <string name="non_carrier_network_unavailable" msgid="770049357024492372">"کوئی دوسرا نیٹ ورک دستیاب نہیں ہے"</string> + <string name="all_network_unavailable" msgid="4112774339909373349">"کوئی نیٹ ورکس دستیاب نہیں ہیں"</string> + <string name="turn_on_wifi" msgid="1308379840799281023">"Wi‑Fi"</string> + <string name="pref_title_network_details" msgid="1639455355897668883">"نیٹ ورک کی تفصیلات"</string> + <string name="tap_a_network_to_connect" msgid="1565073330852369558">"منسلک کرنے کے لیے نیٹ ورک پر تھپتھپائیں"</string> + <string name="unlock_to_view_networks" msgid="5072880496312015676">"نیٹ ورکس کو دیکھنے کے لیے غیر مقفل کریں"</string> + <string name="wifi_empty_list_wifi_on" msgid="3864376632067585377">"نیٹ ورکس تلاش کیے جا رہے ہیں…"</string> + <string name="wifi_failed_connect_message" msgid="4161863112079000071">"نیٹ ورک سے منسلک ہونے میں ناکام ہو گیا"</string> + <string name="see_all_networks" msgid="3773666844913168122">"سبھی دیکھیں"</string> </resources> diff --git a/packages/SystemUI/res/values-uz/strings.xml b/packages/SystemUI/res/values-uz/strings.xml index 7822b84180e1..e5b9e5ab7bdc 100644 --- a/packages/SystemUI/res/values-uz/strings.xml +++ b/packages/SystemUI/res/values-uz/strings.xml @@ -1162,4 +1162,19 @@ <string name="keyguard_try_fingerprint" msgid="2825130772993061165">"Ochish uchun barmoq izidan foydalaning"</string> <string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"Haqiqiylikni tekshirish talab etiladi. Autentifikatsiya uchun barmoq izi skaneriga tegining."</string> <string name="ongoing_phone_call_content_description" msgid="5332334388483099947">"Joriy telefon chaqiruvi"</string> + <string name="airplane_mode" msgid="2536350001462130668">"Parvoz rejimi"</string> + <string name="mobile_data_settings_title" msgid="3955246641380064901">"Mobil internet"</string> + <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> + <string name="mobile_data_connection_active" msgid="944490013299018227">"Ulandi"</string> + <string name="mobile_data_off_summary" msgid="5621158216585822679">"Internet avtomatik ravishda ulanmaydi"</string> + <string name="mobile_data_no_connection" msgid="1713872434869947377">"Internetga ulanmagansiz"</string> + <string name="non_carrier_network_unavailable" msgid="770049357024492372">"Boshqa tarmoqlar mavjud emas"</string> + <string name="all_network_unavailable" msgid="4112774339909373349">"Hech qanday tarmoq mavjud emas"</string> + <string name="turn_on_wifi" msgid="1308379840799281023">"Wi‑Fi"</string> + <string name="pref_title_network_details" msgid="1639455355897668883">"Tarmoq tafsilotlari"</string> + <string name="tap_a_network_to_connect" msgid="1565073330852369558">"Ulanish uchun tarmoq ustiga bosing"</string> + <string name="unlock_to_view_networks" msgid="5072880496312015676">"Tarmoqlarni koʻrish uchun qulfdan chiqaring"</string> + <string name="wifi_empty_list_wifi_on" msgid="3864376632067585377">"Tarmoqlar qidirilmoqda…"</string> + <string name="wifi_failed_connect_message" msgid="4161863112079000071">"Tarmoqqa ulanmadi"</string> + <string name="see_all_networks" msgid="3773666844913168122">"Hammasi"</string> </resources> diff --git a/packages/SystemUI/res/values-vi/strings.xml b/packages/SystemUI/res/values-vi/strings.xml index 5a1ea4c3fc3a..cdd6cfbcc648 100644 --- a/packages/SystemUI/res/values-vi/strings.xml +++ b/packages/SystemUI/res/values-vi/strings.xml @@ -1162,4 +1162,19 @@ <string name="keyguard_try_fingerprint" msgid="2825130772993061165">"Dùng vân tay để mở"</string> <string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"Bạn cần phải xác thực. Hãy chạm vào cảm biến vân tay để xác thực."</string> <string name="ongoing_phone_call_content_description" msgid="5332334388483099947">"Đang gọi điện thoại"</string> + <string name="airplane_mode" msgid="2536350001462130668">"Chế độ trên máy bay"</string> + <string name="mobile_data_settings_title" msgid="3955246641380064901">"Dữ liệu di động"</string> + <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g>/<xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> + <string name="mobile_data_connection_active" msgid="944490013299018227">"Đã kết nối"</string> + <string name="mobile_data_off_summary" msgid="5621158216585822679">"Sẽ không tự động kết nối Internet"</string> + <string name="mobile_data_no_connection" msgid="1713872434869947377">"Không có kết nối mạng"</string> + <string name="non_carrier_network_unavailable" msgid="770049357024492372">"Không có mạng nào khác"</string> + <string name="all_network_unavailable" msgid="4112774339909373349">"Không có mạng"</string> + <string name="turn_on_wifi" msgid="1308379840799281023">"Wi‑Fi"</string> + <string name="pref_title_network_details" msgid="1639455355897668883">"Thông tin chi tiết về mạng"</string> + <string name="tap_a_network_to_connect" msgid="1565073330852369558">"Nhấn vào một mạng để kết nối"</string> + <string name="unlock_to_view_networks" msgid="5072880496312015676">"Mở khóa để xem mạng"</string> + <string name="wifi_empty_list_wifi_on" msgid="3864376632067585377">"Đang tìm mạng…"</string> + <string name="wifi_failed_connect_message" msgid="4161863112079000071">"Không kết nối được với mạng"</string> + <string name="see_all_networks" msgid="3773666844913168122">"Xem tất cả"</string> </resources> diff --git a/packages/SystemUI/res/values-zh-rCN/strings.xml b/packages/SystemUI/res/values-zh-rCN/strings.xml index b1968ee19535..22399b2254fa 100644 --- a/packages/SystemUI/res/values-zh-rCN/strings.xml +++ b/packages/SystemUI/res/values-zh-rCN/strings.xml @@ -1162,4 +1162,19 @@ <string name="keyguard_try_fingerprint" msgid="2825130772993061165">"使用指纹即可打开"</string> <string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"需要进行身份验证。请轻触指纹传感器以验证身份。"</string> <string name="ongoing_phone_call_content_description" msgid="5332334388483099947">"正在进行通话"</string> + <string name="airplane_mode" msgid="2536350001462130668">"飞行模式"</string> + <string name="mobile_data_settings_title" msgid="3955246641380064901">"移动数据网络"</string> + <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> + <string name="mobile_data_connection_active" msgid="944490013299018227">"已连接"</string> + <string name="mobile_data_off_summary" msgid="5621158216585822679">"不会自动连接到互联网"</string> + <string name="mobile_data_no_connection" msgid="1713872434869947377">"无网络连接"</string> + <string name="non_carrier_network_unavailable" msgid="770049357024492372">"没有其他可用网络"</string> + <string name="all_network_unavailable" msgid="4112774339909373349">"没有可用网络"</string> + <string name="turn_on_wifi" msgid="1308379840799281023">"WLAN"</string> + <string name="pref_title_network_details" msgid="1639455355897668883">"网络详情"</string> + <string name="tap_a_network_to_connect" msgid="1565073330852369558">"点按要连接的网络"</string> + <string name="unlock_to_view_networks" msgid="5072880496312015676">"解锁即可查看网络"</string> + <string name="wifi_empty_list_wifi_on" msgid="3864376632067585377">"正在搜索网络…"</string> + <string name="wifi_failed_connect_message" msgid="4161863112079000071">"未能连接到网络"</string> + <string name="see_all_networks" msgid="3773666844913168122">"查看全部"</string> </resources> diff --git a/packages/SystemUI/res/values-zh-rHK/strings.xml b/packages/SystemUI/res/values-zh-rHK/strings.xml index 7c048eab9893..cbc752baf0c4 100644 --- a/packages/SystemUI/res/values-zh-rHK/strings.xml +++ b/packages/SystemUI/res/values-zh-rHK/strings.xml @@ -1162,4 +1162,19 @@ <string name="keyguard_try_fingerprint" msgid="2825130772993061165">"使用指紋即可開啟"</string> <string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"需要驗證。掂一下指紋感應器就可以驗證。"</string> <string name="ongoing_phone_call_content_description" msgid="5332334388483099947">"通話中"</string> + <string name="airplane_mode" msgid="2536350001462130668">"飛行模式"</string> + <string name="mobile_data_settings_title" msgid="3955246641380064901">"流動數據"</string> + <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g>/<xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> + <string name="mobile_data_connection_active" msgid="944490013299018227">"已連線"</string> + <string name="mobile_data_off_summary" msgid="5621158216585822679">"不會自動連線至互聯網"</string> + <string name="mobile_data_no_connection" msgid="1713872434869947377">"沒有連線"</string> + <string name="non_carrier_network_unavailable" msgid="770049357024492372">"沒有可用的其他網絡"</string> + <string name="all_network_unavailable" msgid="4112774339909373349">"沒有可用的網絡"</string> + <string name="turn_on_wifi" msgid="1308379840799281023">"Wi-Fi"</string> + <string name="pref_title_network_details" msgid="1639455355897668883">"網絡詳細資料"</string> + <string name="tap_a_network_to_connect" msgid="1565073330852369558">"輕按網絡以連線"</string> + <string name="unlock_to_view_networks" msgid="5072880496312015676">"解鎖即可查看網絡"</string> + <string name="wifi_empty_list_wifi_on" msgid="3864376632067585377">"正在搜尋網絡…"</string> + <string name="wifi_failed_connect_message" msgid="4161863112079000071">"無法連接網絡"</string> + <string name="see_all_networks" msgid="3773666844913168122">"顯示全部"</string> </resources> diff --git a/packages/SystemUI/res/values-zh-rTW/strings.xml b/packages/SystemUI/res/values-zh-rTW/strings.xml index 8647aed8c8bf..5900a973038a 100644 --- a/packages/SystemUI/res/values-zh-rTW/strings.xml +++ b/packages/SystemUI/res/values-zh-rTW/strings.xml @@ -1162,4 +1162,19 @@ <string name="keyguard_try_fingerprint" msgid="2825130772993061165">"使用指紋即可開啟"</string> <string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"需要驗證。輕觸指紋感應器即可進行驗證。"</string> <string name="ongoing_phone_call_content_description" msgid="5332334388483099947">"通話中"</string> + <string name="airplane_mode" msgid="2536350001462130668">"飛航模式"</string> + <string name="mobile_data_settings_title" msgid="3955246641380064901">"行動數據"</string> + <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g>/<xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> + <string name="mobile_data_connection_active" msgid="944490013299018227">"已連線"</string> + <string name="mobile_data_off_summary" msgid="5621158216585822679">"不會自動連上網際網路"</string> + <string name="mobile_data_no_connection" msgid="1713872434869947377">"沒有網路連線"</string> + <string name="non_carrier_network_unavailable" msgid="770049357024492372">"沒有可用的其他網路"</string> + <string name="all_network_unavailable" msgid="4112774339909373349">"沒有可用的網路"</string> + <string name="turn_on_wifi" msgid="1308379840799281023">"Wi‑Fi"</string> + <string name="pref_title_network_details" msgid="1639455355897668883">"網路詳細資料"</string> + <string name="tap_a_network_to_connect" msgid="1565073330852369558">"輕觸要連線的網路"</string> + <string name="unlock_to_view_networks" msgid="5072880496312015676">"解鎖螢幕即可查看網路"</string> + <string name="wifi_empty_list_wifi_on" msgid="3864376632067585377">"正在搜尋網路…"</string> + <string name="wifi_failed_connect_message" msgid="4161863112079000071">"無法連上網路"</string> + <string name="see_all_networks" msgid="3773666844913168122">"查看全部"</string> </resources> diff --git a/packages/SystemUI/res/values-zu/strings.xml b/packages/SystemUI/res/values-zu/strings.xml index b0c8121925ca..14d30a4ecfa7 100644 --- a/packages/SystemUI/res/values-zu/strings.xml +++ b/packages/SystemUI/res/values-zu/strings.xml @@ -1162,4 +1162,19 @@ <string name="keyguard_try_fingerprint" msgid="2825130772993061165">"Sebenzisa izigxivizo zeminwe ukuvula"</string> <string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"Ukufakazela ubuqiniso budingekile. Thinta inzwa yezigxivizo zeminwe ukuze uqinisekise."</string> <string name="ongoing_phone_call_content_description" msgid="5332334388483099947">"Ikholi yefoni eqhubekayo"</string> + <string name="airplane_mode" msgid="2536350001462130668">"Imodi yendiza"</string> + <string name="mobile_data_settings_title" msgid="3955246641380064901">"Idatha yeselula"</string> + <string name="preference_summary_default_combination" msgid="8453246369903749670">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string> + <string name="mobile_data_connection_active" msgid="944490013299018227">"Ixhunyiwe"</string> + <string name="mobile_data_off_summary" msgid="5621158216585822679">"I-inthanethi ngeke ixhumeke ngokuzenzakalelayo"</string> + <string name="mobile_data_no_connection" msgid="1713872434869947377">"Alukho uxhumano"</string> + <string name="non_carrier_network_unavailable" msgid="770049357024492372">"Awekho amanye amanethiwekhi atholakalayo"</string> + <string name="all_network_unavailable" msgid="4112774339909373349">"Awekho amanethiwekhi atholakalayo"</string> + <string name="turn_on_wifi" msgid="1308379840799281023">"Wi‑Fi"</string> + <string name="pref_title_network_details" msgid="1639455355897668883">"Imininingwane yenethiwekhi"</string> + <string name="tap_a_network_to_connect" msgid="1565073330852369558">"Thepha inethiwekhi ukuze uxhume"</string> + <string name="unlock_to_view_networks" msgid="5072880496312015676">"Vula ukuze ubuke amanethiwekhi"</string> + <string name="wifi_empty_list_wifi_on" msgid="3864376632067585377">"Iseshela amanethiwekhi…"</string> + <string name="wifi_failed_connect_message" msgid="4161863112079000071">"Yehlulekile ukuxhuma kunethiwekhi"</string> + <string name="see_all_networks" msgid="3773666844913168122">"Bona konke"</string> </resources> diff --git a/packages/SystemUI/res/values/colors.xml b/packages/SystemUI/res/values/colors.xml index b5ac0c6cdca4..d90126799d01 100644 --- a/packages/SystemUI/res/values/colors.xml +++ b/packages/SystemUI/res/values/colors.xml @@ -286,13 +286,13 @@ <!-- Internet Dialog --> <!-- Material next state on color--> - <color name="settingslib_state_on_color">?androidprv:attr/colorAccentPrimary</color> + <color name="settingslib_state_on_color">@color/settingslib_state_on</color> <!-- Material next state off color--> - <color name="settingslib_state_off_color">?androidprv:attr/colorAccentSecondary</color> + <color name="settingslib_state_off_color">@color/settingslib_state_off</color> <!-- Material next track on color--> - <color name="settingslib_track_on_color">?androidprv:attr/colorAccentPrimaryVariant</color> + <color name="settingslib_track_on_color">@color/settingslib_track_on</color> <!-- Material next track off color--> - <color name="settingslib_track_off_color">?androidprv:attr/colorAccentSecondaryVariant</color> + <color name="settingslib_track_off_color">@color/settingslib_track_off</color> <color name="connected_network_primary_color">#191C18</color> <color name="connected_network_secondary_color">#41493D</color> </resources> diff --git a/packages/SystemUI/res/values/dimens.xml b/packages/SystemUI/res/values/dimens.xml index 7ee55a573ee5..9d37acceefa9 100644 --- a/packages/SystemUI/res/values/dimens.xml +++ b/packages/SystemUI/res/values/dimens.xml @@ -328,11 +328,10 @@ <dimen name="global_screenshot_x_scale">80dp</dimen> <dimen name="screenshot_bg_protection_height">242dp</dimen> <dimen name="screenshot_preview_elevation">4dp</dimen> - <dimen name="screenshot_offset_y">24dp</dimen> + <dimen name="screenshot_offset_y">8dp</dimen> <dimen name="screenshot_offset_x">16dp</dimen> <dimen name="screenshot_dismiss_button_tappable_size">48dp</dimen> <dimen name="screenshot_dismiss_button_margin">8dp</dimen> - <dimen name="screenshot_action_container_offset_y">16dp</dimen> <dimen name="screenshot_action_container_corner_radius">18dp</dimen> <dimen name="screenshot_action_container_padding_vertical">4dp</dimen> <dimen name="screenshot_action_container_margin_horizontal">8dp</dimen> @@ -1148,7 +1147,7 @@ <!-- The maximum offset in either direction that elements are moved vertically to prevent burn-in on AOD. --> - <dimen name="burn_in_prevention_offset_y_large_clock">42dp</dimen> + <dimen name="burn_in_prevention_offset_y_clock">42dp</dimen> <!-- Clock maximum font size (dp is intentional, to prevent any further scaling) --> <dimen name="large_clock_text_size">150dp</dimen> @@ -1602,15 +1601,16 @@ <!-- Internet panel related dimensions --> <dimen name="internet_dialog_list_margin">12dp</dimen> <dimen name="internet_dialog_list_max_height">646dp</dimen> - <dimen name="internet_dialog_list_max_width">412dp</dimen> + <dimen name="internet_dialog_list_max_width">@dimen/match_parent</dimen> <!-- Signal icon in internet dialog --> <dimen name="signal_strength_icon_size">24dp</dimen> <!-- Internet dialog related dimensions --> <dimen name="internet_dialog_corner_radius">24dp</dimen> - - <!-- Size of internet dialog --> + <!-- End margin of network layout --> + <dimen name="internet_dialog_network_layout_margin">16dp</dimen> + <!-- Size of switch bar in internet dialog --> <dimen name="settingslib_switchbar_margin">16dp</dimen> <!-- Minimum width of switch --> <dimen name="settingslib_min_switch_width">52dp</dimen> diff --git a/packages/SystemUI/res/values/strings.xml b/packages/SystemUI/res/values/strings.xml index 409372655163..d785a03036b9 100644 --- a/packages/SystemUI/res/values/strings.xml +++ b/packages/SystemUI/res/values/strings.xml @@ -2990,8 +2990,6 @@ <!-- Content description for a chip in the status bar showing that the user is currently on a phone call. [CHAR LIMIT=NONE] --> <string name="ongoing_phone_call_content_description">Ongoing phone call</string> - <!-- Provider Model: Title of the airplane mode in the internet dialog. [CHAR LIMIT=50] --> - <string name="airplane_mode">Airplane mode</string> <!-- Provider Model: Default title of the mobile network in the mobile layout. [CHAR LIMIT=50] --> <string name="mobile_data_settings_title">Mobile data</string> <!-- Provider Model: Summary text separator for preferences including a short description diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainer.java b/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainer.java index 840e8c8cba58..260590685674 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainer.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainer.java @@ -317,7 +317,8 @@ public class KeyguardSecurityContainer extends FrameLayout { mRunningOneHandedAnimator = null; } - int targetTranslation = mIsSecurityViewLeftAligned ? 0 : (int) (getMeasuredWidth() / 2f); + int targetTranslation = mIsSecurityViewLeftAligned + ? 0 : (int) (getMeasuredWidth() - mSecurityViewFlipper.getWidth()); if (animate) { mRunningOneHandedAnimator = diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardVisibilityHelper.java b/packages/SystemUI/src/com/android/keyguard/KeyguardVisibilityHelper.java index 28a54d56b071..e115c342c4fe 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardVisibilityHelper.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardVisibilityHelper.java @@ -132,8 +132,7 @@ public class KeyguardVisibilityHelper { .alpha(1f) .withEndAction(mAnimateKeyguardStatusViewVisibleEndRunnable) .start(); - } else if (mUnlockedScreenOffAnimationController - .isScreenOffLightRevealAnimationPlaying()) { + } else if (mUnlockedScreenOffAnimationController.shouldAnimateInKeyguard()) { mKeyguardViewVisibilityAnimating = true; // Ask the screen off animation controller to animate the keyguard visibility for us diff --git a/packages/SystemUI/src/com/android/keyguard/LockIconViewController.java b/packages/SystemUI/src/com/android/keyguard/LockIconViewController.java index 47f0714af164..2a4022ca57b6 100644 --- a/packages/SystemUI/src/com/android/keyguard/LockIconViewController.java +++ b/packages/SystemUI/src/com/android/keyguard/LockIconViewController.java @@ -501,8 +501,10 @@ public class LockIconViewController extends ViewController<LockIconView> impleme if (!wasClickableOnDownEvent()) { return; } + mDetectedLongPress = true; - if (mVibrator != null) { + if (onAffordanceClick() && mVibrator != null) { + // only vibrate if the click went through and wasn't intercepted by falsing mVibrator.vibrate( Process.myUid(), getContext().getOpPackageName(), @@ -510,8 +512,6 @@ public class LockIconViewController extends ViewController<LockIconView> impleme "lockIcon-onLongPress", VIBRATION_SONIFICATION_ATTRIBUTES); } - mDetectedLongPress = true; - onAffordanceClick(); } public boolean onSingleTapUp(MotionEvent e) { @@ -535,9 +535,14 @@ public class LockIconViewController extends ViewController<LockIconView> impleme return mDownDetected; } - private void onAffordanceClick() { + /** + * Whether we tried to launch the affordance. + * + * If falsing intercepts the click, returns false. + */ + private boolean onAffordanceClick() { if (mFalsingManager.isFalseTouch(LOCK_ICON)) { - return; + return false; } // pre-emptively set to true to hide view @@ -547,6 +552,7 @@ public class LockIconViewController extends ViewController<LockIconView> impleme } updateVisibility(); mKeyguardViewController.showBouncer(/* scrim */ true); + return true; } }); diff --git a/packages/SystemUI/src/com/android/keyguard/dagger/KeyguardStatusBarViewComponent.java b/packages/SystemUI/src/com/android/keyguard/dagger/KeyguardStatusBarViewComponent.java index 49a617eeb6c0..0b0e430dab94 100644 --- a/packages/SystemUI/src/com/android/keyguard/dagger/KeyguardStatusBarViewComponent.java +++ b/packages/SystemUI/src/com/android/keyguard/dagger/KeyguardStatusBarViewComponent.java @@ -34,7 +34,10 @@ public interface KeyguardStatusBarViewComponent { /** Simple factory for {@link KeyguardStatusBarViewComponent}. */ @Subcomponent.Factory interface Factory { - KeyguardStatusBarViewComponent build(@BindsInstance KeyguardStatusBarView view); + KeyguardStatusBarViewComponent build( + @BindsInstance KeyguardStatusBarView view, + @BindsInstance KeyguardStatusBarViewController.ViewStateProvider + viewStateProvider); } /** Builds a {@link KeyguardStatusViewController}. */ diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsController.java b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsController.java index c323bf77049f..e13ae4ce5152 100644 --- a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsController.java +++ b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsController.java @@ -163,7 +163,8 @@ public class UdfpsController implements DozeReceiver { public static final AudioAttributes VIBRATION_SONIFICATION_ATTRIBUTES = new AudioAttributes.Builder() .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION) - .setUsage(AudioAttributes.USAGE_ASSISTANCE_SONIFICATION) + // vibration will bypass battery saver mode: + .setUsage(AudioAttributes.USAGE_ASSISTANCE_ACCESSIBILITY) .build(); public static final VibrationEffect EFFECT_CLICK = diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsKeyguardView.java b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsKeyguardView.java index d46426a03621..9015396d26ab 100644 --- a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsKeyguardView.java +++ b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsKeyguardView.java @@ -155,6 +155,13 @@ public class UdfpsKeyguardView extends UdfpsAnimationView { updateAlpha(); } + /** + * @return alpha between 0 and 255 + */ + int getUnpausedAlpha() { + return mAlpha; + } + @Override protected int updateAlpha() { int alpha = super.updateAlpha(); diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsKeyguardViewController.java b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsKeyguardViewController.java index 4d9675c7a563..44ab69fd090e 100644 --- a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsKeyguardViewController.java +++ b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsKeyguardViewController.java @@ -168,7 +168,7 @@ public class UdfpsKeyguardViewController extends UdfpsAnimationViewController<Ud pw.println("mIsBouncerVisible=" + mIsBouncerVisible); pw.println("mInputBouncerHiddenAmount=" + mInputBouncerHiddenAmount); pw.println("mStatusBarExpansion=" + mStatusBarExpansion); - pw.println("mAlpha=" + mView.getAlpha()); + pw.println("unpausedAlpha=" + mView.getUnpausedAlpha()); pw.println("mUdfpsRequested=" + mUdfpsRequested); pw.println("mView.mUdfpsRequested=" + mView.mUdfpsRequested); pw.println("mLaunchTransitionFadingAway=" + mLaunchTransitionFadingAway); @@ -183,13 +183,13 @@ public class UdfpsKeyguardViewController extends UdfpsAnimationViewController<Ud return false; } + boolean udfpsAffordanceWasNotShowing = shouldPauseAuth(); mShowingUdfpsBouncer = show; if (mShowingUdfpsBouncer) { mLastUdfpsBouncerShowTime = mSystemClock.uptimeMillis(); } - updatePauseAuth(); if (mShowingUdfpsBouncer) { - if (mStatusBarState == StatusBarState.SHADE_LOCKED) { + if (udfpsAffordanceWasNotShowing) { mView.animateInUdfpsBouncer(null); } @@ -202,6 +202,8 @@ public class UdfpsKeyguardViewController extends UdfpsAnimationViewController<Ud } else { mKeyguardUpdateMonitor.requestFaceAuthOnOccludingApp(false); } + updateAlpha(); + updatePauseAuth(); return true; } @@ -335,6 +337,7 @@ public class UdfpsKeyguardViewController extends UdfpsAnimationViewController<Ud public void requestUdfps(boolean request, int color) { mUdfpsRequested = request; mView.requestUdfps(request, color); + updateAlpha(); updatePauseAuth(); } diff --git a/packages/SystemUI/src/com/android/systemui/classifier/ZigZagClassifier.java b/packages/SystemUI/src/com/android/systemui/classifier/ZigZagClassifier.java index e1349f2aba6d..40c28fab51b8 100644 --- a/packages/SystemUI/src/com/android/systemui/classifier/ZigZagClassifier.java +++ b/packages/SystemUI/src/com/android/systemui/classifier/ZigZagClassifier.java @@ -21,6 +21,7 @@ import static com.android.internal.config.sysui.SystemUiDeviceConfigFlags.BRIGHT import static com.android.internal.config.sysui.SystemUiDeviceConfigFlags.BRIGHTLINE_FALSING_ZIGZAG_Y_PRIMARY_DEVIANCE; import static com.android.internal.config.sysui.SystemUiDeviceConfigFlags.BRIGHTLINE_FALSING_ZIGZAG_Y_SECONDARY_DEVIANCE; import static com.android.systemui.classifier.Classifier.BRIGHTNESS_SLIDER; +import static com.android.systemui.classifier.Classifier.LOCK_ICON; import static com.android.systemui.classifier.Classifier.SHADE_DRAG; import android.graphics.Point; @@ -89,7 +90,9 @@ class ZigZagClassifier extends FalsingClassifier { Result calculateFalsingResult( @Classifier.InteractionType int interactionType, double historyBelief, double historyConfidence) { - if (interactionType == BRIGHTNESS_SLIDER || interactionType == SHADE_DRAG) { + if (interactionType == BRIGHTNESS_SLIDER + || interactionType == SHADE_DRAG + || interactionType == LOCK_ICON) { return Result.passed(0); } diff --git a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarView.java b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarView.java index 93388f93991f..0f888cbd14a8 100644 --- a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarView.java +++ b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarView.java @@ -19,9 +19,7 @@ package com.android.systemui.navigationbar; import static android.view.WindowManagerPolicyConstants.NAV_BAR_MODE_GESTURAL; import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_HOME_DISABLED; -import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_NOTIFICATION_PANEL_EXPANDED; import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_OVERVIEW_DISABLED; -import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_QUICK_SETTINGS_EXPANDED; import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_SCREEN_PINNING; import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_SEARCH_DISABLED; import static com.android.systemui.shared.system.QuickStepContract.isGesturalMode; @@ -79,9 +77,9 @@ import com.android.systemui.navigationbar.buttons.NearestTouchFrame; import com.android.systemui.navigationbar.buttons.RotationContextButton; import com.android.systemui.navigationbar.gestural.EdgeBackGestureHandler; import com.android.systemui.navigationbar.gestural.FloatingRotationButton; -import com.android.systemui.shared.navigationbar.RegionSamplingHelper; import com.android.systemui.recents.OverviewProxyService; import com.android.systemui.recents.Recents; +import com.android.systemui.shared.navigationbar.RegionSamplingHelper; import com.android.systemui.shared.system.ActivityManagerWrapper; import com.android.systemui.shared.system.QuickStepContract; import com.android.systemui.shared.system.SysUiStatsLog; @@ -841,7 +839,6 @@ public class NavigationBarView extends FrameLayout implements public void onStatusBarPanelStateChanged() { updateSlippery(); - updatePanelSystemUiStateFlags(); } public void updateDisabledSystemUiStateFlags() { @@ -858,21 +855,12 @@ public class NavigationBarView extends FrameLayout implements .commitUpdate(displayId); } - public void updatePanelSystemUiStateFlags() { - int displayId = mContext.getDisplayId(); + private void updatePanelSystemUiStateFlags() { if (SysUiState.DEBUG) { Log.d(TAG, "Updating panel sysui state flags: panelView=" + mPanelView); } if (mPanelView != null) { - if (SysUiState.DEBUG) { - Log.d(TAG, "Updating panel sysui state flags: fullyExpanded=" - + mPanelView.isFullyExpanded() + " inQs=" + mPanelView.isInSettings()); - } - mSysUiFlagContainer.setFlag(SYSUI_STATE_NOTIFICATION_PANEL_EXPANDED, - mPanelView.isFullyExpanded() && !mPanelView.isInSettings()) - .setFlag(SYSUI_STATE_QUICK_SETTINGS_EXPANDED, - mPanelView.isInSettings()) - .commitUpdate(displayId); + mPanelView.updateSystemUiStateFlags(); } } diff --git a/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/EdgeBackGestureHandler.java b/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/EdgeBackGestureHandler.java index 2bf4bf4c4fd5..aaa3bf0f40ee 100644 --- a/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/EdgeBackGestureHandler.java +++ b/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/EdgeBackGestureHandler.java @@ -106,7 +106,7 @@ public class EdgeBackGestureHandler extends CurrentUserTracker static final String DEBUG_MISSING_GESTURE_TAG = "NoBackGesture"; private static final boolean ENABLE_PER_WINDOW_INPUT_ROTATION = - SystemProperties.getBoolean("persist.debug.per_window_input_rotation", true); + SystemProperties.getBoolean("persist.debug.per_window_input_rotation", false); private ISystemGestureExclusionListener mGestureExclusionListener = new ISystemGestureExclusionListener.Stub() { diff --git a/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSIconViewImpl.java b/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSIconViewImpl.java index 2e771d6fb669..b1cd03c4a2f2 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSIconViewImpl.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSIconViewImpl.java @@ -116,6 +116,9 @@ public class QSIconViewImpl extends QSIconView { : icon.getInvisibleDrawable(mContext) : null; int padding = icon != null ? icon.getPadding() : 0; if (d != null) { + if (d.getConstantState() != null) { + d = d.getConstantState().newDrawable(); + } d.setAutoMirrored(false); d.setLayoutDirection(getLayoutDirection()); } diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/InternetTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/InternetTile.java index d0a4b62b8a1b..cc9e7485dcff 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/InternetTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/InternetTile.java @@ -122,8 +122,9 @@ public class InternetTile extends QSTileImpl<SignalState> { @Override protected void handleClick(@Nullable View view) { - boolean canConfigMobileData = mAccessPointController.canConfigMobileData(); - mHandler.post(() -> mInternetDialogFactory.create(true, canConfigMobileData)); + mHandler.post(() -> mInternetDialogFactory.create(true, + mAccessPointController.canConfigMobileData(), + mAccessPointController.canConfigWifi())); } @Override diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetAdapter.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetAdapter.java index 91c81bc506c2..4e897d9a8667 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetAdapter.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetAdapter.java @@ -24,7 +24,6 @@ import android.content.Intent; import android.graphics.drawable.Drawable; import android.text.Html; import android.text.TextUtils; -import android.util.Log; import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; @@ -34,6 +33,7 @@ import android.widget.LinearLayout; import android.widget.TextView; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import androidx.recyclerview.widget.RecyclerView; import com.android.settingslib.Utils; @@ -43,7 +43,6 @@ import com.android.wifitrackerlib.WifiEntry; import java.util.List; import java.util.concurrent.atomic.AtomicReference; -import java.util.stream.Collectors; /** * Adapter for showing Wi-Fi networks. @@ -54,9 +53,10 @@ public class InternetAdapter extends RecyclerView.Adapter<InternetAdapter.Intern private static final String ACTION_WIFI_DIALOG = "com.android.settings.WIFI_DIALOG"; private static final String EXTRA_CHOSEN_WIFI_ENTRY_KEY = "key_chosen_wifientry_key"; private static final String EXTRA_CONNECT_FOR_CALLER = "connect_for_caller"; - private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG); private final InternetDialogController mInternetDialogController; + private List<WifiEntry> mWifiEntries; + private int mWifiEntriesCount; protected View mHolderView; protected Context mContext; @@ -76,54 +76,31 @@ public class InternetAdapter extends RecyclerView.Adapter<InternetAdapter.Intern @Override public void onBindViewHolder(@NonNull InternetViewHolder viewHolder, int position) { - List<WifiEntry> wifiList = getWifiEntryList(); - if (wifiList != null && wifiList.size() != 0) { - int count = getItemCount(); - if (wifiList.size() > count) { - wifiList = getWifiEntryList().subList(0, count - 1); - } - - if (position < wifiList.size()) { - viewHolder.onBind(wifiList.get(position)); - } - } else if (DEBUG) { - Log.d(TAG, "onBindViewHolder, Wi-Fi entry list = null"); + if (mWifiEntries == null || position >= mWifiEntriesCount) { + return; } + viewHolder.onBind(mWifiEntries.get(position)); } - private List<WifiEntry> getWifiEntryList() { - if (mInternetDialogController.getWifiEntryList() == null) { - return null; - } - - return mInternetDialogController.getWifiEntryList().stream() - .filter(wifiEntry -> (!wifiEntry.isDefaultNetwork() - || !wifiEntry.hasInternetAccess())) - .limit(getItemCount()) - .collect(Collectors.toList()); + /** + * Updates the Wi-Fi networks. + * + * @param wifiEntries the updated Wi-Fi entries. + * @param wifiEntriesCount the total number of Wi-Fi entries. + */ + public void setWifiEntries(@Nullable List<WifiEntry> wifiEntries, int wifiEntriesCount) { + mWifiEntries = wifiEntries; + mWifiEntriesCount = wifiEntriesCount; } /** - * The total number of networks (mobile network and entries of Wi-Fi) should be four in - * {@link InternetDialog}. - * - * Airplane mode is ON (mobile network is gone): - * Return four Wi-Fi's entries if no internet Wi-Fi. - * Return three Wi-Fi's entries if one internet Wi-Fi. - * Airplane mode is OFF (mobile network is visible): - * Return three Wi-Fi's entries if no internet Wi-Fi. - * Return two Wi-Fi's entries if one internet Wi-Fi. + * Gets the total number of Wi-Fi networks. * - * @return The total number of networks. + * @return The total number of Wi-Fi entries. */ @Override public int getItemCount() { - final boolean hasInternetWifi = mInternetDialogController.getInternetWifiEntry() != null; - if (mInternetDialogController.isAirplaneModeEnabled()) { - return hasInternetWifi ? 3 : 4; - } else { - return hasInternetWifi ? 2 : 3; - } + return mWifiEntriesCount; } /** @@ -198,18 +175,18 @@ public class InternetAdapter extends RecyclerView.Adapter<InternetAdapter.Intern mWifiNetworkLayout.setVisibility(View.VISIBLE); mWifiTitleText.setText(title); if (TextUtils.isEmpty(summary)) { - mWifiTitleText.setGravity(Gravity.CENTER); mWifiSummaryText.setVisibility(View.GONE); return; } else { - mWifiTitleText.setGravity(Gravity.BOTTOM); - mWifiSummaryText.setGravity(Gravity.TOP); mWifiSummaryText.setVisibility(View.VISIBLE); } mWifiSummaryText.setText(summary); } Drawable getWifiDrawable(@NonNull WifiEntry wifiEntry) throws Throwable { + if (wifiEntry.getLevel() == WifiEntry.WIFI_LEVEL_UNREACHABLE) { + return null; + } final Drawable drawable = mWifiIconInjector.getIcon(wifiEntry.shouldShowXLevelIcon(), wifiEntry.getLevel()); if (drawable == null) { diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetDialog.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetDialog.java index e1e0ba7a8d03..4d0cbd15a788 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetDialog.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetDialog.java @@ -21,13 +21,11 @@ import static com.android.systemui.Prefs.Key.QS_HAS_TURNED_OFF_MOBILE_DATA; import android.app.AlertDialog; import android.content.Context; -import android.content.Intent; import android.graphics.Color; import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.Drawable; import android.net.Network; import android.net.NetworkCapabilities; -import android.net.wifi.ScanResult; import android.net.wifi.WifiManager; import android.os.Bundle; import android.os.Handler; @@ -51,11 +49,12 @@ import android.widget.Button; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ProgressBar; -import android.widget.Space; import android.widget.Switch; import android.widget.TextView; +import androidx.annotation.Nullable; import androidx.annotation.VisibleForTesting; +import androidx.annotation.WorkerThread; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -92,7 +91,7 @@ public class InternetDialog extends SystemUIDialog implements @VisibleForTesting protected View mDialogView; @VisibleForTesting - protected WifiEntry mConnectedWifiEntry; + protected boolean mCanConfigWifi; private InternetDialogFactory mInternetDialogFactory; private SubscriptionManager mSubscriptionManager; @@ -105,12 +104,14 @@ public class InternetDialog extends SystemUIDialog implements private TextView mInternetDialogSubTitle; private View mDivider; private ProgressBar mProgressBar; + private LinearLayout mInternetDialogLayout; private LinearLayout mInternetListLayout; private LinearLayout mConnectedWifListLayout; private LinearLayout mConnectedWifList; private LinearLayout mMobileNetworkLayout; private LinearLayout mMobileNetworkList; private LinearLayout mTurnWifiOnLayout; + private TextView mWifiToggleTitleText; private LinearLayout mSeeAllLayout; private RecyclerView mWifiRecyclerView; private ImageView mConnectedWifiIcon; @@ -125,10 +126,14 @@ public class InternetDialog extends SystemUIDialog implements private Button mDoneButton; private Drawable mBackgroundOn; private int mListMaxHeight; - private int mListMaxWidth; + private int mLayoutWidth; private int mDefaultDataSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID; private boolean mCanConfigMobileData; + // Wi-Fi entries + protected WifiEntry mConnectedWifiEntry; + protected int mWifiEntriesCount; + // Wi-Fi scanning progress bar protected boolean mIsProgressBarVisible; protected boolean mIsSearchingHidden; @@ -142,16 +147,17 @@ public class InternetDialog extends SystemUIDialog implements private final ViewTreeObserver.OnGlobalLayoutListener mInternetListLayoutListener = () -> { // Set max height for list - if (mInternetListLayout.getHeight() > mListMaxHeight) { - ViewGroup.LayoutParams params = mInternetListLayout.getLayoutParams(); + if (mInternetDialogLayout.getHeight() > mListMaxHeight) { + ViewGroup.LayoutParams params = mInternetDialogLayout.getLayoutParams(); params.height = mListMaxHeight; - mInternetListLayout.setLayoutParams(params); + mInternetDialogLayout.setLayoutParams(params); } }; public InternetDialog(Context context, InternetDialogFactory internetDialogFactory, InternetDialogController internetDialogController, boolean canConfigMobileData, - boolean aboveStatusBar, UiEventLogger uiEventLogger, @Main Handler handler) { + boolean canConfigWifi, boolean aboveStatusBar, UiEventLogger uiEventLogger, + @Main Handler handler) { super(context, R.style.Theme_SystemUI_Dialog_Internet); if (DEBUG) { Log.d(TAG, "Init InternetDialog"); @@ -165,6 +171,7 @@ public class InternetDialog extends SystemUIDialog implements mTelephonyManager = mInternetDialogController.getTelephonyManager(); mWifiManager = mInternetDialogController.getWifiManager(); mCanConfigMobileData = canConfigMobileData; + mCanConfigWifi = canConfigWifi; mLayoutManager = new LinearLayoutManager(mContext) { @Override @@ -174,7 +181,7 @@ public class InternetDialog extends SystemUIDialog implements }; mListMaxHeight = context.getResources().getDimensionPixelSize( R.dimen.internet_dialog_list_max_height); - mListMaxWidth = context.getResources().getDimensionPixelSize( + mLayoutWidth = context.getResources().getDimensionPixelSize( R.dimen.internet_dialog_list_max_width); mUiEventLogger = uiEventLogger; mAdapter = new InternetAdapter(mInternetDialogController); @@ -202,11 +209,14 @@ public class InternetDialog extends SystemUIDialog implements layoutParams.setFitInsetsIgnoringVisibility(true); window.setAttributes(layoutParams); window.setContentView(mDialogView); - window.setLayout(mListMaxWidth, ViewGroup.LayoutParams.WRAP_CONTENT); + //Only fix the width for large screen or tablet. + window.setLayout(mContext.getResources().getDimensionPixelSize( + R.dimen.internet_dialog_list_max_width), ViewGroup.LayoutParams.WRAP_CONTENT); window.setWindowAnimations(R.style.Animation_InternetDialog); window.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); window.addFlags(FLAG_LAYOUT_NO_LIMITS); + mInternetDialogLayout = mDialogView.requireViewById(R.id.internet_connectivity_dialog); mInternetDialogTitle = mDialogView.requireViewById(R.id.internet_dialog_title); mInternetDialogSubTitle = mDialogView.requireViewById(R.id.internet_dialog_subtitle); mDivider = mDialogView.requireViewById(R.id.divider); @@ -215,6 +225,7 @@ public class InternetDialog extends SystemUIDialog implements mMobileNetworkLayout = mDialogView.requireViewById(R.id.mobile_network_layout); mMobileNetworkList = mDialogView.requireViewById(R.id.mobile_network_list); mTurnWifiOnLayout = mDialogView.requireViewById(R.id.turn_on_wifi_layout); + mWifiToggleTitleText = mDialogView.requireViewById(R.id.wifi_toggle_title); mConnectedWifListLayout = mDialogView.requireViewById(R.id.wifi_connected_layout); mConnectedWifList = mDialogView.requireViewById(R.id.wifi_connected_list); mConnectedWifiIcon = mDialogView.requireViewById(R.id.wifi_connected_icon); @@ -230,7 +241,7 @@ public class InternetDialog extends SystemUIDialog implements mMobileDataToggle = mDialogView.requireViewById(R.id.mobile_toggle); mWiFiToggle = mDialogView.requireViewById(R.id.wifi_toggle); mBackgroundOn = mContext.getDrawable(R.drawable.settingslib_switch_bar_bg_on); - mInternetListLayout.getViewTreeObserver().addOnGlobalLayoutListener( + mInternetDialogLayout.getViewTreeObserver().addOnGlobalLayoutListener( mInternetListLayoutListener); mInternetDialogTitle.setText(getDialogTitleText()); mInternetDialogTitle.setGravity(Gravity.START | Gravity.CENTER_VERTICAL); @@ -247,7 +258,19 @@ public class InternetDialog extends SystemUIDialog implements if (DEBUG) { Log.d(TAG, "onStart"); } - mInternetDialogController.onStart(this); + mInternetDialogController.onStart(this, mCanConfigWifi); + if (!mCanConfigWifi) { + hideWifiViews(); + } + } + + @VisibleForTesting + void hideWifiViews() { + setProgressBarVisible(false); + mTurnWifiOnLayout.setVisibility(View.GONE); + mConnectedWifListLayout.setVisibility(View.GONE); + mWifiRecyclerView.setVisibility(View.GONE); + mSeeAllLayout.setVisibility(View.GONE); } @Override @@ -286,23 +309,22 @@ public class InternetDialog extends SystemUIDialog implements } else { mInternetDialogSubTitle.setText(getSubtitleText()); } - showProgressBar(); setMobileDataLayout(mInternetDialogController.activeNetworkIsCellular()); + if (!mCanConfigWifi) { + return; + } + + showProgressBar(); final boolean isDeviceLocked = mInternetDialogController.isDeviceLocked(); final boolean isWifiEnabled = mWifiManager.isWifiEnabled(); updateWifiToggle(isWifiEnabled, isDeviceLocked); updateConnectedWifi(isWifiEnabled, isDeviceLocked); - List<WifiEntry> wifiEntryList = mInternetDialogController.getWifiEntryList(); - final int wifiListVisibility = - (isDeviceLocked || wifiEntryList == null || wifiEntryList.size() <= 0) - ? View.GONE : View.VISIBLE; - mWifiRecyclerView.setVisibility(wifiListVisibility); - if (wifiListVisibility == View.VISIBLE) { - mAdapter.notifyDataSetChanged(); - } - mSeeAllLayout.setVisibility(wifiListVisibility); + final int visibility = (isDeviceLocked || !isWifiEnabled || mWifiEntriesCount <= 0) + ? View.GONE : View.VISIBLE; + mWifiRecyclerView.setVisibility(visibility); + mSeeAllLayout.setVisibility(visibility); } private void setOnClickListener() { @@ -368,6 +390,12 @@ public class InternetDialog extends SystemUIDialog implements private void updateWifiToggle(boolean isWifiEnabled, boolean isDeviceLocked) { mWiFiToggle.setChecked(isWifiEnabled); + if (isDeviceLocked && mInternetDialogController.isNightMode()) { + int titleColor = mConnectedWifiEntry != null ? mContext.getColor( + R.color.connected_network_primary_color) : Utils.getColorAttrDefaultColor( + mContext, android.R.attr.textColorPrimary); + mWifiToggleTitleText.setTextColor(titleColor); + } mTurnWifiOnLayout.setBackground( (isDeviceLocked && mConnectedWifiEntry != null) ? mBackgroundOn : null); } @@ -379,8 +407,8 @@ public class InternetDialog extends SystemUIDialog implements return; } mConnectedWifListLayout.setVisibility(View.VISIBLE); - mConnectedWifiTitleText.setText(mInternetDialogController.getInternetWifiTitle()); - mConnectedWifiSummaryText.setText(mInternetDialogController.getInternetWifiSummary()); + mConnectedWifiTitleText.setText(mConnectedWifiEntry.getTitle()); + mConnectedWifiSummaryText.setText(mConnectedWifiEntry.getSummary(false)); mConnectedWifiIcon.setImageDrawable( mInternetDialogController.getInternetWifiDrawable(mConnectedWifiEntry)); if (mInternetDialogController.isNightMode()) { @@ -430,8 +458,7 @@ public class InternetDialog extends SystemUIDialog implements return; } setProgressBarVisible(true); - List<ScanResult> wifiScanResults = mWifiManager.getScanResults(); - if (wifiScanResults != null && wifiScanResults.size() > 0) { + if (mConnectedWifiEntry != null || mWifiEntriesCount > 0) { mHandler.postDelayed(mHideProgressBarRunnable, PROGRESS_DELAY_MS); } else if (!mIsSearchingHidden) { mHandler.postDelayed(mHideSearchingRunnable, PROGRESS_DELAY_MS); @@ -516,8 +543,8 @@ public class InternetDialog extends SystemUIDialog implements } @Override + @WorkerThread public void onDataConnectionStateChanged(int state, int networkType) { - mAdapter.notifyDataSetChanged(); mHandler.post(() -> updateDialog()); } @@ -532,10 +559,16 @@ public class InternetDialog extends SystemUIDialog implements } @Override - public void onAccessPointsChanged(List<WifiEntry> wifiEntryList, WifiEntry connectedEntry) { + @WorkerThread + public void onAccessPointsChanged(@Nullable List<WifiEntry> wifiEntries, + @Nullable WifiEntry connectedEntry) { mConnectedWifiEntry = connectedEntry; - mAdapter.notifyDataSetChanged(); - mHandler.post(() -> updateDialog()); + mWifiEntriesCount = wifiEntries == null ? 0 : wifiEntries.size(); + mAdapter.setWifiEntries(wifiEntries, mWifiEntriesCount); + mHandler.post(() -> { + mAdapter.notifyDataSetChanged(); + updateDialog(); + }); } @Override @@ -548,24 +581,6 @@ public class InternetDialog extends SystemUIDialog implements } } - @Override - public void onWifiStateReceived(Context context, Intent intent) { - if (intent == null) { - return; - } - - String action = intent.getAction(); - if (action.equals(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION)) { - mInternetDialogController.scanWifiAccessPoints(); - showProgressBar(); - return; - } - - if (action.equals(WifiManager.NETWORK_STATE_CHANGED_ACTION)) { - mHandler.post(() -> updateDialog()); - } - } - public enum InternetDialogEvent implements UiEventLogger.UiEventEnum { @UiEvent(doc = "The Internet dialog became visible on the screen.") INTERNET_DIALOG_SHOW(843); diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetDialogController.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetDialogController.java index ed32730c58b1..dfe78de81f7f 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetDialogController.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetDialogController.java @@ -32,7 +32,6 @@ import android.net.ConnectivityManager; import android.net.Network; import android.net.NetworkCapabilities; import android.net.NetworkRequest; -import android.net.wifi.ScanResult; import android.net.wifi.WifiManager; import android.os.Handler; import android.provider.Settings; @@ -53,6 +52,7 @@ import android.widget.Toast; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.VisibleForTesting; +import androidx.annotation.WorkerThread; import com.android.internal.logging.UiEventLogger; import com.android.keyguard.KeyguardUpdateMonitor; @@ -108,6 +108,8 @@ public class InternetDialogController implements WifiEntry.DisconnectCallback, R.string.all_network_unavailable; private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG); + static final int MAX_WIFI_ENTRY_COUNT = 4; + private WifiManager mWifiManager; private Context mContext; private SubscriptionManager mSubscriptionManager; @@ -122,7 +124,8 @@ public class InternetDialogController implements WifiEntry.DisconnectCallback, private AccessPointController mAccessPointController; private IntentFilter mConnectionStateFilter; private InternetDialogCallback mCallback; - private List<WifiEntry> mWifiEntry; + private WifiEntry mConnectedEntry; + private int mWifiEntriesCount; private UiEventLogger mUiEventLogger; private BroadcastDispatcher mBroadcastDispatcher; private KeyguardUpdateMonitor mKeyguardUpdateMonitor; @@ -132,16 +135,15 @@ public class InternetDialogController implements WifiEntry.DisconnectCallback, @VisibleForTesting protected ActivityStarter mActivityStarter; @VisibleForTesting - protected WifiEntry mConnectedEntry; - @VisibleForTesting protected SubscriptionManager.OnSubscriptionsChangedListener mOnSubscriptionsChangedListener; @VisibleForTesting protected InternetTelephonyCallback mInternetTelephonyCallback; @VisibleForTesting protected WifiUtils.InternetIconInjector mWifiIconInjector; - @VisibleForTesting - KeyguardStateController mKeyguardStateController; + protected boolean mCanConfigWifi; + @VisibleForTesting + protected KeyguardStateController mKeyguardStateController; private final KeyguardUpdateMonitorCallback mKeyguardUpdateCallback = new KeyguardUpdateMonitorCallback() { @@ -183,8 +185,6 @@ public class InternetDialogController implements WifiEntry.DisconnectCallback, mKeyguardUpdateMonitor = keyguardUpdateMonitor; mKeyguardStateController = keyguardStateController; mConnectionStateFilter = new IntentFilter(); - mConnectionStateFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION); - mConnectionStateFilter.addAction(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION); mConnectionStateFilter.addAction(TelephonyManager.ACTION_DEFAULT_DATA_SUBSCRIPTION_CHANGED); mUiEventLogger = uiEventLogger; mActivityStarter = starter; @@ -193,7 +193,7 @@ public class InternetDialogController implements WifiEntry.DisconnectCallback, mWifiIconInjector = new WifiUtils.InternetIconInjector(mContext); } - void onStart(@NonNull InternetDialogCallback callback) { + void onStart(@NonNull InternetDialogCallback callback, boolean canConfigWifi) { if (DEBUG) { Log.d(TAG, "onStart"); } @@ -217,6 +217,7 @@ public class InternetDialogController implements WifiEntry.DisconnectCallback, mConnectivityManager.registerNetworkCallback(new NetworkRequest.Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) .build(), new DataConnectivityListener(), mHandler); + mCanConfigWifi = canConfigWifi; scanWifiAccessPoints(); } @@ -270,7 +271,7 @@ public class InternetDialogController implements WifiEntry.DisconnectCallback, return null; } - if (!mWifiManager.isWifiEnabled()) { + if (mCanConfigWifi && !mWifiManager.isWifiEnabled()) { // When the airplane mode is off and Wi-Fi is disabled. // Sub-Title: Wi-Fi is off if (DEBUG) { @@ -288,12 +289,11 @@ public class InternetDialogController implements WifiEntry.DisconnectCallback, return mContext.getText(SUBTITLE_TEXT_UNLOCK_TO_VIEW_NETWORKS); } - final List<ScanResult> wifiList = mWifiManager.getScanResults(); - if (wifiList != null && wifiList.size() != 0) { - return mContext.getText(SUBTITLE_TEXT_TAP_A_NETWORK_TO_CONNECT); + if (mConnectedEntry != null || mWifiEntriesCount > 0) { + return mCanConfigWifi ? mContext.getText(SUBTITLE_TEXT_TAP_A_NETWORK_TO_CONNECT) : null; } - if (isProgressBarVisible) { + if (mCanConfigWifi && isProgressBarVisible) { // When the Wi-Fi scan result callback is received // Sub-Title: Searching for networks... return mContext.getText(SUBTITLE_TEXT_SEARCHING_FOR_NETWORKS); @@ -317,7 +317,7 @@ public class InternetDialogController implements WifiEntry.DisconnectCallback, return mContext.getText(SUBTITLE_TEXT_ALL_CARRIER_NETWORK_UNAVAILABLE); } - if (!isMobileDataEnabled()) { + if (mCanConfigWifi && !isMobileDataEnabled()) { if (DEBUG) { Log.d(TAG, "Mobile data off"); } @@ -331,7 +331,10 @@ public class InternetDialogController implements WifiEntry.DisconnectCallback, return mContext.getText(SUBTITLE_TEXT_ALL_CARRIER_NETWORK_UNAVAILABLE); } - return mContext.getText(SUBTITLE_TEXT_NON_CARRIER_NETWORK_UNAVAILABLE); + if (mCanConfigWifi) { + return mContext.getText(SUBTITLE_TEXT_NON_CARRIER_NETWORK_UNAVAILABLE); + } + return null; } Drawable getInternetWifiDrawable(@NonNull WifiEntry wifiEntry) { @@ -549,26 +552,6 @@ public class InternetDialogController implements WifiEntry.DisconnectCallback, return summary; } - String getInternetWifiTitle() { - if (getInternetWifiEntry() == null) { - if (DEBUG) { - Log.d(TAG, "connected entry is null"); - } - return ""; - } - return getInternetWifiEntry().getTitle(); - } - - String getInternetWifiSummary() { - if (getInternetWifiEntry() == null) { - if (DEBUG) { - Log.d(TAG, "connected entry is null"); - } - return ""; - } - return getInternetWifiEntry().getSummary(false); - } - void launchNetworkSetting() { mCallback.dismissDialog(); mActivityStarter.postStartActivityDismissingKeyguard(getSettingsIntent(), 0); @@ -590,18 +573,6 @@ public class InternetDialogController implements WifiEntry.DisconnectCallback, } } - List<WifiEntry> getWifiEntryList() { - return mWifiEntry; - } - - WifiEntry getInternetWifiEntry() { - if (mConnectedEntry == null || !mConnectedEntry.isDefaultNetwork() - || !mConnectedEntry.hasInternetAccess()) { - return null; - } - return mConnectedEntry; - } - WifiManager getWifiManager() { return mWifiManager; } @@ -779,20 +750,33 @@ public class InternetDialogController implements WifiEntry.DisconnectCallback, } } - void scanWifiAccessPoints() { - mAccessPointController.scanForAccessPoints(); + private void scanWifiAccessPoints() { + if (mCanConfigWifi) { + mAccessPointController.scanForAccessPoints(); + } } @Override + @WorkerThread public void onAccessPointsChanged(List<WifiEntry> accessPoints) { - if (accessPoints == null) { + if (!mCanConfigWifi) { + return; + } + + if (accessPoints == null || accessPoints.size() == 0) { + mConnectedEntry = null; + mWifiEntriesCount = 0; + if (mCallback != null) { + mCallback.onAccessPointsChanged(null /* wifiEntries */, null /* connectedEntry */); + } return; } boolean hasConnectedWifi = false; - mWifiEntry = accessPoints; - for (WifiEntry wifiEntry : accessPoints) { - if (wifiEntry.getConnectedState() == WifiEntry.CONNECTED_STATE_CONNECTED) { + final int accessPointSize = accessPoints.size(); + for (int i = 0; i < accessPointSize; i++) { + WifiEntry wifiEntry = accessPoints.get(i); + if (wifiEntry.isDefaultNetwork() && wifiEntry.hasInternetAccess()) { mConnectedEntry = wifiEntry; hasConnectedWifi = true; break; @@ -802,7 +786,23 @@ public class InternetDialogController implements WifiEntry.DisconnectCallback, mConnectedEntry = null; } - mCallback.onAccessPointsChanged(mWifiEntry, getInternetWifiEntry()); + int count = MAX_WIFI_ENTRY_COUNT; + if (hasCarrier()) { + count -= 1; + } + if (hasConnectedWifi) { + count -= 1; + } + final List<WifiEntry> wifiEntries = accessPoints.stream() + .filter(wifiEntry -> (!wifiEntry.isDefaultNetwork() + || !wifiEntry.hasInternetAccess())) + .limit(count) + .collect(Collectors.toList()); + mWifiEntriesCount = wifiEntries == null ? 0 : wifiEntries.size(); + + if (mCallback != null) { + mCallback.onAccessPointsChanged(wifiEntries, mConnectedEntry); + } } @Override @@ -855,8 +855,17 @@ public class InternetDialogController implements WifiEntry.DisconnectCallback, private class DataConnectivityListener extends ConnectivityManager.NetworkCallback { @Override + @WorkerThread public void onCapabilitiesChanged(@NonNull Network network, @NonNull NetworkCapabilities networkCapabilities) { + if (mCanConfigWifi) { + for (int transport : networkCapabilities.getTransportTypes()) { + if (transport == NetworkCapabilities.TRANSPORT_WIFI) { + scanWifiAccessPoints(); + break; + } + } + } final Network activeNetwork = mConnectivityManager.getActiveNetwork(); if (activeNetwork != null && activeNetwork.equals(network)) { // update UI @@ -869,11 +878,6 @@ public class InternetDialogController implements WifiEntry.DisconnectCallback, @Override public void onReceive(Context context, Intent intent) { final String action = intent.getAction(); - if (action.equals(WifiManager.NETWORK_STATE_CHANGED_ACTION) - || action.equals(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION)) { - mCallback.onWifiStateReceived(context, intent); - } - if (action.equals(TelephonyManager.ACTION_DEFAULT_DATA_SUBSCRIPTION_CHANGED)) { if (DEBUG) { Log.d(TAG, "ACTION_DEFAULT_DATA_SUBSCRIPTION_CHANGED"); @@ -929,8 +933,7 @@ public class InternetDialogController implements WifiEntry.DisconnectCallback, void dismissDialog(); - void onAccessPointsChanged(List<WifiEntry> wifiEntryList, WifiEntry connectedEntry); - - void onWifiStateReceived(Context context, Intent intent); + void onAccessPointsChanged(@Nullable List<WifiEntry> wifiEntries, + @Nullable WifiEntry connectedEntry); } } diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetDialogFactory.kt b/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetDialogFactory.kt index e82e89ef14c4..11c6980678b1 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetDialogFactory.kt +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetDialogFactory.kt @@ -31,17 +31,17 @@ private val DEBUG = Log.isLoggable(TAG, Log.DEBUG) */ @SysUISingleton class InternetDialogFactory @Inject constructor( - @Main private val handler: Handler, - private val internetDialogController: InternetDialogController, - private val context: Context, - private val uiEventLogger: UiEventLogger + @Main private val handler: Handler, + private val internetDialogController: InternetDialogController, + private val context: Context, + private val uiEventLogger: UiEventLogger ) { companion object { var internetDialog: InternetDialog? = null } /** Creates a [InternetDialog]. */ - fun create(aboveStatusBar: Boolean, canConfigMobileData: Boolean) { + fun create(aboveStatusBar: Boolean, canConfigMobileData: Boolean, canConfigWifi: Boolean) { if (internetDialog != null) { if (DEBUG) { Log.d(TAG, "InternetDialog is showing, do not create it twice.") @@ -49,7 +49,7 @@ class InternetDialogFactory @Inject constructor( return } else { internetDialog = InternetDialog(context, this, internetDialogController, - canConfigMobileData, aboveStatusBar, uiEventLogger, handler) + canConfigMobileData, canConfigWifi, aboveStatusBar, uiEventLogger, handler) internetDialog?.show() } } diff --git a/packages/SystemUI/src/com/android/systemui/recents/OverviewProxyService.java b/packages/SystemUI/src/com/android/systemui/recents/OverviewProxyService.java index a5fc5ab99e58..50b1186c91f1 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/OverviewProxyService.java +++ b/packages/SystemUI/src/com/android/systemui/recents/OverviewProxyService.java @@ -94,6 +94,7 @@ import com.android.systemui.shared.system.QuickStepContract; import com.android.systemui.shared.system.smartspace.SmartspaceTransitionController; import com.android.systemui.statusbar.CommandQueue; import com.android.systemui.statusbar.NotificationShadeWindowController; +import com.android.systemui.statusbar.phone.NotificationPanelViewController; import com.android.systemui.statusbar.phone.StatusBar; import com.android.systemui.statusbar.phone.StatusBarWindowCallback; import com.android.systemui.statusbar.policy.CallbackController; @@ -626,18 +627,22 @@ public class OverviewProxyService extends CurrentUserTracker implements mNavBarControllerLazy.get().getDefaultNavigationBar(); final NavigationBarView navBarView = mNavBarControllerLazy.get().getNavigationBarView(mContext.getDisplayId()); + final NotificationPanelViewController panelController = + mStatusBarOptionalLazy.get().get().getPanelController(); if (SysUiState.DEBUG) { Log.d(TAG_OPS, "Updating sysui state flags: navBarFragment=" + navBarFragment - + " navBarView=" + navBarView); + + " navBarView=" + navBarView + " panelController=" + panelController); } if (navBarFragment != null) { navBarFragment.updateSystemUiStateFlags(-1); } if (navBarView != null) { - navBarView.updatePanelSystemUiStateFlags(); navBarView.updateDisabledSystemUiStateFlags(); } + if (panelController != null) { + panelController.updateSystemUiStateFlags(); + } if (mStatusBarWinController != null) { mStatusBarWinController.notifyStateChangedCallbacks(); } diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotController.java b/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotController.java index cab2168d44e4..3fbdc23f55d0 100644 --- a/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotController.java +++ b/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotController.java @@ -559,8 +559,8 @@ public class ScreenshotController { mScreenshotView.reset(); } - mScreenshotView.updateOrientation(mWindowManager.getCurrentWindowMetrics() - .getWindowInsets().getDisplayCutout()); + mScreenshotView.updateOrientation( + mWindowManager.getCurrentWindowMetrics().getWindowInsets()); mScreenBitmap = screenshot; @@ -594,9 +594,8 @@ public class ScreenshotController { // Delay scroll capture eval a bit to allow the underlying activity // to set up in the new orientation. mScreenshotHandler.postDelayed(this::requestScrollCapture, 150); - mScreenshotView.updateDisplayCutoutMargins( - mWindowManager.getCurrentWindowMetrics().getWindowInsets() - .getDisplayCutout()); + mScreenshotView.updateInsets( + mWindowManager.getCurrentWindowMetrics().getWindowInsets()); // screenshot animation calculations won't be valid anymore, so just end if (mScreenshotAnimation != null && mScreenshotAnimation.isRunning()) { mScreenshotAnimation.end(); diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotView.java b/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotView.java index e5e690bcb8b0..dfb39e300450 100644 --- a/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotView.java +++ b/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotView.java @@ -118,8 +118,8 @@ public class ScreenshotView extends FrameLayout implements private static final long SCREENSHOT_TO_CORNER_SCALE_DURATION_MS = 234; private static final long SCREENSHOT_ACTIONS_EXPANSION_DURATION_MS = 400; private static final long SCREENSHOT_ACTIONS_ALPHA_DURATION_MS = 100; - private static final long SCREENSHOT_DISMISS_Y_DURATION_MS = 350; - private static final long SCREENSHOT_DISMISS_ALPHA_DURATION_MS = 183; + private static final long SCREENSHOT_DISMISS_X_DURATION_MS = 350; + private static final long SCREENSHOT_DISMISS_ALPHA_DURATION_MS = 350; private static final long SCREENSHOT_DISMISS_ALPHA_OFFSET_MS = 50; // delay before starting fade private static final float SCREENSHOT_ACTIONS_START_SCALE_X = .7f; private static final float ROUNDED_CORNER_RADIUS = .25f; @@ -416,21 +416,30 @@ public class ScreenshotView extends FrameLayout implements mScreenshotPreview.setImageDrawable(createScreenDrawable(mResources, bitmap, screenInsets)); } - void updateDisplayCutoutMargins(DisplayCutout cutout) { + void updateInsets(WindowInsets insets) { int orientation = mContext.getResources().getConfiguration().orientation; mOrientationPortrait = (orientation == ORIENTATION_PORTRAIT); FrameLayout.LayoutParams p = (FrameLayout.LayoutParams) mScreenshotStatic.getLayoutParams(); + DisplayCutout cutout = insets.getDisplayCutout(); + Insets navBarInsets = insets.getInsets(WindowInsets.Type.navigationBars()); if (cutout == null) { - p.setMargins(0, 0, 0, 0); + p.setMargins(0, 0, 0, navBarInsets.bottom); } else { Insets waterfall = cutout.getWaterfallInsets(); if (mOrientationPortrait) { - p.setMargins(waterfall.left, Math.max(cutout.getSafeInsetTop(), waterfall.top), - waterfall.right, Math.max(cutout.getSafeInsetBottom(), waterfall.bottom)); + p.setMargins( + waterfall.left, + Math.max(cutout.getSafeInsetTop(), waterfall.top), + waterfall.right, + Math.max(cutout.getSafeInsetBottom(), + Math.max(navBarInsets.bottom, waterfall.bottom))); } else { - p.setMargins(Math.max(cutout.getSafeInsetLeft(), waterfall.left), waterfall.top, - Math.max(cutout.getSafeInsetRight(), waterfall.right), waterfall.bottom); + p.setMargins( + Math.max(cutout.getSafeInsetLeft(), waterfall.left), + waterfall.top, + Math.max(cutout.getSafeInsetRight(), waterfall.right), + Math.max(navBarInsets.bottom, waterfall.bottom)); } } mStaticLeftMargin = p.leftMargin; @@ -438,10 +447,10 @@ public class ScreenshotView extends FrameLayout implements mScreenshotStatic.requestLayout(); } - void updateOrientation(DisplayCutout cutout) { + void updateOrientation(WindowInsets insets) { int orientation = mContext.getResources().getConfiguration().orientation; mOrientationPortrait = (orientation == ORIENTATION_PORTRAIT); - updateDisplayCutoutMargins(cutout); + updateInsets(insets); int screenshotFixedSize = mContext.getResources().getDimensionPixelSize(R.dimen.global_screenshot_x_scale); ViewGroup.LayoutParams params = mScreenshotPreview.getLayoutParams(); @@ -980,7 +989,6 @@ public class ScreenshotView extends FrameLayout implements mScrollingScrim.setVisibility(View.GONE); mScrollablePreview.setVisibility(View.GONE); mScreenshotStatic.setTranslationX(0); - mScreenshotPreview.setTranslationY(0); mScreenshotPreview.setContentDescription( mContext.getResources().getString(R.string.screenshot_preview_description)); mScreenshotPreview.setOnClickListener(null); @@ -996,9 +1004,6 @@ public class ScreenshotView extends FrameLayout implements mSmartChips.clear(); mQuickShareChip = null; setAlpha(1); - mDismissButton.setTranslationY(0); - mActionsContainer.setTranslationY(0); - mActionsContainerBackground.setTranslationY(0); mScreenshotSelectorView.stop(); } @@ -1026,22 +1031,19 @@ public class ScreenshotView extends FrameLayout implements setAlpha(1 - animation.getAnimatedFraction()); }); - ValueAnimator yAnim = ValueAnimator.ofFloat(0, 1); - yAnim.setInterpolator(mAccelerateInterpolator); - yAnim.setDuration(SCREENSHOT_DISMISS_Y_DURATION_MS); - float screenshotStartY = mScreenshotPreview.getTranslationY(); - float dismissStartY = mDismissButton.getTranslationY(); - yAnim.addUpdateListener(animation -> { - float yDelta = MathUtils.lerp(0, mDismissDeltaY, animation.getAnimatedFraction()); - mScreenshotPreview.setTranslationY(screenshotStartY + yDelta); - mScreenshotPreviewBorder.setTranslationY(screenshotStartY + yDelta); - mDismissButton.setTranslationY(dismissStartY + yDelta); - mActionsContainer.setTranslationY(yDelta); - mActionsContainerBackground.setTranslationY(yDelta); + ValueAnimator xAnim = ValueAnimator.ofFloat(0, 1); + xAnim.setInterpolator(mAccelerateInterpolator); + xAnim.setDuration(SCREENSHOT_DISMISS_X_DURATION_MS); + float deltaX = mDirectionLTR + ? -1 * (mScreenshotPreviewBorder.getX() + mScreenshotPreviewBorder.getWidth()) + : (mDisplayMetrics.widthPixels - mScreenshotPreviewBorder.getX()); + xAnim.addUpdateListener(animation -> { + float currXDelta = MathUtils.lerp(0, deltaX, animation.getAnimatedFraction()); + mScreenshotStatic.setTranslationX(currXDelta); }); AnimatorSet animSet = new AnimatorSet(); - animSet.play(yAnim).with(alphaAnim); + animSet.play(xAnim).with(alphaAnim); return animSet; } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java b/packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java index 1431c9e6f641..eb5f82ca417e 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java @@ -811,13 +811,8 @@ public class KeyguardIndicationController { mStatusBarKeyguardViewManager.showBouncerMessage(message, mInitialTextColorState); } } else if (mKeyguardUpdateMonitor.isScreenOn()) { - if (mKeyguardUpdateMonitor.isUdfpsAvailable()) { - showTransientIndication(mContext.getString(R.string.keyguard_unlock_press), - false /* isError */, true /* hideOnScreenOff */); - } else { - showTransientIndication(mContext.getString(R.string.keyguard_unlock), - false /* isError */, true /* hideOnScreenOff */); - } + showTransientIndication(mContext.getString(R.string.keyguard_unlock), + false /* isError */, true /* hideOnScreenOff */); } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/NodeController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/NodeController.kt index 727ce20cd72c..289dacbca69e 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/NodeController.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/NodeController.kt @@ -78,7 +78,7 @@ fun treeSpecToStr(tree: NodeSpec): String { } private fun treeSpecToStrHelper(tree: NodeSpec, sb: StringBuilder, indent: String) { - sb.append("${indent}ns{${tree.controller.nodeLabel}") + sb.append("${indent}{${tree.controller.nodeLabel}}\n") if (tree.children.isNotEmpty()) { val childIndent = "$indent " for (child in tree.children) { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/NodeSpecBuilder.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/NodeSpecBuilder.kt new file mode 100644 index 000000000000..9b8ac722d5c9 --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/NodeSpecBuilder.kt @@ -0,0 +1,73 @@ +/* + * Copyright (C) 2021 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.systemui.statusbar.notification.collection.render + +import com.android.systemui.statusbar.notification.collection.GroupEntry +import com.android.systemui.statusbar.notification.collection.ListEntry +import com.android.systemui.statusbar.notification.collection.NotificationEntry +import com.android.systemui.statusbar.notification.collection.listbuilder.NotifSection + +/** + * Converts a notif list (the output of the ShadeListBuilder) into a NodeSpec, an abstract + * representation of which views should be present in the shade. This spec will later be consumed + * by the ViewDiffer, which will add and remove views until the shade matches the spec. Up until + * this point, the pipeline has dealt with pure data representations of notifications (in the + * form of NotificationEntries). In this step, NotificationEntries finally become associated with + * the views that will represent them. In addition, we add in any non-notification views that also + * need to present in the shade, notably the section headers. + */ +class NodeSpecBuilder( + private val viewBarn: NotifViewBarn +) { + fun buildNodeSpec( + rootController: NodeController, + notifList: List<ListEntry> + ): NodeSpec { + val root = NodeSpecImpl(null, rootController) + var currentSection: NotifSection? = null + val prevSections = mutableSetOf<NotifSection?>() + + for (entry in notifList) { + val section = entry.section!! + + if (prevSections.contains(section)) { + throw java.lang.RuntimeException("Section ${section.label} has been duplicated") + } + + // If this notif begins a new section, first add the section's header view + if (section != currentSection) { + section.headerController?.let { headerController -> + root.children.add(NodeSpecImpl(root, headerController)) + } + prevSections.add(currentSection) + currentSection = section + } + + // Finally, add the actual notif node! + root.children.add(buildNotifNode(root, entry)) + } + + return root + } + + private fun buildNotifNode(parent: NodeSpec, entry: ListEntry): NodeSpec = when (entry) { + is NotificationEntry -> NodeSpecImpl(parent, viewBarn.requireView(entry)) + is GroupEntry -> NodeSpecImpl(parent, viewBarn.requireView(checkNotNull(entry.summary))) + .apply { entry.children.forEach { children.add(buildNotifNode(this, it)) } } + else -> throw RuntimeException("Unexpected entry: $entry") + } +} diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/NotifViewBarn.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/NotifViewBarn.kt index 79bc3d757ebd..c79f59b5c625 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/NotifViewBarn.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/NotifViewBarn.kt @@ -19,18 +19,16 @@ package com.android.systemui.statusbar.notification.collection.render import android.view.textclassifier.Log import com.android.systemui.dagger.SysUISingleton import com.android.systemui.statusbar.notification.collection.ListEntry -import com.android.systemui.statusbar.notification.row.ExpandableNotificationRowController import javax.inject.Inject /** - * The ViewBarn is just a map from [ListEntry] to an instance of an - * [ExpandableNotificationRowController]. + * The ViewBarn is just a map from [ListEntry] to an instance of a [NodeController]. */ @SysUISingleton class NotifViewBarn @Inject constructor() { - private val rowMap = mutableMapOf<String, ExpandableNotificationRowController>() + private val rowMap = mutableMapOf<String, NodeController>() - fun requireView(forEntry: ListEntry): ExpandableNotificationRowController { + fun requireView(forEntry: ListEntry): NodeController { if (DEBUG) { Log.d(TAG, "requireView: $forEntry.key") } @@ -42,7 +40,7 @@ class NotifViewBarn @Inject constructor() { return li } - fun registerViewForEntry(entry: ListEntry, controller: ExpandableNotificationRowController) { + fun registerViewForEntry(entry: ListEntry, controller: NodeController) { if (DEBUG) { Log.d(TAG, "registerViewForEntry: $entry.key") } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/ShadeViewManager.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/ShadeViewManager.kt index ef1d75e9fdaa..a2c7aa5cc8f7 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/ShadeViewManager.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/ShadeViewManager.kt @@ -18,9 +18,7 @@ package com.android.systemui.statusbar.notification.collection.render import android.content.Context import android.view.View -import com.android.systemui.statusbar.notification.collection.GroupEntry import com.android.systemui.statusbar.notification.collection.ListEntry -import com.android.systemui.statusbar.notification.collection.NotificationEntry import com.android.systemui.statusbar.notification.collection.ShadeListBuilder import com.android.systemui.statusbar.notification.stack.NotificationListContainer import com.android.systemui.statusbar.phone.NotificationIconAreaController @@ -34,45 +32,21 @@ class ShadeViewManager constructor( context: Context, listContainer: NotificationListContainer, logger: ShadeViewDifferLogger, - private val viewBarn: NotifViewBarn, + viewBarn: NotifViewBarn, private val notificationIconAreaController: NotificationIconAreaController ) { // We pass a shim view here because the listContainer may not actually have a view associated // with it and the differ never actually cares about the root node's view. private val rootController = RootNodeController(listContainer, View(context)) + private val specBuilder = NodeSpecBuilder(viewBarn) private val viewDiffer = ShadeViewDiffer(rootController, logger) fun attach(listBuilder: ShadeListBuilder) = listBuilder.setOnRenderListListener(::onNewNotifTree) - private fun onNewNotifTree(tree: List<ListEntry>) = viewDiffer.applySpec(buildTree(tree)) - - private fun buildTree(notifList: List<ListEntry>): NodeSpec { - val root = NodeSpecImpl(null, rootController).apply { - // Insert first section header, if present - notifList.firstOrNull()?.section?.headerController?.let { - children.add(NodeSpecImpl(this, it)) - } - notifList.firstOrNull()?.let { - children.add(buildNotifNode(it, this)) - } - notifList.asSequence().zipWithNext().forEach { (prev, entry) -> - // Insert new header if the section has changed between two entries - entry.section.takeIf { it != prev.section }?.headerController?.let { - children.add(NodeSpecImpl(this, it)) - } - children.add(buildNotifNode(entry, this)) - } - } + private fun onNewNotifTree(notifList: List<ListEntry>) { + viewDiffer.applySpec(specBuilder.buildNodeSpec(rootController, notifList)) notificationIconAreaController.updateNotificationIcons(notifList) - return root - } - - private fun buildNotifNode(entry: ListEntry, parent: NodeSpec): NodeSpec = when (entry) { - is NotificationEntry -> NodeSpecImpl(parent, viewBarn.requireView(entry)) - is GroupEntry -> NodeSpecImpl(parent, viewBarn.requireView(checkNotNull(entry.summary))) - .apply { entry.children.forEach { children.add(buildNotifNode(it, this)) } } - else -> throw RuntimeException("Unexpected entry: $entry") } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardClockPositionAlgorithm.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardClockPositionAlgorithm.java index f77c0520cdb1..d348954e49bb 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardClockPositionAlgorithm.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardClockPositionAlgorithm.java @@ -32,12 +32,6 @@ import com.android.systemui.statusbar.policy.KeyguardUserSwitcherListView; * Utility class to calculate the clock position and top padding of notifications on Keyguard. */ public class KeyguardClockPositionAlgorithm { - /** - * How much the clock height influences the shade position. - * 0 means nothing, 1 means move the shade up by the height of the clock - * 0.5f means move the shade up by half of the size of the clock. - */ - private static float CLOCK_HEIGHT_WEIGHT = 0.7f; /** * Margin between the bottom of the status view and the notification shade. @@ -45,11 +39,6 @@ public class KeyguardClockPositionAlgorithm { private int mStatusViewBottomMargin; /** - * Height of the parent view - display size in px. - */ - private int mHeight; - - /** * Height of {@link KeyguardStatusView}. */ private int mKeyguardStatusHeight; @@ -68,21 +57,6 @@ public class KeyguardClockPositionAlgorithm { private int mUserSwitchPreferredY; /** - * Whether or not there is a custom clock face on keyguard. - */ - private boolean mHasCustomClock; - - /** - * Whether or not the NSSL contains any visible notifications. - */ - private boolean mHasVisibleNotifs; - - /** - * Height of notification stack: Sum of height of each notification. - */ - private int mNotificationStackHeight; - - /** * Minimum top margin to avoid overlap with status bar, lock icon, or multi-user switcher * avatar. */ @@ -94,12 +68,6 @@ public class KeyguardClockPositionAlgorithm { private int mCutoutTopInset = 0; /** - * Maximum bottom padding to avoid overlap with {@link KeyguardBottomAreaView} or - * the ambient indication. - */ - private int mMaxShadeBottom; - - /** * Recommended distance from the status bar. */ private int mContainerTopPadding; @@ -115,14 +83,9 @@ public class KeyguardClockPositionAlgorithm { private int mBurnInPreventionOffsetX; /** - * Burn-in prevention y translation. - */ - private int mBurnInPreventionOffsetY; - - /** - * Burn-in prevention y translation for large clock layouts. + * Burn-in prevention y translation for clock layouts. */ - private int mBurnInPreventionOffsetYLargeClock; + private int mBurnInPreventionOffsetYClock; /** * Doze/AOD transition amount. @@ -160,34 +123,26 @@ public class KeyguardClockPositionAlgorithm { res.getDimensionPixelSize(R.dimen.keyguard_clock_top_margin) / 2; mBurnInPreventionOffsetX = res.getDimensionPixelSize( R.dimen.burn_in_prevention_offset_x); - mBurnInPreventionOffsetY = res.getDimensionPixelSize( - R.dimen.burn_in_prevention_offset_y); - mBurnInPreventionOffsetYLargeClock = res.getDimensionPixelSize( - R.dimen.burn_in_prevention_offset_y_large_clock); + mBurnInPreventionOffsetYClock = res.getDimensionPixelSize( + R.dimen.burn_in_prevention_offset_y_clock); } /** * Sets up algorithm values. */ - public void setup(int keyguardStatusBarHeaderHeight, int maxShadeBottom, - int notificationStackHeight, float panelExpansion, int parentHeight, + public void setup(int keyguardStatusBarHeaderHeight, float panelExpansion, int keyguardStatusHeight, int userSwitchHeight, int userSwitchPreferredY, - boolean hasCustomClock, boolean hasVisibleNotifs, float dark, - float overStrechAmount, boolean bypassEnabled, int unlockedStackScrollerPadding, - float qsExpansion, int cutoutTopInset, boolean isSplitShade) { + float dark, float overStretchAmount, boolean bypassEnabled, + int unlockedStackScrollerPadding, float qsExpansion, int cutoutTopInset, + boolean isSplitShade) { mMinTopMargin = keyguardStatusBarHeaderHeight + Math.max(mContainerTopPadding, userSwitchHeight); - mMaxShadeBottom = maxShadeBottom; - mNotificationStackHeight = notificationStackHeight; mPanelExpansion = panelExpansion; - mHeight = parentHeight; mKeyguardStatusHeight = keyguardStatusHeight + mStatusViewBottomMargin; mUserSwitchHeight = userSwitchHeight; mUserSwitchPreferredY = userSwitchPreferredY; - mHasCustomClock = hasCustomClock; - mHasVisibleNotifs = hasVisibleNotifs; mDarkAmount = dark; - mOverStretchAmount = overStrechAmount; + mOverStretchAmount = overStretchAmount; mBypassEnabled = bypassEnabled; mUnlockedStackScrollerPadding = unlockedStackScrollerPadding; mQsExpansion = qsExpansion; @@ -244,8 +199,8 @@ public class KeyguardClockPositionAlgorithm { // This will keep the clock at the top but out of the cutout area float shift = 0; - if (clockY - mBurnInPreventionOffsetYLargeClock < mCutoutTopInset) { - shift = mCutoutTopInset - (clockY - mBurnInPreventionOffsetYLargeClock); + if (clockY - mBurnInPreventionOffsetYClock < mCutoutTopInset) { + shift = mCutoutTopInset - (clockY - mBurnInPreventionOffsetYClock); } float clockYDark = clockY + burnInPreventionOffsetY() + shift; @@ -281,7 +236,7 @@ public class KeyguardClockPositionAlgorithm { } private float burnInPreventionOffsetY() { - int offset = mBurnInPreventionOffsetYLargeClock; + int offset = mBurnInPreventionOffsetYClock; return getBurnInOffset(offset * 2, false /* xAxis */) - offset; } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardStatusBarViewController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardStatusBarViewController.java index 3e604ec98e05..af9d92113c5c 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardStatusBarViewController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardStatusBarViewController.java @@ -16,21 +16,34 @@ package com.android.systemui.statusbar.phone; +import static com.android.systemui.statusbar.StatusBarState.KEYGUARD; import static com.android.systemui.statusbar.events.SystemStatusAnimationSchedulerKt.ANIMATING_IN; import static com.android.systemui.statusbar.events.SystemStatusAnimationSchedulerKt.ANIMATING_OUT; +import android.animation.Animator; +import android.animation.AnimatorListenerAdapter; import android.animation.ValueAnimator; import android.content.res.Resources; +import android.hardware.biometrics.BiometricSourceType; +import android.view.View; import androidx.annotation.NonNull; import com.android.keyguard.CarrierTextController; +import com.android.keyguard.KeyguardUpdateMonitor; +import com.android.keyguard.KeyguardUpdateMonitorCallback; import com.android.systemui.R; +import com.android.systemui.animation.Interpolators; import com.android.systemui.battery.BatteryMeterViewController; +import com.android.systemui.plugins.statusbar.StatusBarStateController; +import com.android.systemui.statusbar.StatusBarState; +import com.android.systemui.statusbar.SysuiStatusBarStateController; import com.android.systemui.statusbar.events.SystemStatusAnimationCallback; import com.android.systemui.statusbar.events.SystemStatusAnimationScheduler; +import com.android.systemui.statusbar.notification.stack.StackStateAnimator; import com.android.systemui.statusbar.policy.BatteryController; import com.android.systemui.statusbar.policy.ConfigurationController; +import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.statusbar.policy.UserInfoController; import com.android.systemui.util.ViewController; @@ -52,6 +65,12 @@ public class KeyguardStatusBarViewController extends ViewController<KeyguardStat private final StatusBarIconController mStatusBarIconController; private final StatusBarIconController.TintedIconManager.Factory mTintedIconManagerFactory; private final BatteryMeterViewController mBatteryMeterViewController; + private final ViewStateProvider mViewStateProvider; + private final KeyguardStateController mKeyguardStateController; + private final KeyguardBypassController mKeyguardBypassController; + private final KeyguardUpdateMonitor mKeyguardUpdateMonitor; + private final BiometricUnlockController mBiometricUnlockController; + private final SysuiStatusBarStateController mStatusBarStateController; private final ConfigurationController.ConfigurationListener mConfigurationListener = new ConfigurationController.ConfigurationListener() { @@ -103,11 +122,78 @@ public class KeyguardStatusBarViewController extends ViewController<KeyguardStat private final UserInfoController.OnUserInfoChangedListener mOnUserInfoChangedListener = (name, picture, userAccount) -> mView.onUserInfoChanged(picture); + private final ValueAnimator.AnimatorUpdateListener mAnimatorUpdateListener = + animation -> { + mKeyguardStatusBarAnimateAlpha = (float) animation.getAnimatedValue(); + updateViewState(); + }; + + private final KeyguardUpdateMonitorCallback mKeyguardUpdateMonitorCallback = + new KeyguardUpdateMonitorCallback() { + @Override + public void onBiometricAuthenticated( + int userId, + BiometricSourceType biometricSourceType, + boolean isStrongBiometric) { + if (mFirstBypassAttempt + && mKeyguardUpdateMonitor.isUnlockingWithBiometricAllowed( + isStrongBiometric)) { + mDelayShowingKeyguardStatusBar = true; + } + } + + @Override + public void onBiometricRunningStateChanged( + boolean running, + BiometricSourceType biometricSourceType) { + boolean keyguardOrShadeLocked = + mStatusBarState == KEYGUARD + || mStatusBarState == StatusBarState.SHADE_LOCKED; + if (!running + && mFirstBypassAttempt + && keyguardOrShadeLocked + && !mDozing + && !mDelayShowingKeyguardStatusBar + && !mBiometricUnlockController.isBiometricUnlock()) { + mFirstBypassAttempt = false; + animateKeyguardStatusBarIn(); + } + } + + @Override + public void onFinishedGoingToSleep(int why) { + mFirstBypassAttempt = mKeyguardBypassController.getBypassEnabled(); + mDelayShowingKeyguardStatusBar = false; + } + }; + + private final StatusBarStateController.StateListener mStatusBarStateListener = + new StatusBarStateController.StateListener() { + @Override + public void onStateChanged(int newState) { + mStatusBarState = newState; + } + }; + private final List<String> mBlockedIcons; private boolean mBatteryListening; private StatusBarIconController.TintedIconManager mTintedIconManager; + private float mKeyguardStatusBarAnimateAlpha = 1f; + /** + * If face auth with bypass is running for the first time after you turn on the screen. + * (From aod or screen off) + */ + private boolean mFirstBypassAttempt; + /** + * If auth happens successfully during {@code mFirstBypassAttempt}, and we should wait until + * the keyguard is dismissed to show the status bar. + */ + private boolean mDelayShowingKeyguardStatusBar; + private int mStatusBarState; + private boolean mDozing; + @Inject public KeyguardStatusBarViewController( KeyguardStatusBarView view, @@ -118,7 +204,13 @@ public class KeyguardStatusBarViewController extends ViewController<KeyguardStat UserInfoController userInfoController, StatusBarIconController statusBarIconController, StatusBarIconController.TintedIconManager.Factory tintedIconManagerFactory, - BatteryMeterViewController batteryMeterViewController) { + BatteryMeterViewController batteryMeterViewController, + ViewStateProvider viewStateProvider, + KeyguardStateController keyguardStateController, + KeyguardBypassController bypassController, + KeyguardUpdateMonitor keyguardUpdateMonitor, + BiometricUnlockController biometricUnlockController, + SysuiStatusBarStateController statusBarStateController) { super(view); mCarrierTextController = carrierTextController; mConfigurationController = configurationController; @@ -128,6 +220,25 @@ public class KeyguardStatusBarViewController extends ViewController<KeyguardStat mStatusBarIconController = statusBarIconController; mTintedIconManagerFactory = tintedIconManagerFactory; mBatteryMeterViewController = batteryMeterViewController; + mViewStateProvider = viewStateProvider; + mKeyguardStateController = keyguardStateController; + mKeyguardBypassController = bypassController; + mKeyguardUpdateMonitor = keyguardUpdateMonitor; + mBiometricUnlockController = biometricUnlockController; + mStatusBarStateController = statusBarStateController; + + mFirstBypassAttempt = mKeyguardBypassController.getBypassEnabled(); + mKeyguardStateController.addCallback( + new KeyguardStateController.Callback() { + @Override + public void onKeyguardFadingAwayChanged() { + if (!mKeyguardStateController.isKeyguardFadingAway()) { + mFirstBypassAttempt = false; + mDelayShowingKeyguardStatusBar = false; + } + } + } + ); Resources r = getResources(); mBlockedIcons = Collections.unmodifiableList(Arrays.asList( @@ -148,6 +259,8 @@ public class KeyguardStatusBarViewController extends ViewController<KeyguardStat mConfigurationController.addCallback(mConfigurationListener); mAnimationScheduler.addCallback(mAnimationCallback); mUserInfoController.addCallback(mOnUserInfoChangedListener); + mStatusBarStateController.addCallback(mStatusBarStateListener); + mKeyguardUpdateMonitor.registerCallback(mKeyguardUpdateMonitorCallback); if (mTintedIconManager == null) { mTintedIconManager = mTintedIconManagerFactory.create(mView.findViewById(R.id.statusIcons)); @@ -162,6 +275,8 @@ public class KeyguardStatusBarViewController extends ViewController<KeyguardStat mConfigurationController.removeCallback(mConfigurationListener); mAnimationScheduler.removeCallback(mAnimationCallback); mUserInfoController.removeCallback(mOnUserInfoChangedListener); + mStatusBarStateController.removeCallback(mStatusBarStateListener); + mKeyguardUpdateMonitor.removeCallback(mKeyguardUpdateMonitorCallback); if (mTintedIconManager != null) { mStatusBarIconController.removeIconGroup(mTintedIconManager); } @@ -205,6 +320,61 @@ public class KeyguardStatusBarViewController extends ViewController<KeyguardStat mView.setTopClipping(notificationPanelTop - mView.getTop()); } + /** Sets the dozing state. */ + public void setDozing(boolean dozing) { + mDozing = dozing; + } + + /** Animate the keyguard status bar in. */ + public void animateKeyguardStatusBarIn() { + mView.setVisibility(View.VISIBLE); + mView.setAlpha(0f); + ValueAnimator anim = ValueAnimator.ofFloat(0f, 1f); + anim.addUpdateListener(mAnimatorUpdateListener); + anim.setDuration(StackStateAnimator.ANIMATION_DURATION_STANDARD); + anim.setInterpolator(Interpolators.LINEAR_OUT_SLOW_IN); + anim.start(); + } + + /** Animate the keyguard status bar out. */ + public void animateKeyguardStatusBarOut(long startDelay, long duration) { + ValueAnimator anim = ValueAnimator.ofFloat(mView.getAlpha(), 0f); + anim.addUpdateListener(mAnimatorUpdateListener); + anim.setStartDelay(startDelay); + anim.setDuration(duration); + anim.setInterpolator(Interpolators.LINEAR_OUT_SLOW_IN); + anim.addListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animation) { + mView.setVisibility(View.INVISIBLE); + mView.setAlpha(1f); + mKeyguardStatusBarAnimateAlpha = 1f; + } + }); + anim.start(); + } + + /** + * Updates the {@link KeyguardStatusBarView} state based on what the {@link ViewStateProvider} + * and other controllers provide. + */ + public void updateViewState() { + ViewState newViewState = mViewStateProvider.provideViewState(); + if (!isKeyguardShowing()) { + return; + } + + float newAlpha = newViewState.mAlpha * mKeyguardStatusBarAnimateAlpha; + + boolean hideForBypass = + mFirstBypassAttempt && mKeyguardUpdateMonitor.shouldListenForFace() + || mDelayShowingKeyguardStatusBar; + int newVisibility = newAlpha != 0f && !mDozing && !hideForBypass + ? View.VISIBLE : View.INVISIBLE; + + updateViewState(newAlpha, newVisibility); + } + /** * Updates the {@link KeyguardStatusBarView} state based on the provided values. */ @@ -213,10 +383,29 @@ public class KeyguardStatusBarViewController extends ViewController<KeyguardStat mView.setVisibility(visibility); } + private boolean isKeyguardShowing() { + return mStatusBarState == KEYGUARD; + } + /** */ public void dump(FileDescriptor fd, PrintWriter pw, String[] args) { pw.println("KeyguardStatusBarView:"); pw.println(" mBatteryListening: " + mBatteryListening); mView.dump(fd, pw, args); } + + /** An interface that provides the desired state of {@link KeyguardStatusBarView}. */ + public interface ViewStateProvider { + /** Provides the state. */ + ViewState provideViewState(); + } + + /** A POJO for the desired state of {@link KeyguardStatusBarView}. */ + static class ViewState { + final float mAlpha; + + ViewState(float alpha) { + this.mAlpha = alpha; + } + } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java index 7b9c04b23305..6f2960787667 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java @@ -28,6 +28,8 @@ import static com.android.keyguard.KeyguardClockSwitch.LARGE; import static com.android.keyguard.KeyguardClockSwitch.SMALL; import static com.android.systemui.classifier.Classifier.QS_COLLAPSE; import static com.android.systemui.classifier.Classifier.QUICK_SETTINGS; +import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_NOTIFICATION_PANEL_EXPANDED; +import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_QUICK_SETTINGS_EXPANDED; import static com.android.systemui.statusbar.StatusBarState.KEYGUARD; import static com.android.systemui.statusbar.StatusBarState.SHADE; import static com.android.systemui.statusbar.StatusBarState.SHADE_LOCKED; @@ -55,7 +57,6 @@ import android.graphics.PointF; import android.graphics.Rect; import android.graphics.Region; import android.graphics.drawable.Drawable; -import android.hardware.biometrics.BiometricSourceType; import android.os.Bundle; import android.os.Handler; import android.os.PowerManager; @@ -91,13 +92,13 @@ import com.android.internal.util.LatencyTracker; import com.android.keyguard.KeyguardStatusView; import com.android.keyguard.KeyguardStatusViewController; import com.android.keyguard.KeyguardUpdateMonitor; -import com.android.keyguard.KeyguardUpdateMonitorCallback; import com.android.keyguard.LockIconViewController; import com.android.keyguard.dagger.KeyguardQsUserSwitchComponent; import com.android.keyguard.dagger.KeyguardStatusBarViewComponent; import com.android.keyguard.dagger.KeyguardStatusViewComponent; import com.android.keyguard.dagger.KeyguardUserSwitcherComponent; import com.android.systemui.DejankUtils; +import com.android.systemui.Dependency; import com.android.systemui.R; import com.android.systemui.animation.ActivityLaunchAnimator; import com.android.systemui.animation.Interpolators; @@ -113,6 +114,7 @@ import com.android.systemui.fragments.FragmentService; import com.android.systemui.media.KeyguardMediaController; import com.android.systemui.media.MediaDataManager; import com.android.systemui.media.MediaHierarchyManager; +import com.android.systemui.model.SysUiState; import com.android.systemui.navigationbar.NavigationModeController; import com.android.systemui.plugins.FalsingManager; import com.android.systemui.plugins.FalsingManager.FalsingTapListener; @@ -232,7 +234,6 @@ public class NotificationPanelViewController extends PanelViewController { @VisibleForTesting final StatusBarStateListener mStatusBarStateListener = new StatusBarStateListener(); - private final BiometricUnlockController mBiometricUnlockController; private final NotificationPanelView mView; private final VibratorHelper mVibratorHelper; private final MetricsLogger mMetricsLogger; @@ -270,42 +271,6 @@ public class NotificationPanelViewController extends PanelViewController { private static final AnimationProperties KEYGUARD_HUN_PROPERTIES = new AnimationProperties().setDuration(StackStateAnimator.ANIMATION_DURATION_STANDARD); - @VisibleForTesting - final KeyguardUpdateMonitorCallback - mKeyguardUpdateCallback = - new KeyguardUpdateMonitorCallback() { - - @Override - public void onBiometricAuthenticated(int userId, - BiometricSourceType biometricSourceType, - boolean isStrongBiometric) { - if (mFirstBypassAttempt - && mUpdateMonitor.isUnlockingWithBiometricAllowed(isStrongBiometric)) { - mDelayShowingKeyguardStatusBar = true; - } - } - - @Override - public void onBiometricRunningStateChanged(boolean running, - BiometricSourceType biometricSourceType) { - boolean - keyguardOrShadeLocked = - mBarState == KEYGUARD - || mBarState == StatusBarState.SHADE_LOCKED; - if (!running && mFirstBypassAttempt && keyguardOrShadeLocked && !mDozing - && !mDelayShowingKeyguardStatusBar - && !mBiometricUnlockController.isBiometricUnlock()) { - mFirstBypassAttempt = false; - animateKeyguardStatusBarIn(StackStateAnimator.ANIMATION_DURATION_STANDARD); - } - } - - @Override - public void onFinishedGoingToSleep(int why) { - mFirstBypassAttempt = mKeyguardBypassController.getBypassEnabled(); - mDelayShowingKeyguardStatusBar = false; - } - }; private final LayoutInflater mLayoutInflater; private final PowerManager mPowerManager; @@ -432,7 +397,6 @@ public class NotificationPanelViewController extends PanelViewController { private boolean mQsTouchAboveFalsingThreshold; private int mQsFalsingThreshold; - private float mKeyguardStatusBarAnimateAlpha = 1f; private HeadsUpTouchHelper mHeadsUpTouchHelper; private boolean mListenForHeadsUp; private int mNavigationBarBottomHeight; @@ -513,6 +477,8 @@ public class NotificationPanelViewController extends PanelViewController { private final NotificationLockscreenUserManager mLockscreenUserManager; private final UserManager mUserManager; private final MediaDataManager mMediaDataManager; + private final SysUiState mSysUiState; + private NotificationShadeDepthController mDepthController; private int mDisplayId; @@ -588,17 +554,6 @@ public class NotificationPanelViewController extends PanelViewController { */ private boolean mIsPanelCollapseOnQQS; - /** - * If face auth with bypass is running for the first time after you turn on the screen. - * (From aod or screen off) - */ - private boolean mFirstBypassAttempt; - /** - * If auth happens successfully during {@code mFirstBypassAttempt}, and we should wait until - * the keyguard is dismissed to show the status bar. - */ - private boolean mDelayShowingKeyguardStatusBar; - private boolean mAnimatingQS; /** @@ -683,6 +638,17 @@ public class NotificationPanelViewController extends PanelViewController { } }; + private final KeyguardStatusBarViewController.ViewStateProvider mViewStateProvider = + new KeyguardStatusBarViewController.ViewStateProvider() { + @Override + public KeyguardStatusBarViewController.ViewState provideViewState() { + float alphaQsExpansion = 1 - Math.min(1, computeQsExpansionFraction() * 2); + float newAlpha = Math.min(getKeyguardContentsAlpha(), alphaQsExpansion) + * (1.0f - mKeyguardHeadsUpShowingAmount); + return new KeyguardStatusBarViewController.ViewState(newAlpha); + } + }; + @Inject public NotificationPanelViewController(NotificationPanelView view, @Main Resources resources, @@ -706,7 +672,6 @@ public class NotificationPanelViewController extends PanelViewController { StatusBarTouchableRegionManager statusBarTouchableRegionManager, ConversationNotificationManager conversationNotificationManager, MediaHierarchyManager mediaHierarchyManager, - BiometricUnlockController biometricUnlockController, StatusBarKeyguardViewManager statusBarKeyguardViewManager, NotificationStackScrollLayoutController notificationStackScrollLayoutController, KeyguardStatusViewComponent.Factory keyguardStatusViewComponentFactory, @@ -792,7 +757,6 @@ public class NotificationPanelViewController extends PanelViewController { mDisplayId = displayId; mPulseExpansionHandler = pulseExpansionHandler; mDozeParameters = dozeParameters; - mBiometricUnlockController = biometricUnlockController; mScrimController = scrimController; mScrimController.setClipsQsScrim(!mShouldUseSplitNotificationShade); mUserManager = userManager; @@ -800,6 +764,8 @@ public class NotificationPanelViewController extends PanelViewController { mTapAgainViewController = tapAgainViewController; mUiExecutor = uiExecutor; mSecureSettings = secureSettings; + // TODO: inject via dagger instead of Dependency + mSysUiState = Dependency.get(SysUiState.class); pulseExpansionHandler.setPulseExpandAbortListener(() -> { if (mQs != null) { mQs.animateHeaderSlidingOut(); @@ -808,21 +774,8 @@ public class NotificationPanelViewController extends PanelViewController { mThemeResId = mView.getContext().getThemeResId(); mKeyguardBypassController = bypassController; mUpdateMonitor = keyguardUpdateMonitor; - mFirstBypassAttempt = mKeyguardBypassController.getBypassEnabled(); - KeyguardStateController.Callback - keyguardMonitorCallback = - new KeyguardStateController.Callback() { - @Override - public void onKeyguardFadingAwayChanged() { - if (!mKeyguardStateController.isKeyguardFadingAway()) { - mFirstBypassAttempt = false; - mDelayShowingKeyguardStatusBar = false; - } - } - }; mLockscreenShadeTransitionController = lockscreenShadeTransitionController; lockscreenShadeTransitionController.setNotificationPanelController(this); - mKeyguardStateController.addCallback(keyguardMonitorCallback); DynamicPrivacyControlListener dynamicPrivacyControlListener = new DynamicPrivacyControlListener(); @@ -884,7 +837,9 @@ public class NotificationPanelViewController extends PanelViewController { } mKeyguardStatusBarViewController = - mKeyguardStatusBarViewComponentFactory.build(mKeyguardStatusBar) + mKeyguardStatusBarViewComponentFactory.build( + mKeyguardStatusBar, + mViewStateProvider) .getKeyguardStatusBarViewController(); mKeyguardStatusBarViewController.init(); @@ -1317,8 +1272,6 @@ public class NotificationPanelViewController extends PanelViewController { } private void updateClockAppearance() { - int totalHeight = mView.getHeight(); - int bottomPadding = Math.max(mIndicationBottomPadding, mAmbientIndicationBottomPadding); int userSwitcherPreferredY = mStatusBarHeaderHeightKeyguard; boolean bypassEnabled = mKeyguardBypassController.getBypassEnabled(); final boolean hasVisibleNotifications = mNotificationStackScrollLayoutController @@ -1339,14 +1292,11 @@ public class NotificationPanelViewController extends PanelViewController { mUnlockedScreenOffAnimationController.isScreenOffAnimationPlaying() ? 1.0f : mInterpolatedDarkAmount; mClockPositionAlgorithm.setup(mStatusBarHeaderHeightKeyguard, - totalHeight - bottomPadding, - mNotificationStackScrollLayoutController.getIntrinsicContentHeight(), expandedFraction, - totalHeight, mKeyguardStatusViewController.getLockscreenHeight(), userIconHeight, - userSwitcherPreferredY, hasCustomClock(), - hasVisibleNotifications, darkamount, mOverStretchAmount, + userSwitcherPreferredY, + darkamount, mOverStretchAmount, bypassEnabled, getUnlockedStackScrollerPadding(), computeQsExpansionFraction(), mDisplayTopInset, @@ -1886,6 +1836,9 @@ public class NotificationPanelViewController extends PanelViewController { private boolean handleQsTouch(MotionEvent event) { + if (mShouldUseSplitNotificationShade && touchXOutsideOfQs(event.getX())) { + return false; + } final int action = event.getActionMasked(); if (action == MotionEvent.ACTION_DOWN && getExpandedFraction() == 1f && mBarState != KEYGUARD && !mQsExpanded && isQsExpansionEnabled()) { @@ -1927,8 +1880,12 @@ public class NotificationPanelViewController extends PanelViewController { return false; } + private boolean touchXOutsideOfQs(float touchX) { + return touchX < mQsFrame.getX() || touchX > mQsFrame.getX() + mQsFrame.getWidth(); + } + private boolean isInQsArea(float x, float y) { - if (x < mQsFrame.getX() || x > mQsFrame.getX() + mQsFrame.getWidth()) { + if (touchXOutsideOfQs(x)) { return false; } // Let's reject anything at the very bottom around the home handle in gesture nav @@ -2165,59 +2122,6 @@ public class NotificationPanelViewController extends PanelViewController { } } - private final Runnable mAnimateKeyguardStatusBarInvisibleEndRunnable = new Runnable() { - @Override - public void run() { - mKeyguardStatusBar.setVisibility(View.INVISIBLE); - mKeyguardStatusBar.setAlpha(1f); - mKeyguardStatusBarAnimateAlpha = 1f; - } - }; - - private void animateKeyguardStatusBarOut() { - ValueAnimator anim = ValueAnimator.ofFloat(mKeyguardStatusBar.getAlpha(), 0f); - anim.addUpdateListener(mStatusBarAnimateAlphaListener); - anim.setStartDelay(mKeyguardStateController.isKeyguardFadingAway() - ? mKeyguardStateController.getKeyguardFadingAwayDelay() : 0); - - long duration; - if (mKeyguardStateController.isKeyguardFadingAway()) { - duration = mKeyguardStateController.getShortenedFadingAwayDuration(); - } else { - duration = StackStateAnimator.ANIMATION_DURATION_STANDARD; - } - anim.setDuration(duration); - - anim.setInterpolator(Interpolators.LINEAR_OUT_SLOW_IN); - anim.addListener(new AnimatorListenerAdapter() { - @Override - public void onAnimationEnd(Animator animation) { - mAnimateKeyguardStatusBarInvisibleEndRunnable.run(); - } - }); - anim.start(); - } - - private final ValueAnimator.AnimatorUpdateListener - mStatusBarAnimateAlphaListener = - new ValueAnimator.AnimatorUpdateListener() { - @Override - public void onAnimationUpdate(ValueAnimator animation) { - mKeyguardStatusBarAnimateAlpha = (float) animation.getAnimatedValue(); - updateHeaderKeyguardAlpha(); - } - }; - - private void animateKeyguardStatusBarIn(long duration) { - mKeyguardStatusBar.setVisibility(View.VISIBLE); - mKeyguardStatusBar.setAlpha(0f); - ValueAnimator anim = ValueAnimator.ofFloat(0f, 1f); - anim.addUpdateListener(mStatusBarAnimateAlphaListener); - anim.setDuration(duration); - anim.setInterpolator(Interpolators.LINEAR_OUT_SLOW_IN); - anim.start(); - } - private final Runnable mAnimateKeyguardBottomAreaInvisibleEndRunnable = new Runnable() { @Override public void run() { @@ -2270,7 +2174,7 @@ public class NotificationPanelViewController extends PanelViewController { mQsExpansionHeight = height; updateQsExpansion(); requestScrollerTopPaddingUpdate(false /* animate */); - updateHeaderKeyguardAlpha(); + mKeyguardStatusBarViewController.updateViewState(); if (mBarState == StatusBarState.SHADE_LOCKED || mBarState == KEYGUARD) { updateKeyguardBottomAreaAlpha(); positionClockAndNotifications(); @@ -2994,7 +2898,7 @@ public class NotificationPanelViewController extends PanelViewController { */ private void updateHeader() { if (mBarState == KEYGUARD) { - updateHeaderKeyguardAlpha(); + mKeyguardStatusBarViewController.updateViewState(); } updateQsExpansion(); } @@ -3042,23 +2946,6 @@ public class NotificationPanelViewController extends PanelViewController { return alpha; } - private void updateHeaderKeyguardAlpha() { - if (!mKeyguardShowing) { - return; - } - float alphaQsExpansion = 1 - Math.min(1, computeQsExpansionFraction() * 2); - float newAlpha = Math.min(getKeyguardContentsAlpha(), alphaQsExpansion) - * mKeyguardStatusBarAnimateAlpha; - newAlpha *= 1.0f - mKeyguardHeadsUpShowingAmount; - mKeyguardStatusBar.setAlpha(newAlpha); - boolean - hideForBypass = - mFirstBypassAttempt && mUpdateMonitor.shouldListenForFace() - || mDelayShowingKeyguardStatusBar; - mKeyguardStatusBar.setVisibility( - newAlpha != 0f && !mDozing && !hideForBypass ? View.VISIBLE : View.INVISIBLE); - } - private void updateKeyguardBottomAreaAlpha() { // There are two possible panel expansion behaviors: // • User dragging up to unlock: we want to fade out as quick as possible @@ -3285,7 +3172,7 @@ public class NotificationPanelViewController extends PanelViewController { private void updateDozingVisibilities(boolean animate) { mKeyguardBottomArea.setDozing(mDozing, animate); if (!mDozing && animate) { - animateKeyguardStatusBarIn(StackStateAnimator.ANIMATION_DURATION_STANDARD); + mKeyguardStatusBarViewController.animateKeyguardStatusBarIn(); } } @@ -3372,7 +3259,7 @@ public class NotificationPanelViewController extends PanelViewController { private void setKeyguardHeadsUpShowingAmount(float amount) { mKeyguardHeadsUpShowingAmount = amount; - updateHeaderKeyguardAlpha(); + mKeyguardStatusBarViewController.updateViewState(); } private float getKeyguardHeadsUpShowingAmount() { @@ -3681,6 +3568,7 @@ public class NotificationPanelViewController extends PanelViewController { mDozing = dozing; mNotificationStackScrollLayoutController.setDozing(mDozing, animate, wakeUpTouchLocation); mKeyguardBottomArea.setDozing(mDozing, animate); + mKeyguardStatusBarViewController.setDozing(mDozing); if (dozing) { mBottomAreaShadeAlphaAnimator.cancel(); @@ -4079,6 +3967,20 @@ public class NotificationPanelViewController extends PanelViewController { mContentResolver.unregisterContentObserver(mSettingsChangeObserver); } + /** + * Updates notification panel-specific flags on {@link SysUiState}. + */ + public void updateSystemUiStateFlags() { + if (SysUiState.DEBUG) { + Log.d(TAG, "Updating panel sysui state flags: fullyExpanded=" + + isFullyExpanded() + " inQs=" + isInSettings()); + } + mSysUiState.setFlag(SYSUI_STATE_NOTIFICATION_PANEL_EXPANDED, + isFullyExpanded() && !isInSettings()) + .setFlag(SYSUI_STATE_QUICK_SETTINGS_EXPANDED, isInSettings()) + .commitUpdate(mDisplayId); + } + private class OnHeightChangedListener implements ExpandableView.OnHeightChangedListener { @Override public void onHeightChanged(ExpandableView view, boolean needsAnimation) { @@ -4147,9 +4049,7 @@ public class NotificationPanelViewController extends PanelViewController { @Override public void flingTopOverscroll(float velocity, boolean open) { // in split shade mode we want to expand/collapse QS only when touch happens within QS - if (mShouldUseSplitNotificationShade - && (mInitialTouchX < mQsFrame.getX() - || mInitialTouchX > mQsFrame.getX() + mQsFrame.getWidth())) { + if (mShouldUseSplitNotificationShade && touchXOutsideOfQs(mInitialTouchX)) { return; } mLastOverscroll = 0f; @@ -4468,11 +4368,22 @@ public class NotificationPanelViewController extends PanelViewController { if (oldState == KEYGUARD && (goingToFullShade || statusBarState == StatusBarState.SHADE_LOCKED)) { - animateKeyguardStatusBarOut(); + + long startDelay; + long duration; + if (mKeyguardStateController.isKeyguardFadingAway()) { + startDelay = mKeyguardStateController.getKeyguardFadingAwayDelay(); + duration = mKeyguardStateController.getShortenedFadingAwayDuration(); + } else { + startDelay = 0; + duration = StackStateAnimator.ANIMATION_DURATION_STANDARD; + } + mKeyguardStatusBarViewController.animateKeyguardStatusBarOut(startDelay, duration); updateQSMinHeight(); } else if (oldState == StatusBarState.SHADE_LOCKED && statusBarState == KEYGUARD) { - animateKeyguardStatusBarIn(StackStateAnimator.ANIMATION_DURATION_STANDARD); + mKeyguardStatusBarViewController.animateKeyguardStatusBarIn(); + mNotificationStackScrollLayoutController.resetScrollPosition(); // Only animate header if the header is visible. If not, it will partially // animate out @@ -4550,7 +4461,6 @@ public class NotificationPanelViewController extends PanelViewController { .addTagListener(QS.TAG, mFragmentListener); mStatusBarStateController.addCallback(mStatusBarStateListener); mConfigurationController.addCallback(mConfigurationListener); - mUpdateMonitor.registerCallback(mKeyguardUpdateCallback); // Theme might have changed between inflating this view and attaching it to the // window, so // force a call to onThemeChanged @@ -4567,7 +4477,6 @@ public class NotificationPanelViewController extends PanelViewController { .removeTagListener(QS.TAG, mFragmentListener); mStatusBarStateController.removeCallback(mStatusBarStateListener); mConfigurationController.removeCallback(mConfigurationListener); - mUpdateMonitor.removeCallback(mKeyguardUpdateCallback); mFalsingManager.removeTapListener(mFalsingTapListener); } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarView.java index 70a46b25c1eb..88a823c083d9 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarView.java @@ -287,8 +287,13 @@ public class PhoneStatusBarView extends PanelBar { public void panelExpansionChanged(float frac, boolean expanded) { super.panelExpansionChanged(frac, expanded); updateScrimFraction(); - if ((frac == 0 || frac == 1) && mBar.getNavigationBarView() != null) { - mBar.getNavigationBarView().onStatusBarPanelStateChanged(); + if ((frac == 0 || frac == 1)) { + if (mBar.getNavigationBarView() != null) { + mBar.getNavigationBarView().onStatusBarPanelStateChanged(); + } + if (mBar.getNotificationPanelViewController() != null) { + mBar.getNotificationPanelViewController().updateSystemUiStateFlags(); + } } if (mExpansionChangedListeners != null) { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java index 32b5cb20af4e..5e9ce5594b14 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java @@ -1824,6 +1824,7 @@ public class StatusBar extends SystemUI implements mNotificationPanelViewController.setStatusAccessibilityImportance(expanded ? View.IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS : View.IMPORTANT_FOR_ACCESSIBILITY_AUTO); + mNotificationPanelViewController.updateSystemUiStateFlags(); if (getNavigationBarView() != null) { getNavigationBarView().onStatusBarPanelStateChanged(); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/UnlockedScreenOffAnimationController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/phone/UnlockedScreenOffAnimationController.kt index 6b52dca42eda..f8120a8a7029 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/UnlockedScreenOffAnimationController.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/UnlockedScreenOffAnimationController.kt @@ -5,20 +5,23 @@ import android.animation.AnimatorListenerAdapter import android.animation.ValueAnimator import android.content.Context import android.content.res.Configuration +import android.database.ContentObserver import android.os.Handler +import android.provider.Settings +import com.android.systemui.statusbar.StatusBarState import android.view.View import com.android.systemui.animation.Interpolators import com.android.systemui.dagger.SysUISingleton import com.android.systemui.keyguard.KeyguardViewMediator import com.android.systemui.keyguard.WakefulnessLifecycle import com.android.systemui.statusbar.LightRevealScrim -import com.android.systemui.statusbar.StatusBarState import com.android.systemui.statusbar.StatusBarStateControllerImpl import com.android.systemui.statusbar.notification.AnimatableProperty import com.android.systemui.statusbar.notification.PropertyAnimator import com.android.systemui.statusbar.notification.stack.AnimationProperties import com.android.systemui.statusbar.notification.stack.StackStateAnimator import com.android.systemui.statusbar.policy.KeyguardStateController +import com.android.systemui.util.settings.GlobalSettings import javax.inject.Inject /** @@ -46,13 +49,16 @@ class UnlockedScreenOffAnimationController @Inject constructor( private val statusBarStateControllerImpl: StatusBarStateControllerImpl, private val keyguardViewMediatorLazy: dagger.Lazy<KeyguardViewMediator>, private val keyguardStateController: KeyguardStateController, - private val dozeParameters: dagger.Lazy<DozeParameters> + private val dozeParameters: dagger.Lazy<DozeParameters>, + private val globalSettings: GlobalSettings ) : WakefulnessLifecycle.Observer { private val handler = Handler() private lateinit var statusBar: StatusBar private lateinit var lightRevealScrim: LightRevealScrim + private var animatorDurationScale = 1f + private var shouldAnimateInKeyguard = false private var lightRevealAnimationPlaying = false private var aodUiAnimationPlaying = false @@ -79,6 +85,12 @@ class UnlockedScreenOffAnimationController @Inject constructor( }) } + val animatorDurationScaleObserver = object : ContentObserver(null) { + override fun onChange(selfChange: Boolean) { + updateAnimatorDurationScale() + } + } + fun initialize( statusBar: StatusBar, lightRevealScrim: LightRevealScrim @@ -86,14 +98,25 @@ class UnlockedScreenOffAnimationController @Inject constructor( this.lightRevealScrim = lightRevealScrim this.statusBar = statusBar + updateAnimatorDurationScale() + globalSettings.registerContentObserver( + Settings.Global.getUriFor(Settings.Global.ANIMATOR_DURATION_SCALE), + /* notify for descendants */ false, + animatorDurationScaleObserver) wakefulnessLifecycle.addObserver(this) } + fun updateAnimatorDurationScale() { + animatorDurationScale = + globalSettings.getFloat(Settings.Global.ANIMATOR_DURATION_SCALE, 1f) + } + /** * Animates in the provided keyguard view, ending in the same position that it will be in on * AOD. */ fun animateInKeyguard(keyguardView: View, after: Runnable) { + shouldAnimateInKeyguard = false keyguardView.alpha = 0f keyguardView.visibility = View.VISIBLE @@ -138,6 +161,7 @@ class UnlockedScreenOffAnimationController @Inject constructor( // Waking up, so reset this flag. decidedToAnimateGoingToSleep = null + shouldAnimateInKeyguard = false lightRevealAnimator.cancel() handler.removeCallbacksAndMessages(null) } @@ -146,7 +170,6 @@ class UnlockedScreenOffAnimationController @Inject constructor( // Set this to false in onFinishedWakingUp rather than onStartedWakingUp so that other // observers (such as StatusBar) can ask us whether we were playing the screen off animation // and reset accordingly. - lightRevealAnimationPlaying = false aodUiAnimationPlaying = false // If we can't control the screen off animation, we shouldn't mess with the StatusBar's @@ -167,15 +190,15 @@ class UnlockedScreenOffAnimationController @Inject constructor( if (dozeParameters.get().shouldControlUnlockedScreenOff()) { decidedToAnimateGoingToSleep = true + shouldAnimateInKeyguard = true lightRevealAnimationPlaying = true lightRevealAnimator.start() - handler.postDelayed({ aodUiAnimationPlaying = true // Show AOD. That'll cause the KeyguardVisibilityHelper to call #animateInKeyguard. statusBar.notificationPanelViewController.showAodUi() - }, ANIMATE_IN_KEYGUARD_DELAY) + }, (ANIMATE_IN_KEYGUARD_DELAY * animatorDurationScale).toLong()) } else { decidedToAnimateGoingToSleep = false } @@ -228,6 +251,10 @@ class UnlockedScreenOffAnimationController @Inject constructor( return lightRevealAnimationPlaying || aodUiAnimationPlaying } + fun shouldAnimateInKeyguard(): Boolean { + return shouldAnimateInKeyguard + } + /** * Whether the light reveal animation is playing. The second part of the screen off animation, * where AOD animates in, might still be playing if this returns false. @@ -235,4 +262,4 @@ class UnlockedScreenOffAnimationController @Inject constructor( fun isScreenOffLightRevealAnimationPlaying(): Boolean { return lightRevealAnimationPlaying } -}
\ No newline at end of file +} diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java index c3f8853aaf14..156def5a6183 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java @@ -71,6 +71,7 @@ import com.android.systemui.dagger.qualifiers.Background; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.demomode.DemoMode; import com.android.systemui.demomode.DemoModeController; +import com.android.systemui.dump.DumpManager; import com.android.systemui.flags.FeatureFlags; import com.android.systemui.qs.tiles.dialog.InternetDialogFactory; import com.android.systemui.qs.tiles.dialog.InternetDialogUtil; @@ -129,6 +130,7 @@ public class NetworkControllerImpl extends BroadcastReceiver private Config mConfig; private final CarrierConfigTracker mCarrierConfigTracker; private final FeatureFlags mFeatureFlags; + private final DumpManager mDumpManager; private TelephonyCallback.ActiveDataSubscriptionIdListener mPhoneStateListener; private int mActiveMobileDataSubscription = SubscriptionManager.INVALID_SUBSCRIPTION_ID; @@ -225,7 +227,8 @@ public class NetworkControllerImpl extends BroadcastReceiver CarrierConfigTracker carrierConfigTracker, FeatureFlags featureFlags, @Main Handler handler, - InternetDialogFactory internetDialogFactory) { + InternetDialogFactory internetDialogFactory, + DumpManager dumpManager) { this(context, connectivityManager, telephonyManager, telephonyListenerManager, @@ -243,7 +246,8 @@ public class NetworkControllerImpl extends BroadcastReceiver broadcastDispatcher, demoModeController, carrierConfigTracker, - featureFlags); + featureFlags, + dumpManager); mReceiverHandler.post(mRegisterListeners); mMainHandler = handler; mInternetDialogFactory = internetDialogFactory; @@ -265,7 +269,8 @@ public class NetworkControllerImpl extends BroadcastReceiver BroadcastDispatcher broadcastDispatcher, DemoModeController demoModeController, CarrierConfigTracker carrierConfigTracker, - FeatureFlags featureFlags + FeatureFlags featureFlags, + DumpManager dumpManager ) { mContext = context; mTelephonyListenerManager = telephonyListenerManager; @@ -284,6 +289,7 @@ public class NetworkControllerImpl extends BroadcastReceiver mDemoModeController = demoModeController; mCarrierConfigTracker = carrierConfigTracker; mFeatureFlags = featureFlags; + mDumpManager = dumpManager; // telephony mPhone = telephonyManager; @@ -434,6 +440,8 @@ public class NetworkControllerImpl extends BroadcastReceiver mDemoModeController.addCallback(this); mProviderModelBehavior = mFeatureFlags.isCombinedStatusBarSignalIconsEnabled(); mProviderModelSetting = mFeatureFlags.isProviderModelSettingEnabled(); + + mDumpManager.registerDumpable(TAG, this); } private final Runnable mClearForceValidated = () -> { @@ -793,8 +801,8 @@ public class NetworkControllerImpl extends BroadcastReceiver mReceiverHandler.post(this::handleConfigurationChanged); break; case Settings.Panel.ACTION_INTERNET_CONNECTIVITY: - boolean canConfigMobileData = mAccessPoints.canConfigMobileData(); - mMainHandler.post(() -> mInternetDialogFactory.create(true, canConfigMobileData)); + mMainHandler.post(() -> mInternetDialogFactory.create(true, + mAccessPoints.canConfigMobileData(), mAccessPoints.canConfigWifi())); break; default: int subId = intent.getIntExtra(SubscriptionManager.EXTRA_SUBSCRIPTION_INDEX, diff --git a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityContainerTest.java b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityContainerTest.java index 02763235a8ca..2efd3697f633 100644 --- a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityContainerTest.java +++ b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityContainerTest.java @@ -165,7 +165,8 @@ public class KeyguardSecurityContainerTest extends SysuiTestCase { mKeyguardSecurityContainer.setOneHandedModeLeftAligned( /* leftAligned= */false, /* animate= */false); - verify(mSecurityViewFlipper).setTranslationX(SCREEN_WIDTH / 2.0f); + verify(mSecurityViewFlipper).setTranslationX( + mKeyguardSecurityContainer.getWidth() - mSecurityViewFlipper.getWidth()); mKeyguardSecurityContainer.setOneHandedModeLeftAligned( /* leftAligned= */true, /* animate= */false); diff --git a/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthBiometricFaceToFingerprintViewTest.java b/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthBiometricFaceToFingerprintViewTest.java index f91c02938845..b6d1e42a4763 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthBiometricFaceToFingerprintViewTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthBiometricFaceToFingerprintViewTest.java @@ -47,6 +47,7 @@ import com.android.systemui.R; import com.android.systemui.SysuiTestCase; import org.junit.Before; +import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; @@ -165,6 +166,7 @@ public class AuthBiometricFaceToFingerprintViewTest extends SysuiTestCase { } @Test + @Ignore("flaky, b/189031816") public void testModeUpdated_onSoftError_whenSwitchToFingerprint() { mFaceToFpView.onDialogAnimatedIn(); mFaceToFpView.onAuthenticationFailed(TYPE_FACE, "no face"); @@ -181,6 +183,7 @@ public class AuthBiometricFaceToFingerprintViewTest extends SysuiTestCase { } @Test + @Ignore("flaky, b/189031816") public void testModeUpdated_onHardError_whenSwitchToFingerprint() { mFaceToFpView.onDialogAnimatedIn(); mFaceToFpView.onError(TYPE_FACE, "oh no!"); diff --git a/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthBiometricViewTest.java b/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthBiometricViewTest.java index bd518ff9a1ea..f8e38e4994bc 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthBiometricViewTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthBiometricViewTest.java @@ -45,6 +45,7 @@ import com.android.systemui.R; import com.android.systemui.SysuiTestCase; import org.junit.Before; +import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; @@ -199,6 +200,7 @@ public class AuthBiometricViewTest extends SysuiTestCase { } @Test + @Ignore("flaky, b/189031816") public void testError_sendsActionError() { initDialog(mContext, false /* allowDeviceCredential */, mCallback, new MockInjector()); final String testError = "testError"; diff --git a/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsControllerTest.java index ae009bcc7cd5..f5c6f981d101 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsControllerTest.java @@ -16,6 +16,8 @@ package com.android.systemui.biometrics; +import static android.media.AudioAttributes.USAGE_ASSISTANCE_ACCESSIBILITY; + import static junit.framework.Assert.assertEquals; import static org.mockito.ArgumentMatchers.any; @@ -563,5 +565,10 @@ public class UdfpsControllerTest extends SysuiTestCase { eq(mUdfpsController.EFFECT_CLICK), eq("udfps-onStart"), eq(UdfpsController.VIBRATION_SONIFICATION_ATTRIBUTES)); + + // THEN make sure vibration attributes has so that it always will play the haptic, + // even in battery saver mode + assertEquals(USAGE_ASSISTANCE_ACCESSIBILITY, + UdfpsController.VIBRATION_SONIFICATION_ATTRIBUTES.getUsage()); } } diff --git a/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsKeyguardViewControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsKeyguardViewControllerTest.java index decec63f2be2..2c08fe67f4f2 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsKeyguardViewControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsKeyguardViewControllerTest.java @@ -369,6 +369,25 @@ public class UdfpsKeyguardViewControllerTest extends SysuiTestCase { verify(mView).setUnpausedAlpha(0); } + @Test + public void testShowUdfpsBouncer() { + // GIVEN view is attached and status bar expansion is 0 + mController.onViewAttached(); + captureExpansionListeners(); + captureKeyguardStateControllerCallback(); + captureAltAuthInterceptor(); + updateStatusBarExpansion(0, true); + reset(mView); + when(mView.getContext()).thenReturn(mResourceContext); + when(mResourceContext.getString(anyInt())).thenReturn("test string"); + + // WHEN status bar expansion is 0 but udfps bouncer is requested + mAltAuthInterceptor.showAlternateAuthBouncer(); + + // THEN alpha is 0 + verify(mView).setUnpausedAlpha(255); + } + private void sendStatusBarStateChanged(int statusBarState) { mStatusBarStateListener.onStateChanged(statusBarState); } diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tileimpl/QSIconViewImplTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/tileimpl/QSIconViewImplTest.java index 63ebe9290f64..23e51687f9e1 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/tileimpl/QSIconViewImplTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tileimpl/QSIconViewImplTest.java @@ -18,6 +18,7 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.argThat; +import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; @@ -74,6 +75,24 @@ public class QSIconViewImplTest extends SysuiTestCase { } @Test + public void testMutateIconDrawable() { + SlashImageView iv = mock(SlashImageView.class); + Drawable originalDrawable = mock(Drawable.class); + Drawable otherDrawable = mock(Drawable.class); + State s = new State(); + s.icon = mock(Icon.class); + when(s.icon.getInvisibleDrawable(eq(mContext))).thenReturn(originalDrawable); + when(s.icon.getDrawable(eq(mContext))).thenReturn(originalDrawable); + when(iv.isShown()).thenReturn(true); + when(originalDrawable.getConstantState()).thenReturn(fakeConstantState(otherDrawable)); + + + mIconView.updateIcon(iv, s, /* allowAnimations= */true); + + verify(iv).setState(any(), eq(otherDrawable)); + } + + @Test public void testNoFirstFade() { ImageView iv = mock(ImageView.class); State s = new State(); @@ -104,4 +123,18 @@ public class QSIconViewImplTest extends SysuiTestCase { public void testIconNotSet_toString() { assertFalse(mIconView.toString().contains("lastIcon")); } + + private static Drawable.ConstantState fakeConstantState(Drawable otherDrawable) { + return new Drawable.ConstantState() { + @Override + public Drawable newDrawable() { + return otherDrawable; + } + + @Override + public int getChangingConfigurations() { + return 1; + } + }; + } } diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/dialog/InternetAdapterTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/dialog/InternetAdapterTest.java index 2b9082d7e303..fa5f70c5a2fc 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/dialog/InternetAdapterTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/dialog/InternetAdapterTest.java @@ -2,8 +2,11 @@ package com.android.systemui.qs.tiles.dialog; import static com.google.common.truth.Truth.assertThat; +import static org.mockito.ArgumentMatchers.anyBoolean; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.reset; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -24,6 +27,7 @@ import org.mockito.Mock; import org.mockito.MockitoAnnotations; import java.util.Arrays; +import java.util.List; @SmallTest @RunWith(AndroidTestingRunner.class) @@ -35,6 +39,8 @@ public class InternetAdapterTest extends SysuiTestCase { @Mock private WifiEntry mInternetWifiEntry; @Mock + private List<WifiEntry> mWifiEntries; + @Mock private WifiEntry mWifiEntry; @Mock private InternetDialogController mInternetDialogController; @@ -56,43 +62,17 @@ public class InternetAdapterTest extends SysuiTestCase { mInternetAdapter = new InternetAdapter(mInternetDialogController); mViewHolder = mInternetAdapter.onCreateViewHolder(new LinearLayout(mContext), 0); - when(mInternetDialogController.getInternetWifiEntry()).thenReturn(mInternetWifiEntry); - when(mInternetDialogController.getWifiEntryList()).thenReturn(Arrays.asList(mWifiEntry)); + mInternetAdapter.setWifiEntries(Arrays.asList(mWifiEntry), 1 /* wifiEntriesCount */); mViewHolder.mWifiIconInjector = mWifiIconInjector; } @Test - public void getItemCount_withApmOnWifiOnNoInternetWifi_returnFour() { - // The preconditions WiFi ON is already in setUp() - when(mInternetDialogController.getInternetWifiEntry()).thenReturn(null); - when(mInternetDialogController.isAirplaneModeEnabled()).thenReturn(true); - - assertThat(mInternetAdapter.getItemCount()).isEqualTo(4); - } - - @Test - public void getItemCount_withApmOnWifiOnHasInternetWifi_returnThree() { - // The preconditions WiFi ON and Internet WiFi are already in setUp() - when(mInternetDialogController.isAirplaneModeEnabled()).thenReturn(true); + public void getItemCount_returnWifiEntriesCount() { + for (int i = 0; i < InternetDialogController.MAX_WIFI_ENTRY_COUNT; i++) { + mInternetAdapter.setWifiEntries(mWifiEntries, i /* wifiEntriesCount */); - assertThat(mInternetAdapter.getItemCount()).isEqualTo(3); - } - - @Test - public void getItemCount_withApmOffWifiOnNoInternetWifi_returnThree() { - // The preconditions WiFi ON is already in setUp() - when(mInternetDialogController.getInternetWifiEntry()).thenReturn(null); - when(mInternetDialogController.isAirplaneModeEnabled()).thenReturn(false); - - assertThat(mInternetAdapter.getItemCount()).isEqualTo(3); - } - - @Test - public void getItemCount_withApmOffWifiOnHasInternetWifi_returnTwo() { - // The preconditions WiFi ON and Internet WiFi are already in setUp() - when(mInternetDialogController.isAirplaneModeEnabled()).thenReturn(false); - - assertThat(mInternetAdapter.getItemCount()).isEqualTo(2); + assertThat(mInternetAdapter.getItemCount()).isEqualTo(i); + } } @Test @@ -118,7 +98,17 @@ public class InternetAdapterTest extends SysuiTestCase { } @Test - public void onBindViewHolder_bindDefaultWifiNetwork_getIconWithInternet() { + public void onBindViewHolder_wifiLevelUnreachable_shouldNotGetWifiIcon() { + reset(mWifiIconInjector); + when(mWifiEntry.getLevel()).thenReturn(WifiEntry.WIFI_LEVEL_UNREACHABLE); + + mInternetAdapter.onBindViewHolder(mViewHolder, 0); + + verify(mWifiIconInjector, never()).getIcon(anyBoolean(), anyInt()); + } + + @Test + public void onBindViewHolder_shouldNotShowXLevelIcon_getIconWithInternet() { when(mWifiEntry.shouldShowXLevelIcon()).thenReturn(false); mInternetAdapter.onBindViewHolder(mViewHolder, 0); @@ -127,7 +117,7 @@ public class InternetAdapterTest extends SysuiTestCase { } @Test - public void onBindViewHolder_bindNoDefaultWifiNetwork_getIconWithNoInternet() { + public void onBindViewHolder_shouldShowXLevelIcon_getIconWithNoInternet() { when(mWifiEntry.shouldShowXLevelIcon()).thenReturn(true); mInternetAdapter.onBindViewHolder(mViewHolder, 0); diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/dialog/InternetDialogControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/dialog/InternetDialogControllerTest.java index 830fe5af69b8..cacc4095d141 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/dialog/InternetDialogControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/dialog/InternetDialogControllerTest.java @@ -10,6 +10,7 @@ import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; +import static org.mockito.Mockito.reset; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -17,7 +18,6 @@ import android.content.Context; import android.content.Intent; import android.graphics.drawable.Drawable; import android.net.ConnectivityManager; -import android.net.wifi.ScanResult; import android.net.wifi.WifiManager; import android.os.Handler; import android.telephony.ServiceState; @@ -84,14 +84,26 @@ public class InternetDialogControllerTest extends SysuiTestCase { @Mock private WifiEntry mConnectedEntry; @Mock + private WifiEntry mWifiEntry1; + @Mock + private WifiEntry mWifiEntry2; + @Mock + private WifiEntry mWifiEntry3; + @Mock + private WifiEntry mWifiEntry4; + @Mock private ServiceState mServiceState; @Mock private BroadcastDispatcher mBroadcastDispatcher; @Mock private WifiUtils.InternetIconInjector mWifiIconInjector; + @Mock + InternetDialogController.InternetDialogCallback mInternetDialogCallback; private MockInternetDialogController mInternetDialogController; private FakeExecutor mExecutor = new FakeExecutor(new FakeSystemClock()); + private List<WifiEntry> mAccessPoints = new ArrayList<>(); + private List<WifiEntry> mWifiEntries = new ArrayList<>(); @Before public void setUp() { @@ -100,6 +112,13 @@ public class InternetDialogControllerTest extends SysuiTestCase { when(mKeyguardStateController.isUnlocked()).thenReturn(true); when(mConnectedEntry.isDefaultNetwork()).thenReturn(true); when(mConnectedEntry.hasInternetAccess()).thenReturn(true); + when(mWifiEntry1.getConnectedState()).thenReturn(WifiEntry.CONNECTED_STATE_DISCONNECTED); + when(mWifiEntry2.getConnectedState()).thenReturn(WifiEntry.CONNECTED_STATE_DISCONNECTED); + when(mWifiEntry3.getConnectedState()).thenReturn(WifiEntry.CONNECTED_STATE_DISCONNECTED); + when(mWifiEntry4.getConnectedState()).thenReturn(WifiEntry.CONNECTED_STATE_DISCONNECTED); + mAccessPoints.add(mConnectedEntry); + mAccessPoints.add(mWifiEntry1); + when(mSubscriptionManager.getActiveSubscriptionIdList()).thenReturn(new int[]{SUB_ID}); mInternetDialogController = new MockInternetDialogController(mContext, mock(UiEventLogger.class), mock(ActivityStarter.class), mAccessPointController, @@ -108,10 +127,9 @@ public class InternetDialogControllerTest extends SysuiTestCase { mock(KeyguardUpdateMonitor.class), mGlobalSettings, mKeyguardStateController); mSubscriptionManager.addOnSubscriptionsChangedListener(mExecutor, mInternetDialogController.mOnSubscriptionsChangedListener); - mInternetDialogController.onStart( - mock(InternetDialogController.InternetDialogCallback.class)); + mInternetDialogController.onStart(mInternetDialogCallback, true); + mInternetDialogController.onAccessPointsChanged(mAccessPoints); mInternetDialogController.mActivityStarter = mActivityStarter; - mInternetDialogController.mConnectedEntry = mConnectedEntry; mInternetDialogController.mWifiIconInjector = mWifiIconInjector; } @@ -143,32 +161,46 @@ public class InternetDialogControllerTest extends SysuiTestCase { mInternetDialogController.setAirplaneModeEnabled(false); when(mWifiManager.isWifiEnabled()).thenReturn(false); - assertTrue(TextUtils.equals(mInternetDialogController.getSubtitleText(false), - getResourcesString("wifi_is_off"))); + assertThat(mInternetDialogController.getSubtitleText(false)) + .isEqualTo(getResourcesString("wifi_is_off")); + + // if the Wi-Fi disallow config, then don't return Wi-Fi related string. + mInternetDialogController.mCanConfigWifi = false; + + assertThat(mInternetDialogController.getSubtitleText(false)) + .isNotEqualTo(getResourcesString("wifi_is_off")); } @Test public void getSubtitleText_withNoWifiEntry_returnSearchWifi() { mInternetDialogController.setAirplaneModeEnabled(false); when(mWifiManager.isWifiEnabled()).thenReturn(true); - List<ScanResult> wifiScanResults = mock(ArrayList.class); - doReturn(0).when(wifiScanResults).size(); - when(mWifiManager.getScanResults()).thenReturn(wifiScanResults); + mInternetDialogController.onAccessPointsChanged(null /* accessPoints */); + + assertThat(mInternetDialogController.getSubtitleText(true)) + .isEqualTo(getResourcesString("wifi_empty_list_wifi_on")); - assertTrue(TextUtils.equals(mInternetDialogController.getSubtitleText(true), - getResourcesString("wifi_empty_list_wifi_on"))); + // if the Wi-Fi disallow config, then don't return Wi-Fi related string. + mInternetDialogController.mCanConfigWifi = false; + + assertThat(mInternetDialogController.getSubtitleText(true)) + .isNotEqualTo(getResourcesString("wifi_empty_list_wifi_on")); } @Test public void getSubtitleText_withWifiEntry_returnTapToConnect() { + // The preconditions WiFi Entries is already in setUp() mInternetDialogController.setAirplaneModeEnabled(false); when(mWifiManager.isWifiEnabled()).thenReturn(true); - List<ScanResult> wifiScanResults = mock(ArrayList.class); - doReturn(1).when(wifiScanResults).size(); - when(mWifiManager.getScanResults()).thenReturn(wifiScanResults); - assertTrue(TextUtils.equals(mInternetDialogController.getSubtitleText(false), - getResourcesString("tap_a_network_to_connect"))); + assertThat(mInternetDialogController.getSubtitleText(false)) + .isEqualTo(getResourcesString("tap_a_network_to_connect")); + + // if the Wi-Fi disallow config, then don't return Wi-Fi related string. + mInternetDialogController.mCanConfigWifi = false; + + assertThat(mInternetDialogController.getSubtitleText(false)) + .isNotEqualTo(getResourcesString("tap_a_network_to_connect")); } @Test @@ -185,11 +217,7 @@ public class InternetDialogControllerTest extends SysuiTestCase { public void getSubtitleText_withNoService_returnNoNetworksAvailable() { mInternetDialogController.setAirplaneModeEnabled(false); when(mWifiManager.isWifiEnabled()).thenReturn(true); - List<ScanResult> wifiScanResults = new ArrayList<>(); - doReturn(wifiScanResults).when(mWifiManager).getScanResults(); - when(mWifiManager.getScanResults()).thenReturn(wifiScanResults); - when(mSubscriptionManager.getActiveSubscriptionIdList()) - .thenReturn(new int[] {SUB_ID}); + mInternetDialogController.onAccessPointsChanged(null /* accessPoints */); doReturn(ServiceState.STATE_OUT_OF_SERVICE).when(mServiceState).getState(); doReturn(mServiceState).when(mTelephonyManager).getServiceState(); @@ -203,143 +231,223 @@ public class InternetDialogControllerTest extends SysuiTestCase { public void getSubtitleText_withMobileDataDisabled_returnNoOtherAvailable() { mInternetDialogController.setAirplaneModeEnabled(false); when(mWifiManager.isWifiEnabled()).thenReturn(true); - List<ScanResult> wifiScanResults = new ArrayList<>(); - doReturn(wifiScanResults).when(mWifiManager).getScanResults(); - when(mWifiManager.getScanResults()).thenReturn(wifiScanResults); - when(mSubscriptionManager.getActiveSubscriptionIdList()) - .thenReturn(new int[] {SUB_ID}); + mInternetDialogController.onAccessPointsChanged(null /* accessPoints */); doReturn(ServiceState.STATE_IN_SERVICE).when(mServiceState).getState(); doReturn(mServiceState).when(mTelephonyManager).getServiceState(); when(mTelephonyManager.isDataEnabled()).thenReturn(false); - assertTrue(TextUtils.equals(mInternetDialogController.getSubtitleText(false), - getResourcesString("non_carrier_network_unavailable"))); + assertThat(mInternetDialogController.getSubtitleText(false)) + .isEqualTo(getResourcesString("non_carrier_network_unavailable")); + + // if the Wi-Fi disallow config, then don't return Wi-Fi related string. + mInternetDialogController.mCanConfigWifi = false; + + assertThat(mInternetDialogController.getSubtitleText(false)) + .isNotEqualTo(getResourcesString("non_carrier_network_unavailable")); } @Test - public void getInternetWifiEntry_connectedEntryIsNull_returnNull() { - mInternetDialogController.mConnectedEntry = null; + public void getWifiDetailsSettingsIntent_withNoConnectedEntry_returnNull() { + mInternetDialogController.onAccessPointsChanged(null /* accessPoints */); - assertThat(mInternetDialogController.getInternetWifiEntry()).isNull(); + assertThat(mInternetDialogController.getWifiDetailsSettingsIntent()).isNull(); } @Test - public void getInternetWifiEntry_connectedWifiIsNotDefaultNetwork_returnNull() { - when(mConnectedEntry.isDefaultNetwork()).thenReturn(false); + public void getWifiDetailsSettingsIntent_withNoConnectedEntryKey_returnNull() { + when(mConnectedEntry.getKey()).thenReturn(null); - assertThat(mInternetDialogController.getInternetWifiEntry()).isNull(); + assertThat(mInternetDialogController.getWifiDetailsSettingsIntent()).isNull(); } @Test - public void getInternetWifiEntry_connectedWifiHasNotInternetAccess_returnNull() { - when(mConnectedEntry.hasInternetAccess()).thenReturn(false); + public void getWifiDetailsSettingsIntent_withConnectedEntryKey_returnIntent() { + when(mConnectedEntry.getKey()).thenReturn("test_key"); - assertThat(mInternetDialogController.getInternetWifiEntry()).isNull(); + assertThat(mInternetDialogController.getWifiDetailsSettingsIntent()).isNotNull(); } @Test - public void getInternetWifiEntry_connectedEntryIsInternetWifi_returnConnectedEntry() { - // The preconditions have been set in setUp(). - // - The connected Wi-Fi entry have both default network and internet access conditions. + public void getWifiDrawable_withConnectedEntry_returnIntentIconWithCorrectColor() { + final Drawable drawable = mock(Drawable.class); + when(mWifiIconInjector.getIcon(anyBoolean(), anyInt())).thenReturn(drawable); - assertThat(mInternetDialogController.getInternetWifiEntry()).isEqualTo(mConnectedEntry); + mInternetDialogController.getInternetWifiDrawable(mConnectedEntry); + + verify(mWifiIconInjector).getIcon(eq(false), anyInt()); + verify(drawable).setTint(mContext.getColor(R.color.connected_network_primary_color)); } @Test - public void getInternetWifiTitle_withNoConnectedWifiEntry_returnEmpty() { - mInternetDialogController.mConnectedEntry = null; + public void launchWifiNetworkDetailsSetting_withNoConnectedEntry_doNothing() { + mInternetDialogController.onAccessPointsChanged(null /* accessPoints */); + + mInternetDialogController.launchWifiNetworkDetailsSetting(); - assertThat(mInternetDialogController.getInternetWifiTitle()).isEmpty(); + verify(mActivityStarter, never()) + .postStartActivityDismissingKeyguard(any(Intent.class), anyInt()); } @Test - public void getInternetWifiTitle_withInternetWifi_returnTitle() { - // The preconditions have been set in setUp(). - // - The connected Wi-Fi entry have both default network and internet access conditions. - when(mConnectedEntry.getTitle()).thenReturn(CONNECTED_TITLE); + public void launchWifiNetworkDetailsSetting_withConnectedEntryKey_startActivity() { + when(mConnectedEntry.getKey()).thenReturn("test_key"); - assertThat(mInternetDialogController.getInternetWifiTitle()).isEqualTo(CONNECTED_TITLE); + mInternetDialogController.launchWifiNetworkDetailsSetting(); + + verify(mActivityStarter).postStartActivityDismissingKeyguard(any(Intent.class), anyInt()); } @Test - public void getInternetWifiSummary_withNoConnectedWifiEntry_returnEmpty() { - mInternetDialogController.mConnectedEntry = null; + public void isDeviceLocked_keyguardIsUnlocked_returnFalse() { + when(mKeyguardStateController.isUnlocked()).thenReturn(true); - assertThat(mInternetDialogController.getInternetWifiSummary()).isEmpty(); + assertThat(mInternetDialogController.isDeviceLocked()).isFalse(); } @Test - public void getInternetWifiSummary_withInternetWifi_returnSummary() { - when(mConnectedEntry.getSummary(false)).thenReturn(CONNECTED_SUMMARY); + public void isDeviceLocked_keyguardIsLocked_returnTrue() { + when(mKeyguardStateController.isUnlocked()).thenReturn(false); - assertThat(mInternetDialogController.getInternetWifiSummary()).isEqualTo(CONNECTED_SUMMARY); + assertThat(mInternetDialogController.isDeviceLocked()).isTrue(); } @Test - public void getWifiDetailsSettingsIntent_withNoConnectedEntry_returnNull() { - mInternetDialogController.mConnectedEntry = null; + public void onAccessPointsChanged_canNotConfigWifi_doNothing() { + reset(mInternetDialogCallback); + mInternetDialogController.mCanConfigWifi = false; - assertThat(mInternetDialogController.getWifiDetailsSettingsIntent()).isNull(); + mInternetDialogController.onAccessPointsChanged(null /* accessPoints */); + + verify(mInternetDialogCallback, never()).onAccessPointsChanged(any(), any()); } @Test - public void getWifiDetailsSettingsIntent_withNoConnectedEntryKey_returnNull() { - when(mConnectedEntry.getKey()).thenReturn(null); + public void onAccessPointsChanged_nullAccessPoints_callbackBothNull() { + reset(mInternetDialogCallback); - assertThat(mInternetDialogController.getWifiDetailsSettingsIntent()).isNull(); + mInternetDialogController.onAccessPointsChanged(null /* accessPoints */); + + verify(mInternetDialogCallback) + .onAccessPointsChanged(null /* wifiEntries */, null /* connectedEntry */); } @Test - public void getWifiDetailsSettingsIntent_withConnectedEntryKey_returnIntent() { - when(mConnectedEntry.getKey()).thenReturn("test_key"); + public void onAccessPointsChanged_oneConnectedEntry_callbackConnectedEntryOnly() { + reset(mInternetDialogCallback); + mInternetDialogController.setAirplaneModeEnabled(true); + mAccessPoints.clear(); + mAccessPoints.add(mConnectedEntry); - assertThat(mInternetDialogController.getWifiDetailsSettingsIntent()).isNotNull(); + mInternetDialogController.onAccessPointsChanged(mAccessPoints); + + mWifiEntries.clear(); + verify(mInternetDialogCallback).onAccessPointsChanged(mWifiEntries, mConnectedEntry); } @Test - public void getWifiDrawable_withConnectedEntry_returnIntentIconWithCorrectColor() { - final Drawable drawable = mock(Drawable.class); - when(mWifiIconInjector.getIcon(anyBoolean(), anyInt())).thenReturn(drawable); + public void onAccessPointsChanged_noConnectedEntryAndOneOther_callbackWifiEntriesOnly() { + reset(mInternetDialogCallback); + mInternetDialogController.setAirplaneModeEnabled(true); + mAccessPoints.clear(); + mAccessPoints.add(mWifiEntry1); - mInternetDialogController.getInternetWifiDrawable(mConnectedEntry); + mInternetDialogController.onAccessPointsChanged(mAccessPoints); - verify(mWifiIconInjector).getIcon(eq(false), anyInt()); - verify(drawable).setTint(mContext.getColor(R.color.connected_network_primary_color)); + mWifiEntries.clear(); + mWifiEntries.add(mWifiEntry1); + verify(mInternetDialogCallback) + .onAccessPointsChanged(mWifiEntries, null /* connectedEntry */); } @Test - public void launchWifiNetworkDetailsSetting_withNoConnectedEntry_doNothing() { - mInternetDialogController.mConnectedEntry = null; + public void onAccessPointsChanged_oneConnectedEntryAndOneOther_callbackCorrectly() { + reset(mInternetDialogCallback); + mInternetDialogController.setAirplaneModeEnabled(true); + mAccessPoints.clear(); + mAccessPoints.add(mConnectedEntry); + mAccessPoints.add(mWifiEntry1); - mInternetDialogController.launchWifiNetworkDetailsSetting(); + mInternetDialogController.onAccessPointsChanged(mAccessPoints); - verify(mActivityStarter, never()) - .postStartActivityDismissingKeyguard(any(Intent.class), anyInt()); + mWifiEntries.clear(); + mWifiEntries.add(mWifiEntry1); + verify(mInternetDialogCallback).onAccessPointsChanged(mWifiEntries, mConnectedEntry); } @Test - public void launchWifiNetworkDetailsSetting_withConnectedEntryKey_startActivity() { - when(mConnectedEntry.getKey()).thenReturn("test_key"); + public void onAccessPointsChanged_oneConnectedEntryAndTwoOthers_callbackCorrectly() { + reset(mInternetDialogCallback); + mInternetDialogController.setAirplaneModeEnabled(true); + mAccessPoints.clear(); + mAccessPoints.add(mConnectedEntry); + mAccessPoints.add(mWifiEntry1); + mAccessPoints.add(mWifiEntry2); - mInternetDialogController.launchWifiNetworkDetailsSetting(); + mInternetDialogController.onAccessPointsChanged(mAccessPoints); - verify(mActivityStarter).postStartActivityDismissingKeyguard(any(Intent.class), anyInt()); + mWifiEntries.clear(); + mWifiEntries.add(mWifiEntry1); + mWifiEntries.add(mWifiEntry2); + verify(mInternetDialogCallback).onAccessPointsChanged(mWifiEntries, mConnectedEntry); } @Test - public void isDeviceLocked_keyguardIsUnlocked_returnFalse() { - when(mKeyguardStateController.isUnlocked()).thenReturn(true); + public void onAccessPointsChanged_oneConnectedEntryAndThreeOthers_callbackCutMore() { + reset(mInternetDialogCallback); + mInternetDialogController.setAirplaneModeEnabled(true); + mAccessPoints.clear(); + mAccessPoints.add(mConnectedEntry); + mAccessPoints.add(mWifiEntry1); + mAccessPoints.add(mWifiEntry2); + mAccessPoints.add(mWifiEntry3); + + mInternetDialogController.onAccessPointsChanged(mAccessPoints); + + mWifiEntries.clear(); + mWifiEntries.add(mWifiEntry1); + mWifiEntries.add(mWifiEntry2); + mWifiEntries.add(mWifiEntry3); + verify(mInternetDialogCallback).onAccessPointsChanged(mWifiEntries, mConnectedEntry); + + // Turn off airplane mode to has carrier network, then Wi-Fi entries will cut last one. + reset(mInternetDialogCallback); + mInternetDialogController.setAirplaneModeEnabled(false); - assertThat(mInternetDialogController.isDeviceLocked()).isFalse(); + mInternetDialogController.onAccessPointsChanged(mAccessPoints); + + mWifiEntries.remove(mWifiEntry3); + verify(mInternetDialogCallback).onAccessPointsChanged(mWifiEntries, mConnectedEntry); } @Test - public void isDeviceLocked_keyguardIsLocked_returnTrue() { - when(mKeyguardStateController.isUnlocked()).thenReturn(false); + public void onAccessPointsChanged_oneConnectedEntryAndFourOthers_callbackCutMore() { + reset(mInternetDialogCallback); + mInternetDialogController.setAirplaneModeEnabled(true); + mAccessPoints.clear(); + mAccessPoints.add(mConnectedEntry); + mAccessPoints.add(mWifiEntry1); + mAccessPoints.add(mWifiEntry2); + mAccessPoints.add(mWifiEntry3); + mAccessPoints.add(mWifiEntry4); + + mInternetDialogController.onAccessPointsChanged(mAccessPoints); + + mWifiEntries.clear(); + mWifiEntries.add(mWifiEntry1); + mWifiEntries.add(mWifiEntry2); + mWifiEntries.add(mWifiEntry3); + verify(mInternetDialogCallback).onAccessPointsChanged(mWifiEntries, mConnectedEntry); + + // Turn off airplane mode to has carrier network, then Wi-Fi entries will cut last one. + reset(mInternetDialogCallback); + mInternetDialogController.setAirplaneModeEnabled(false); - assertThat(mInternetDialogController.isDeviceLocked()).isTrue(); + mInternetDialogController.onAccessPointsChanged(mAccessPoints); + + mWifiEntries.remove(mWifiEntry3); + verify(mInternetDialogCallback).onAccessPointsChanged(mWifiEntries, mConnectedEntry); } private String getResourcesString(String name) { diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/dialog/InternetDialogTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/dialog/InternetDialogTest.java index 5a018f409a0b..fa9c0538e9bd 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/dialog/InternetDialogTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/dialog/InternetDialogTest.java @@ -12,7 +12,6 @@ import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; -import android.net.wifi.ScanResult; import android.net.wifi.WifiManager; import android.os.Handler; import android.telephony.TelephonyManager; @@ -20,7 +19,6 @@ import android.testing.AndroidTestingRunner; import android.testing.TestableLooper; import android.view.View; import android.widget.LinearLayout; -import android.widget.TextView; import androidx.recyclerview.widget.RecyclerView; import androidx.test.filters.SmallTest; @@ -39,8 +37,6 @@ import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.MockitoAnnotations; -import java.util.ArrayList; -import java.util.Arrays; import java.util.List; @SmallTest @@ -62,13 +58,16 @@ public class InternetDialogTest extends SysuiTestCase { @Mock private WifiEntry mInternetWifiEntry; @Mock - private WifiEntry mWifiEntry; + private List<WifiEntry> mWifiEntries; @Mock private InternetAdapter mInternetAdapter; @Mock private InternetDialogController mInternetDialogController; private InternetDialog mInternetDialog; + private View mDialogView; + private View mSubTitle; + private LinearLayout mMobileDataToggle; private LinearLayout mWifiToggle; private LinearLayout mConnectedWifi; private RecyclerView mWifiList; @@ -83,26 +82,26 @@ public class InternetDialogTest extends SysuiTestCase { when(mInternetWifiEntry.getSummary(false)).thenReturn(WIFI_SUMMARY); when(mInternetWifiEntry.isDefaultNetwork()).thenReturn(true); when(mInternetWifiEntry.hasInternetAccess()).thenReturn(true); - when(mWifiEntry.getTitle()).thenReturn(WIFI_TITLE); - when(mWifiEntry.getSummary(false)).thenReturn(WIFI_SUMMARY); + when(mWifiEntries.size()).thenReturn(1); when(mInternetDialogController.getMobileNetworkTitle()).thenReturn(MOBILE_NETWORK_TITLE); when(mInternetDialogController.getMobileNetworkSummary()) .thenReturn(MOBILE_NETWORK_SUMMARY); when(mInternetDialogController.getWifiManager()).thenReturn(mWifiManager); - when(mInternetDialogController.getInternetWifiEntry()).thenReturn(mInternetWifiEntry); - when(mInternetDialogController.getWifiEntryList()).thenReturn(Arrays.asList(mWifiEntry)); mInternetDialog = new InternetDialog(mContext, mock(InternetDialogFactory.class), - mInternetDialogController, true, true, mock(UiEventLogger.class), mHandler); + mInternetDialogController, true, true, true, mock(UiEventLogger.class), mHandler); mInternetDialog.mAdapter = mInternetAdapter; - mInternetDialog.mConnectedWifiEntry = mInternetWifiEntry; + mInternetDialog.onAccessPointsChanged(mWifiEntries, mInternetWifiEntry); mInternetDialog.show(); - mWifiToggle = mInternetDialog.mDialogView.requireViewById(R.id.turn_on_wifi_layout); - mConnectedWifi = mInternetDialog.mDialogView.requireViewById(R.id.wifi_connected_layout); - mWifiList = mInternetDialog.mDialogView.requireViewById(R.id.wifi_list_layout); - mSeeAll = mInternetDialog.mDialogView.requireViewById(R.id.see_all_layout); + mDialogView = mInternetDialog.mDialogView; + mSubTitle = mDialogView.requireViewById(R.id.internet_dialog_subtitle); + mMobileDataToggle = mDialogView.requireViewById(R.id.mobile_network_layout); + mWifiToggle = mDialogView.requireViewById(R.id.turn_on_wifi_layout); + mConnectedWifi = mDialogView.requireViewById(R.id.wifi_connected_layout); + mWifiList = mDialogView.requireViewById(R.id.wifi_list_layout); + mSeeAll = mDialogView.requireViewById(R.id.see_all_layout); } @After @@ -111,33 +110,41 @@ public class InternetDialogTest extends SysuiTestCase { } @Test + public void hideWifiViews_WifiViewsGone() { + mInternetDialog.hideWifiViews(); + + assertThat(mInternetDialog.mIsProgressBarVisible).isFalse(); + assertThat(mWifiToggle.getVisibility()).isEqualTo(View.GONE); + assertThat(mConnectedWifi.getVisibility()).isEqualTo(View.GONE); + assertThat(mWifiList.getVisibility()).isEqualTo(View.GONE); + assertThat(mSeeAll.getVisibility()).isEqualTo(View.GONE); + } + + @Test public void updateDialog_withApmOn_internetDialogSubTitleGone() { when(mInternetDialogController.isAirplaneModeEnabled()).thenReturn(true); + mInternetDialog.updateDialog(); - final TextView view = mInternetDialog.mDialogView.requireViewById( - R.id.internet_dialog_subtitle); - assertThat(view.getVisibility()).isEqualTo(View.GONE); + assertThat(mSubTitle.getVisibility()).isEqualTo(View.GONE); } @Test public void updateDialog_withApmOff_internetDialogSubTitleVisible() { when(mInternetDialogController.isAirplaneModeEnabled()).thenReturn(false); + mInternetDialog.updateDialog(); - final TextView view = mInternetDialog.mDialogView.requireViewById( - R.id.internet_dialog_subtitle); - assertThat(view.getVisibility()).isEqualTo(View.VISIBLE); + assertThat(mSubTitle.getVisibility()).isEqualTo(View.VISIBLE); } @Test public void updateDialog_withApmOn_mobileDataLayoutGone() { when(mInternetDialogController.isAirplaneModeEnabled()).thenReturn(true); + mInternetDialog.updateDialog(); - final LinearLayout linearLayout = mInternetDialog.mDialogView.requireViewById( - R.id.mobile_network_layout); - assertThat(linearLayout.getVisibility()).isEqualTo(View.GONE); + assertThat(mMobileDataToggle.getVisibility()).isEqualTo(View.GONE); } @Test @@ -152,7 +159,8 @@ public class InternetDialogTest extends SysuiTestCase { @Test public void updateDialog_wifiOnAndNoConnectedWifi_hideConnectedWifi() { - mInternetDialog.mConnectedWifiEntry = null; + // The precondition WiFi ON is already in setUp() + mInternetDialog.onAccessPointsChanged(mWifiEntries, null /* connectedEntry*/); doReturn(false).when(mInternetDialogController).activeNetworkIsCellular(); mInternetDialog.updateDialog(); @@ -162,7 +170,8 @@ public class InternetDialogTest extends SysuiTestCase { @Test public void updateDialog_wifiOnAndNoWifiList_hideWifiListAndSeeAll() { - when(mInternetDialogController.getWifiEntryList()).thenReturn(null); + // The precondition WiFi ON is already in setUp() + mInternetDialog.onAccessPointsChanged(null /* wifiEntries */, mInternetWifiEntry); mInternetDialog.updateDialog(); @@ -245,9 +254,6 @@ public class InternetDialogTest extends SysuiTestCase { public void showProgressBar_wifiEnabledWithWifiEntry_showProgressBarThenHide() { Mockito.reset(mHandler); when(mWifiManager.isWifiEnabled()).thenReturn(true); - List<ScanResult> wifiScanResults = mock(ArrayList.class); - when(wifiScanResults.size()).thenReturn(1); - when(mWifiManager.getScanResults()).thenReturn(wifiScanResults); mInternetDialog.showProgressBar(); @@ -264,12 +270,10 @@ public class InternetDialogTest extends SysuiTestCase { } @Test - public void showProgressBar_wifiEnabledWithoutWifiScanResults_showProgressBarThenHideSearch() { + public void showProgressBar_wifiEnabledWithoutWifiEntries_showProgressBarThenHideSearch() { Mockito.reset(mHandler); when(mWifiManager.isWifiEnabled()).thenReturn(true); - List<ScanResult> wifiScanResults = mock(ArrayList.class); - when(wifiScanResults.size()).thenReturn(0); - when(mWifiManager.getScanResults()).thenReturn(wifiScanResults); + mInternetDialog.onAccessPointsChanged(null /* wifiEntries */, null /* connectedEntry*/); mInternetDialog.showProgressBar(); diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/EntryUtil.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/EntryUtil.kt index 62667bc5281f..da956ec67696 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/EntryUtil.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/EntryUtil.kt @@ -30,3 +30,7 @@ inline fun modifyEntry( modifier(builder) builder.apply(entry) } + +fun getAttachState(entry: ListEntry): ListAttachState { + return entry.attachState +} diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/render/NodeSpecBuilderTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/render/NodeSpecBuilderTest.kt new file mode 100644 index 000000000000..2e676bbe6541 --- /dev/null +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/render/NodeSpecBuilderTest.kt @@ -0,0 +1,311 @@ +/* + * Copyright (C) 2021 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.systemui.statusbar.notification.collection.render + +import androidx.test.filters.SmallTest +import com.android.systemui.SysuiTestCase +import com.android.systemui.statusbar.notification.collection.GroupEntry +import com.android.systemui.statusbar.notification.collection.GroupEntryBuilder +import com.android.systemui.statusbar.notification.collection.ListEntry +import com.android.systemui.statusbar.notification.collection.NotificationEntry +import com.android.systemui.statusbar.notification.collection.NotificationEntryBuilder +import com.android.systemui.statusbar.notification.collection.getAttachState +import com.android.systemui.statusbar.notification.collection.listbuilder.NotifSection +import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifSectioner +import com.android.systemui.util.mockito.any +import org.junit.Before +import org.junit.Test +import org.mockito.Mock +import org.mockito.Mockito +import org.mockito.Mockito.`when` +import org.mockito.MockitoAnnotations + +@SmallTest +class NodeSpecBuilderTest : SysuiTestCase() { + + @Mock + private lateinit var viewBarn: NotifViewBarn + + private var rootController: NodeController = buildFakeController("rootController") + private var headerController0: NodeController = buildFakeController("header0") + private var headerController1: NodeController = buildFakeController("header1") + private var headerController2: NodeController = buildFakeController("header2") + + private val section0 = buildSection(0, headerController0) + private val section0NoHeader = buildSection(0, null) + private val section1 = buildSection(1, headerController1) + private val section1NoHeader = buildSection(1, null) + private val section2 = buildSection(2, headerController2) + + private val fakeViewBarn = FakeViewBarn() + + private lateinit var specBuilder: NodeSpecBuilder + + @Before + fun setUp() { + MockitoAnnotations.initMocks(this) + + `when`(viewBarn.requireView(any())).thenAnswer { + fakeViewBarn.getViewByEntry(it.getArgument(0)) + } + + specBuilder = NodeSpecBuilder(viewBarn) + } + + @Test + fun testSimpleMapping() { + checkOutput( + // GIVEN a simple flat list of notifications all in the same headerless section + listOf( + notif(0, section0NoHeader), + notif(1, section0NoHeader), + notif(2, section0NoHeader), + notif(3, section0NoHeader) + ), + + // THEN we output a similarly simple flag list of nodes + tree( + notifNode(0), + notifNode(1), + notifNode(2), + notifNode(3) + ) + ) + } + + @Test + fun testHeaderInjection() { + checkOutput( + // GIVEN a flat list of notifications, spread across three sections + listOf( + notif(0, section0), + notif(1, section0), + notif(2, section1), + notif(3, section2) + ), + + // THEN each section has its header injected + tree( + node(headerController0), + notifNode(0), + notifNode(1), + node(headerController1), + notifNode(2), + node(headerController2), + notifNode(3) + ) + ) + } + + @Test + fun testGroups() { + checkOutput( + // GIVEN a mixed list of top-level notifications and groups + listOf( + notif(0, section0), + group(1, section1, + notif(2), + notif(3), + notif(4) + ), + notif(5, section2), + group(6, section2, + notif(7), + notif(8), + notif(9) + ) + ), + + // THEN we properly construct all the nodes + tree( + node(headerController0), + notifNode(0), + node(headerController1), + notifNode(1, + notifNode(2), + notifNode(3), + notifNode(4) + ), + node(headerController2), + notifNode(5), + notifNode(6, + notifNode(7), + notifNode(8), + notifNode(9) + ) + ) + ) + } + + @Test + fun testSecondSectionWithNoHeader() { + checkOutput( + // GIVEN a middle section with no associated header view + listOf( + notif(0, section0), + notif(1, section1NoHeader), + group(2, section1NoHeader, + notif(3), + notif(4) + ), + notif(5, section2) + ), + + // THEN the header view is left out of the tree (but the notifs are still present) + tree( + node(headerController0), + notifNode(0), + notifNode(1), + notifNode(2, + notifNode(3), + notifNode(4) + ), + node(headerController2), + notifNode(5) + ) + ) + } + + @Test(expected = RuntimeException::class) + fun testRepeatedSectionsThrow() { + checkOutput( + // GIVEN a malformed list where sections are not contiguous + listOf( + notif(0, section0), + notif(1, section1), + notif(2, section0) + ), + + // THEN an exception is thrown + tree() + ) + } + + private fun checkOutput(list: List<ListEntry>, desiredTree: NodeSpecImpl) { + checkTree(desiredTree, specBuilder.buildNodeSpec(rootController, list)) + } + + private fun checkTree(desiredTree: NodeSpec, actualTree: NodeSpec) { + try { + checkNode(desiredTree, actualTree) + } catch (e: AssertionError) { + throw AssertionError("Trees don't match: ${e.message}\nActual tree:\n" + + treeSpecToStr(actualTree)) + } + } + + private fun checkNode(desiredTree: NodeSpec, actualTree: NodeSpec) { + if (actualTree.controller != desiredTree.controller) { + throw AssertionError("Node {${actualTree.controller.nodeLabel}} should " + + "be ${desiredTree.controller.nodeLabel}") + } + for (i in 0 until desiredTree.children.size) { + if (i >= actualTree.children.size) { + throw AssertionError("Node {${actualTree.controller.nodeLabel}}" + + " is missing child ${desiredTree.children[i].controller.nodeLabel}") + } + checkNode(desiredTree.children[i], actualTree.children[i]) + } + } + + private fun notif(id: Int, section: NotifSection? = null): NotificationEntry { + val entry = NotificationEntryBuilder() + .setId(id) + .build() + if (section != null) { + getAttachState(entry).section = section + } + fakeViewBarn.buildNotifView(id, entry) + return entry + } + + private fun group( + id: Int, + section: NotifSection, + vararg children: NotificationEntry + ): GroupEntry { + val group = GroupEntryBuilder() + .setKey("group_$id") + .setSummary( + NotificationEntryBuilder() + .setId(id) + .build()) + .setChildren(children.asList()) + .build() + getAttachState(group).section = section + fakeViewBarn.buildNotifView(id, group.summary!!) + + for (child in children) { + getAttachState(child).section = section + } + return group + } + + private fun tree(vararg children: NodeSpecImpl): NodeSpecImpl { + return node(rootController, *children) + } + + private fun node(view: NodeController, vararg children: NodeSpecImpl): NodeSpecImpl { + val node = NodeSpecImpl(null, view) + node.children.addAll(children) + return node + } + + private fun notifNode(id: Int, vararg children: NodeSpecImpl): NodeSpecImpl { + return node(fakeViewBarn.getViewById(id), *children) + } +} + +private class FakeViewBarn { + private val entries = mutableMapOf<Int, NotificationEntry>() + private val views = mutableMapOf<NotificationEntry, NodeController>() + + fun buildNotifView(id: Int, entry: NotificationEntry) { + if (entries.contains(id)) { + throw RuntimeException("ID $id is already in use") + } + entries[id] = entry + views[entry] = buildFakeController("Entry $id") + } + + fun getViewById(id: Int): NodeController { + return views[entries[id] ?: throw RuntimeException("No view with ID $id")]!! + } + + fun getViewByEntry(entry: NotificationEntry): NodeController { + return views[entry] ?: throw RuntimeException("No view defined for key ${entry.key}") + } +} + +private fun buildFakeController(name: String): NodeController { + val controller = Mockito.mock(NodeController::class.java) + `when`(controller.nodeLabel).thenReturn(name) + return controller +} + +private fun buildSection(index: Int, nodeController: NodeController?): NotifSection { + return NotifSection(object : NotifSectioner("Section $index") { + + override fun isInSection(entry: ListEntry?): Boolean { + throw NotImplementedError("This should never be called") + } + + override fun getHeaderNodeController(): NodeController? { + return nodeController + } + }, index) +}
\ No newline at end of file diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardClockPositionAlgorithmTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardClockPositionAlgorithmTest.java index 690b8415762d..f34f21bde803 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardClockPositionAlgorithmTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardClockPositionAlgorithmTest.java @@ -31,42 +31,31 @@ import org.junit.runner.RunWith; @SmallTest @RunWith(AndroidTestingRunner.class) public class KeyguardClockPositionAlgorithmTest extends SysuiTestCase { - private static final int SCREEN_HEIGHT = 2000; private static final int EMPTY_MARGIN = 0; private static final int EMPTY_HEIGHT = 0; private static final float ZERO_DRAG = 0.f; private static final float OPAQUE = 1.f; private static final float TRANSPARENT = 0.f; - private static final boolean HAS_CUSTOM_CLOCK = false; - private static final boolean HAS_VISIBLE_NOTIFS = false; - private KeyguardClockPositionAlgorithm mClockPositionAlgorithm; private KeyguardClockPositionAlgorithm.Result mClockPosition; - private int mNotificationStackHeight; private float mPanelExpansion; private int mKeyguardStatusHeight; private float mDark; - private boolean mHasCustomClock; - private boolean mHasVisibleNotifs; private float mQsExpansion; - private int mCutoutTopInset = 0; // in pixels + private int mCutoutTopInsetPx = 0; private boolean mIsSplitShade = false; @Before public void setUp() { mClockPositionAlgorithm = new KeyguardClockPositionAlgorithm(); mClockPosition = new KeyguardClockPositionAlgorithm.Result(); - - mHasCustomClock = HAS_CUSTOM_CLOCK; - mHasVisibleNotifs = HAS_VISIBLE_NOTIFS; } @Test public void clockPositionTopOfScreenOnAOD() { - // GIVEN on AOD and both stack scroll and clock have 0 height + // GIVEN on AOD and clock has 0 height givenAOD(); - mNotificationStackHeight = EMPTY_HEIGHT; mKeyguardStatusHeight = EMPTY_HEIGHT; // WHEN the clock position algorithm is run positionClock(); @@ -79,11 +68,10 @@ public class KeyguardClockPositionAlgorithmTest extends SysuiTestCase { @Test public void clockPositionBelowCutout() { - // GIVEN on AOD and both stack scroll and clock have 0 height + // GIVEN on AOD and clock has 0 height givenAOD(); - mNotificationStackHeight = EMPTY_HEIGHT; mKeyguardStatusHeight = EMPTY_HEIGHT; - mCutoutTopInset = 300; + mCutoutTopInsetPx = 300; // WHEN the clock position algorithm is run positionClock(); // THEN the clock Y position is below the cutout @@ -97,7 +85,6 @@ public class KeyguardClockPositionAlgorithmTest extends SysuiTestCase { public void clockPositionAdjustsForKeyguardStatusOnAOD() { // GIVEN on AOD with a clock of height 100 givenAOD(); - mNotificationStackHeight = EMPTY_HEIGHT; mKeyguardStatusHeight = 100; // WHEN the clock position algorithm is run positionClock(); @@ -112,7 +99,6 @@ public class KeyguardClockPositionAlgorithmTest extends SysuiTestCase { public void clockPositionLargeClockOnAOD() { // GIVEN on AOD with a full screen clock givenAOD(); - mNotificationStackHeight = EMPTY_HEIGHT; mKeyguardStatusHeight = SCREEN_HEIGHT; // WHEN the clock position algorithm is run positionClock(); @@ -125,9 +111,8 @@ public class KeyguardClockPositionAlgorithmTest extends SysuiTestCase { @Test public void clockPositionTopOfScreenOnLockScreen() { - // GIVEN on lock screen with stack scroll and clock of 0 height + // GIVEN on lock screen with clock of 0 height givenLockScreen(); - mNotificationStackHeight = EMPTY_HEIGHT; mKeyguardStatusHeight = EMPTY_HEIGHT; // WHEN the clock position algorithm is run positionClock(); @@ -138,24 +123,9 @@ public class KeyguardClockPositionAlgorithmTest extends SysuiTestCase { } @Test - public void clockPositionWithStackScrollExpandOnLockScreen() { - // GIVEN on lock screen with stack scroll of height 500 - givenLockScreen(); - mNotificationStackHeight = 500; - mKeyguardStatusHeight = EMPTY_HEIGHT; - // WHEN the clock position algorithm is run - positionClock(); - // THEN the clock Y position stays to the top - assertThat(mClockPosition.clockY).isEqualTo(0); - // AND the clock is positioned on the left. - assertThat(mClockPosition.clockX).isEqualTo(0); - } - - @Test public void clockPositionWithPartialDragOnLockScreen() { // GIVEN dragging up on lock screen givenLockScreen(); - mNotificationStackHeight = EMPTY_HEIGHT; mKeyguardStatusHeight = EMPTY_HEIGHT; mPanelExpansion = 0.5f; // WHEN the clock position algorithm is run @@ -171,7 +141,6 @@ public class KeyguardClockPositionAlgorithmTest extends SysuiTestCase { public void clockPositionWithFullDragOnLockScreen() { // GIVEN the lock screen is dragged up givenLockScreen(); - mNotificationStackHeight = EMPTY_HEIGHT; mKeyguardStatusHeight = EMPTY_HEIGHT; mPanelExpansion = 0.f; // WHEN the clock position algorithm is run @@ -184,7 +153,6 @@ public class KeyguardClockPositionAlgorithmTest extends SysuiTestCase { public void largeClockOnLockScreenIsTransparent() { // GIVEN on lock screen with a full screen clock givenLockScreen(); - mNotificationStackHeight = EMPTY_HEIGHT; mKeyguardStatusHeight = SCREEN_HEIGHT; // WHEN the clock position algorithm is run positionClock(); @@ -194,9 +162,8 @@ public class KeyguardClockPositionAlgorithmTest extends SysuiTestCase { @Test public void notifPositionTopOfScreenOnAOD() { - // GIVEN on AOD and both stack scroll and clock have 0 height + // GIVEN on AOD and clock has 0 height givenAOD(); - mNotificationStackHeight = EMPTY_HEIGHT; mKeyguardStatusHeight = EMPTY_HEIGHT; // WHEN the position algorithm is run positionClock(); @@ -208,7 +175,6 @@ public class KeyguardClockPositionAlgorithmTest extends SysuiTestCase { public void notifPositionIndependentOfKeyguardStatusHeightOnAOD() { // GIVEN on AOD and clock has a nonzero height givenAOD(); - mNotificationStackHeight = EMPTY_HEIGHT; mKeyguardStatusHeight = 100; // WHEN the position algorithm is run positionClock(); @@ -220,7 +186,6 @@ public class KeyguardClockPositionAlgorithmTest extends SysuiTestCase { public void notifPositionWithLargeClockOnAOD() { // GIVEN on AOD and clock has a nonzero height givenAOD(); - mNotificationStackHeight = EMPTY_HEIGHT; mKeyguardStatusHeight = SCREEN_HEIGHT; // WHEN the position algorithm is run positionClock(); @@ -230,9 +195,8 @@ public class KeyguardClockPositionAlgorithmTest extends SysuiTestCase { @Test public void notifPositionMiddleOfScreenOnLockScreen() { - // GIVEN on lock screen and both stack scroll and clock have 0 height + // GIVEN on lock screen and clock has 0 height givenLockScreen(); - mNotificationStackHeight = EMPTY_HEIGHT; mKeyguardStatusHeight = EMPTY_HEIGHT; // WHEN the position algorithm is run positionClock(); @@ -241,47 +205,20 @@ public class KeyguardClockPositionAlgorithmTest extends SysuiTestCase { } @Test - public void notifPositionAdjustsForStackHeightOnLockScreen() { - // GIVEN on lock screen and stack scroller has a nonzero height - givenLockScreen(); - mNotificationStackHeight = 500; - mKeyguardStatusHeight = EMPTY_HEIGHT; - // WHEN the position algorithm is run - positionClock(); - // THEN the notif padding adjusts for keyguard status height - assertThat(mClockPosition.stackScrollerPadding).isEqualTo(0); - } - - @Test public void notifPositionAdjustsForClockHeightOnLockScreen() { // GIVEN on lock screen and stack scroller has a nonzero height givenLockScreen(); - mNotificationStackHeight = EMPTY_HEIGHT; mKeyguardStatusHeight = 200; // WHEN the position algorithm is run positionClock(); - // THEN the notif padding adjusts for both clock and notif stack. - assertThat(mClockPosition.stackScrollerPadding).isEqualTo(200); - } - - @Test - public void notifPositionAdjustsForStackHeightAndClockHeightOnLockScreen() { - // GIVEN on lock screen and stack scroller has a nonzero height - givenLockScreen(); - mNotificationStackHeight = 500; - mKeyguardStatusHeight = 200; - // WHEN the position algorithm is run - positionClock(); - // THEN the notifs are placed below the statusview assertThat(mClockPosition.stackScrollerPadding).isEqualTo(200); } @Test public void notifPositionAlignedWithClockInSplitShadeMode() { - // GIVEN on lock screen and split shade mode givenLockScreen(); mIsSplitShade = true; - mHasCustomClock = true; + mKeyguardStatusHeight = 200; // WHEN the position algorithm is run positionClock(); // THEN the notif padding DOESN'T adjust for keyguard status height. @@ -292,7 +229,6 @@ public class KeyguardClockPositionAlgorithmTest extends SysuiTestCase { public void notifPositionWithLargeClockOnLockScreen() { // GIVEN on lock screen and clock has a nonzero height givenLockScreen(); - mNotificationStackHeight = EMPTY_HEIGHT; mKeyguardStatusHeight = SCREEN_HEIGHT; // WHEN the position algorithm is run positionClock(); @@ -304,7 +240,6 @@ public class KeyguardClockPositionAlgorithmTest extends SysuiTestCase { public void notifPositionWithFullDragOnLockScreen() { // GIVEN the lock screen is dragged up givenLockScreen(); - mNotificationStackHeight = EMPTY_HEIGHT; mKeyguardStatusHeight = EMPTY_HEIGHT; mPanelExpansion = 0.f; // WHEN the clock position algorithm is run @@ -317,19 +252,17 @@ public class KeyguardClockPositionAlgorithmTest extends SysuiTestCase { public void notifPositionWithLargeClockFullDragOnLockScreen() { // GIVEN the lock screen is dragged up and a full screen clock givenLockScreen(); - mNotificationStackHeight = EMPTY_HEIGHT; mKeyguardStatusHeight = SCREEN_HEIGHT; mPanelExpansion = 0.f; // WHEN the clock position algorithm is run positionClock(); - // THEN the notif padding is zero. assertThat(mClockPosition.stackScrollerPadding).isEqualTo( (int) (mKeyguardStatusHeight * .667f)); } @Test public void clockHiddenWhenQsIsExpanded() { - // GIVEN on the lock screen with a custom clock and visible notifications + // GIVEN on the lock screen with visible notifications givenLockScreen(); mQsExpansion = 1; // WHEN the clock position algorithm is run @@ -349,12 +282,11 @@ public class KeyguardClockPositionAlgorithmTest extends SysuiTestCase { } private void positionClock() { - mClockPositionAlgorithm.setup(EMPTY_MARGIN, SCREEN_HEIGHT, mNotificationStackHeight, - mPanelExpansion, SCREEN_HEIGHT, mKeyguardStatusHeight, + mClockPositionAlgorithm.setup(EMPTY_MARGIN, mPanelExpansion, mKeyguardStatusHeight, 0 /* userSwitchHeight */, 0 /* userSwitchPreferredY */, - mHasCustomClock, mHasVisibleNotifs, mDark, ZERO_DRAG, false /* bypassEnabled */, + mDark, ZERO_DRAG, false /* bypassEnabled */, 0 /* unlockedStackScrollerPadding */, mQsExpansion, - mCutoutTopInset, mIsSplitShade); + mCutoutTopInsetPx, mIsSplitShade); mClockPositionAlgorithm.run(mClockPosition); } } diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardStatusBarViewControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardStatusBarViewControllerTest.java index d92816e190f5..f9e370729e23 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardStatusBarViewControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardStatusBarViewControllerTest.java @@ -17,10 +17,14 @@ package com.android.systemui.statusbar.phone; +import static com.android.systemui.statusbar.StatusBarState.KEYGUARD; +import static com.android.systemui.statusbar.StatusBarState.SHADE; + import static com.google.common.truth.Truth.assertThat; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; import android.testing.AndroidTestingRunner; import android.testing.TestableLooper; @@ -30,18 +34,24 @@ import android.view.View; import androidx.test.filters.SmallTest; import com.android.keyguard.CarrierTextController; +import com.android.keyguard.KeyguardUpdateMonitor; +import com.android.keyguard.KeyguardUpdateMonitorCallback; import com.android.systemui.R; import com.android.systemui.SysuiTestCase; import com.android.systemui.battery.BatteryMeterViewController; import com.android.systemui.flags.FeatureFlags; +import com.android.systemui.plugins.statusbar.StatusBarStateController; +import com.android.systemui.statusbar.SysuiStatusBarStateController; import com.android.systemui.statusbar.events.SystemStatusAnimationScheduler; import com.android.systemui.statusbar.policy.BatteryController; import com.android.systemui.statusbar.policy.ConfigurationController; +import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.statusbar.policy.UserInfoController; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; +import org.mockito.ArgumentCaptor; import org.mockito.Mock; import org.mockito.MockitoAnnotations; @@ -65,10 +75,24 @@ public class KeyguardStatusBarViewControllerTest extends SysuiTestCase { private FeatureFlags mFeatureFlags; @Mock private BatteryMeterViewController mBatteryMeterViewController; + @Mock + private KeyguardStateController mKeyguardStateController; + @Mock + private KeyguardBypassController mKeyguardBypassController; + @Mock + private KeyguardUpdateMonitor mKeyguardUpdateMonitor; + @Mock + private BiometricUnlockController mBiometricUnlockController; + @Mock + private SysuiStatusBarStateController mStatusBarStateController; private KeyguardStatusBarView mKeyguardStatusBarView; private KeyguardStatusBarViewController mController; + private float mAlpha = 0.5f; + private final KeyguardStatusBarViewController.ViewStateProvider mViewStateProvider = + () -> new KeyguardStatusBarViewController.ViewState(mAlpha); + @Before public void setup() throws Exception { MockitoAnnotations.initMocks(this); @@ -89,7 +113,13 @@ public class KeyguardStatusBarViewControllerTest extends SysuiTestCase { mUserInfoController, mStatusBarIconController, new StatusBarIconController.TintedIconManager.Factory(mFeatureFlags), - mBatteryMeterViewController + mBatteryMeterViewController, + mViewStateProvider, + mKeyguardStateController, + mKeyguardBypassController, + mKeyguardUpdateMonitor, + mBiometricUnlockController, + mStatusBarStateController ); } @@ -177,4 +207,92 @@ public class KeyguardStatusBarViewControllerTest extends SysuiTestCase { assertThat(mKeyguardStatusBarView.getAlpha()).isEqualTo(newAlpha); assertThat(mKeyguardStatusBarView.getVisibility()).isEqualTo(newVisibility); } + + @Test + public void updateViewState_notKeyguardState_nothingUpdated() { + mAlpha = 0.255f; + mController.onViewAttached(); + updateStateToNotKeyguard(); + + float oldAlpha = mKeyguardStatusBarView.getAlpha(); + + mController.updateViewState(); + + assertThat(mKeyguardStatusBarView.getAlpha()).isEqualTo(oldAlpha); + } + + @Test + public void updateViewState_bypassEnabledAndShouldListenForFace_viewHidden() { + mController.onViewAttached(); + updateStateToKeyguard(); + assertThat(mKeyguardStatusBarView.getVisibility()).isEqualTo(View.VISIBLE); + + when(mKeyguardUpdateMonitor.shouldListenForFace()).thenReturn(true); + when(mKeyguardBypassController.getBypassEnabled()).thenReturn(true); + onFinishedGoingToSleep(); + + mController.updateViewState(); + + assertThat(mKeyguardStatusBarView.getVisibility()).isEqualTo(View.INVISIBLE); + } + + @Test + public void updateViewState_bypassNotEnabled_viewShown() { + mController.onViewAttached(); + updateStateToKeyguard(); + + when(mKeyguardUpdateMonitor.shouldListenForFace()).thenReturn(true); + when(mKeyguardBypassController.getBypassEnabled()).thenReturn(false); + onFinishedGoingToSleep(); + + mController.updateViewState(); + + assertThat(mKeyguardStatusBarView.getVisibility()).isEqualTo(View.VISIBLE); + } + + @Test + public void updateViewState_shouldNotListenForFace_viewShown() { + mController.onViewAttached(); + updateStateToKeyguard(); + + when(mKeyguardUpdateMonitor.shouldListenForFace()).thenReturn(false); + when(mKeyguardBypassController.getBypassEnabled()).thenReturn(true); + onFinishedGoingToSleep(); + + mController.updateViewState(); + + assertThat(mKeyguardStatusBarView.getVisibility()).isEqualTo(View.VISIBLE); + } + + // TODO(b/195442899): Add more tests for #updateViewState once CLs are finalized. + + private void updateStateToNotKeyguard() { + updateStatusBarState(SHADE); + } + + private void updateStateToKeyguard() { + updateStatusBarState(KEYGUARD); + } + + private void updateStatusBarState(int state) { + ArgumentCaptor<StatusBarStateController.StateListener> statusBarStateListenerCaptor = + ArgumentCaptor.forClass(StatusBarStateController.StateListener.class); + verify(mStatusBarStateController).addCallback(statusBarStateListenerCaptor.capture()); + StatusBarStateController.StateListener callback = statusBarStateListenerCaptor.getValue(); + + callback.onStateChanged(state); + } + + /** + * Calls {@link com.android.keyguard.KeyguardUpdateMonitorCallback#onFinishedGoingToSleep(int)} + * to ensure values are updated properly. + */ + private void onFinishedGoingToSleep() { + ArgumentCaptor<KeyguardUpdateMonitorCallback> keyguardUpdateCallbackCaptor = + ArgumentCaptor.forClass(KeyguardUpdateMonitorCallback.class); + verify(mKeyguardUpdateMonitor).registerCallback(keyguardUpdateCallbackCaptor.capture()); + KeyguardUpdateMonitorCallback callback = keyguardUpdateCallbackCaptor.getValue(); + + callback.onFinishedGoingToSleep(0); + } } diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationPanelViewTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationPanelViewTest.java index 1fa179e47741..bef10ce9d423 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationPanelViewTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationPanelViewTest.java @@ -47,7 +47,6 @@ import android.content.ContentResolver; import android.content.res.Configuration; import android.content.res.Resources; import android.database.ContentObserver; -import android.hardware.biometrics.BiometricSourceType; import android.os.Handler; import android.os.Looper; import android.os.PowerManager; @@ -229,8 +228,6 @@ public class NotificationPanelViewTest extends SysuiTestCase { @Mock private ConversationNotificationManager mConversationNotificationManager; @Mock - private BiometricUnlockController mBiometricUnlockController; - @Mock private StatusBarKeyguardViewManager mStatusBarKeyguardViewManager; @Mock private KeyguardStatusViewComponent.Factory mKeyguardStatusViewComponentFactory; @@ -391,7 +388,7 @@ public class NotificationPanelViewTest extends SysuiTestCase { .thenReturn(mKeyguardClockSwitchController); when(mKeyguardStatusViewComponent.getKeyguardStatusViewController()) .thenReturn(mKeyguardStatusViewController); - when(mKeyguardStatusBarViewComponentFactory.build(any())) + when(mKeyguardStatusBarViewComponentFactory.build(any(), any())) .thenReturn(mKeyguardStatusBarViewComponent); when(mKeyguardStatusBarViewComponent.getKeyguardStatusBarViewController()) .thenReturn(mKeyguardStatusBarViewController); @@ -416,7 +413,7 @@ public class NotificationPanelViewTest extends SysuiTestCase { mMetricsLogger, mActivityManager, mConfigurationController, () -> flingAnimationUtilsBuilder, mStatusBarTouchableRegionManager, mConversationNotificationManager, mMediaHiearchyManager, - mBiometricUnlockController, mStatusBarKeyguardViewManager, + mStatusBarKeyguardViewManager, mNotificationStackScrollLayoutController, mKeyguardStatusViewComponentFactory, mKeyguardQsUserSwitchComponentFactory, @@ -512,20 +509,6 @@ public class NotificationPanelViewTest extends SysuiTestCase { } @Test - public void testKeyguardStatusBarVisibility_hiddenForBypass() { - when(mUpdateMonitor.shouldListenForFace()).thenReturn(true); - mNotificationPanelViewController.mKeyguardUpdateCallback.onBiometricRunningStateChanged( - true, BiometricSourceType.FACE); - verify(mKeyguardStatusBar, never()).setVisibility(View.VISIBLE); - - when(mKeyguardBypassController.getBypassEnabled()).thenReturn(true); - mNotificationPanelViewController.mKeyguardUpdateCallback.onFinishedGoingToSleep(0); - mNotificationPanelViewController.mKeyguardUpdateCallback.onBiometricRunningStateChanged( - true, BiometricSourceType.FACE); - verify(mKeyguardStatusBar, never()).setVisibility(View.VISIBLE); - } - - @Test public void testA11y_initializeNode() { AccessibilityNodeInfo nodeInfo = new AccessibilityNodeInfo(); mAccessibiltyDelegate.onInitializeAccessibilityNodeInfo(mView, nodeInfo); diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerBaseTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerBaseTest.java index 21c4a1745a88..c488ee95aa3c 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerBaseTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerBaseTest.java @@ -70,6 +70,7 @@ import com.android.settingslib.net.DataUsageController; import com.android.systemui.SysuiTestCase; import com.android.systemui.broadcast.BroadcastDispatcher; import com.android.systemui.demomode.DemoModeController; +import com.android.systemui.dump.DumpManager; import com.android.systemui.flags.FeatureFlags; import com.android.systemui.statusbar.policy.DeviceProvisionedController.DeviceProvisionedListener; import com.android.systemui.statusbar.policy.NetworkController.IconState; @@ -241,7 +242,9 @@ public class NetworkControllerBaseTest extends SysuiTestCase { mMockBd, mDemoModeController, mCarrierConfigTracker, - mFeatureFlags); + mFeatureFlags, + mock(DumpManager.class) + ); setupNetworkController(); // Trigger blank callbacks to always get the current state (some tests don't trigger @@ -309,7 +312,8 @@ public class NetworkControllerBaseTest extends SysuiTestCase { mock(AccessPointControllerImpl.class), mock(DataUsageController.class), mMockSubDefaults, mock(DeviceProvisionedController.class), mMockBd, mDemoModeController, - mCarrierConfigTracker, mFeatureFlags); + mCarrierConfigTracker, mFeatureFlags, + mock(DumpManager.class)); setupNetworkController(); diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerDataTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerDataTest.java index bc4c2b69e3f0..3433a14f54e7 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerDataTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerDataTest.java @@ -21,6 +21,7 @@ import android.testing.TestableLooper.RunWithLooper; import com.android.settingslib.mobile.TelephonyIcons; import com.android.settingslib.net.DataUsageController; +import com.android.systemui.dump.DumpManager; import com.android.systemui.util.CarrierConfigTracker; import org.junit.Test; @@ -113,7 +114,7 @@ public class NetworkControllerDataTest extends NetworkControllerBaseTest { mock(AccessPointControllerImpl.class), mock(DataUsageController.class), mMockSubDefaults, mock(DeviceProvisionedController.class), mMockBd, mDemoModeController, - mock(CarrierConfigTracker.class), mFeatureFlags); + mock(CarrierConfigTracker.class), mFeatureFlags, mock(DumpManager.class)); setupNetworkController(); setupDefaultSignal(); diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerSignalTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerSignalTest.java index 5090b0dbc2a6..4ff13011567b 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerSignalTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerSignalTest.java @@ -41,6 +41,7 @@ import com.android.settingslib.graph.SignalDrawable; import com.android.settingslib.mobile.TelephonyIcons; import com.android.settingslib.net.DataUsageController; import com.android.systemui.R; +import com.android.systemui.dump.DumpManager; import com.android.systemui.util.CarrierConfigTracker; import org.junit.Test; @@ -67,7 +68,8 @@ public class NetworkControllerSignalTest extends NetworkControllerBaseTest { Looper.getMainLooper(), mFakeExecutor, mCallbackHandler, mock(AccessPointControllerImpl.class), mock(DataUsageController.class), mMockSubDefaults, mock(DeviceProvisionedController.class), mMockBd, - mDemoModeController, mock(CarrierConfigTracker.class), mFeatureFlags); + mDemoModeController, mock(CarrierConfigTracker.class), mFeatureFlags, + mock(DumpManager.class)); setupNetworkController(); verifyLastMobileDataIndicators(false, -1, 0); @@ -87,7 +89,8 @@ public class NetworkControllerSignalTest extends NetworkControllerBaseTest { Looper.getMainLooper(), mFakeExecutor, mCallbackHandler, mock(AccessPointControllerImpl.class), mock(DataUsageController.class), mMockSubDefaults, mock(DeviceProvisionedController.class), mMockBd, - mDemoModeController, mock(CarrierConfigTracker.class), mFeatureFlags); + mDemoModeController, mock(CarrierConfigTracker.class), mFeatureFlags, + mock(DumpManager.class)); mNetworkController.registerListeners(); // Wait for the main looper to execute the previous command @@ -155,7 +158,8 @@ public class NetworkControllerSignalTest extends NetworkControllerBaseTest { Looper.getMainLooper(), mFakeExecutor, mCallbackHandler, mock(AccessPointControllerImpl.class), mock(DataUsageController.class), mMockSubDefaults, mock(DeviceProvisionedController.class), mMockBd, - mDemoModeController, mock(CarrierConfigTracker.class), mFeatureFlags); + mDemoModeController, mock(CarrierConfigTracker.class), mFeatureFlags, + mock(DumpManager.class)); setupNetworkController(); // No Subscriptions. diff --git a/services/core/java/com/android/server/am/CoreSettingsObserver.java b/services/core/java/com/android/server/am/CoreSettingsObserver.java index 5c9d38515e49..2e3e635c1157 100644 --- a/services/core/java/com/android/server/am/CoreSettingsObserver.java +++ b/services/core/java/com/android/server/am/CoreSettingsObserver.java @@ -94,8 +94,6 @@ final class CoreSettingsObserver extends ContentObserver { sGlobalSettingToTypeMap.put( Settings.Global.ANGLE_GL_DRIVER_SELECTION_VALUES, String.class); sGlobalSettingToTypeMap.put( - Settings.Global.ANGLE_ALLOWLIST, String.class); - sGlobalSettingToTypeMap.put( Settings.Global.ANGLE_EGL_FEATURES, String.class); sGlobalSettingToTypeMap.put( Settings.Global.SHOW_ANGLE_IN_USE_DIALOG_BOX, String.class); diff --git a/services/core/java/com/android/server/audio/AudioService.java b/services/core/java/com/android/server/audio/AudioService.java index 8d9479cc9895..c167c75cb61f 100644 --- a/services/core/java/com/android/server/audio/AudioService.java +++ b/services/core/java/com/android/server/audio/AudioService.java @@ -93,11 +93,13 @@ import android.media.ICommunicationDeviceDispatcher; import android.media.IPlaybackConfigDispatcher; import android.media.IRecordingConfigDispatcher; import android.media.IRingtonePlayer; +import android.media.ISpatializerCallback; import android.media.IStrategyPreferredDevicesDispatcher; import android.media.IVolumeController; import android.media.MediaMetrics; import android.media.MediaRecorder.AudioSource; import android.media.PlayerBase; +import android.media.Spatializer; import android.media.VolumePolicy; import android.media.audiofx.AudioEffect; import android.media.audiopolicy.AudioMix; @@ -8225,6 +8227,80 @@ public class AudioService extends IAudioService.Stub } //========================================================================================== + private final SpatializerHelper mSpatializerHelper = new SpatializerHelper(); + + private void enforceModifyDefaultAudioEffectsPermission() { + if (mContext.checkCallingOrSelfPermission( + android.Manifest.permission.MODIFY_DEFAULT_AUDIO_EFFECTS) + != PackageManager.PERMISSION_GRANTED) { + throw new SecurityException("Missing MODIFY_DEFAULT_AUDIO_EFFECTS permission"); + } + } + + /** @see AudioManager#getSpatializerImmersiveAudioLevel() */ + public int getSpatializerImmersiveAudioLevel() { + return mSpatializerHelper.getImmersiveAudioLevel(); + } + + /** @see Spatializer#isEnabled() */ + public boolean isSpatializerEnabled() { + return mSpatializerHelper.isEnabled(); + } + + /** @see Spatializer#isAvailable() */ + public boolean isSpatializerAvailable() { + return mSpatializerHelper.isAvailable(); + } + + /** @see Spatializer#setSpatializerEnabled(boolean) */ + public void setSpatializerEnabled(boolean enabled) { + enforceModifyDefaultAudioEffectsPermission(); + mSpatializerHelper.setEnabled(enabled); + } + + /** @see Spatializer#canBeSpatialized() */ + public boolean canBeSpatialized( + @NonNull AudioAttributes attributes, @NonNull AudioFormat format) { + Objects.requireNonNull(attributes); + Objects.requireNonNull(format); + return mSpatializerHelper.canBeSpatialized(attributes, format); + } + + /** @see Spatializer.SpatializerInfoDispatcherStub */ + public void registerSpatializerCallback( + @NonNull ISpatializerCallback dispatcher) { + Objects.requireNonNull(dispatcher); + mSpatializerHelper.registerStateCallback(dispatcher); + } + + /** @see Spatializer.SpatializerInfoDispatcherStub */ + public void unregisterSpatializerCallback( + @NonNull ISpatializerCallback dispatcher) { + Objects.requireNonNull(dispatcher); + mSpatializerHelper.unregisterStateCallback(dispatcher); + } + + /** @see Spatializer#getSpatializerCompatibleAudioDevices() */ + public @NonNull List<AudioDeviceAttributes> getSpatializerCompatibleAudioDevices() { + enforceModifyAudioRoutingPermission(); + return mSpatializerHelper.getCompatibleAudioDevices(); + } + + /** @see Spatializer#addSpatializerCompatibleAudioDevice(AudioDeviceAttributes) */ + public void addSpatializerCompatibleAudioDevice(@NonNull AudioDeviceAttributes ada) { + enforceModifyDefaultAudioEffectsPermission(); + Objects.requireNonNull(ada); + mSpatializerHelper.addCompatibleAudioDevice(ada); + } + + /** @see Spatializer#removeSpatializerCompatibleAudioDevice(AudioDeviceAttributes) */ + public void removeSpatializerCompatibleAudioDevice(@NonNull AudioDeviceAttributes ada) { + enforceModifyDefaultAudioEffectsPermission(); + Objects.requireNonNull(ada); + mSpatializerHelper.removeCompatibleAudioDevice(ada); + } + + //========================================================================================== private boolean readCameraSoundForced() { return SystemProperties.getBoolean("audio.camerasound.force", false) || mContext.getResources().getBoolean( diff --git a/services/core/java/com/android/server/audio/SpatializerHelper.java b/services/core/java/com/android/server/audio/SpatializerHelper.java new file mode 100644 index 000000000000..708d9e10ad73 --- /dev/null +++ b/services/core/java/com/android/server/audio/SpatializerHelper.java @@ -0,0 +1,128 @@ +/* + * Copyright (C) 2021 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.server.audio; + +import android.annotation.NonNull; +import android.media.AudioAttributes; +import android.media.AudioDeviceAttributes; +import android.media.AudioFormat; +import android.media.ISpatializerCallback; +import android.media.Spatializer; +import android.os.RemoteCallbackList; +import android.os.RemoteException; +import android.util.Log; + +import java.util.ArrayList; +import java.util.List; + +/** + * A helper class to manage Spatializer related functionality + */ +public class SpatializerHelper { + + private static final String TAG = "AS.SpatializerHelper"; + + //--------------------------------------------------------------- + // audio device compatibility / enabled + + private final ArrayList<AudioDeviceAttributes> mCompatibleAudioDevices = new ArrayList<>(0); + + /** + * @return a shallow copy of the list of compatible audio devices + */ + synchronized @NonNull List<AudioDeviceAttributes> getCompatibleAudioDevices() { + return (List<AudioDeviceAttributes>) mCompatibleAudioDevices.clone(); + } + + synchronized void addCompatibleAudioDevice(@NonNull AudioDeviceAttributes ada) { + if (!mCompatibleAudioDevices.contains(ada)) { + mCompatibleAudioDevices.add(ada); + } + } + + synchronized void removeCompatibleAudioDevice(@NonNull AudioDeviceAttributes ada) { + mCompatibleAudioDevices.remove(ada); + } + + //------------------------------------------------------ + // enabled state + + // global state of feature + boolean mFeatureEnabled = false; + // initialized state, checked after each audio_server start + boolean mInitialized = false; + + synchronized boolean isEnabled() { + return mFeatureEnabled; + } + + synchronized boolean isAvailable() { + if (!mInitialized) { + return false; + } + // TODO check device compatibility + // ... + return true; + } + + synchronized void setEnabled(boolean enabled) { + final boolean oldState = mFeatureEnabled; + mFeatureEnabled = enabled; + if (oldState != enabled) { + dispatchEnabledState(); + } + } + + public int getImmersiveAudioLevel() { + // TODO replace placeholder code with actual effect discovery + return Spatializer.SPATIALIZER_IMMERSIVE_LEVEL_NONE; + } + + final RemoteCallbackList<ISpatializerCallback> mStateCallbacks = + new RemoteCallbackList<ISpatializerCallback>(); + + synchronized void registerStateCallback( + @NonNull ISpatializerCallback callback) { + mStateCallbacks.register(callback); + } + + synchronized void unregisterStateCallback( + @NonNull ISpatializerCallback callback) { + mStateCallbacks.unregister(callback); + } + + private synchronized void dispatchEnabledState() { + final int nbCallbacks = mStateCallbacks.beginBroadcast(); + for (int i = 0; i < nbCallbacks; i++) { + try { + mStateCallbacks.getBroadcastItem(i) + .dispatchSpatializerEnabledChanged(mFeatureEnabled); + } catch (RemoteException e) { + Log.e(TAG, "Error in dispatchSpatializerEnabledChanged", e); + } + } + mStateCallbacks.finishBroadcast(); + } + + //------------------------------------------------------ + // virtualization capabilities + synchronized boolean canBeSpatialized( + @NonNull AudioAttributes attributes, @NonNull AudioFormat format) { + // TODO hook up to spatializer effect for query + return false; + } +} diff --git a/services/core/java/com/android/server/display/DisplayDeviceConfig.java b/services/core/java/com/android/server/display/DisplayDeviceConfig.java index 4c9d0f2691b3..2ae5cbbbf24b 100644 --- a/services/core/java/com/android/server/display/DisplayDeviceConfig.java +++ b/services/core/java/com/android/server/display/DisplayDeviceConfig.java @@ -590,7 +590,7 @@ public class DisplayDeviceConfig { newIndex = i - newStart; final float newBacklightVal; final float newNitsVal; - isLastValue = mRawBacklight[i] > mBacklightMaximum + isLastValue = mRawBacklight[i] >= mBacklightMaximum || i >= mRawBacklight.length - 1; // Clamp beginning and end to valid backlight values. if (newIndex == 0) { diff --git a/services/core/java/com/android/server/input/InputManagerService.java b/services/core/java/com/android/server/input/InputManagerService.java index a23d6cf164fc..b0b8be2c9677 100644 --- a/services/core/java/com/android/server/input/InputManagerService.java +++ b/services/core/java/com/android/server/input/InputManagerService.java @@ -180,7 +180,7 @@ public class InputManagerService extends IInputManager.Stub private static final boolean UNTRUSTED_TOUCHES_TOAST = false; public static final boolean ENABLE_PER_WINDOW_INPUT_ROTATION = - SystemProperties.getBoolean("persist.debug.per_window_input_rotation", true); + SystemProperties.getBoolean("persist.debug.per_window_input_rotation", false); // Pointer to native input manager service object. private final long mPtr; diff --git a/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java b/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java index fe6f2da32da4..0e82c2a42f3f 100644 --- a/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java +++ b/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java @@ -2581,14 +2581,12 @@ public class InputMethodManagerService extends IInputMethodManager.Stub } if (mCurToken != null) { - try { - if (DEBUG) { - Slog.v(TAG, "Removing window token: " + mCurToken + " for display: " - + mCurTokenDisplayId); - } - mIWindowManager.removeWindowToken(mCurToken, mCurTokenDisplayId); - } catch (RemoteException e) { + if (DEBUG) { + Slog.v(TAG, "Removing window token: " + mCurToken + " for display: " + + mCurTokenDisplayId); } + mWindowManagerInternal.removeWindowToken(mCurToken, false /* removeWindows */, + false /* animateExit */, mCurTokenDisplayId); // Set IME window status as invisible when unbind current method. mImeWindowVis = 0; mBackDisposition = InputMethodService.BACK_DISPOSITION_DEFAULT; diff --git a/services/core/java/com/android/server/notification/NotificationManagerService.java b/services/core/java/com/android/server/notification/NotificationManagerService.java index 207baf539345..78c909d92c58 100755 --- a/services/core/java/com/android/server/notification/NotificationManagerService.java +++ b/services/core/java/com/android/server/notification/NotificationManagerService.java @@ -7449,15 +7449,21 @@ public class NotificationManagerService extends SystemService { sentAccessibilityEvent = true; } if (DBG) Slog.v(TAG, "Interrupting!"); + boolean isInsistentUpdate = isInsistentUpdate(record); if (hasValidSound) { - if (isInCall()) { - playInCallNotification(); + if (isInsistentUpdate) { + // don't reset insistent sound, it's jarring beep = true; } else { - beep = playSound(record, soundUri); - } - if(beep) { - mSoundNotificationKey = key; + if (isInCall()) { + playInCallNotification(); + beep = true; + } else { + beep = playSound(record, soundUri); + } + if (beep) { + mSoundNotificationKey = key; + } } } @@ -7465,9 +7471,13 @@ public class NotificationManagerService extends SystemService { mAudioManager.getRingerModeInternal() == AudioManager.RINGER_MODE_SILENT; if (!isInCall() && hasValidVibrate && !ringerModeSilent) { - buzz = playVibration(record, vibration, hasValidSound); - if(buzz) { - mVibrateNotificationKey = key; + if (isInsistentUpdate) { + buzz = true; + } else { + buzz = playVibration(record, vibration, hasValidSound); + if (buzz) { + mVibrateNotificationKey = key; + } } } } else if ((record.getFlags() & Notification.FLAG_INSISTENT) != 0) { @@ -7571,6 +7581,19 @@ public class NotificationManagerService extends SystemService { } @GuardedBy("mNotificationLock") + boolean isInsistentUpdate(final NotificationRecord record) { + return (Objects.equals(record.getKey(), mSoundNotificationKey) + || Objects.equals(record.getKey(), mVibrateNotificationKey)) + && isCurrentlyInsistent(); + } + + @GuardedBy("mNotificationLock") + boolean isCurrentlyInsistent() { + return isLoopingRingtoneNotification(mNotificationsByKey.get(mSoundNotificationKey)) + || isLoopingRingtoneNotification(mNotificationsByKey.get(mVibrateNotificationKey)); + } + + @GuardedBy("mNotificationLock") boolean shouldMuteNotificationLocked(final NotificationRecord record) { // Suppressed because it's a silent update final Notification notification = record.getNotification(); @@ -7609,10 +7632,8 @@ public class NotificationManagerService extends SystemService { return true; } - // A looping ringtone, such as an incoming call is playing - if (isLoopingRingtoneNotification(mNotificationsByKey.get(mSoundNotificationKey)) - || isLoopingRingtoneNotification( - mNotificationsByKey.get(mVibrateNotificationKey))) { + // A different looping ringtone, such as an incoming call is playing + if (isCurrentlyInsistent() && !isInsistentUpdate(record)) { return true; } @@ -8756,10 +8777,22 @@ public class NotificationManagerService extends SystemService { void snoozeNotificationInt(String key, long duration, String snoozeCriterionId, ManagedServiceInfo listener) { - String listenerName = listener == null ? null : listener.component.toShortString(); + if (listener == null) { + return; + } + String listenerName = listener.component.toShortString(); if ((duration <= 0 && snoozeCriterionId == null) || key == null) { return; } + synchronized (mNotificationLock) { + final NotificationRecord r = findInCurrentAndSnoozedNotificationByKeyLocked(key); + if (r == null) { + return; + } + if (!listener.enabledAndUserMatches(r.getSbn().getNormalizedUserId())){ + return; + } + } if (DBG) { Slog.d(TAG, String.format("snooze event(%s, %d, %s, %s)", key, duration, diff --git a/services/core/java/com/android/server/policy/DeviceStateProviderImpl.java b/services/core/java/com/android/server/policy/DeviceStateProviderImpl.java index ff6511f06577..27a16e9bfdda 100644 --- a/services/core/java/com/android/server/policy/DeviceStateProviderImpl.java +++ b/services/core/java/com/android/server/policy/DeviceStateProviderImpl.java @@ -82,6 +82,7 @@ import javax.xml.datatype.DatatypeConfigurationException; public final class DeviceStateProviderImpl implements DeviceStateProvider, InputManagerInternal.LidSwitchCallback, SensorEventListener { private static final String TAG = "DeviceStateProviderImpl"; + private static final boolean DEBUG = false; private static final BooleanSupplier TRUE_BOOLEAN_SUPPLIER = () -> true; private static final BooleanSupplier FALSE_BOOLEAN_SUPPLIER = () -> false; @@ -213,6 +214,10 @@ public final class DeviceStateProviderImpl implements DeviceStateProvider, for (int i = 0; i < stateConditions.size(); i++) { final int state = deviceStates.get(i).getIdentifier(); + if (DEBUG) { + Slog.d(TAG, "Evaluating conditions for device state " + state + + " (" + deviceStates.get(i).getName() + ")"); + } final Conditions conditions = stateConditions.get(i); if (conditions == null) { mStateConditions.put(state, TRUE_BOOLEAN_SUPPLIER); @@ -233,6 +238,9 @@ public final class DeviceStateProviderImpl implements DeviceStateProvider, if (lidSwitchCondition != null) { suppliers.add(new LidSwitchBooleanSupplier(lidSwitchCondition.getOpen())); lidSwitchRequired = true; + if (DEBUG) { + Slog.d(TAG, "Lid switch required"); + } } List<SensorCondition> sensorConditions = conditions.getSensor(); @@ -249,6 +257,11 @@ public final class DeviceStateProviderImpl implements DeviceStateProvider, break; } + if (DEBUG) { + Slog.d(TAG, "Found sensor with type: " + expectedSensorType + + " (" + expectedSensorName + ")"); + } + suppliers.add(new SensorBooleanSupplier(foundSensor, sensorCondition.getValue())); sensorsRequired.add(foundSensor); } @@ -343,6 +356,10 @@ public final class DeviceStateProviderImpl implements DeviceStateProvider, int newState = mOrderedStates[0].getIdentifier(); for (int i = 0; i < mOrderedStates.length; i++) { int state = mOrderedStates[i].getIdentifier(); + if (DEBUG) { + Slog.d(TAG, "Checking conditions for " + mOrderedStates[i].getName() + "(" + + i + ")"); + } boolean conditionSatisfied; try { conditionSatisfied = mStateConditions.get(state).getAsBoolean(); @@ -350,10 +367,16 @@ public final class DeviceStateProviderImpl implements DeviceStateProvider, // Failed to compute the current state based on current available data. Return // with the expectation that notifyDeviceStateChangedIfNeeded() will be called // when a callback with the missing data is triggered. + if (DEBUG) { + Slog.d(TAG, "Unable to check current state", e); + } return; } if (conditionSatisfied) { + if (DEBUG) { + Slog.d(TAG, "Device State conditions satisfied, transition to " + state); + } newState = state; break; } @@ -375,6 +398,9 @@ public final class DeviceStateProviderImpl implements DeviceStateProvider, synchronized (mLock) { mIsLidOpen = lidOpen; } + if (DEBUG) { + Slog.d(TAG, "Lid switch state: " + (lidOpen ? "open" : "closed")); + } notifyDeviceStateChangedIfNeeded(); } @@ -460,6 +486,9 @@ public final class DeviceStateProviderImpl implements DeviceStateProvider, private boolean adheresToRange(float value, @NonNull NumericRange range) { final BigDecimal min = range.getMin_optional(); if (min != null) { + if (DEBUG) { + Slog.d(TAG, "value: " + value + ", constraint min: " + min.floatValue()); + } if (value <= min.floatValue()) { return false; } @@ -467,6 +496,10 @@ public final class DeviceStateProviderImpl implements DeviceStateProvider, final BigDecimal minInclusive = range.getMinInclusive_optional(); if (minInclusive != null) { + if (DEBUG) { + Slog.d(TAG, "value: " + value + ", constraint min-inclusive: " + + minInclusive.floatValue()); + } if (value < minInclusive.floatValue()) { return false; } @@ -474,6 +507,9 @@ public final class DeviceStateProviderImpl implements DeviceStateProvider, final BigDecimal max = range.getMax_optional(); if (max != null) { + if (DEBUG) { + Slog.d(TAG, "value: " + value + ", constraint max: " + max.floatValue()); + } if (value >= max.floatValue()) { return false; } @@ -481,6 +517,10 @@ public final class DeviceStateProviderImpl implements DeviceStateProvider, final BigDecimal maxInclusive = range.getMaxInclusive_optional(); if (maxInclusive != null) { + if (DEBUG) { + Slog.d(TAG, "value: " + value + ", constraint max-inclusive: " + + maxInclusive.floatValue()); + } if (value > maxInclusive.floatValue()) { return false; } diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java index 62a6f39a4502..664714913de9 100644 --- a/services/core/java/com/android/server/wm/DisplayContent.java +++ b/services/core/java/com/android/server/wm/DisplayContent.java @@ -1207,10 +1207,10 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp } } - WindowToken removeWindowToken(IBinder binder) { + WindowToken removeWindowToken(IBinder binder, boolean animateExit) { final WindowToken token = mTokenMap.remove(binder); if (token != null && token.asActivityRecord() == null) { - token.setExiting(); + token.setExiting(animateExit); } return token; } @@ -1288,7 +1288,7 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp } void removeAppToken(IBinder binder) { - final WindowToken token = removeWindowToken(binder); + final WindowToken token = removeWindowToken(binder, true /* animateExit */); if (token == null) { Slog.w(TAG_WM, "removeAppToken: Attempted to remove non-existing token: " + binder); return; diff --git a/services/core/java/com/android/server/wm/InputMonitor.java b/services/core/java/com/android/server/wm/InputMonitor.java index 9f24b5088ad2..f5bfef976777 100644 --- a/services/core/java/com/android/server/wm/InputMonitor.java +++ b/services/core/java/com/android/server/wm/InputMonitor.java @@ -582,7 +582,7 @@ final class InputMonitor { if (recentsAnimationController.updateInputConsumerForApp( mRecentsAnimationInputConsumer.mWindowHandle)) { mRecentsAnimationInputConsumer.show(mInputTransaction, - recentsAnimationController.getHighestLayerActivity()); + recentsAnimationController.getHighestLayerWindow()); mAddRecentsAnimationInputConsumerHandle = false; } } diff --git a/services/core/java/com/android/server/wm/RecentsAnimationController.java b/services/core/java/com/android/server/wm/RecentsAnimationController.java index d7dc3061f250..e8d9c15b0c07 100644 --- a/services/core/java/com/android/server/wm/RecentsAnimationController.java +++ b/services/core/java/com/android/server/wm/RecentsAnimationController.java @@ -1103,9 +1103,9 @@ public class RecentsAnimationController implements DeathRecipient { } /** - * Returns the activity with the highest layer, or null if none is found. + * Returns the window with the highest layer, or null if none is found. */ - public ActivityRecord getHighestLayerActivity() { + public WindowState getHighestLayerWindow() { int highestLayer = Integer.MIN_VALUE; Task highestLayerTask = null; for (int i = mPendingAnimations.size() - 1; i >= 0; i--) { @@ -1116,7 +1116,7 @@ public class RecentsAnimationController implements DeathRecipient { highestLayerTask = adapter.mTask; } } - return highestLayerTask.getTopMostActivity(); + return highestLayerTask.getTopMostActivity().getTopChild(); } boolean isAnimatingTask(Task task) { diff --git a/services/core/java/com/android/server/wm/WallpaperWindowToken.java b/services/core/java/com/android/server/wm/WallpaperWindowToken.java index 194f48f57cc4..b54e8b7a7b4e 100644 --- a/services/core/java/com/android/server/wm/WallpaperWindowToken.java +++ b/services/core/java/com/android/server/wm/WallpaperWindowToken.java @@ -66,8 +66,8 @@ class WallpaperWindowToken extends WindowToken { } @Override - void setExiting() { - super.setExiting(); + void setExiting(boolean animateExit) { + super.setExiting(animateExit); mDisplayContent.mWallpaperController.removeWallpaperToken(this); } diff --git a/services/core/java/com/android/server/wm/WindowManagerInternal.java b/services/core/java/com/android/server/wm/WindowManagerInternal.java index 132f1392cba7..ba0266a575bf 100644 --- a/services/core/java/com/android/server/wm/WindowManagerInternal.java +++ b/services/core/java/com/android/server/wm/WindowManagerInternal.java @@ -462,8 +462,21 @@ public abstract class WindowManagerInternal { * @param removeWindows Whether to also remove the windows associated with the token. * @param displayId The display to remove the token from. */ + public final void removeWindowToken(android.os.IBinder token, boolean removeWindows, + int displayId) { + removeWindowToken(token, removeWindows, true /* animateExit */, displayId); + } + + /** + * Removes a window token. + * + * @param token The toke to remove. + * @param removeWindows Whether to also remove the windows associated with the token. + * @param animateExit Whether to play the windows exit animation after the token removal. + * @param displayId The display to remove the token from. + */ public abstract void removeWindowToken(android.os.IBinder token, boolean removeWindows, - int displayId); + boolean animateExit, int displayId); /** * Registers a listener to be notified about app transition events. diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index f37be64af18e..43b555c914bc 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -2810,6 +2810,31 @@ public class WindowManagerService extends IWindowManager.Stub } + void removeWindowToken(IBinder binder, boolean removeWindows, boolean animateExit, + int displayId) { + synchronized (mGlobalLock) { + final DisplayContent dc = mRoot.getDisplayContent(displayId); + + if (dc == null) { + ProtoLog.w(WM_ERROR, "removeWindowToken: Attempted to remove token: %s" + + " for non-exiting displayId=%d", binder, displayId); + return; + } + final WindowToken token = dc.removeWindowToken(binder, animateExit); + if (token == null) { + ProtoLog.w(WM_ERROR, + "removeWindowToken: Attempted to remove non-existing token: %s", + binder); + return; + } + + if (removeWindows) { + token.removeAllWindowsIfPossible(); + } + dc.getInputMonitor().updateInputWindowsLw(true /* force */); + } + } + @Override public void removeWindowToken(IBinder binder, int displayId) { if (!checkCallingPermission(MANAGE_APP_TOKENS, "removeWindowToken()")) { @@ -2817,23 +2842,7 @@ public class WindowManagerService extends IWindowManager.Stub } final long origId = Binder.clearCallingIdentity(); try { - synchronized (mGlobalLock) { - final DisplayContent dc = mRoot.getDisplayContent(displayId); - - if (dc == null) { - ProtoLog.w(WM_ERROR, "removeWindowToken: Attempted to remove token: %s" - + " for non-exiting displayId=%d", binder, displayId); - return; - } - final WindowToken token = dc.removeWindowToken(binder); - if (token == null) { - ProtoLog.w(WM_ERROR, - "removeWindowToken: Attempted to remove non-existing token: %s", - binder); - return; - } - dc.getInputMonitor().updateInputWindowsLw(true /*force*/); - } + removeWindowToken(binder, false /* removeWindows */, true /* animateExit */, displayId); } finally { Binder.restoreCallingIdentity(origId); } @@ -7551,28 +7560,10 @@ public class WindowManagerService extends IWindowManager.Stub } @Override - public void removeWindowToken(IBinder binder, boolean removeWindows, int displayId) { - synchronized (mGlobalLock) { - if (removeWindows) { - final DisplayContent dc = mRoot.getDisplayContent(displayId); - if (dc == null) { - ProtoLog.w(WM_ERROR, "removeWindowToken: Attempted to remove token: %s" - + " for non-exiting displayId=%d", binder, displayId); - return; - } - - final WindowToken token = dc.removeWindowToken(binder); - if (token == null) { - ProtoLog.w(WM_ERROR, - "removeWindowToken: Attempted to remove non-existing token: %s", - binder); - return; - } - - token.removeAllWindowsIfPossible(); - } - WindowManagerService.this.removeWindowToken(binder, displayId); - } + public void removeWindowToken(IBinder binder, boolean removeWindows, boolean animateExit, + int displayId) { + WindowManagerService.this.removeWindowToken(binder, removeWindows, animateExit, + displayId); } @Override @@ -8117,9 +8108,15 @@ public class WindowManagerService extends IWindowManager.Stub // This could prevent if there is no container animation, we still have to apply the // pending transaction and exit waiting. mAnimator.mNotifyWhenNoAnimation = true; + boolean animateStarting = false; while (timeoutRemaining > 0) { + // Waiting until all starting windows has finished animating. + animateStarting = mRoot.forAllActivities(a -> { + return a.hasStartingWindow(); + }); boolean isAnimating = mAnimator.isAnimationScheduled() - || mRoot.isAnimating(TRANSITION | CHILDREN, ANIMATION_TYPE_ALL); + || mRoot.isAnimating(TRANSITION | CHILDREN, ANIMATION_TYPE_ALL) + || animateStarting; if (!isAnimating) { // isAnimating is a legacy transition query and will be removed, so also add // a check for whether this is in a shell-transition when not using legacy. @@ -8139,13 +8136,14 @@ public class WindowManagerService extends IWindowManager.Stub WindowContainer animatingContainer; animatingContainer = mRoot.getAnimatingContainer(TRANSITION | CHILDREN, ANIMATION_TYPE_ALL); - if (mAnimator.isAnimationScheduled() || animatingContainer != null) { + if (mAnimator.isAnimationScheduled() || animatingContainer != null || animateStarting) { Slog.w(TAG, "Timed out waiting for animations to complete," + " animatingContainer=" + animatingContainer + " animationType=" + SurfaceAnimator.animationTypeToString( animatingContainer != null ? animatingContainer.mSurfaceAnimator.getAnimationType() - : SurfaceAnimator.ANIMATION_TYPE_NONE)); + : SurfaceAnimator.ANIMATION_TYPE_NONE) + + " animateStarting=" + animateStarting); } } } diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java index 1ca0c7eb8aba..74a030a6389a 100644 --- a/services/core/java/com/android/server/wm/WindowState.java +++ b/services/core/java/com/android/server/wm/WindowState.java @@ -2220,11 +2220,18 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP } } - boolean onSetAppExiting() { + boolean onSetAppExiting(boolean animateExit) { final DisplayContent displayContent = getDisplayContent(); boolean changed = false; - if (isVisibleNow()) { + if (!animateExit) { + // Hide the window permanently if no window exist animation is performed, so we can + // avoid the window surface becoming visible again unexpectedly during the next + // relayout. + mPermanentlyHidden = true; + hide(false /* doAnimation */, false /* requestAnim */); + } + if (isVisibleNow() && animateExit) { mWinAnimator.applyAnimationLocked(TRANSIT_EXIT, false); if (mWmService.mAccessibilityController != null) { mWmService.mAccessibilityController.onWindowTransition(this, TRANSIT_EXIT); @@ -2237,7 +2244,7 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP for (int i = mChildren.size() - 1; i >= 0; --i) { final WindowState c = mChildren.get(i); - changed |= c.onSetAppExiting(); + changed |= c.onSetAppExiting(animateExit); } return changed; diff --git a/services/core/java/com/android/server/wm/WindowToken.java b/services/core/java/com/android/server/wm/WindowToken.java index fa32be363ffe..ad351f099e1f 100644 --- a/services/core/java/com/android/server/wm/WindowToken.java +++ b/services/core/java/com/android/server/wm/WindowToken.java @@ -26,6 +26,7 @@ import static com.android.internal.protolog.ProtoLogGroup.WM_DEBUG_ADD_REMOVE; import static com.android.internal.protolog.ProtoLogGroup.WM_DEBUG_APP_TRANSITIONS; import static com.android.internal.protolog.ProtoLogGroup.WM_DEBUG_FOCUS; import static com.android.internal.protolog.ProtoLogGroup.WM_DEBUG_WINDOW_MOVEMENT; +import static com.android.server.wm.SurfaceAnimator.ANIMATION_TYPE_WINDOW_ANIMATION; import static com.android.server.wm.WindowContainer.AnimationFlags.CHILDREN; import static com.android.server.wm.WindowContainer.AnimationFlags.PARENTS; import static com.android.server.wm.WindowContainer.AnimationFlags.TRANSITION; @@ -239,7 +240,7 @@ class WindowToken extends WindowContainer<WindowState> { } } - void setExiting() { + void setExiting(boolean animateExit) { if (isEmpty()) { super.removeImmediately(); return; @@ -254,11 +255,12 @@ class WindowToken extends WindowContainer<WindowState> { final int count = mChildren.size(); boolean changed = false; - final boolean delayed = isAnimating(TRANSITION | PARENTS | CHILDREN); + final boolean delayed = isAnimating(TRANSITION | PARENTS) + || (isAnimating(CHILDREN, ANIMATION_TYPE_WINDOW_ANIMATION) && animateExit); for (int i = 0; i < count; i++) { final WindowState win = mChildren.get(i); - changed |= win.onSetAppExiting(); + changed |= win.onSetAppExiting(animateExit); } final ActivityRecord app = asActivityRecord(); @@ -360,7 +362,7 @@ class WindowToken extends WindowContainer<WindowState> { @Override void removeImmediately() { if (mDisplayContent != null) { - mDisplayContent.removeWindowToken(token); + mDisplayContent.removeWindowToken(token, true /* animateExit */); } // Needs to occur after the token is removed from the display above to avoid attempt at // duplicate removal of this window container from it's parent. diff --git a/services/tests/uiservicestests/src/com/android/server/notification/BuzzBeepBlinkTest.java b/services/tests/uiservicestests/src/com/android/server/notification/BuzzBeepBlinkTest.java index 71c05b5c46f7..ea46eab6e8f9 100644 --- a/services/tests/uiservicestests/src/com/android/server/notification/BuzzBeepBlinkTest.java +++ b/services/tests/uiservicestests/src/com/android/server/notification/BuzzBeepBlinkTest.java @@ -32,6 +32,7 @@ import static junit.framework.Assert.assertTrue; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotEquals; +import static org.junit.Assert.assertNotNull; import static org.mockito.Matchers.any; import static org.mockito.Matchers.anyBoolean; import static org.mockito.Matchers.anyInt; @@ -72,6 +73,7 @@ import android.provider.Settings; import android.service.notification.NotificationListenerService; import android.service.notification.StatusBarNotification; import android.test.suitebuilder.annotation.SmallTest; +import android.util.Slog; import android.view.accessibility.AccessibilityEvent; import android.view.accessibility.AccessibilityManager; import android.view.accessibility.IAccessibilityManager; @@ -1182,6 +1184,7 @@ public class BuzzBeepBlinkTest extends UiServiceTestCase { when(mAudioManager.getRingerModeInternal()).thenReturn(AudioManager.RINGER_MODE_VIBRATE); mService.buzzBeepBlinkLocked(r); + verifyDelayedVibrate(mService.getVibratorHelper().createFallbackVibration(false)); // quiet update should stop making noise mService.buzzBeepBlinkLocked(s); @@ -1564,6 +1567,32 @@ public class BuzzBeepBlinkTest extends UiServiceTestCase { } @Test + public void testRingtoneInsistentBeep_canUpdate() throws Exception { + NotificationChannel ringtoneChannel = + new NotificationChannel("ringtone", "", IMPORTANCE_HIGH); + ringtoneChannel.setSound(Uri.fromParts("a", "b", "c"), + new AudioAttributes.Builder().setUsage(USAGE_NOTIFICATION_RINGTONE).build()); + ringtoneChannel.enableVibration(true); + NotificationRecord ringtoneNotification = getCallRecord(1, ringtoneChannel, true); + mService.addNotification(ringtoneNotification); + assertFalse(mService.shouldMuteNotificationLocked(ringtoneNotification)); + mService.buzzBeepBlinkLocked(ringtoneNotification); + verifyBeepLooped(); + verifyDelayedVibrateLooped(); + Mockito.reset(mVibrator); + Mockito.reset(mRingtonePlayer); + + assertFalse(mService.shouldMuteNotificationLocked(ringtoneNotification)); + mService.buzzBeepBlinkLocked(ringtoneNotification); + + // beep wasn't reset + verifyNeverBeep(); + verifyNeverVibrate(); + verify(mRingtonePlayer, never()).stopAsync(); + verify(mVibrator, never()).cancel(); + } + + @Test public void testCannotInterruptRingtoneInsistentBuzz() { NotificationChannel ringtoneChannel = new NotificationChannel("ringtone", "", IMPORTANCE_HIGH); diff --git a/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java b/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java index 7bbf3e6c3b2e..f660af02a0f6 100755 --- a/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java +++ b/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java @@ -516,7 +516,7 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { when(mAssistants.isAdjustmentAllowed(anyString())).thenReturn(true); - mWorkerHandler = mService.new WorkerHandler(mTestableLooper.getLooper()); + mWorkerHandler = spy(mService.new WorkerHandler(mTestableLooper.getLooper())); mService.init(mWorkerHandler, mRankingHandler, mPackageManager, mPackageManagerClient, mockLightsManager, mListeners, mAssistants, mConditionProviders, mCompanionMgr, mSnoozeHelper, mUsageStats, mPolicyFile, mActivityManager, mGroupHelper, mAm, mAtm, @@ -2703,6 +2703,42 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { } @Test + public void testCrossUserSnooze() { + NotificationRecord r = generateNotificationRecord(mTestNotificationChannel, 10); + mService.addNotification(r); + NotificationRecord r2 = generateNotificationRecord(mTestNotificationChannel, 0); + mService.addNotification(r2); + + mListener = mock(ManagedServices.ManagedServiceInfo.class); + mListener.component = new ComponentName(PKG, PKG); + when(mListener.enabledAndUserMatches(anyInt())).thenReturn(false); + when(mListeners.checkServiceTokenLocked(any())).thenReturn(mListener); + + mService.snoozeNotificationInt(r.getKey(), 1000, null, mListener); + + verify(mWorkerHandler, never()).post( + any(NotificationManagerService.SnoozeNotificationRunnable.class)); + } + + @Test + public void testSameUserSnooze() { + NotificationRecord r = generateNotificationRecord(mTestNotificationChannel, 10); + mService.addNotification(r); + NotificationRecord r2 = generateNotificationRecord(mTestNotificationChannel, 0); + mService.addNotification(r2); + + mListener = mock(ManagedServices.ManagedServiceInfo.class); + mListener.component = new ComponentName(PKG, PKG); + when(mListener.enabledAndUserMatches(anyInt())).thenReturn(true); + when(mListeners.checkServiceTokenLocked(any())).thenReturn(mListener); + + mService.snoozeNotificationInt(r2.getKey(), 1000, null, mListener); + + verify(mWorkerHandler).post( + any(NotificationManagerService.SnoozeNotificationRunnable.class)); + } + + @Test public void testSnoozeRunnable_reSnoozeASingleSnoozedNotification() throws Exception { final NotificationRecord notification = generateNotificationRecord( mTestNotificationChannel, 1, null, true); diff --git a/services/tests/wmtests/src/com/android/server/wm/WindowTokenTests.java b/services/tests/wmtests/src/com/android/server/wm/WindowTokenTests.java index d048f1842aa3..589f9134f227 100644 --- a/services/tests/wmtests/src/com/android/server/wm/WindowTokenTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/WindowTokenTests.java @@ -24,6 +24,7 @@ import static android.view.WindowManager.LayoutParams.TYPE_STATUS_BAR; import static android.view.WindowManager.LayoutParams.TYPE_TOAST; import static com.android.dx.mockito.inline.extended.ExtendedMockito.spyOn; +import static com.android.server.policy.WindowManagerPolicy.TRANSIT_EXIT; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; @@ -44,6 +45,7 @@ import androidx.test.filters.SmallTest; import org.junit.Test; import org.junit.runner.RunWith; +import org.mockito.Mockito; import java.util.function.BiFunction; @@ -126,7 +128,7 @@ public class WindowTokenTests extends WindowTestsBase { final WindowState window1 = createWindow(null, TYPE_TOAST, token, "window1"); final WindowState window2 = createWindow(null, TYPE_TOAST, token, "window2"); - mDisplayContent.removeWindowToken(token.token); + mDisplayContent.removeWindowToken(token.token, true /* animateExit */); // Verify that the token is no longer mapped on the display assertNull(mDisplayContent.getWindowToken(token.token)); // Verify that the token is still attached to its parent @@ -261,4 +263,29 @@ public class WindowTokenTests extends WindowTestsBase { assertNotNull(app.getFrozenInsetsState()); assertNull(mDisplayContent.mInputMethodWindow.getFrozenInsetsState()); } + + @Test + public void testRemoveWindowToken_noAnimateExitWhenSet() { + final TestWindowToken token = createTestWindowToken(0, mDisplayContent); + final WindowState win = createWindow(null, TYPE_APPLICATION, token, "win"); + makeWindowVisible(win); + assertTrue(win.isOnScreen()); + spyOn(win); + spyOn(win.mWinAnimator); + spyOn(win.mToken); + + // Invoking removeWindowToken with setting no window exit animation and not remove window + // immediately. verify the window will hide without applying exit animation. + mWm.removeWindowToken(win.mToken.token, false /* removeWindows */, false /* animateExit */, + mDisplayContent.mDisplayId); + verify(win).onSetAppExiting(Mockito.eq(false) /* animateExit */); + verify(win).hide(false /* doAnimation */, false /* requestAnim */); + assertFalse(win.isOnScreen()); + verify(win.mWinAnimator, Mockito.never()).applyAnimationLocked(TRANSIT_EXIT, false); + assertTrue(win.mToken.hasChild()); + + // Even though the window is being removed afterwards, it won't apply exit animation. + win.removeIfPossible(); + verify(win.mWinAnimator, Mockito.never()).applyAnimationLocked(TRANSIT_EXIT, false); + } } diff --git a/telecomm/java/android/telecom/Connection.java b/telecomm/java/android/telecom/Connection.java index 759afd72d539..f2f1645b335d 100644 --- a/telecomm/java/android/telecom/Connection.java +++ b/telecomm/java/android/telecom/Connection.java @@ -775,6 +775,21 @@ public abstract class Connection extends Conferenceable { "android.telecom.extra.REMOTE_PHONE_ACCOUNT_HANDLE"; /** + * The Telecom call ID of the conference an existing connection should be added to. This is + * required when {@link com.android.services.telephony.TelephonyConnectionService} adds a + * {@link Conference} to Telecom using the + * {@link ConnectionService#addExistingConnection(PhoneAccountHandle, Connection, Conference)} + * API. That API specifies a parent conference associated with the new existing connection + * being added, and there is no equivalent as part of the {@link RemoteConnectionService} API. + * This extra key is used to stack the ID of the conference to which the existing connection + * will be added so that Telecom can link it up correctly when the {@link RemoteConference} + * is added to Telecom by the connection manager. + * @hide + */ + public static final String EXTRA_ADD_TO_CONFERENCE_ID = + "android.telecom.extra.ADD_TO_CONFERENCE_ID"; + + /** * Extra key set from a {@link ConnectionService} when using the remote connection APIs * (e.g. {@link RemoteConnectionService#createRemoteConnection(PhoneAccountHandle, * ConnectionRequest, boolean)}) to create a remote connection. Provides the receiving diff --git a/telecomm/java/android/telecom/RemoteConnectionService.java b/telecomm/java/android/telecom/RemoteConnectionService.java index bf6a6ef793ff..efe35d21c003 100644 --- a/telecomm/java/android/telecom/RemoteConnectionService.java +++ b/telecomm/java/android/telecom/RemoteConnectionService.java @@ -239,13 +239,9 @@ final class RemoteConnectionService { conference.addConnection(c); } } - if (conference.getConnections().size() == 0) { - // A conference was created, but none of its connections are ones that have been - // created by, and therefore being tracked by, this remote connection service. It - // is of no interest to us. - Log.d(this, "addConferenceCall - skipping"); - return; - } + // We used to skip adding empty conferences; however in the world of IMS conference + // calls we need to add them to the remote connection service because they will always + // start with no participants. conference.setState(parcel.getState()); conference.setConnectionCapabilities(parcel.getConnectionCapabilities()); @@ -379,6 +375,8 @@ final class RemoteConnectionService { @Override public void addExistingConnection(String callId, ParcelableConnection connection, Session.Info sessionInfo) { + Log.i(RemoteConnectionService.this, "addExistingConnection: callId=%s, conn=%s", callId, + connection); String callingPackage = mOurConnectionServiceImpl.getApplicationContext(). getOpPackageName(); int callingTargetSdkVersion = mOurConnectionServiceImpl.getApplicationInfo() @@ -390,6 +388,20 @@ final class RemoteConnectionService { Bundle newExtras = new Bundle(); newExtras.putParcelable(Connection.EXTRA_REMOTE_PHONE_ACCOUNT_HANDLE, connection.getPhoneAccount()); + if (connection.getParentCallId() != null) { + RemoteConference parentConf = mConferenceById.get(connection.getParentCallId()); + // If there is a parent being set, we need to stash the conference ID here. + // Telephony can add an existing connection while specifying a parent conference. + // There is no equivalent version of that operation as part of the remote connection + // API, so we will stash the pre-defined parent's ID in the extras. When the + // connectionmanager copies over the extras from the remote connection to the + // actual one, it'll get passed to Telecom so that it can make the association. + if (parentConf != null) { + newExtras.putString(Connection.EXTRA_ADD_TO_CONFERENCE_ID, parentConf.getId()); + Log.i(this, "addExistingConnection: stash parent of %s as %s", + connection.getParentCallId(), parentConf.getId()); + } + } remoteConnection.putExtras(newExtras); mConnectionById.put(callId, remoteConnection); remoteConnection.registerCallback(new RemoteConnection.Callback() { |