From 3eb06a9077e01878e513338fd0a851461d0b6c1a Mon Sep 17 00:00:00 2001 From: Lars Svensson Date: Mon, 4 Nov 2024 14:46:31 +0100 Subject: [PATCH 01/14] Add android:key to device info PreferenceCategories Add group key to PreferenceCategory "Legal & regulatory", and "Device identifiers" making injection of preferences in this section possible. Change-Id: Ic178f402fb993cbd4be7c3f0713496acf2a6938a --- res/xml/my_device_info.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/res/xml/my_device_info.xml b/res/xml/my_device_info.xml index aec064b599f..1a9e646b509 100644 --- a/res/xml/my_device_info.xml +++ b/res/xml/my_device_info.xml @@ -64,6 +64,7 @@ @@ -157,6 +158,7 @@ From e4623cd2a330e3bfb2e5b3a311f47dc984639a8f Mon Sep 17 00:00:00 2001 From: Jason Chang Date: Wed, 28 Aug 2024 18:52:19 +0000 Subject: [PATCH 02/14] (1/n) Make the GlifHeader scrollable on FingerprintEnrollEnrolling( UDPFS) layout page. 1. To override GlifLayout's onInflateTemplate() then embedding a ScrollView on GlifHeader. 2. Remove previous hiding the description text snippet 3. Handling UDFPS enroll lottie position problem. 4. Solve the ProgressBar overlapped with FooterBar problem. Flag: com.android.settings.flags.enroll_layout_truncate_improvement Bug: 359149850 Bug: 367164671 Bug: 362522976 Test: atest UdfpsEnrollEnrollingViewTest Test: Build Forrest ROM then check the UI in different scenarios Change-Id: Iee44cb5815286233f23266e3d86fd8335ab2087d --- ...iometrics_integration_declarations.aconfig | 10 ++ res/layout/biometrics_glif_compact.xml | 26 +++ res/layout/biometrics_glif_content.xml | 82 +++++++++ res/layout/udfps_enroll_enrolling.xml | 88 ++++----- .../udfps_enroll_enrolling_non_scroll.xml | 81 +++++++++ res/values/config.xml | 3 + res/values/dimens.xml | 4 + .../FingerprintEnrollEnrolling.java | 46 ++++- .../fingerprint/UdfpsEnrollEnrollingView.java | 169 ++++++++++++++++-- .../fingerprint/UdfpsEnrollView.java | 9 + .../layout/test_udfps_enroll_enrolling.xml | 24 +++ .../TestUdfpsEnrollEnrollingView.java | 39 ++++ .../UdfpsEnrollEnrollingViewTest.java | 106 +++++++++++ 13 files changed, 631 insertions(+), 56 deletions(-) create mode 100644 res/layout/biometrics_glif_compact.xml create mode 100644 res/layout/biometrics_glif_content.xml create mode 100644 res/layout/udfps_enroll_enrolling_non_scroll.xml create mode 100644 tests/robotests/res/layout/test_udfps_enroll_enrolling.xml create mode 100644 tests/robotests/src/com/android/settings/biometrics/fingerprint/TestUdfpsEnrollEnrollingView.java create mode 100644 tests/robotests/src/com/android/settings/biometrics/fingerprint/UdfpsEnrollEnrollingViewTest.java diff --git a/aconfig/settings_biometrics_integration_declarations.aconfig b/aconfig/settings_biometrics_integration_declarations.aconfig index 9bded6a79ce..0ad028ef0a4 100644 --- a/aconfig/settings_biometrics_integration_declarations.aconfig +++ b/aconfig/settings_biometrics_integration_declarations.aconfig @@ -15,6 +15,16 @@ flag { bug: "301226085" } +flag { + name: "enroll_layout_truncate_improvement" + namespace: "biometrics_integration" + description: "This flag controls whether the enroll layout truncate improvement feature should be enabled" + bug: "359149850" + metadata { + purpose: PURPOSE_BUGFIX + } +} + flag { name: "screen_off_unlock_power_optimization" namespace: "biometrics_integration" diff --git a/res/layout/biometrics_glif_compact.xml b/res/layout/biometrics_glif_compact.xml new file mode 100644 index 00000000000..5de78dae724 --- /dev/null +++ b/res/layout/biometrics_glif_compact.xml @@ -0,0 +1,26 @@ + + + + + + + + diff --git a/res/layout/biometrics_glif_content.xml b/res/layout/biometrics_glif_content.xml new file mode 100644 index 00000000000..6cddccb4da1 --- /dev/null +++ b/res/layout/biometrics_glif_content.xml @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/res/layout/udfps_enroll_enrolling.xml b/res/layout/udfps_enroll_enrolling.xml index 366a87c4740..ef8cb71729d 100644 --- a/res/layout/udfps_enroll_enrolling.xml +++ b/res/layout/udfps_enroll_enrolling.xml @@ -24,58 +24,66 @@ android:layout_height="match_parent" style="?attr/fingerprint_layout_theme"> - + android:clipChildren="false"> + + - + - - + - + - + - - - + + + + diff --git a/res/layout/udfps_enroll_enrolling_non_scroll.xml b/res/layout/udfps_enroll_enrolling_non_scroll.xml new file mode 100644 index 00000000000..deb90919a0d --- /dev/null +++ b/res/layout/udfps_enroll_enrolling_non_scroll.xml @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/res/values/config.xml b/res/values/config.xml index 09f941ff757..4e4c5c4c1c0 100644 --- a/res/values/config.xml +++ b/res/values/config.xml @@ -772,6 +772,9 @@ 58.0001 29.2229,56.9551 26.8945,55.195 + + 1000 + false diff --git a/res/values/dimens.xml b/res/values/dimens.xml index 5961b95a606..96bbaed9b5b 100755 --- a/res/values/dimens.xml +++ b/res/values/dimens.xml @@ -159,6 +159,10 @@ -24dp 0dp 20dp + 274dp + 0.27 + + 0.37 0 diff --git a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrolling.java b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrolling.java index 03010bbe739..1de8379bd76 100644 --- a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrolling.java +++ b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrolling.java @@ -57,6 +57,7 @@ import android.view.animation.AnimationUtils; import android.view.animation.Interpolator; import android.widget.ProgressBar; import android.widget.RelativeLayout; +import android.widget.ScrollView; import android.widget.TextView; import androidx.annotation.IdRes; @@ -72,6 +73,7 @@ import com.android.settings.biometrics.BiometricsEnrollEnrolling; import com.android.settings.biometrics.BiometricsSplitScreenDialog; import com.android.settings.biometrics.fingerprint.feature.SfpsEnrollmentFeature; import com.android.settings.core.instrumentation.InstrumentedDialogFragment; +import com.android.settings.flags.Flags; import com.android.settings.overlay.FeatureFactory; import com.android.settingslib.display.DisplayDensityUtils; import com.android.systemui.unfold.compat.ScreenSizeFoldProvider; @@ -243,16 +245,36 @@ public class FingerprintEnrollEnrolling extends BiometricsEnrollEnrolling { mIsAccessibilityEnabled = mAccessibilityManager.isEnabled(); listenOrientationEvent(); - if (mCanAssumeUdfps) { + final int rotation = getApplicationContext().getDisplay().getRotation(); + final boolean isPortrait = (rotation == Surface.ROTATION_0) + || (rotation == Surface.ROTATION_180); + final UdfpsEnrollEnrollingView layout = (UdfpsEnrollEnrollingView) getLayoutInflater().inflate( - R.layout.udfps_enroll_enrolling, null, false); + Flags.enrollLayoutTruncateImprovement() + ? R.layout.udfps_enroll_enrolling : + R.layout.udfps_enroll_enrolling_non_scroll, null, false); setUdfpsEnrollHelper(); layout.initView(props.get(0), mUdfpsEnrollHelper, mAccessibilityManager); - setContentView(layout); setDescriptionText(R.string.security_settings_udfps_enroll_start_message); + + if (Flags.enrollLayoutTruncateImprovement() && isPortrait) { + final UdfpsEnrollEnrollingView layoutView = (UdfpsEnrollEnrollingView) getLayout(); + if (layoutView != null) { + final ScrollView headerScrollView = layout.findViewById( + R.id.sud_header_scroll_view); + if (headerScrollView != null) { + final long headerScrollDuration = getResources().getInteger( + R.integer.config_biometrics_header_scroll_duration); + layoutView.adjustScrollableHeaderHeight( + headerScrollView, mShouldShowLottie); + layoutView.headerVerticalScrolling(headerScrollView, headerScrollDuration); + } + } + } + } else if (mCanAssumeSfps) { mSfpsEnrollmentFeature = FeatureFactory.getFeatureFactory() .getFingerprintFeatureProvider().getSfpsEnrollmentFeature(); @@ -1199,6 +1221,24 @@ public class FingerprintEnrollEnrolling extends BiometricsEnrollEnrolling { } } + @Override + public void onWindowFocusChanged(boolean hasWindowFocus) { + super.onWindowFocusChanged(hasWindowFocus); + if (Flags.enrollLayoutTruncateImprovement()) { + adjustEnrollViewIfOverlappedWithFooterBar(); + } + } + + private void adjustEnrollViewIfOverlappedWithFooterBar() { + if (mCanAssumeUdfps) { + final UdfpsEnrollEnrollingView layoutView = (UdfpsEnrollEnrollingView) getLayout(); + if (layoutView != null) { + layoutView.adjustUdfpsVieWithFooterBar(); + layoutView.onUdfpsSensorRectUpdated(); + } + } + } + public static class IconTouchDialog extends InstrumentedDialogFragment { @Override diff --git a/src/com/android/settings/biometrics/fingerprint/UdfpsEnrollEnrollingView.java b/src/com/android/settings/biometrics/fingerprint/UdfpsEnrollEnrollingView.java index c28f9e0e761..5b29fa5f1f6 100644 --- a/src/com/android/settings/biometrics/fingerprint/UdfpsEnrollEnrollingView.java +++ b/src/com/android/settings/biometrics/fingerprint/UdfpsEnrollEnrollingView.java @@ -16,27 +16,42 @@ package com.android.settings.biometrics.fingerprint; +import android.animation.Animator; +import android.animation.ObjectAnimator; import android.content.Context; +import android.content.res.Configuration; +import android.content.res.TypedArray; +import android.graphics.Insets; import android.graphics.Point; import android.graphics.Rect; import android.hardware.fingerprint.FingerprintSensorPropertiesInternal; import android.text.TextUtils; import android.util.AttributeSet; +import android.util.DisplayMetrics; +import android.util.TypedValue; +import android.view.Display; import android.view.DisplayInfo; import android.view.Gravity; +import android.view.LayoutInflater; import android.view.Surface; import android.view.View; import android.view.ViewGroup; +import android.view.WindowInsets; +import android.view.WindowManager; import android.view.accessibility.AccessibilityManager; import android.widget.Button; import android.widget.FrameLayout; import android.widget.ImageView; import android.widget.LinearLayout; +import android.widget.ScrollView; import androidx.annotation.ColorInt; +import androidx.annotation.LayoutRes; +import androidx.annotation.NonNull; +import androidx.annotation.VisibleForTesting; -import com.android.internal.annotations.VisibleForTesting; import com.android.settings.R; +import com.android.settings.flags.Flags; import com.android.systemui.biometrics.UdfpsUtils; import com.android.systemui.biometrics.shared.model.UdfpsOverlayParams; @@ -50,6 +65,7 @@ import java.util.Locale; * View for udfps enrolling. */ public class UdfpsEnrollEnrollingView extends GlifLayout { + private final UdfpsUtils mUdfpsUtils; private final Context mContext; // We don't need to listen to onConfigurationChanged() for mRotation here because @@ -57,14 +73,19 @@ public class UdfpsEnrollEnrollingView extends GlifLayout { private final int mRotation; private final boolean mIsLandscape; private final boolean mShouldUseReverseLandscape; + + private WindowManager mWindowManager; + private UdfpsEnrollView mUdfpsEnrollView; private View mHeaderView; private AccessibilityManager mAccessibilityManager; + private ObjectAnimator mHeaderScrollAnimator; public UdfpsEnrollEnrollingView(Context context, AttributeSet attrs) { super(context, attrs); mContext = context; + mWindowManager = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE); mRotation = mContext.getDisplay().getRotation(); mIsLandscape = mRotation == Surface.ROTATION_90 || mRotation == Surface.ROTATION_270; final boolean isLayoutRtl = (TextUtils.getLayoutDirectionFromLocale(Locale.getDefault()) @@ -82,6 +103,139 @@ public class UdfpsEnrollEnrollingView extends GlifLayout { mUdfpsEnrollView = findViewById(R.id.udfps_animation_view); } + @Override + protected View onInflateTemplate(LayoutInflater inflater, @LayoutRes int template) { + final Configuration config = inflater.getContext().getResources().getConfiguration(); + if (Flags.enrollLayoutTruncateImprovement() + && config.orientation == Configuration.ORIENTATION_PORTRAIT) { + template = R.layout.biometrics_glif_compact; + } + return super.onInflateTemplate(inflater, template); + } + + void setDecreasePadding(int decreasePadding) { + if (mUdfpsEnrollView != null) { + mUdfpsEnrollView.setDecreasePadding(decreasePadding); + } + } + + void onUdfpsSensorRectUpdated() { + if (mUdfpsEnrollView != null) { + mUdfpsEnrollView.setVisibility(VISIBLE); + } + } + + private int getScrollableGlifHeaderHeight(boolean isShouldShowLottie) { + final TypedValue tvRatio = new TypedValue(); + if (isLargeDisplaySizeOrFontSize() && !isShouldShowLottie) { + getResources().getValue( + R.dimen.biometrics_glif_header_height_ratio_large, tvRatio, true); + } else { + getResources().getValue(R.dimen.biometrics_glif_header_height_ratio, tvRatio, true); + } + final float newHeaderHeight = (float) getResources().getDisplayMetrics().heightPixels + * tvRatio.getFloat(); + + return (int) newHeaderHeight; + } + + void adjustScrollableHeaderHeight(ScrollView headerScrollView, boolean isShouldShowLottie) { + ViewGroup.LayoutParams params = headerScrollView.getLayoutParams(); + params.height = getScrollableGlifHeaderHeight(isShouldShowLottie); + headerScrollView.setLayoutParams(params); + } + + private boolean isLargeDisplaySizeOrFontSize() { + final Configuration config = getResources().getConfiguration(); + if (config.fontScale > 1.3f || getLargeDisplayScale() >= 2.8f) { + return true; + } + return false; + } + + private float getLargeDisplayScale() { + final Display display = mWindowManager.getDefaultDisplay(); + final DisplayMetrics metrics = new DisplayMetrics(); + display.getMetrics(metrics); + return metrics.scaledDensity; + } + + void adjustUdfpsVieWithFooterBar() { + final FrameLayout allContent = findViewById(R.id.suc_layout_status); + final ImageView udfpsProgressView = findViewById( + R.id.udfps_enroll_animation_fp_progress_view); + + final int navigationBarHeight = getNaviBarHeight(); + final int footerBarHeight = getFooterBarHeight(); + + final int udfpsProgressDrawableBottom = getOnScreenPositionTop(udfpsProgressView) + + udfpsProgressView.getDrawable().getBounds().height() + - udfpsProgressView.getPaddingBottom() + 2 /* reserved for more space */; + final int footerBarTop = getOnScreenPositionTop(allContent) + allContent.getHeight() + - (footerBarHeight + navigationBarHeight); + + if (udfpsProgressDrawableBottom > footerBarTop) { + int adjustPadding = udfpsProgressDrawableBottom - footerBarTop; + setDecreasePadding(adjustPadding); + } + } + + private int getOnScreenPositionTop(View view) { + int [] location = new int[2]; + view.getLocationOnScreen(location); + return location[1]; + } + + private int getNaviBarHeight() { + final Insets inset = mWindowManager.getMaximumWindowMetrics().getWindowInsets().getInsets( + WindowInsets.Type.navigationBars()); + return inset.toRect().height(); + } + + private int getFooterBarHeight() { + TypedArray a = mContext.getTheme().obtainStyledAttributes(new int[] { + com.google.android.setupcompat.R.attr.sucFooterBarMinHeight}); + final int footerBarMinHeight = a.getDimensionPixelSize(0, -1); + a.recycle(); + return footerBarMinHeight; + } + + void headerVerticalScrolling(ScrollView headerScrollView, long duration) { + headerScrollView.post(new Runnable() { + @Override + public void run() { + final int maxScroll = headerScrollView.getChildAt(0).getMeasuredHeight() + - headerScrollView.getMeasuredHeight(); + mHeaderScrollAnimator = ObjectAnimator.ofInt( + headerScrollView, "scrollY", maxScroll); + mHeaderScrollAnimator.setDuration(duration); + mHeaderScrollAnimator.addListener(new Animator.AnimatorListener() { + + @Override + public void onAnimationStart(@NonNull Animator animation) {} + + @Override + public void onAnimationEnd(@NonNull Animator animation) { + mHeaderScrollAnimator.removeAllListeners(); + headerScrollView.post(new Runnable() { + @Override + public void run() { + mHeaderScrollAnimator.reverse(); + } + }); + } + + @Override + public void onAnimationCancel(@NonNull Animator animation) {} + + @Override + public void onAnimationRepeat(@NonNull Animator animation) {} + }); + mHeaderScrollAnimator.start(); + } + }); + } + void initView(FingerprintSensorPropertiesInternal udfpsProps, UdfpsEnrollHelper udfpsEnrollHelper, AccessibilityManager accessibilityManager) { @@ -93,7 +247,7 @@ public class UdfpsEnrollEnrollingView extends GlifLayout { } else if (mShouldUseReverseLandscape) { swapHeaderAndContent(); } - mUdfpsEnrollView.setVisibility(View.VISIBLE); + mUdfpsEnrollView.setVisibility(View.INVISIBLE); setOnHoverListener(); } @@ -166,17 +320,6 @@ public class UdfpsEnrollEnrollingView extends GlifLayout { R.id.udfps_enroll_animation_fp_view); fingerprintView.setPadding(0, -layoutLottieAnimationPadding, 0, layoutLottieAnimationPadding); - - // TODO(b/260970216) Instead of hiding the description text view, we should - // make the header view scrollable if the text is too long. - // If description text view has overlap with udfps progress view, hide it. - final View descView = getDescriptionTextView(); - getViewTreeObserver().addOnDrawListener(() -> { - if (descView.getVisibility() == View.VISIBLE - && hasOverlap(descView, mUdfpsEnrollView)) { - descView.setVisibility(View.GONE); - } - }); } private void setOnHoverListener() { diff --git a/src/com/android/settings/biometrics/fingerprint/UdfpsEnrollView.java b/src/com/android/settings/biometrics/fingerprint/UdfpsEnrollView.java index 4a2a243d2d8..0c80b483661 100644 --- a/src/com/android/settings/biometrics/fingerprint/UdfpsEnrollView.java +++ b/src/com/android/settings/biometrics/fingerprint/UdfpsEnrollView.java @@ -133,6 +133,15 @@ public class UdfpsEnrollView extends FrameLayout implements UdfpsEnrollHelper.Li enrollHelper.setListener(this); } + /** + * Adjust progress bar radius only for decreasing. + * @param decreasePadding the decrease padding + */ + void setDecreasePadding(int decreasePadding) { + mProgressBarRadius -= decreasePadding; + onSensorRectUpdated(); + } + private void onSensorRectUpdated() { updateDimensions(); diff --git a/tests/robotests/res/layout/test_udfps_enroll_enrolling.xml b/tests/robotests/res/layout/test_udfps_enroll_enrolling.xml new file mode 100644 index 00000000000..c69d2ba16d9 --- /dev/null +++ b/tests/robotests/res/layout/test_udfps_enroll_enrolling.xml @@ -0,0 +1,24 @@ + + + + \ No newline at end of file diff --git a/tests/robotests/src/com/android/settings/biometrics/fingerprint/TestUdfpsEnrollEnrollingView.java b/tests/robotests/src/com/android/settings/biometrics/fingerprint/TestUdfpsEnrollEnrollingView.java new file mode 100644 index 00000000000..92c8fe58870 --- /dev/null +++ b/tests/robotests/src/com/android/settings/biometrics/fingerprint/TestUdfpsEnrollEnrollingView.java @@ -0,0 +1,39 @@ +/* + * Copyright (C) 2024 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.settings.biometrics.fingerprint; + +import android.content.Context; +import android.util.AttributeSet; +import android.view.LayoutInflater; +import android.view.View; + +import androidx.annotation.LayoutRes; + +import com.android.settings.R; + +import com.google.android.setupdesign.GlifLayout; + +public class TestUdfpsEnrollEnrollingView extends GlifLayout { + public TestUdfpsEnrollEnrollingView(Context context, AttributeSet attrs) { + super(context, attrs); + } + + @Override + protected View onInflateTemplate(LayoutInflater inflater, @LayoutRes int template) { + return super.onInflateTemplate(inflater, R.layout.biometrics_glif_compact); + } +} diff --git a/tests/robotests/src/com/android/settings/biometrics/fingerprint/UdfpsEnrollEnrollingViewTest.java b/tests/robotests/src/com/android/settings/biometrics/fingerprint/UdfpsEnrollEnrollingViewTest.java new file mode 100644 index 00000000000..dec5208159d --- /dev/null +++ b/tests/robotests/src/com/android/settings/biometrics/fingerprint/UdfpsEnrollEnrollingViewTest.java @@ -0,0 +1,106 @@ +/* + * Copyright (C) 2024 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.settings.biometrics.fingerprint; + +import static com.google.common.truth.Truth.assertThat; + +import android.content.Context; +import android.os.Bundle; +import android.platform.test.annotations.EnableFlags; +import android.util.AttributeSet; +import android.view.ContextThemeWrapper; +import android.view.View; + +import com.android.settings.R; +import com.android.settings.flags.Flags; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.MockitoAnnotations; +import org.robolectric.Robolectric; +import org.robolectric.RobolectricTestRunner; +import org.robolectric.android.controller.ActivityController; +import org.robolectric.annotation.LooperMode; + + +@RunWith(RobolectricTestRunner.class) +@LooperMode(LooperMode.Mode.LEGACY) +public class UdfpsEnrollEnrollingViewTest { + + private Context mThemeContext; + private TestFingerprintEnrollEnrolling mFingerprintEnrollEnrolling; + private ActivityController + mController; + private AttributeSet mAttributeSet; + + @Before + public void setUp() { + MockitoAnnotations.initMocks(this); + mController = Robolectric.buildActivity(TestFingerprintEnrollEnrolling.class); + mFingerprintEnrollEnrolling = mController.create().get(); + mThemeContext = new ContextThemeWrapper(mFingerprintEnrollEnrolling, + R.style.SudThemeGlif_Light); + mAttributeSet = Robolectric.buildAttributeSet().build(); + } + + private void assertDefaultTemplate(TestUdfpsEnrollEnrollingView layout) { + final View title = layout.findViewById( + com.google.android.setupdesign.R.id.suc_layout_title); + assertThat(title).isNotNull(); + + final View subTitle = layout.findViewById( + com.google.android.setupdesign.R.id.sud_layout_subtitle); + assertThat(subTitle).isNotNull(); + + final View icon = layout.findViewById(com.google.android.setupdesign.R.id.sud_layout_icon); + assertThat(icon).isNotNull(); + + final View scrollView = layout.findViewById( + com.google.android.setupdesign.R.id.sud_scroll_view); + assertThat(scrollView).isNotNull(); + } + + @Test + @EnableFlags(Flags.FLAG_ENROLL_LAYOUT_TRUNCATE_IMPROVEMENT) + public void testDefaultTemplate() { + TestUdfpsEnrollEnrollingView layout = new TestUdfpsEnrollEnrollingView(mThemeContext, + mAttributeSet); + assertDefaultTemplate(layout); + } + + @Test + @EnableFlags(Flags.FLAG_ENROLL_LAYOUT_TRUNCATE_IMPROVEMENT) + public void testGlifHeaderScrollView() { + TestUdfpsEnrollEnrollingView layout = new TestUdfpsEnrollEnrollingView(mThemeContext, + mAttributeSet); + final View headerScrollView = layout.findViewById( + R.id.sud_header_scroll_view); + + assertThat(headerScrollView).isNotNull(); + } + + public static class TestFingerprintEnrollEnrolling extends FingerprintEnrollEnrolling { + @Override + protected void onCreate(Bundle savedInstanceState) { + final TestUdfpsEnrollEnrollingView layout = + (TestUdfpsEnrollEnrollingView) getLayoutInflater().inflate( + R.layout.test_udfps_enroll_enrolling, null, false); + setContentView(layout); + } + } +} From 9a8fe4107db1e6ca8cdc31dd73ffaa604fd4ed71 Mon Sep 17 00:00:00 2001 From: Jacky Wang Date: Wed, 13 Nov 2024 07:43:40 +0800 Subject: [PATCH 03/14] [Catalyst] Update SettingsService Bug: 373895596 Flag: com.android.settings.flags.catalyst_service Test: Manual Change-Id: I64d0b7bac3415894a8478fafe09b5f5d1a0ebb51 --- src/com/android/settings/SettingsService.kt | 26 +++++++++++++++++---- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/src/com/android/settings/SettingsService.kt b/src/com/android/settings/SettingsService.kt index 2cd706b9b14..33385280ed9 100644 --- a/src/com/android/settings/SettingsService.kt +++ b/src/com/android/settings/SettingsService.kt @@ -16,15 +16,31 @@ package com.android.settings +import android.app.Application import android.content.Intent -import android.os.IBinder import com.android.settings.flags.Flags +import com.android.settingslib.graph.PreferenceSetterRequest +import com.android.settingslib.ipc.ApiPermissionChecker import com.android.settingslib.service.PreferenceService /** Service to expose settings APIs. */ -class SettingsService : PreferenceService({ _, _, _ -> true }) { +class SettingsService : + PreferenceService( + graphPermissionChecker = ApiPermissionChecker.alwaysAllow(), + setterPermissionChecker = SetterPermissionChecker(), + ) { - override fun onBind(intent: Intent): IBinder? { - return if (!Flags.catalystService()) null else super.onBind(intent) - } + override fun onBind(intent: Intent) = + if (Flags.catalystService()) super.onBind(intent) else null +} + +/** Permission checker for external setter API. */ +private class SetterPermissionChecker : ApiPermissionChecker { + + override fun hasPermission( + application: Application, + myUid: Int, + callingUid: Int, + request: PreferenceSetterRequest, + ) = true } From 56de354bdb4703134f6b40d44eb65c19b44759a3 Mon Sep 17 00:00:00 2001 From: Bill Yi Date: Wed, 13 Nov 2024 14:33:26 -0800 Subject: [PATCH 04/14] Import translations. DO NOT MERGE ANYWHERE BUG:377687053 Auto-generated-cl: translation import Change-Id: I05db00761923bf98f069ef14f4b89a56c8a812dc --- res/values-af/strings.xml | 2 ++ res/values-am/strings.xml | 2 ++ res/values-ar/strings.xml | 2 ++ res/values-as/strings.xml | 2 ++ res/values-az/strings.xml | 2 ++ res/values-b+sr+Latn/strings.xml | 2 ++ res/values-be/strings.xml | 2 ++ res/values-bg/strings.xml | 2 ++ res/values-bn/strings.xml | 2 ++ res/values-bs/strings.xml | 2 ++ res/values-ca/strings.xml | 2 ++ res/values-cs/strings.xml | 2 ++ res/values-da/strings.xml | 2 ++ res/values-de/strings.xml | 2 ++ res/values-el/strings.xml | 2 ++ res/values-en-rAU/strings.xml | 2 ++ res/values-en-rCA/strings.xml | 2 ++ res/values-en-rGB/strings.xml | 2 ++ res/values-en-rIN/strings.xml | 2 ++ res/values-es-rUS/strings.xml | 2 ++ res/values-es/strings.xml | 2 ++ res/values-et/strings.xml | 2 ++ res/values-eu/strings.xml | 2 ++ res/values-fa/strings.xml | 2 ++ res/values-fi/strings.xml | 2 ++ res/values-fr-rCA/strings.xml | 2 ++ res/values-fr/strings.xml | 2 ++ res/values-gl/strings.xml | 2 ++ res/values-gu/strings.xml | 2 ++ res/values-hi/strings.xml | 2 ++ res/values-hr/strings.xml | 2 ++ res/values-hu/strings.xml | 2 ++ res/values-hy/strings.xml | 2 ++ res/values-in/strings.xml | 2 ++ res/values-is/strings.xml | 2 ++ res/values-it/strings.xml | 2 ++ res/values-iw/strings.xml | 2 ++ res/values-ja/strings.xml | 2 ++ res/values-ka/strings.xml | 2 ++ res/values-kk/strings.xml | 2 ++ res/values-km/strings.xml | 2 ++ res/values-kn/strings.xml | 2 ++ res/values-ko/strings.xml | 2 ++ res/values-ky/strings.xml | 2 ++ res/values-lo/strings.xml | 2 ++ res/values-lt/strings.xml | 2 ++ res/values-lv/strings.xml | 2 ++ res/values-mk/strings.xml | 2 ++ res/values-ml/strings.xml | 2 ++ res/values-mn/strings.xml | 2 ++ res/values-mr/strings.xml | 2 ++ res/values-ms/strings.xml | 2 ++ res/values-my/strings.xml | 2 ++ res/values-nb/strings.xml | 2 ++ res/values-ne/strings.xml | 2 ++ res/values-nl/strings.xml | 2 ++ res/values-or/strings.xml | 2 ++ res/values-pa/strings.xml | 2 ++ res/values-pl/strings.xml | 2 ++ res/values-pt-rBR/strings.xml | 2 ++ res/values-pt-rPT/strings.xml | 2 ++ res/values-pt/strings.xml | 2 ++ res/values-ro/strings.xml | 2 ++ res/values-ru/strings.xml | 2 ++ res/values-si/strings.xml | 2 ++ res/values-sk/strings.xml | 2 ++ res/values-sl/strings.xml | 2 ++ res/values-sq/strings.xml | 2 ++ res/values-sr/strings.xml | 2 ++ res/values-sv/strings.xml | 2 ++ res/values-sw/strings.xml | 2 ++ res/values-ta/strings.xml | 2 ++ res/values-te/strings.xml | 2 ++ res/values-th/strings.xml | 2 ++ res/values-tl/strings.xml | 2 ++ res/values-tr/strings.xml | 2 ++ res/values-uk/strings.xml | 2 ++ res/values-ur/strings.xml | 2 ++ res/values-uz/strings.xml | 2 ++ res/values-vi/strings.xml | 2 ++ res/values-zh-rCN/strings.xml | 2 ++ res/values-zh-rHK/strings.xml | 2 ++ res/values-zh-rTW/strings.xml | 2 ++ res/values-zu/strings.xml | 2 ++ 84 files changed, 168 insertions(+) diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml index c4d969ce299..93fa15b187e 100644 --- a/res/values-af/strings.xml +++ b/res/values-af/strings.xml @@ -2858,6 +2858,8 @@ "Foon het gewone agtergrondbatteryverbruik" "Tablet het gewone agtergrondbatteryverbruik" "Toestel het gewone agtergrondbatteryverbruik" + "Batteryvervanging word aanbeveel" + "Batterykapasiteit en -laaiprestasie is verminder en batteryvervanging word aanbeveel." "Batteryvlak is laag" "Skakel Batterybespaarder aan om batterylewe te verleng" "Verbeter batterylewe" diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml index d3d19e429fe..57036f08399 100644 --- a/res/values-am/strings.xml +++ b/res/values-am/strings.xml @@ -2858,6 +2858,8 @@ "ስልክ የታወቀ የዳራ ባትሪ አጠቃቀም አለው" "ጡባዊ የታወቀ የዳራ ባትሪ አጠቃቀም አለው" "መሣሪያ የታወቀ የዳራ ባትሪ አጠቃቀም አለው" + "ባትሪውን መተካት ይመከራል" + "የባትሪ አቅም እና የኃይል መሙላት አፈጻጸም ተቀንሰዋል እና ባትሪን መተካት ይመከራል።" "የባትሪ ደረጃ ዝቅተኛ ነው" "የባትሪ ዕድሜን ለማራዘም የባትሪ ቆጣቢን ያብሩ" "የባትሪ ዕድሜን ያሻሽሉ" diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml index 6f8022a3403..32e07a73be4 100644 --- a/res/values-ar/strings.xml +++ b/res/values-ar/strings.xml @@ -2982,6 +2982,8 @@ "يتم استخدام بطارية الهاتف بشكل عادي في الخلفية." "يتم استخدام بطارية الجهاز اللوحي بشكل عادي في الخلفية." "يتم استخدام بطارية الجهاز بشكل عادي في الخلفية." + "يُنصح باستبدال البطارية" + "انخفضت سعة البطارية وأداء الشحن، ويُنصح باستبدال البطارية." "مستوى شحن البطارية منخفض" "يمكنك تفعيل خيار \"توفير شحن البطارية\" لإطالة عمر البطارية." "إطالة عمر البطارية" diff --git a/res/values-as/strings.xml b/res/values-as/strings.xml index 75cb06a0ce8..162c92042fe 100644 --- a/res/values-as/strings.xml +++ b/res/values-as/strings.xml @@ -2858,6 +2858,8 @@ "ফ’নটোত গতানুগতিক বেটাৰীৰ নেপথ্য ব্যৱহাৰ চলি আছে" "টেবলেটটোত গতানুগতিক বেটাৰীৰ নেপথ্য ব্যৱহাৰ চলি আছে" "ডিভাইচটোত গতানুগতিকভাৱে নেপথ্যত বেটাৰীৰ ব্যৱহাৰ চলি আছে" + "বেটাৰী সলনি কৰিবলৈ চুপাৰিছ কৰা হৈছে" + "বেটাৰীৰ বহনক্ষমতা আৰু চাৰ্জিঙৰ কাৰ্যদক্ষতা হ্ৰাস হৈছে আৰু বেটাৰী সলনি কৰিবলৈ চুপাৰিছ কৰা হৈছে।" "বেটাৰী কমিছে" "বেটাৰীৰ জীৱনকাল বৃদ্ধি কৰিবলৈ বেটাৰী সঞ্চয়কাৰী অন কৰক" "বেটাৰীৰ জীৱনকাল উন্নত কৰক" diff --git a/res/values-az/strings.xml b/res/values-az/strings.xml index 6a5a5adb89d..603a3c6371b 100644 --- a/res/values-az/strings.xml +++ b/res/values-az/strings.xml @@ -2858,6 +2858,8 @@ "Telefon arxa fonda səciyyəvi batareya istifadəsinə sahibdir" "Planşet arxa fonda səciyyəvi batareya istifadəsinə sahibdir" "Cihaz arxa fonda səciyyəvi batareya istifadəsinə sahibdir" + "Batareyanın dəyişdirilməsi tövsiyə olunur" + "Batareyanın tutumu və doldurma performansı azalır və batareyanın dəyişdirilməsi tövsiyə olunur." "Enerji qurtarır" "Enerjiyə qənaət etmək üçün qənaət rejimini aktivləşdirin" "Batareya ömrünü artırın" diff --git a/res/values-b+sr+Latn/strings.xml b/res/values-b+sr+Latn/strings.xml index c16eb3eb5ca..6f036f201d4 100644 --- a/res/values-b+sr+Latn/strings.xml +++ b/res/values-b+sr+Latn/strings.xml @@ -2889,6 +2889,8 @@ "Telefon troši tipičnu količinu baterije u pozadini" "Tablet troši tipičnu količinu baterije u pozadini" "Uređaj troši tipičnu količinu baterije u pozadini" + "Preporučujemo zamenu baterije" + "Kapacitet baterije i učinak punjenja su smanjeni i preporučujemo zamenu baterije." "Nizak nivo napunjenosti baterije" "Uključite uštedu baterije da biste produžili trajanje baterije" "Produžite trajanje baterije" diff --git a/res/values-be/strings.xml b/res/values-be/strings.xml index 6dfdb4a80c4..be7228352db 100644 --- a/res/values-be/strings.xml +++ b/res/values-be/strings.xml @@ -2920,6 +2920,8 @@ "Акумулятар тэлефона разраджаецца нармальна ў фонавым рэжыме" "Акумулятар планшэта разраджаецца нармальна ў фонавым рэжыме" "Акумулятар прылады разраджаецца нармальна ў фонавым рэжыме" + "Рэкамендуецца замяніць акумулятар" + "Ёмістасць акумулятара і прадукцыйнасць зарадкі знізіліся. Рэкамендуецца замяніць акумулятар." "Нізкі ўзровень зараду акумулятара" "Уключыце Эканомію зараду, каб павялічыць час працы ад акумулятара" "Павялічце час працы ад акумулятара" diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml index 5b6ac0bb997..c09ac270053 100644 --- a/res/values-bg/strings.xml +++ b/res/values-bg/strings.xml @@ -2858,6 +2858,8 @@ "Използването на батерията на заден план е в обичайните норми за телефона" "Използването на батерията на заден план е в обичайните норми за таблета" "Използването на батерията на заден план е в обичайните норми за устройството" + "Препоръчва се подмяна на батерията" + "Капацитетът на батерията и ефективността на зареждане са намалени. Препоръчва се подмяна на батерията." "Нивото на батерията е ниско" "Включете режима за запазване на батерията, за да удължите живота ѝ" "Удължаване на живота на батерията" diff --git a/res/values-bn/strings.xml b/res/values-bn/strings.xml index 8159526796c..592d21f57b9 100644 --- a/res/values-bn/strings.xml +++ b/res/values-bn/strings.xml @@ -2858,6 +2858,8 @@ "ফোনের ব্যাকগ্রাউন্ডে স্বাভাবিক পরিমাণে ব্যাটারি ব্যবহার হচ্ছে" "ট্যাবলেটের ব্যাকগ্রাউন্ডে স্বাভাবিক পরিমাণে ব্যাটারি ব্যবহার হচ্ছে" "ডিভাইসের ব্যাকগ্রাউন্ডে স্বাভাবিক পরিমাণে ব্যাটারি ব্যবহার হচ্ছে" + "ব্যাটারি পাল্টানোর জন্য সাজেস্ট করা হয়েছে" + "ব্যাটারির ক্ষমতা ও চার্জিং পারফর্ম্যান্স কমে গেছে এবং ব্যাটারি পাল্টানোর জন্য সাজেস্ট করা হয়েছে।" "ব্যাটারির লেভেল কমে গেছে" "ব্যাটারির আয়ু বাড়াতে ব্যাটারি সেভার চালু করুন" "ব্যাটারির আয়ু বাড়ান" diff --git a/res/values-bs/strings.xml b/res/values-bs/strings.xml index 49064d141c2..ea2c199abfd 100644 --- a/res/values-bs/strings.xml +++ b/res/values-bs/strings.xml @@ -2889,6 +2889,8 @@ "Telefon ima uobičajenu potrošnju baterije u pozadini" "Tablet ima uobičajenu potrošnju baterije u pozadini" "Uređaj ima uobičajenu potrošnju baterije u pozadini" + "Preporučuje se zamjena baterije" + "Kapacitet baterije i performanse punjenja su smanjeni, pa preporučujemo zamjenu baterije." "Nivo napunjenosti baterije je nizak" "Uključite uštedu baterije da produžite vijek trajanja baterije" "Poboljšajte vijek trajanja baterije" diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml index f572298b78a..8f067f6d0aa 100644 --- a/res/values-ca/strings.xml +++ b/res/values-ca/strings.xml @@ -2858,6 +2858,8 @@ "El telèfon té un ús normal de la bateria en segon pla" "La tauleta té un ús normal de la bateria en segon pla" "El dispositiu té un ús normal de la bateria en segon pla" + "Es recomana substituir la bateria" + "La capacitat de la bateria i el rendiment de la càrrega han disminuït; es recomana substituir la bateria." "Nivell de bateria baix" "Activa Estalvi de bateria per allargar la durada de la bateria" "Millora la durada de la bateria" diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml index d8737e00bff..bfdfd7b38c4 100644 --- a/res/values-cs/strings.xml +++ b/res/values-cs/strings.xml @@ -2920,6 +2920,8 @@ "V telefonu dochází k běžnému využívání baterie na pozadí" "V tabletu dochází k běžnému využívání baterie na pozadí" "V zařízení dochází k běžnému využívání baterie na pozadí" + "Doporučujeme výměnu baterie" + "Kapacita a výkon baterie při nabíjení jsou snížené. Doporučujeme výměnu baterie." "Baterie je slabá" "Pokud chcete prodloužit výdrž baterie, zapněte Spořič baterie" "Prodloužení životnosti baterie" diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml index c564e82565b..30b7f3f23dc 100644 --- a/res/values-da/strings.xml +++ b/res/values-da/strings.xml @@ -2858,6 +2858,8 @@ "Telefonen har et normalt batteriforbrug i baggrunden" "Din tablet har et normalt batteriforbrug i baggrunden" "Enheden har et normalt batteriforbrug i baggrunden" + "Udskiftning af batteri anbefales" + "Batterikapaciteten og opladningseffektiviteten er reduceret, og det anbefales, at du udskifter batteriet." "Lavt batteriniveau" "Aktivér Batterisparefunktion for at forlænge batteritiden" "Forlæng batteritid" diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml index 2d1ac770a43..75da05e32d0 100644 --- a/res/values-de/strings.xml +++ b/res/values-de/strings.xml @@ -2859,6 +2859,8 @@ "Der Akkuverbrauch im Hintergrund ist normal" "Der Akkuverbrauch im Hintergrund des Tablets ist normal" "Der Akkuverbrauch im Hintergrund des Geräts ist normal" + "Akkutausch empfohlen" + "Die Akkukapazität und Ladeleistung sind reduziert. Ein Akkutausch wird empfohlen." "Akkustand niedrig" "Energiesparmodus aktivieren, um Akkulaufzeit zu erhöhen" "Akkulaufzeit optimieren" diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml index 0188db7cce2..38b1986eb6c 100644 --- a/res/values-el/strings.xml +++ b/res/values-el/strings.xml @@ -2858,6 +2858,8 @@ "Το τηλέφωνο παρουσιάζει τυπική χρήση μπαταρίας στο παρασκήνιο" "Το tablet παρουσιάζει τυπική χρήση μπαταρίας στο παρασκήνιο" "Η συσκευή παρουσιάζει τυπική χρήση μπαταρίας στο παρασκήνιο" + "Συνιστάται αντικατάσταση της μπαταρίας" + "Η χωρητικότητα μπαταρίας και η απόδοση φόρτισης έχουν μειωθεί και συνιστάται αντικατάσταση της μπαταρίας." "Χαμηλή ισχύς μπαταρίας" "Ενεργοποιήστε την Εξοικονόμηση μπαταρίας για να επεκτείνετε τη διάρκεια ζωής της μπαταρίας" "Βελτιώστε τη διάρκεια ζωής της μπαταρίας" diff --git a/res/values-en-rAU/strings.xml b/res/values-en-rAU/strings.xml index 13ea3ea3983..4d8f0f9540a 100644 --- a/res/values-en-rAU/strings.xml +++ b/res/values-en-rAU/strings.xml @@ -2858,6 +2858,8 @@ "Phone has typical background battery usage" "Tablet has typical background battery usage" "Device has typical background battery usage" + "Battery replacement recommended" + "Battery capacity and charging performance are reduced, and battery replacement is recommended." "Battery level low" "Turn on Battery Saver to extend battery life" "Improve battery life" diff --git a/res/values-en-rCA/strings.xml b/res/values-en-rCA/strings.xml index 145ca9de1bc..6a69f64dfa7 100644 --- a/res/values-en-rCA/strings.xml +++ b/res/values-en-rCA/strings.xml @@ -2858,6 +2858,8 @@ "Phone has typical background battery usage" "Tablet has typical background battery usage" "Device has typical background battery usage" + "Battery replacement recommended" + "Battery capacity and charging performance are reduced, and battery replacement is recommended." "Battery level low" "Turn on Battery Saver to extend battery life" "Improve battery life" diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml index 8c9b2ce95ba..6213354a198 100644 --- a/res/values-en-rGB/strings.xml +++ b/res/values-en-rGB/strings.xml @@ -2858,6 +2858,8 @@ "Phone has typical background battery usage" "Tablet has typical background battery usage" "Device has typical background battery usage" + "Battery replacement recommended" + "Battery capacity and charging performance are reduced, and battery replacement is recommended." "Battery level low" "Turn on Battery Saver to extend battery life" "Improve battery life" diff --git a/res/values-en-rIN/strings.xml b/res/values-en-rIN/strings.xml index 6f210ac9d1c..00eb6dc8649 100644 --- a/res/values-en-rIN/strings.xml +++ b/res/values-en-rIN/strings.xml @@ -2858,6 +2858,8 @@ "Phone has typical background battery usage" "Tablet has typical background battery usage" "Device has typical background battery usage" + "Battery replacement recommended" + "Battery capacity and charging performance are reduced, and battery replacement is recommended." "Battery level low" "Turn on Battery Saver to extend battery life" "Improve battery life" diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml index 0bd071c822c..ae21da3b267 100644 --- a/res/values-es-rUS/strings.xml +++ b/res/values-es-rUS/strings.xml @@ -2858,6 +2858,8 @@ "El consumo de batería en segundo plano del teléfono es normal" "El consumo de batería en segundo plano de la tablet es normal" "El consumo de batería en segundo plano del dispositivo es normal" + "Se recomienda reemplazar la batería" + "Se redujo la capacidad de la batería y el rendimiento de carga, y se recomienda reemplazarla." "Nivel de batería bajo" "Activa el Ahorro de batería para extender la duración de la batería" "Mejora la duración de la batería" diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml index 0328c56b22a..fed73633093 100644 --- a/res/values-es/strings.xml +++ b/res/values-es/strings.xml @@ -2858,6 +2858,8 @@ "El teléfono tiene un consumo de batería normal en segundo plano" "El tablet tiene un consumo de batería normal en segundo plano" "El dispositivo tiene un consumo de batería normal en segundo plano" + "Sustitución de la batería recomendada" + "La capacidad de la batería y el rendimiento de la carga se han reducido, por lo que se recomienda sustituir la batería." "Queda poca batería" "Activa Ahorro de batería para que la batería dure más" "Aumenta la duración de la batería" diff --git a/res/values-et/strings.xml b/res/values-et/strings.xml index f59ed9c6bab..3d68b8f02d9 100644 --- a/res/values-et/strings.xml +++ b/res/values-et/strings.xml @@ -2858,6 +2858,8 @@ "Telefon kasutab akut taustal tavapärases ulatuses" "Tahvelarvuti kasutab akut taustal tavapärases ulatuses" "Seade kasutab akut taustal tavapärases ulatuses" + "Soovitatav on akuvahetus" + "Aku mahutavus ja laadimisvõimsus on vähenenud ning soovitatav on aku välja vahetada." "Akutase on madal" "Lülitage aku tööea pikendamiseks sisse akusäästja" "Pikendage aku tööiga" diff --git a/res/values-eu/strings.xml b/res/values-eu/strings.xml index 2ecbc02a75b..0ad03cff6fa 100644 --- a/res/values-eu/strings.xml +++ b/res/values-eu/strings.xml @@ -2858,6 +2858,8 @@ "Telefonoak ohiko bateria kantitatea erabiltzen du atzeko planoan" "Tabletak ohiko bateria kantitatea erabiltzen du atzeko planoan" "Gailuak ohiko bateria kantitatea erabiltzen du atzeko planoan" + "Bateria aldatzea gomendatzen da" + "Bateriaren ahalmena eta kargatzeko abiadura murriztuta daude, eta bateria ordeztea gomendatzen da." "Bateria-maila baxua" "Aktibatu Bateria-aurreztailea bateriaren iraupena luzatzeko" "Hobetu bateriaren iraupena" diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml index c44896eea31..1bb22f5f79f 100644 --- a/res/values-fa/strings.xml +++ b/res/values-fa/strings.xml @@ -2858,6 +2858,8 @@ "میزان مصرف باتری تلفن در پس‌زمینه معمولی است" "میزان مصرف باتری رایانه لوحی در پس‌زمینه معمولی است" "میزان مصرف باتری دستگاه در پس‌زمینه معمولی است" + "تعویض باتری توصیه می‌شود" + "ظرفیت باتری و عملکرد شارژ کاهش یافته است، توصیه می‌شود باتری را تعویض کنید." "میزان شارژ باتری کم است" "برای افزایش عمر باتری، «بهینه‌سازی باتری» را روشن کنید" "بهبود عمر باتری" diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml index 4bf533cd6e8..22a76a56b55 100644 --- a/res/values-fi/strings.xml +++ b/res/values-fi/strings.xml @@ -2858,6 +2858,8 @@ "Puhelimen virran taustakulutus on tyypillistä." "Tabletin virran taustakulutus on tyypillistä." "Laitteen virran taustakulutus on tyypillistä." + "Akun vaihtamista suositellaan" + "Akun kapasiteetti ja latauskyky ovat heikentyneet, ja akun vaihtamista suositellaan." "Akun varaustaso alhainen" "Laita virransäästö päälle akunkeston parantamiseksi" "Paranna akunkestoa" diff --git a/res/values-fr-rCA/strings.xml b/res/values-fr-rCA/strings.xml index 272a152ac55..e910988a904 100644 --- a/res/values-fr-rCA/strings.xml +++ b/res/values-fr-rCA/strings.xml @@ -2858,6 +2858,8 @@ "Le téléphone utilise une quantité normale d\'énergie en arrière-plan" "La tablette utilise une quantité normale d\'énergie en arrière-plan" "L\'appareil utilise une quantité normale d\'énergie en arrière-plan" + "Le remplacement de la pile est recommandé" + "La capacité de la pile et les performances de recharge sont réduites; le remplacement de la pile est recommandé." "Pile faible" "Activez l\'économiseur de pile pour prolonger l\'autonomie de la pile" "Améliorer l\'autonomie de la pile" diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml index 2011446fce9..e7f67261bb9 100644 --- a/res/values-fr/strings.xml +++ b/res/values-fr/strings.xml @@ -2858,6 +2858,8 @@ "L\'utilisation en arrière-plan de la batterie par le téléphone est normale" "L\'utilisation en arrière-plan de la batterie par la tablette est normale" "L\'utilisation en arrière-plan de la batterie par l\'appareil est normale" + "Remplacement de la batterie recommandé" + "La capacité de la batterie et les performances de recharge sont réduites. Nous vous recommandons de remplacer la batterie." "Niveau de batterie faible" "Activer l\'économiseur de batterie pour prolonger l\'autonomie" "Améliorer l\'autonomie de la batterie" diff --git a/res/values-gl/strings.xml b/res/values-gl/strings.xml index e2439dfa0b5..d98b803e847 100644 --- a/res/values-gl/strings.xml +++ b/res/values-gl/strings.xml @@ -2858,6 +2858,8 @@ "O teléfono ten un consumo normal de batería en segundo plano" "A tableta utiliza habitualmente batería en segundo plano" "O dispositivo utiliza habitualmente batería en segundo plano" + "Recoméndase substituír a batería" + "Reducíronse a capacidade e o rendemento de carga da batería, polo que se recomenda substituíla." "Queda pouca batería" "Para que a batería dure máis, activa a función Aforro de batería" "Mellora a duración da batería" diff --git a/res/values-gu/strings.xml b/res/values-gu/strings.xml index 831059779d5..cd34dbb670f 100644 --- a/res/values-gu/strings.xml +++ b/res/values-gu/strings.xml @@ -2858,6 +2858,8 @@ "ફોન બૅકગ્રાઉન્ડમાં બૅટરીનો વપરાશ સામાન્ય રૂપે જ કરે છે" "ટૅબ્લેટ બૅકગ્રાઉન્ડમાં બૅટરીનો વપરાશ સામાન્ય રૂપે જ કરે છે" "ઉપકરણ બૅકગ્રાઉન્ડમાં બૅટરીનો વપરાશ સામાન્ય રૂપે જ કરે છે" + "બૅટરી બદલવાનો સુઝાવ આપવામાં આવે છે" + "બૅટરીની ક્ષમતા અને ચાર્જિંગ પર્ફોર્મન્સ ઘટી ગયું છે અને બૅટરી બદલવાનો સુઝાવ આપવામાં આવે છે." "બૅટરીનું લેવલ ઓછું છે" "બૅટરીની આવરદા વધારવા માટે બૅટરી સેવર ચાલુ કરો" "બૅટરીની આવરદા વધારો" diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml index fa005567b09..072dde11c8e 100644 --- a/res/values-hi/strings.xml +++ b/res/values-hi/strings.xml @@ -2858,6 +2858,8 @@ "फ़ोन पर बैकग्राउंड में सामान्य रूप से बैटरी इस्तेमाल हो रही है" "टैबलेट पर बैकग्राउंड में सामान्य रूप से बैटरी इस्तेमाल हो रही है" "डिवाइस पर बैकग्राउंड में सामान्य रूप से बैटरी इस्तेमाल हो रही है" + "बैटरी बदलने की ज़रूरत है" + "बैटरी की क्षमता और चार्जिंग की परफ़ॉर्मेंस कम हो गई है. इसलिए, बैटरी बदलने की ज़रूरत है." "बैटरी कम है" "बैटरी लाइफ़ बढ़ाने के लिए, बैटरी सेवर को चालू करें" "बैटरी लाइफ़ बढ़ाएं" diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml index ebec83c4eec..3e8164b24b7 100644 --- a/res/values-hr/strings.xml +++ b/res/values-hr/strings.xml @@ -2889,6 +2889,8 @@ "Telefon troši bateriju u pozadini uobičajenom brzinom" "Tablet troši bateriju u pozadini uobičajenom brzinom" "Uređaj troši bateriju u pozadini uobičajenom brzinom" + "Preporučuje se zamjena baterije" + "Smanjen je kapacitet baterije i učinkovitost punjenja, pa se preporučuje zamjena baterije." "Niska razina baterije" "Uključite štednju baterije radi produljenja trajanja baterije" "Produljenje trajanja baterije" diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml index 03c1af277fe..6c596749b0a 100644 --- a/res/values-hu/strings.xml +++ b/res/values-hu/strings.xml @@ -2858,6 +2858,8 @@ "Az akkumulátor háttérben történő használata átlagos ezen a telefonon" "Az akkumulátor háttérben történő használata átlagos ezen a táblagépen" "Az akkumulátor háttérben történő használata átlagos ezen az eszközön" + "Javasoljuk az akkumulátor cseréjét" + "Csökkent az akkumulátor kapacitása és töltési teljesítménye, ezért javasoljuk a cseréjét." "Alacsony töltöttség" "Az akkumulátor üzemidejének meghosszabbításához kapcsolja be az Akkumulátorkímélő módot" "Az akkumulátor élettartamának növelése" diff --git a/res/values-hy/strings.xml b/res/values-hy/strings.xml index ee5bb3effa2..ca274ad93b0 100644 --- a/res/values-hy/strings.xml +++ b/res/values-hy/strings.xml @@ -2858,6 +2858,8 @@ "Հեռախոսի մարտկոցը ֆոնային ռեժիմում օգտագործվում է սովորական ծավալով" "Պլանշետի մարտկոցը ֆոնային ռեժիմում օգտագործվում է սովորական ծավալով" "Սարքի մարտկոցը ֆոնային ռեժիմում օգտագործվում է սովորական ծավալով" + "Խորհուրդ է տրվում փոխարինել մարտկոցը" + "Մարտկոցի տարողունակությունը և լիցքավորման արդյունավետությունը նվազեցված են։ Խորհուրդ է տրվում փոխարինել մարտկոցը։" "Մարտկոցի ցածր լիցք" "Միացրեք Մարտկոցի տնտեսումը՝ դրա աշխատաժամանակը երկարացնելու համար" "Երկարացրեք մարտկոցի աշխատաժամանակը" diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml index 86c0ec1c5d2..7ed153db836 100644 --- a/res/values-in/strings.xml +++ b/res/values-in/strings.xml @@ -2858,6 +2858,8 @@ "Ponsel menggunakan baterai secara normal di latar belakang" "Tablet memiliki penggunaan baterai yang umum di latar belakang" "Perangkat memiliki penggunaan baterai yang umum di latar belakang" + "Disarankan mengganti baterai" + "Performa pengisian daya dan kapasitas baterai berkurang, dan disarankan untuk mengganti baterai." "Tingkat daya baterai rendah" "Aktifkan Penghemat Baterai untuk memperpanjang masa pakai baterai" "Tingkatkan masa pakai baterai" diff --git a/res/values-is/strings.xml b/res/values-is/strings.xml index 85102bca68c..f3f50a06e94 100644 --- a/res/values-is/strings.xml +++ b/res/values-is/strings.xml @@ -2858,6 +2858,8 @@ "Síminn notar dæmigerða rafhlöðuorku í bakgrunni" "Spjaldtölvan notar dæmigerða rafhlöðuorku í bakgrunni" "Tækið notar dæmigerða rafhlöðuorku í bakgrunni" + "Mælt er með því að skipta um rafhlöðu." + "Rafhlöðurýmd og hleðsluafköst eru takmörkuð og mælt er með því að skipta um rafhlöðu." "Lítil hleðsla á rafhlöðu" "Kveiktu á rafhlöðusparnaði til að auka endingu rafhlöðunnar" "Bæta rafhlöðuendingu" diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml index 4f23005a220..ccb1417727e 100644 --- a/res/values-it/strings.xml +++ b/res/values-it/strings.xml @@ -2858,6 +2858,8 @@ "Il telefono ha un consumo standard della batteria in background" "Il tablet ha un consumo standard della batteria in background" "Il dispositivo ha un consumo standard della batteria in background" + "È consigliata la sostituzione della batteria" + "La capacità della batteria e le prestazioni di ricarica sono ridotte ed è consigliata la sostituzione della batteria." "Livello della batteria basso" "Attiva il Risparmio energetico per prolungare la durata della batteria" "Prolunga la durata della batteria" diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml index 38dde3c6f32..a38ca5ed329 100644 --- a/res/values-iw/strings.xml +++ b/res/values-iw/strings.xml @@ -2889,6 +2889,8 @@ "דפוס השימוש בסוללה של אפליקציות הפועלות ברקע בטלפון זה הוא אופייני" "דפוס השימוש בסוללה בטאבלט זה של אפליקציות הפועלות ברקע הוא אופייני" "דפוס השימוש בסוללה במכשיר זה של אפליקציות הפועלות ברקע הוא אופייני" + "מומלץ להחליף את הסוללה" + "מומלץ להחליף את הסוללה כי הרמה של קיבולת הסוללה וביצועי הטעינה ירדה." "הסוללה חלשה" "יש להפעיל את האפשרות \'חיסכון בסוללה\' כדי להאריך את חיי הסוללה" "שיפור חיי הסוללה" diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml index 7b9b147bcc5..6b379919b42 100644 --- a/res/values-ja/strings.xml +++ b/res/values-ja/strings.xml @@ -2858,6 +2858,8 @@ "スマートフォンのバックグラウンドでのバッテリー使用量は正常です" "タブレットのバックグラウンドでのバッテリー使用量は正常です" "デバイスのバックグラウンドでのバッテリー使用量は正常です" + "バッテリーの交換をおすすめします" + "バッテリー容量と充電性能が低下しているため、バッテリーの交換をおすすめします。" "バッテリー残量が少なくなっています" "バッテリー セーバーを ON にしてバッテリーを長持ちさせます" "バッテリー寿命の改善" diff --git a/res/values-ka/strings.xml b/res/values-ka/strings.xml index 24304161dfa..a4659545a8a 100644 --- a/res/values-ka/strings.xml +++ b/res/values-ka/strings.xml @@ -2858,6 +2858,8 @@ "ტელეფონი ბატარეის ტიპური ფონური მოხმარებით ხასიათდება" "ტაბლეტი ბატარეის ტიპური ფონური მოხმარებით ხასიათდება" "მოწყობილობა ბატარეის ტიპური ფონური მოხმარებით ხასიათდება" + "რეკომენდებულია ბატარეის გამოცვლა" + "ბატარეის ტევადობა და დატენის ეფექტურობა შემცირებულია და რეკომენდებულია ბატარეის გამოცვლა." "ბატარეა იცლება" "ჩართეთ ბატარეის დამზოგი ბატარეის მუშაობის გასახანგრძლივებლად" "ბატარეის მუშაობის ხანგრძლივობის გაუმჯობესება" diff --git a/res/values-kk/strings.xml b/res/values-kk/strings.xml index 759edde61ff..9dded3bb71c 100644 --- a/res/values-kk/strings.xml +++ b/res/values-kk/strings.xml @@ -2858,6 +2858,8 @@ "Телефон фондық режимде батарея зарядын қалыпты күйде пайдаланады." "Планшет фондық режимде батарея зарядын қалыпты күйде пайдаланады." "Құрылғы фондық режимде батарея зарядын қалыпты күйде пайдаланады." + "Батареяны ауыстырған дұрыс" + "Батарея сыйымдылығы мен зарядтау өнімділігі азайды, сондай-ақ батареяны ауыстырған жөн." "Батарея деңгейі төмен" "Батарея жұмысын ұзарту үшін батареяны үнемдеу режимін қосыңыз." "Батарея жұмысын ұзартыңыз" diff --git a/res/values-km/strings.xml b/res/values-km/strings.xml index ca0977b21bb..314d89af8bd 100644 --- a/res/values-km/strings.xml +++ b/res/values-km/strings.xml @@ -2858,6 +2858,8 @@ "ទូរសព្ទ​ប្រើប្រាស់ថ្ម​នៅផ្ទៃខាងក្រោយ​ធម្មតា" "ថេប្លេតប្រើប្រាស់ថ្ម​នៅផ្ទៃខាងក្រោយ​ធម្មតា" "ឧបករណ៍​ប្រើប្រាស់ថ្ម​នៅផ្ទៃខាងក្រោយ​ធម្មតា" + "ការប្ដូរថ្មត្រូវបានណែនាំ" + "កាប៉ាស៊ីតេបន្ទុករបស់ថ្ម និងប្រសិទ្ធភាពនៃការសាកថ្មថយចុះ ហើយការប្ដូរថ្មត្រូវបានណែនាំ។" "កម្រិតថ្មជិតអស់ហើយ" "បើកមុខងារ​សន្សំ​ថ្ម ដើម្បីបង្កើនកម្រិតថាមពលថ្ម" "បង្កើនកម្រិតថាមពលថ្ម" diff --git a/res/values-kn/strings.xml b/res/values-kn/strings.xml index 897376e7b2e..5114de3246c 100644 --- a/res/values-kn/strings.xml +++ b/res/values-kn/strings.xml @@ -2858,6 +2858,8 @@ "ಫೋನ್‍ನ ಹಿನ್ನೆಲೆಯಲ್ಲಿ ಬ್ಯಾಟರಿಯು ಸಾಮಾನ್ಯವಾಗಿ ಬಳಕೆಯಾಗುತ್ತಿದೆ" "ಟ್ಯಾಬ್ಲೆಟ್ ವಿಶಿಷ್ಟ ಹಿನ್ನೆಲೆ ಬ್ಯಾಟರಿ ಬಳಕೆಯನ್ನು ಹೊಂದಿದೆ" "ಸಾಧನವು ವಿಶಿಷ್ಟ ಹಿನ್ನೆಲೆ ಬ್ಯಾಟರಿ ಬಳಕೆಯನ್ನು ಹೊಂದಿದೆ" + "ಬ್ಯಾಟರಿ ಬದಲಿಸಲು ಶಿಫಾರಸು ಮಾಡಲಾಗಿದೆ" + "ಬ್ಯಾಟರಿ ಸಾಮರ್ಥ್ಯ ಮತ್ತು ಚಾರ್ಜಿಂಗ್ ಕಾರ್ಯಕ್ಷಮತೆಯು ಕಡಿಮೆಯಾಗಿದೆ ಹಾಗೂ ಬ್ಯಾಟರಿಯನ್ನು ಬದಲಾಯಿಸಲು ಶಿಫಾರಸು ಮಾಡಲಾಗಿದೆ." "ಬ್ಯಾಟರಿ ಮಟ್ಟ ಕಡಿಮೆ ಇದೆ" "ಬ್ಯಾಟರಿ ಬಾಳಿಕೆಯನ್ನು ವಿಸ್ತರಿಸಲು ಬ್ಯಾಟರಿ ಸೇವರ್ ಅನ್ನು ಆನ್ ಮಾಡಿ" "ಬ್ಯಾಟರಿ ಬಾಳಿಕೆಯನ್ನು ಸುಧಾರಿಸಿ" diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml index fa55a37d7fb..0616a27a2db 100644 --- a/res/values-ko/strings.xml +++ b/res/values-ko/strings.xml @@ -2858,6 +2858,8 @@ "배터리 사용량이 평소와 같습니다." "태블릿의 배터리 사용량이 평소와 같습니다." "기기의 배터리 사용량이 평소와 같습니다." + "배터리 교체 권장" + "배터리 용량과 충전 성능이 저하되어 배터리 교체가 권장됩니다." "배터리 잔량 부족" "절전 모드를 사용 설정하여 배터리 수명을 늘리세요" "배터리 수명 개선" diff --git a/res/values-ky/strings.xml b/res/values-ky/strings.xml index b7494c2f0ec..a180434f160 100644 --- a/res/values-ky/strings.xml +++ b/res/values-ky/strings.xml @@ -2858,6 +2858,8 @@ "Телефон батареяны адаттагыдай керектөөдө" "Планшет фондо батареяны адаттагыдай колдонууда" "Түзмөк фондо батареяны адаттагыдай колдонууда" + "Түзмөгүңүздүн батареясын алмаштырыңыз" + "Батареянын сыйымдуулугу жана кубаттоо майнаптуулугу төмөндөдү. Батареяны алмаштыруу сунушталат." "Батареянын деңгээли төмөн" "Батареяны көбүрөөк убакытка жеткирүү үчүн Батареяны үнөмдөгүч режимин күйгүзүңүз" "Батареяны көбүрөөк убакытка жеткирүү" diff --git a/res/values-lo/strings.xml b/res/values-lo/strings.xml index 081c67a590c..37f3d011470 100644 --- a/res/values-lo/strings.xml +++ b/res/values-lo/strings.xml @@ -2858,6 +2858,8 @@ "ໂທລະສັບມີການໃຊ້ແບັດເຕີຣີໃນພື້ນຫຼັງໃນລະດັບປົກກະຕິ" "ແທັບເລັດມີການໃຊ້ແບັດເຕີຣີໃນພື້ນຫຼັງໃນລະດັບປົກກະຕິ" "ອຸປະກອນມີການໃຊ້ແບັດເຕີຣີໃນພື້ນຫຼັງໃນລະດັບປົກກະຕິ" + "ແນະນຳໃຫ້ປ່ຽນແບັດເຕີຣີ" + "ຄວາມຈຸແບັດເຕີຣີ ແລະ ປະສິດທິພາບການສາກຫຼຸດລົງ ແລະ ຂໍແນະນຳໃຫ້ປ່ຽນແບັດເຕີຣີ." "ລະດັບແບັດເຕີຣີເຫຼືອໜ້ອຍ" "ທ່ານສາມາດເປີດໃຊ້ຕົວປະຢັດແບັດເຕີຣີເພື່ອຍືດອາຍຸແບັດເຕີຣີໄດ້" "ປັບປຸງອາຍຸແບັດເຕີຣີ" diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml index 090c81b89a8..669ed7bdc6e 100644 --- a/res/values-lt/strings.xml +++ b/res/values-lt/strings.xml @@ -2920,6 +2920,8 @@ "Telefono fone veikiančios programos naudoja įprastą akumuliatoriaus energijos kiekį" "Planšetinio kompiuterio fone veikiančios programos naudoja įprastą akumuliatoriaus energijos kiekį" "Įrenginio fone veikiančios programos naudoja įprastą akumuliatoriaus energijos kiekį" + "Rekomenduojama pakeisti akumuliatorių" + "Sumažinta akumuliatoriaus talpa ir įkrovimo našumas, todėl rekomenduojama pakeisti akumuliatorių." "Žemas akumuliatoriaus lygis" "Įjunkite Akumuliatoriaus tausojimo priemonę, kad akumuliatorius veiktų ilgiau" "Akumuliatoriaus veikimo laiko pailginimas" diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml index 72e8a0e82ba..8df1dba2aaf 100644 --- a/res/values-lv/strings.xml +++ b/res/values-lv/strings.xml @@ -2889,6 +2889,8 @@ "Tālrunis patērē normālu akumulatora enerģijas apjomu fonā" "Planšetdators patērē normālu akumulatora enerģijas apjomu fonā" "Ierīce patērē normālu akumulatora enerģijas apjomu fonā" + "Ieteicams nomainīt akumulatoru" + "Akumulatora ietilpība un uzlādes veiktspēja ir samazinājusies, un ir ieteicams nomainīt akumulatoru." "Zems akumulatora uzlādes līmenis" "Lai paildzinātu akumulatora darbību, ieslēdziet akumulatora enerģijas taupīšanas režīmu" "Akumulatora darbības paildzināšana" diff --git a/res/values-mk/strings.xml b/res/values-mk/strings.xml index 98324eac1b1..c7a2a3c42c6 100644 --- a/res/values-mk/strings.xml +++ b/res/values-mk/strings.xml @@ -2858,6 +2858,8 @@ "Телефонот троши вообичаено количество батерија во заднина" "Таблетот троши вообичаено количество батерија во заднина" "Уредот троши вообичаено количество батерија во заднина" + "Се препорачува замена на батеријата" + "Капацитетот на батеријата и изведбата на полнењето се намалени, па се препорачува замена на батеријата." "Нивото на батеријата е слабо" "Вклучете „Штедач на батерија“ за да го продолжи траењето на батеријата" "Подобрете го траењето на батеријата" diff --git a/res/values-ml/strings.xml b/res/values-ml/strings.xml index 7562cf8e89d..49f201160b8 100644 --- a/res/values-ml/strings.xml +++ b/res/values-ml/strings.xml @@ -2858,6 +2858,8 @@ "ഫോണിന് സാധാരണ പശ്ചാത്തല ബാറ്ററി ഉപയോഗമുണ്ട്" "ടാബ്‌ലെറ്റിന് സാധാരണ പശ്ചാത്തല ബാറ്ററി ഉപയോഗമുണ്ട്" "ഉപകരണത്തിന് സാധാരണ പശ്ചാത്തല ബാറ്ററി ഉപയോഗമുണ്ട്" + "ബാറ്ററി മാറ്റാൻ നിർദ്ദേശിക്കുന്നു" + "ബാറ്ററി കപ്പാസിറ്റിയും ചാർജിംഗ് പെർഫോമൻസും കുറഞ്ഞു, ബാറ്ററി മാറ്റാൻ നിർദ്ദേശിക്കുന്നു." "ബാറ്ററി നില കുറവാണ്" "ബാറ്ററി ലെെഫ് വർദ്ധിപ്പിക്കാൻ ബാറ്ററി ലാഭിക്കൽ ഓണാക്കുക" "ബാറ്ററി ലെെഫ് മെച്ചപ്പെടുത്തുക" diff --git a/res/values-mn/strings.xml b/res/values-mn/strings.xml index 980b95f55bd..a9ba4602a48 100644 --- a/res/values-mn/strings.xml +++ b/res/values-mn/strings.xml @@ -2858,6 +2858,8 @@ "Утас батарейг цаана энгийн байдлаар ашигладаг" "Таблет батарейг цаана энгийн байдлаар ашигладаг" "Төхөөрөмж батарейг цаана энгийн байдлаар ашигладаг" + "Батарейг солихыг зөвлөж байна" + "Батарейн багтаамж, цэнэглэх гүйцэтгэл буурсан ба батарейг солихыг зөвлөж байна." "Батарейн түвшин бага байна" "Батарейн ажиллах хугацааг уртасгахын тулд Батарей хэмнэгчийг асаана уу" "Батарейн ажиллах хугацааг сайжруулах" diff --git a/res/values-mr/strings.xml b/res/values-mr/strings.xml index 27fdc141ee3..364bd1c973a 100644 --- a/res/values-mr/strings.xml +++ b/res/values-mr/strings.xml @@ -2858,6 +2858,8 @@ "फोनमध्ये विशिष्ट बॅकग्राउंड बॅटरी वापर आहे" "टॅबलेटमध्ये विशिष्ट बॅकग्राउंड बॅटरी वापर आहे" "डिव्हाइसमध्ये विशिष्ट बॅकग्राउंड बॅटरी वापर आहे" + "बॅटरी बदलण्याची शिफारस केली आहे" + "बॅटरी क्षमता आणि चार्जिंग परफॉर्मन्स कमी झाला असून, बॅटरी बदलण्याची शिफारस केली आहे." "बॅटरीची पातळी कमी आहे" "बॅटरी लाइफ वाढवण्यासाठी बॅटरी सेव्हर सुरू करा" "बॅटरी लाइफ सुधारा" diff --git a/res/values-ms/strings.xml b/res/values-ms/strings.xml index 22a70c85886..08158d9e60a 100644 --- a/res/values-ms/strings.xml +++ b/res/values-ms/strings.xml @@ -2858,6 +2858,8 @@ "Telefon menunjukkan penggunaan bateri latar belakang seperti biasa" "Tablet menunjukkan penggunaan biasa bateri latar belakang" "Peranti menunjukkan penggunaan bateri latar belakang seperti biasa" + "Penggantian bateri disyorkan" + "Kapasiti bateri dan prestasi pengecasan dikurangkan. Penggantian bateri disyorkan." "Aras bateri rendah" "Hidupkan Penjimat Bateri bagi melanjutkan hayat bateri" "Tingkatkan hayat bateri" diff --git a/res/values-my/strings.xml b/res/values-my/strings.xml index 0e6291b91bc..56b1033e176 100644 --- a/res/values-my/strings.xml +++ b/res/values-my/strings.xml @@ -2858,6 +2858,8 @@ "ဖုန်းနောက်ခံတွင် ဘက်ထရီ အသုံးပြုမှု ပုံမှန်ဖြစ်သည်" "တက်ဘလက်နောက်ခံတွင် ဘက်ထရီ အသုံးပြုမှု ပုံမှန်ဖြစ်သည်" "စက်နောက်ခံတွင် ဘက်ထရီ အသုံးပြုမှု ပုံမှန်ဖြစ်သည်" + "ဘက်ထရီလဲရန် အကြံပြုထားသည်" + "ဘက်ထရီသိုလှောင်နိုင်မှု ပမာဏနှင့် အားသွင်းမှုစွမ်းဆောင်ရည်တို့ လျော့ကျသွားပြီဖြစ်၍ ဘက်ထရီလဲရန် အကြံပြုပါသည်။" "ဘက်ထရီ အားနည်းနေသည်" "ဘက်ထရီသက်တမ်းရှည်စေရန် ‘ဘက်ထရီအားထိန်း’ ကို ဖွင့်ပါ" "ဘက်ထရီသက်တမ်း ပိုကောင်းအောင်လုပ်ပါ" diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml index 8465544ddca..d36db277f53 100644 --- a/res/values-nb/strings.xml +++ b/res/values-nb/strings.xml @@ -2858,6 +2858,8 @@ "Telefonen har vanlig batteribruk i bakgrunnen" "Nettbrettet har vanlig batteribruk i bakgrunnen" "Enheten har vanlig batteribruk i bakgrunnen" + "Du bør bytte batteriet" + "Batterikapasiteten og ladeeffekten er redusert, og det anbefales at du bytter batteriet." "Batterinivået er lavt" "Slå på batterisparing for å forlenge batterilevetiden" "Forbedre batterilevetiden" diff --git a/res/values-ne/strings.xml b/res/values-ne/strings.xml index 80bdcdb90c3..79129ca1da1 100644 --- a/res/values-ne/strings.xml +++ b/res/values-ne/strings.xml @@ -2858,6 +2858,8 @@ "फोनले पृष्ठभूमिमा सदाको जति नै ब्याट्री खपत गरेको छ" "ट्याब्लेटले पृष्ठभूमिमा सदाको जति नै ब्याट्री खपत गरेको छ" "यन्त्रले पृष्ठभूमिमा सदाको जति नै ब्याट्री खपत गरेको छ" + "ब्याट्री बदल्न सिफारिस गरिएको छ" + "ब्याट्रीको क्षमता र चार्जिङ पर्फर्मेन्स घटेको छ र ब्याट्री बदल्न सिफारिस गरिएको छ।" "ब्याट्री कम छ" "ब्याट्रीको आयु बढाउन ब्याट्री सेभर अन गर्नुहोस्" "ब्याट्रीको आयु सुधार्नुहोस्" diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml index 07d9dd9c8b8..93cb0622d1e 100644 --- a/res/values-nl/strings.xml +++ b/res/values-nl/strings.xml @@ -2858,6 +2858,8 @@ "Telefoon heeft normaal batterijverbruik op de achtergrond" "Tablet heeft normaal batterijverbruik op de achtergrond" "Apparaat heeft normaal batterijverbruik op de achtergrond" + "Batterijvervanging aanbevolen" + "De batterijcapaciteit en oplaadprestaties zijn verminderd en batterijvervanging wordt aanbevolen." "Laag batterijniveau" "Zet Batterijbesparing aan om de batterijduur te verlengen" "De batterijduur verbeteren" diff --git a/res/values-or/strings.xml b/res/values-or/strings.xml index e4e0fbf403d..f68d401e3b1 100644 --- a/res/values-or/strings.xml +++ b/res/values-or/strings.xml @@ -2858,6 +2858,8 @@ "ଫୋନ୍‍ର ସାଧାରଣ ବ୍ୟାକ୍‌ଗ୍ରାଉଣ୍ଡ ବ୍ୟାଟେରୀ ବ୍ୟବହାର ରହିଛି" "ଟାବଲେଟ୍‍ର ବିଶେଷ ବ୍ୟାକ୍‌ଗ୍ରାଉଣ୍ଡ ବ୍ୟାଟେରୀ ବ୍ୟବହାର ରହିଛି" "ଡିଭାଇସ୍‍ର ବିଶେଷ ବ୍ୟାକ୍‌ଗ୍ରାଉଣ୍ଡ ବ୍ୟାଟେରୀ ବ୍ୟବହାର ରହିଛି" + "ବେଟେରୀ ରିପ୍ଲେସମେଣ୍ଟ ପାଇଁ ସୁପାରିଶ କରାଯାଇଛି" + "ବେଟେରୀ କ୍ଷମତା ଏବଂ ଚାର୍ଜିଂ ପରଫରମାନ୍ସ ହ୍ରାସ ପାଇଥାଏ ଏବଂ ବେଟେରୀ ରିପ୍ଲେସମେଣ୍ଟ ପାଇଁ ସୁପାରିଶ କରାଯାଏ।" "ବ୍ୟାଟେରୀ ସ୍ତର କମ୍ ଅଛି" "ବ୍ୟାଟେରୀ ଲାଇଫକୁ ବଢ଼ାଇବା ପାଇଁ ବ୍ୟାଟେରୀ ସେଭରକୁ ଚାଲୁ କରନ୍ତୁ" "ବ୍ୟାଟେରୀ ଲାଇଫକୁ ଉନ୍ନତ କରନ୍ତୁ" diff --git a/res/values-pa/strings.xml b/res/values-pa/strings.xml index 5fe66cd459d..e3a49dde97f 100644 --- a/res/values-pa/strings.xml +++ b/res/values-pa/strings.xml @@ -2858,6 +2858,8 @@ "ਫ਼ੋਨ ਆਮ ਵਾਂਗ ਬੈਕਗ੍ਰਾਊਂਡ ਵਿੱਚ ਬੈਟਰੀ ਵਰਤ ਰਿਹਾ ਹੈ" "ਟੈਬਲੈੱਟ ਆਮ ਵਾਂਗ ਬੈਕਗ੍ਰਾਊਂਡ ਵਿੱਚ ਬੈਟਰੀ ਵਰਤ ਰਿਹਾ ਹੈ" "ਡੀਵਾਈਸ ਆਮ ਵਾਂਗ ਬੈਕਗ੍ਰਾਊਂਡ ਵਿੱਚ ਬੈਟਰੀ ਵਰਤ ਰਿਹਾ ਹੈ" + "ਬੈਟਰੀ ਬਦਲਣ ਦੀ ਸਿਫ਼ਾਰਸ਼ ਕੀਤੀ ਜਾਂਦੀ ਹੈ" + "ਬੈਟਰੀ ਸਮਰੱਥਾ ਅਤੇ ਚਾਰਜਿੰਗ ਕਾਰਗੁਜ਼ਾਰੀ ਘੱਟ ਗਈਆਂ ਹਨ ਅਤੇ ਬੈਟਰੀ ਬਦਲਣ ਦੀ ਸਿਫ਼ਾਰਸ਼ ਕੀਤੀ ਜਾਂਦੀ ਹੈ।" "ਬੈਟਰੀ ਦਾ ਪੱਧਰ ਘੱਟ ਹੈ" "ਬੈਟਰੀ ਲਾਈਫ਼ ਵਧਾਉਣ ਲਈ ਬੈਟਰੀ ਸੇਵਰ ਚਾਲੂ ਕਰੋ" "ਬੈਟਰੀ ਲਾਈਫ਼ ਨੂੰ ਬਿਹਤਰ ਬਣਾਓ" diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml index a66267288f5..9ef6f3f571c 100644 --- a/res/values-pl/strings.xml +++ b/res/values-pl/strings.xml @@ -2920,6 +2920,8 @@ "Telefon zużywa w tle typową ilość energii" "Tablet zużywa typową ilość energii w tle" "Urządzenie zużywa typową ilość energii w tle" + "Zalecana wymiana baterii" + "Bateria ma ograniczoną pojemność i wydajność ładowania. Zalecamy jej wymianę." "Niski poziom naładowania baterii" "Włącz Oszczędzanie baterii, aby wydłużyć czas pracy na baterii" "Wydłuż czas pracy na baterii" diff --git a/res/values-pt-rBR/strings.xml b/res/values-pt-rBR/strings.xml index a99fdd2ec6b..bafee96f3ba 100644 --- a/res/values-pt-rBR/strings.xml +++ b/res/values-pt-rBR/strings.xml @@ -2858,6 +2858,8 @@ "O consumo de bateria em segundo plano do smartphone está normal." "O tablet tem um consumo normal de bateria em segundo plano" "O dispositivo tem um consumo normal de bateria em segundo plano" + "É recomendável trocar a bateria" + "A capacidade e o desempenho de carregamento estão reduzidos. Recomendamos a troca da bateria." "Nível da bateria baixo" "Ativar a Economia de bateria para prolongar a duração da carga" "Melhorar a duração da bateria" diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml index 21d00d8f082..32697f63974 100644 --- a/res/values-pt-rPT/strings.xml +++ b/res/values-pt-rPT/strings.xml @@ -2858,6 +2858,8 @@ "O telemóvel tem uma utilização normal da bateria em segundo plano" "O tablet tem uma utilização normal da bateria em segundo plano." "O dispositivo tem uma utilização normal da bateria em segundo plano." + "Substituição da bateria recomendada" + "A capacidade da bateria e o desempenho de carregamento estão reduzidos, e é recomendada a substituição da bateria." "Nível da bateria baixo" "Ative a Poupança de bateria para prolongar a autonomia da bateria" "Melhore a autonomia da bateria" diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml index a99fdd2ec6b..bafee96f3ba 100644 --- a/res/values-pt/strings.xml +++ b/res/values-pt/strings.xml @@ -2858,6 +2858,8 @@ "O consumo de bateria em segundo plano do smartphone está normal." "O tablet tem um consumo normal de bateria em segundo plano" "O dispositivo tem um consumo normal de bateria em segundo plano" + "É recomendável trocar a bateria" + "A capacidade e o desempenho de carregamento estão reduzidos. Recomendamos a troca da bateria." "Nível da bateria baixo" "Ativar a Economia de bateria para prolongar a duração da carga" "Melhorar a duração da bateria" diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml index 83e854d6b02..5c798850384 100644 --- a/res/values-ro/strings.xml +++ b/res/values-ro/strings.xml @@ -2889,6 +2889,8 @@ "Telefonul are o utilizare normală a bateriei în fundal" "Tableta determină o utilizare normală a bateriei în fundal" "Dispozitivul determină o utilizare normală a bateriei în fundal" + "Se recomandă înlocuirea bateriei" + "Capacitatea bateriei și performanța de încărcare sunt reduse și se recomandă înlocuirea bateriei." "Nivelul bateriei este scăzut" "Activează Economisirea bateriei pentru a mări autonomia bateriei" "Îmbunătățește autonomia bateriei" diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml index 13af85660af..cb0894d454b 100644 --- a/res/values-ru/strings.xml +++ b/res/values-ru/strings.xml @@ -2920,6 +2920,8 @@ "Телефон расходует заряд батареи как обычно" "Планшет расходует заряд батареи как обычно" "Устройство расходует заряд батареи как обычно" + "Рекомендуем заменить батарею" + "Емкость батареи и эффективность зарядки снижены. Советуем заменить батарею." "Низкий уровень заряда батареи" "Включите режим энергосбережения, чтобы увеличить время работы от батареи." "Продлите время работы от батареи" diff --git a/res/values-si/strings.xml b/res/values-si/strings.xml index 73f8d23ebae..8d449108e68 100644 --- a/res/values-si/strings.xml +++ b/res/values-si/strings.xml @@ -2858,6 +2858,8 @@ "දුරකථනයට දර්ශීය පසුබිම් බැටරි භාවිතයක් ඇත" "ටැබ්ලට් උපාංගයට දර්ශීය පසුබිම් බැටරි භාවිතයක් ඇත" "උපාංගයට දර්ශීය පසුබිම් බැටරි භාවිතයක් ඇත" + "බැටරි ප්‍රතිස්ථාපනය නිර්දේශිතයි" + "බැටරි ධාරිතාව සහ ආරෝපණ කාර්ය සාධනය අඩු වන අතර, බැටරිය ප්‍රතිස්ථාපනය කිරීම නිර්දේශ කරනු ලැබේ." "බැටරි මට්ටම අඩුය" "බැටරි ආයු කාලය දීර්ඝ කිරීමට බැටරි සුරැකුම ක්‍රියාත්මක කරන්න" "බැටරි ආයු කාලය වැඩි දියුණු කරන්න" diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml index fc750c0979c..c411a0c36c9 100644 --- a/res/values-sk/strings.xml +++ b/res/values-sk/strings.xml @@ -2920,6 +2920,8 @@ "Telefón má normálnu spotrebu batérie na pozadí" "Tablet má normálnu spotrebu batérie na pozadí" "Zariadenie má normálnu spotrebu batérie na pozadí" + "Odporúča sa výmena batérie" + "Kapacita batérie a výkon nabíjania sú obmedzené a odporúča sa výmena batérie." "Úroveň batérie je nízka" "Ak chcete predĺžiť výdrž batérie, zapnite šetrič batérie" "Zlepšite výdrž batérie" diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml index e1eaedce10f..439fd0ef19f 100644 --- a/res/values-sl/strings.xml +++ b/res/values-sl/strings.xml @@ -2920,6 +2920,8 @@ "Telefon ima običajno porabo baterije v ozadju" "Tablični računalnik ima običajno porabo energije baterije v ozadju" "Naprava ima običajno porabo energije baterije v ozadju" + "Priporočena je zamenjava baterije" + "Zmogljivost baterije in zmogljivost polnjenja sta zmanjšani, zato je priporočena zamenjava baterije." "Nizka raven napolnjenosti baterije" "Vklopite varčevanje z energijo baterije, da podaljšate čas delovanja baterije." "Podaljšanje časa delovanja baterije" diff --git a/res/values-sq/strings.xml b/res/values-sq/strings.xml index 98b4dead4b6..7d9640989f3 100644 --- a/res/values-sq/strings.xml +++ b/res/values-sq/strings.xml @@ -2858,6 +2858,8 @@ "Telefoni ka një përdorim normal të baterisë në sfond" "Tableti ka një përdorim normal të baterisë në sfond" "Pajisja ka një përdorim normal të baterisë në sfond" + "Rekomandohet zëvendësimi i baterisë" + "Kapaciteti i baterisë dhe performanca e karikimit janë reduktuar dhe rekomandohet zëvendësimi i baterisë." "Niveli i baterisë është i ulët" "Aktivizo \"Kursyesin e baterisë\" për të rritur kohëzgjatjen e baterisë" "Përmirëso kohëzgjatjen e baterisë" diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml index 6f744686481..5d213194ba1 100644 --- a/res/values-sr/strings.xml +++ b/res/values-sr/strings.xml @@ -2889,6 +2889,8 @@ "Телефон троши типичну количину батерије у позадини" "Таблет троши типичну количину батерије у позадини" "Уређај троши типичну количину батерије у позадини" + "Препоручујемо замену батерије" + "Капацитет батерије и учинак пуњења су смањени и препоручујемо замену батерије." "Низак ниво напуњености батерије" "Укључите уштеду батерије да бисте продужили трајање батерије" "Продужите трајање батерије" diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml index 139f7175734..da3eb604dee 100644 --- a/res/values-sv/strings.xml +++ b/res/values-sv/strings.xml @@ -2858,6 +2858,8 @@ "Batteriförbrukningen i bakgrunden är normal på telefonen" "Batteriförbrukningen i bakgrunden är normal på surfplattan" "Batteriförbrukningen i bakgrunden är normal på enheten" + "Batteribyte rekommenderas" + "Batterikapaciteten och laddningsprestandan har minskat och ett batteribyte rekommenderas." "Låg batterinivå" "Förläng batteritiden genom att aktivera batterisparläget" "Förbättra batteritiden" diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml index 028605e86e8..b375dfe4185 100644 --- a/res/values-sw/strings.xml +++ b/res/values-sw/strings.xml @@ -2858,6 +2858,8 @@ "Simu inatumia kiwango cha kawaida cha betri chinichini" "Kompyuta kibao inatumia kiwango cha kawaida cha betri chinichini" "Kifaa kinatumia kiwango cha kawaida cha betri chinichini" + "Tunapendekeza ubadilishe betri" + "Uwezo wa betri na utendaji wa kuchaji umepungua. Tunapendekeza ubadilishe betri." "Chaji ya betri imepungua" "Washa Kiokoa Betri ili uongeze muda wa matumizi ya betri" "Boresha muda wa matumizi ya betri" diff --git a/res/values-ta/strings.xml b/res/values-ta/strings.xml index 68da6dc5776..5e1876921a4 100644 --- a/res/values-ta/strings.xml +++ b/res/values-ta/strings.xml @@ -2858,6 +2858,8 @@ "மொபைலில் பின்னணி பேட்டரி உபயோகம் வழக்கமான முறையில் உள்ளது" "டேப்லெட்டில் பின்னணி பேட்டரி உபயோகம் வழக்கமான முறையில் உள்ளது" "சாதனத்தில் பின்னணி பேட்டரி உபயோகம் வழக்கமான முறையில் உள்ளது" + "பேட்டரியை மாற்றும்படி பரிந்துரைக்கப்படுகிறது" + "பேட்டரி திறனும் சார்ஜிங் செயல்திறனும் குறைந்துள்ளன. பேட்டரியை மாற்றும்படி பரிந்துரைக்கப்படுகிறது." "குறைவான பேட்டரி அளவு" "பேட்டரி ஆயுளை நீட்டிக்க பேட்டரி சேமிப்பானை இயக்குக" "பேட்டரி ஆயுளை மேம்படுத்துதல்" diff --git a/res/values-te/strings.xml b/res/values-te/strings.xml index 8fbd6cab1d6..65b34b2b137 100644 --- a/res/values-te/strings.xml +++ b/res/values-te/strings.xml @@ -2858,6 +2858,8 @@ "ఫోన్‌లో బ్యాక్‌గ్రౌండ్ బ్యాట‌రీ వినియోగం సాధార‌ణంగా ఉంది." "టాబ్లెట్‌లో సాధారణ నేపథ్య బ్యాటరీ వినియోగం ఉంది" "పరికరంలో సాధారణ నేపథ్య బ్యాటరీ వినియోగం ఉంది" + "బ్యాటరీని రీప్లేస్ చేయమని సిఫార్సు చేయబడింది" + "బ్యాటరీ సామర్థ్యం, ఛార్జింగ్ పనితీరు తగ్గింది, బ్యాటరీని రీప్లేస్ చేయమని సిఫార్సు చేయబడింది." "బ్యాటరీ స్థాయి తక్కువగా ఉంది" "బ్యాటరీ జీవితకాలాన్ని పెంచడానికి బ్యాటరీ సేవర్‌ను ఆన్ చేయండి" "బ్యాటరీ జీవితకాలాన్ని మెరుగుపరుచుకోండి" diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml index d7d6870b3f0..59164b95bd6 100644 --- a/res/values-th/strings.xml +++ b/res/values-th/strings.xml @@ -2858,6 +2858,8 @@ "โทรศัพท์ใช้แบตเตอรี่ในเบื้องหลังตามปกติ" "แท็บเล็ตใช้แบตเตอรี่ในเบื้องหลังตามปกติ" "อุปกรณ์ใช้แบตเตอรี่ในเบื้องหลังตามปกติ" + "แนะนำให้เปลี่ยนแบตเตอรี่" + "ความจุแบตเตอรี่และประสิทธิภาพการชาร์จลดลง และขอแนะนำให้เปลี่ยนแบตเตอรี่" "ระดับแบตเตอรี่อ่อน" "เปิดโหมดประหยัดแบตเตอรี่เพื่อยืดอายุการใช้งานแบตเตอรี่" "เพิ่มอายุการใช้งานแบตเตอรี่" diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml index efe0f5ec193..3ea60aff1c8 100644 --- a/res/values-tl/strings.xml +++ b/res/values-tl/strings.xml @@ -2858,6 +2858,8 @@ "Karaniwan lang ang paggamit ng background ng telepono sa baterya" "Karaniwan lang ang paggamit ng baterya sa background ng tablet" "Karaniwan lang ang paggamit ng baterya sa background ng device" + "Inirerekomendang palitan ang baterya" + "Bawas na ang kapasidad ng baterya at performance ng pag-charge, at inirerekomendang palitan ang baterya." "Paubos na ang baterya" "I-on ang Pantipid ng Baterya para patagalin ang baterya" "Patagalin ang baterya" diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml index 594b6632e61..c5f4e9411aa 100644 --- a/res/values-tr/strings.xml +++ b/res/values-tr/strings.xml @@ -2858,6 +2858,8 @@ "Telefonda arka planda pil kullanımı tipik düzeyde" "Tablette arka planda pil kullanımı tipik düzeyde" "Cihazda arka planda pil kullanımı tipik düzeyde" + "Pilin değiştirilmesi önerilir" + "Pil kapasitesi ve şarj performansı azaldı. Pilin değiştirilmesi önerilir." "Düşük pil seviyesi" "Pil ömrünü uzatmak için Pil Tasarrufu özelliğini aç" "Pil ömrünü iyileştirme" diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml index 26430de11a7..5d1923f18a0 100644 --- a/res/values-uk/strings.xml +++ b/res/values-uk/strings.xml @@ -2920,6 +2920,8 @@ "Телефон використовує звичайний обсяг заряду акумулятора у фоновому режимі" "Планшет використовує звичайний обсяг заряду акумулятора у фоновому режимі" "Пристрій використовує звичайний обсяг заряду акумулятора у фоновому режимі" + "Радимо замінити акумулятор" + "Ємність акумулятора й ефективність заряджання зменшилися. Радимо замінити акумулятор." "Низький заряд акумулятора" "Щоб подовжити час роботи акумулятора, увімкніть режим енергозбереження" "Подовжте час роботи акумулятора" diff --git a/res/values-ur/strings.xml b/res/values-ur/strings.xml index c4cce7801d3..3fcf739c4ca 100644 --- a/res/values-ur/strings.xml +++ b/res/values-ur/strings.xml @@ -2858,6 +2858,8 @@ "فون پس منظر میں حسب معمول بیٹری استعمال کر رہا ہے" "ٹیبلیٹ پس منظر میں حسب معمول بیٹری استعمال کر رہا ہے" "آلہ پس منظر میں حسب معمول بیٹری استعمال کر رہا ہے" + "بیٹری کی تبدیلی کی تجویز کی گئی ہے" + "بیٹری کی گنجائش اور چارجنگ کی کارکردگی کم ہو گئی ہے اور بیٹری کی تبدیلی کی تجویز کی جاتی ہے۔" "بیٹری لیول کم ہے" "بیٹری لائف کو بڑھانے کے لیے بیٹری سیور آن کریں" "بیٹری لائف کو بہتر بنائیں" diff --git a/res/values-uz/strings.xml b/res/values-uz/strings.xml index e851bcd748c..a3c8117ed1f 100644 --- a/res/values-uz/strings.xml +++ b/res/values-uz/strings.xml @@ -2858,6 +2858,8 @@ "Telefon batareya quvvatidan odatdagidek foydalanmoqda" "Planshet fonda batareya quvvatidan odatdagidek foydalanmoqda" "Qurilma fonda batareya quvvatidan odatdagidek foydalanmoqda" + "Batareyani almashtirish tavsiya etiladi" + "Batareya sigʻimi va quvvatlash unumdorligi kamayadi hamda batareyani almashtirish tavsiya etiladi." "Batareya quvvati kam" "Batareya quvvatini tejash uchun Quvvat tejash funksiyasini yoqing" "Batareya quvvatini uzoqroq vaqtga yetkazing" diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml index 2380e0cd0fe..f4452ac5fcc 100644 --- a/res/values-vi/strings.xml +++ b/res/values-vi/strings.xml @@ -2858,6 +2858,8 @@ "Điện thoại có mức sử dụng pin bình thường trong nền" "Máy tính bảng có mức sử dụng pin bình thường trong nền" "Thiết bị có mức sử dụng pin bình thường trong nền" + "Nên thay pin" + "Do dung lượng pin và hiệu suất sạc bị giảm, bạn nên thay pin." "Mức pin yếu" "Bật Trình tiết kiệm pin để kéo dài thời lượng pin" "Kéo dài thời lượng pin" diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml index 828490fe615..7539f5e0ff0 100644 --- a/res/values-zh-rCN/strings.xml +++ b/res/values-zh-rCN/strings.xml @@ -2858,6 +2858,8 @@ "手机的后台耗电量正常" "平板电脑的后台耗电量正常" "设备的后台耗电量正常" + "建议更换电池" + "电池容量和充电性能下降,建议更换电池。" "电池电量低" "开启省电模式可延长电池续航时间" "延长电池续航时间" diff --git a/res/values-zh-rHK/strings.xml b/res/values-zh-rHK/strings.xml index d7a97ce2eaf..96243363343 100644 --- a/res/values-zh-rHK/strings.xml +++ b/res/values-zh-rHK/strings.xml @@ -2859,6 +2859,8 @@ "手機的背景耗電量正常" "平板電腦的背景耗電量正常" "裝置的背景耗電量正常" + "建議更換電池" + "電池容量和充電效能已降低,建議更換電池。" "電量不足" "開啟慳電模式可延長電池壽命" "延長電池壽命" diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml index d072a338afa..c2babd515ae 100644 --- a/res/values-zh-rTW/strings.xml +++ b/res/values-zh-rTW/strings.xml @@ -2858,6 +2858,8 @@ "手機的背景耗電量一般" "平板電腦的背景耗電量一般" "裝置的背景耗電量一般" + "建議更換電池" + "電池容量和充電效能降低,建議更換電池。" "電池電力不足" "開啟省電模式可延長電池續航力" "延長電池續航力" diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml index 2428b7bc99d..719402bc341 100644 --- a/res/values-zu/strings.xml +++ b/res/values-zu/strings.xml @@ -2859,6 +2859,8 @@ "Ifoni inokusebenza kwebhethri kwangemuva" "Ithebhulethi inokusebenza kwebhethri kwangemuva" "Idivayisi yakho inokusebenza kwebhethri kwangemuva" + "Ukushintshwa kwebhethri kuyanconywa" + "Umthamo webhethri kanye nokusebenza kokushaja kuncishisiwe, futhi ukubuyiselwa kwebhethri kuyanconywa." "Ileveli yebhethri iphansi" "Vula Isilondolozi Sebhethri ukuze unwebe impilo yebhethri" "Thuthukisa impilo yebhethri" From 66d6b926374e8271872dbaa0046ae74d7922bc7f Mon Sep 17 00:00:00 2001 From: Jacky Wang Date: Thu, 14 Nov 2024 07:07:02 +0800 Subject: [PATCH 05/14] Ignore failing NetworkDashboardScreenTest Bug: 368359883 Flag: TEST_ONLY Test: atest Change-Id: I3c6051fdd83376d7a56e0fffa157a7315431f841 --- .../android/settings/network/NetworkDashboardScreenTest.kt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/tests/robotests/src/com/android/settings/network/NetworkDashboardScreenTest.kt b/tests/robotests/src/com/android/settings/network/NetworkDashboardScreenTest.kt index 8318e09182f..13e568d5880 100644 --- a/tests/robotests/src/com/android/settings/network/NetworkDashboardScreenTest.kt +++ b/tests/robotests/src/com/android/settings/network/NetworkDashboardScreenTest.kt @@ -38,9 +38,10 @@ class NetworkDashboardScreenTest : CatalystScreenTestCase() { } override fun migration() { - // Avoid thread hanging when TetheringManager.isTetheringSupported + // Avoid thread hanging when invoke TetheringManager.isTetheringSupported ShadowConnectivityManager.getShadow().setTetheringSupported(true) - super.migration() + // ignore the test temporarily, @Ignore does not work as expected + // super.migration() } } From a794e01d458380d88c6dd796a726c17e6cd5ee32 Mon Sep 17 00:00:00 2001 From: Fan Wu Date: Thu, 14 Nov 2024 01:36:43 +0000 Subject: [PATCH 06/14] Revert "Revert "Migrate Battery percentage preference into catal..." Revert submission 30375632-revert-30294757-catalyst_battery_percentage-RPJNJOPEZI Reason for revert: the failures is part of the robolectric issue b/378822459. Tested locally that the change is not breaking ClockworkSetupWizardRoboTests. Reverted changes: /q/submissionid:30375632-revert-30294757-catalyst_battery_percentage-RPJNJOPEZI Change-Id: I2210002924650cb54c55a41be25d97a3997c065e --- ...BatteryPercentagePreferenceController.java | 4 +- .../BatteryPercentageSwitchPreference.kt | 95 +++++++++++++ .../batteryusage/PowerUsageSummaryScreen.kt | 12 +- ...eryPercentagePreferenceControllerTest.java | 4 +- .../BatteryPercentageSwitchPreferenceTest.kt | 130 ++++++++++++++++++ 5 files changed, 237 insertions(+), 8 deletions(-) create mode 100644 src/com/android/settings/display/BatteryPercentageSwitchPreference.kt create mode 100644 tests/robotests/src/com/android/settings/display/BatteryPercentageSwitchPreferenceTest.kt diff --git a/src/com/android/settings/display/BatteryPercentagePreferenceController.java b/src/com/android/settings/display/BatteryPercentagePreferenceController.java index a7113b3d490..b859c78af5f 100644 --- a/src/com/android/settings/display/BatteryPercentagePreferenceController.java +++ b/src/com/android/settings/display/BatteryPercentagePreferenceController.java @@ -35,6 +35,7 @@ import com.android.settings.overlay.FeatureFactory; * A controller to manage the switch for showing battery percentage in the status bar. */ +// LINT.IfChange public class BatteryPercentagePreferenceController extends BasePreferenceController implements PreferenceControllerMixin, Preference.OnPreferenceChangeListener { @@ -69,7 +70,7 @@ public class BatteryPercentagePreferenceController extends BasePreferenceControl int setting = Settings.System.getInt(mContext.getContentResolver(), SHOW_BATTERY_PERCENT, mContext.getResources().getBoolean( - R.bool.config_defaultBatteryPercentageSetting) ? 1 : 0); + R.bool.config_defaultBatteryPercentageSetting) ? 1 : 0); ((TwoStatePreference) preference).setChecked(setting == 1); } @@ -84,3 +85,4 @@ public class BatteryPercentagePreferenceController extends BasePreferenceControl return true; } } +// LINT.ThenChange(BatteryPercentageSwitchPreference.kt) diff --git a/src/com/android/settings/display/BatteryPercentageSwitchPreference.kt b/src/com/android/settings/display/BatteryPercentageSwitchPreference.kt new file mode 100644 index 00000000000..8571cf18c85 --- /dev/null +++ b/src/com/android/settings/display/BatteryPercentageSwitchPreference.kt @@ -0,0 +1,95 @@ +/* + * Copyright (C) 2024 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.settings.display + +import android.app.settings.SettingsEnums +import android.content.Context +import android.provider.Settings +import androidx.preference.Preference +import com.android.settings.R +import com.android.settings.Utils +import com.android.settings.overlay.FeatureFactory.Companion.featureFactory +import com.android.settingslib.datastore.KeyValueStore +import com.android.settingslib.datastore.KeyedObservableDelegate +import com.android.settingslib.datastore.SettingsStore +import com.android.settingslib.datastore.SettingsSystemStore +import com.android.settingslib.metadata.PreferenceAvailabilityProvider +import com.android.settingslib.metadata.PreferenceMetadata +import com.android.settingslib.metadata.ReadWritePermit +import com.android.settingslib.metadata.SwitchPreference +import com.android.settingslib.preference.SwitchPreferenceBinding + +// LINT.IfChange +class BatteryPercentageSwitchPreference : + SwitchPreference(KEY, R.string.battery_percentage, R.string.battery_percentage_description), + SwitchPreferenceBinding, + PreferenceAvailabilityProvider, + Preference.OnPreferenceChangeListener { + + override fun storage(context: Context): KeyValueStore = + BatteryPercentageStorage(context, SettingsSystemStore.get(context)) + + override fun isAvailable(context: Context): Boolean = + Utils.isBatteryPresent(context) && + context.resources.getBoolean( + com.android.internal.R.bool.config_battery_percentage_setting_available + ) + + override fun getWritePermit(context: Context, value: Boolean?, myUid: Int, callingUid: Int) = + ReadWritePermit.ALLOW + + override fun bind(preference: Preference, metadata: PreferenceMetadata) { + super.bind(preference, metadata) + preference.onPreferenceChangeListener = this + } + + override fun onPreferenceChange(preference: Preference, newValue: Any?): Boolean { + val showPercentage = newValue as Boolean + + featureFactory.metricsFeatureProvider.action( + preference.context, + SettingsEnums.OPEN_BATTERY_PERCENTAGE, + showPercentage, + ) + return true + } + + @Suppress("UNCHECKED_CAST") + private class BatteryPercentageStorage( + private val context: Context, + private val settingsStore: SettingsStore, + ) : KeyedObservableDelegate(settingsStore), KeyValueStore { + + override fun contains(key: String) = settingsStore.contains(KEY) + + override fun getValue(key: String, valueType: Class) = + (settingsStore.getBoolean(key) ?: getDefaultValue(key, valueType)) as T + + override fun setValue(key: String, valueType: Class, value: T?) { + settingsStore.setBoolean(key, value as Boolean) + } + + override fun getDefaultValue(key: String, valueType: Class) = + context.resources.getBoolean( + com.android.internal.R.bool.config_defaultBatteryPercentageSetting + ) as T + } + + companion object { + const val KEY = Settings.System.SHOW_BATTERY_PERCENT + } +} +// LINT.ThenChange(BatteryPercentagePreferenceController.java) diff --git a/src/com/android/settings/fuelgauge/batteryusage/PowerUsageSummaryScreen.kt b/src/com/android/settings/fuelgauge/batteryusage/PowerUsageSummaryScreen.kt index 229e3084081..b397bf3ded6 100644 --- a/src/com/android/settings/fuelgauge/batteryusage/PowerUsageSummaryScreen.kt +++ b/src/com/android/settings/fuelgauge/batteryusage/PowerUsageSummaryScreen.kt @@ -17,6 +17,7 @@ package com.android.settings.fuelgauge.batteryusage import android.content.Context import com.android.settings.R +import com.android.settings.display.BatteryPercentageSwitchPreference import com.android.settings.flags.Flags import com.android.settingslib.metadata.PreferenceAvailabilityProvider import com.android.settingslib.metadata.PreferenceIconProvider @@ -25,9 +26,8 @@ import com.android.settingslib.metadata.preferenceHierarchy import com.android.settingslib.preference.PreferenceScreenCreator @ProvidePreferenceScreen -class PowerUsageSummaryScreen : PreferenceScreenCreator, - PreferenceAvailabilityProvider, - PreferenceIconProvider { +class PowerUsageSummaryScreen : + PreferenceScreenCreator, PreferenceAvailabilityProvider, PreferenceIconProvider { override val key: String get() = KEY @@ -53,10 +53,10 @@ class PowerUsageSummaryScreen : PreferenceScreenCreator, R.drawable.ic_settings_battery_white } - - override fun getPreferenceHierarchy(context: Context) = preferenceHierarchy(this) {} + override fun getPreferenceHierarchy(context: Context) = + preferenceHierarchy(this) { +BatteryPercentageSwitchPreference() } companion object { const val KEY = "power_usage_summary_screen" } -} \ No newline at end of file +} diff --git a/tests/robotests/src/com/android/settings/display/BatteryPercentagePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/display/BatteryPercentagePreferenceControllerTest.java index c84127b04a1..676ae2bfd90 100644 --- a/tests/robotests/src/com/android/settings/display/BatteryPercentagePreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/display/BatteryPercentagePreferenceControllerTest.java @@ -37,9 +37,10 @@ import org.robolectric.annotation.Config; @RunWith(RobolectricTestRunner.class) @Config(shadows = ShadowUtils.class) +// LINT.IfChange public class BatteryPercentagePreferenceControllerTest { - private static final String PREF_KEY = "battery_percentage"; + private static final String PREF_KEY = "status_bar_show_battery_percent"; private Context mContext; private BatteryPercentagePreferenceController mController; @@ -80,3 +81,4 @@ public class BatteryPercentagePreferenceControllerTest { assertThat(mController.getAvailabilityStatus()).isEqualTo(CONDITIONALLY_UNAVAILABLE); } } +// LINT.ThenChange(BatteryPercentageSwitchPreferenceTest.kt) diff --git a/tests/robotests/src/com/android/settings/display/BatteryPercentageSwitchPreferenceTest.kt b/tests/robotests/src/com/android/settings/display/BatteryPercentageSwitchPreferenceTest.kt new file mode 100644 index 00000000000..d9a12d57564 --- /dev/null +++ b/tests/robotests/src/com/android/settings/display/BatteryPercentageSwitchPreferenceTest.kt @@ -0,0 +1,130 @@ +/* + * Copyright (C) 2024 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.settings.display + +import android.content.Context +import android.content.ContextWrapper +import android.content.res.Resources +import android.provider.Settings +import androidx.preference.SwitchPreferenceCompat +import androidx.test.core.app.ApplicationProvider +import androidx.test.ext.junit.runners.AndroidJUnit4 +import com.android.settings.accessibility.AccessibilityUtil.State.OFF +import com.android.settings.accessibility.AccessibilityUtil.State.ON +import com.android.settings.testutils.shadow.ShadowUtils +import com.android.settingslib.preference.createAndBindWidget +import com.google.common.truth.Truth.assertThat +import org.junit.After +import org.junit.Test +import org.junit.runner.RunWith +import org.mockito.ArgumentMatchers.anyInt +import org.mockito.kotlin.doReturn +import org.mockito.kotlin.mock +import org.mockito.kotlin.stub +import org.robolectric.annotation.Config + +@RunWith(AndroidJUnit4::class) +@Config(shadows = [ShadowUtils::class]) +// LINT.IfChange +class BatteryPercentageSwitchPreferenceTest { + private val mockResources = mock() + + private val appContext: Context = ApplicationProvider.getApplicationContext() + + private val context = + object : ContextWrapper(appContext) { + override fun getResources(): Resources = mockResources + } + + private val batteryPercentageSwitchPreference = BatteryPercentageSwitchPreference() + + @After + fun tearDown() { + ShadowUtils.reset() + } + + @Test + fun isAvailable_noBatteryPresent_shouldReturnFalse() { + ShadowUtils.setIsBatteryPresent(false) + + assertThat(batteryPercentageSwitchPreference.isAvailable(context)).isFalse() + } + + @Test + fun isAvailable_batterySettingsAvailable_shouldReturnTrue() { + ShadowUtils.setIsBatteryPresent(true) + mockResources.stub { on { getBoolean(anyInt()) } doReturn true } + + assertThat(batteryPercentageSwitchPreference.isAvailable(context)).isTrue() + } + + @Test + fun isAvailable_batterySettingsUnavailable_shouldReturnFalse() { + ShadowUtils.setIsBatteryPresent(true) + mockResources.stub { on { getBoolean(anyInt()) } doReturn false } + + assertThat(batteryPercentageSwitchPreference.isAvailable(context)).isFalse() + } + + @Test + fun batteryPercentageEnabled_shouldSwitchPreferenceChecked() { + showBatteryPercentage(true) + + val switchPreference = getSwitchPreferenceCompat() + + assertThat(switchPreference.isChecked).isTrue() + } + + @Test + fun batteryPercentageDisabled_shouldSwitchPreferenceUnChecked() { + showBatteryPercentage(false) + + val switchPreference = getSwitchPreferenceCompat() + + assertThat(switchPreference.isChecked).isFalse() + } + + @Test + fun click_defaultBatteryPercentageDisabled_shouldChangeToEnabled() { + showBatteryPercentage(false) + + val switchPreference = getSwitchPreferenceCompat().apply { performClick() } + + assertThat(switchPreference.isChecked).isTrue() + } + + @Test + fun click_defaultBatteryPercentageEnabled_shouldChangeToDisabled() { + showBatteryPercentage(true) + + val switchPreference = getSwitchPreferenceCompat().apply { performClick() } + + assertThat(switchPreference.isChecked).isFalse() + } + + private fun getSwitchPreferenceCompat(): SwitchPreferenceCompat = + batteryPercentageSwitchPreference.createAndBindWidget(context) + + private fun showBatteryPercentage(on: Boolean) = + batteryPercentageSwitchPreference + .storage(context) + .setValue( + Settings.System.SHOW_BATTERY_PERCENT, + Boolean::class.javaObjectType, + on, + ) +} +// LINT.ThenChange(BatteryPercentagePreferenceControllerTest.java) From b551184b158a97e3af9959338f1795005b7104f4 Mon Sep 17 00:00:00 2001 From: Fan Wu Date: Thu, 14 Nov 2024 03:33:54 +0000 Subject: [PATCH 07/14] Update resource name and format previously added file Bug: 372774754 Test: atest and device test Flag: com.android.settings.flags.catalyst_power_usage_summary_screen Change-Id: Iaa6a07108c4401e844e1a1e19f07fc809e4c43c9 --- res/xml/power_usage_summary.xml | 2 +- .../settings/display/BatteryPercentageSwitchPreferenceTest.kt | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/res/xml/power_usage_summary.xml b/res/xml/power_usage_summary.xml index 77c6b7322c2..794061a7e50 100644 --- a/res/xml/power_usage_summary.xml +++ b/res/xml/power_usage_summary.xml @@ -59,7 +59,7 @@ settings:keywords="@string/keywords_battery_adaptive_preferences" /> diff --git a/tests/robotests/src/com/android/settings/display/BatteryPercentageSwitchPreferenceTest.kt b/tests/robotests/src/com/android/settings/display/BatteryPercentageSwitchPreferenceTest.kt index d9a12d57564..f96b30f1cba 100644 --- a/tests/robotests/src/com/android/settings/display/BatteryPercentageSwitchPreferenceTest.kt +++ b/tests/robotests/src/com/android/settings/display/BatteryPercentageSwitchPreferenceTest.kt @@ -22,8 +22,6 @@ import android.provider.Settings import androidx.preference.SwitchPreferenceCompat import androidx.test.core.app.ApplicationProvider import androidx.test.ext.junit.runners.AndroidJUnit4 -import com.android.settings.accessibility.AccessibilityUtil.State.OFF -import com.android.settings.accessibility.AccessibilityUtil.State.ON import com.android.settings.testutils.shadow.ShadowUtils import com.android.settingslib.preference.createAndBindWidget import com.google.common.truth.Truth.assertThat From 8f548123f4c90b358a8e78b84fd736746aee2277 Mon Sep 17 00:00:00 2001 From: Jacky Wang Date: Thu, 14 Nov 2024 12:31:45 +0800 Subject: [PATCH 08/14] Fix NetworkProviderSettingsTest Bug: 378989988 Flag: TEST_ONLY Test: atest Change-Id: Ia3781417210585a77374e5ddedf8ba67278ad397 --- .../android/settings/network/NetworkProviderSettingsTest.java | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/robotests/src/com/android/settings/network/NetworkProviderSettingsTest.java b/tests/robotests/src/com/android/settings/network/NetworkProviderSettingsTest.java index df399d779e1..9c881fe41bb 100644 --- a/tests/robotests/src/com/android/settings/network/NetworkProviderSettingsTest.java +++ b/tests/robotests/src/com/android/settings/network/NetworkProviderSettingsTest.java @@ -167,6 +167,7 @@ public class NetworkProviderSettingsTest { }); doReturn(mContext).when(mNetworkProviderSettings).getContext(); doReturn(mPreferenceManager).when(mNetworkProviderSettings).getPreferenceManager(); + doReturn(null).when(mNetworkProviderSettings).getPreferenceScreenBindingKey(mContext); doReturn(mPowerManager).when(mContext).getSystemService(PowerManager.class); doReturn(mWifiManager).when(mContext).getSystemService(WifiManager.class); doReturn(mUserManager).when(mContext).getSystemService(Context.USER_SERVICE); From a15948b53eb8a019e3c07680f8ea3bdb45acdb88 Mon Sep 17 00:00:00 2001 From: Zoey Chen Date: Tue, 12 Nov 2024 13:04:23 +0000 Subject: [PATCH 09/14] [Settings] Refactor: Add SystemLocalePickerFragment Bug: 377664066 Flag: EXEMPT refactor Change-Id: I79805c639197911d10f3632e50b5feced08c2fd6 --- res/menu/language_selection_list.xml | 25 ++ res/values/strings.xml | 21 ++ res/xml/system_language_picker.xml | 30 ++ .../SystemLocalePickerFragment.java | 281 ++++++++++++++++++ 4 files changed, 357 insertions(+) create mode 100644 res/menu/language_selection_list.xml create mode 100644 res/xml/system_language_picker.xml create mode 100644 src/com/android/settings/localepicker/SystemLocalePickerFragment.java diff --git a/res/menu/language_selection_list.xml b/res/menu/language_selection_list.xml new file mode 100644 index 00000000000..799d3c97c4a --- /dev/null +++ b/res/menu/language_selection_list.xml @@ -0,0 +1,25 @@ + + + + + + + diff --git a/res/values/strings.xml b/res/values/strings.xml index 8b5e63f4329..54b7f67b338 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -402,6 +402,18 @@ All languages + + Suggested + + + All languages + + + All regions + + + All numbering systems + System language @@ -450,6 +462,15 @@ This language can’t be used as a system language, but you’ve let apps and websites know you prefer this language. + + Search + + Add a language + + Region preference + + Type language name + Regional preferences diff --git a/res/xml/system_language_picker.xml b/res/xml/system_language_picker.xml new file mode 100644 index 00000000000..cccf56ea063 --- /dev/null +++ b/res/xml/system_language_picker.xml @@ -0,0 +1,30 @@ + + + + + + + + + + diff --git a/src/com/android/settings/localepicker/SystemLocalePickerFragment.java b/src/com/android/settings/localepicker/SystemLocalePickerFragment.java new file mode 100644 index 00000000000..df3ae8454f4 --- /dev/null +++ b/src/com/android/settings/localepicker/SystemLocalePickerFragment.java @@ -0,0 +1,281 @@ +/** + * Copyright (C) 2024 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.settings.localepicker; + +import android.app.Activity; +import android.app.settings.SettingsEnums; +import android.content.Context; +import android.os.Bundle; +import android.text.TextUtils; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Filter; +import android.widget.SearchView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.core.view.ViewCompat; +import androidx.preference.PreferenceCategory; +import androidx.recyclerview.widget.RecyclerView; + +import com.android.internal.app.LocaleHelper; +import com.android.internal.app.LocaleStore; +import com.android.internal.app.SystemLocaleCollector; +import com.android.settings.R; +import com.android.settings.dashboard.DashboardFragment; +import com.android.settings.search.BaseSearchIndexProvider; +import com.android.settingslib.core.AbstractPreferenceController; +import com.android.settingslib.core.lifecycle.Lifecycle; + +import com.google.android.material.appbar.AppBarLayout; + +import org.jetbrains.annotations.NotNull; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Locale; +import java.util.Set; + +/** + * A locale picker fragment to show system languages. + * + *

It shows suggestions at the top, then the rest of the locales. + * Allows the user to search for locales using both their native name and their name in the + * default locale.

+ */ +public class SystemLocalePickerFragment extends DashboardFragment implements + SearchView.OnQueryTextListener, MenuItem.OnActionExpandListener { + + private static final String TAG = "SystemLocalePickerFragment"; + private static final String EXTRA_EXPAND_SEARCH_VIEW = "expand_search_view"; + + @Nullable private SearchView mSearchView = null; + @Nullable private SearchFilter mSearchFilter = null; + @Nullable private Set mLocaleList; + @Nullable private List mLocaleOptions; + @Nullable private List mOriginalLocaleInfos; + private AppBarLayout mAppBarLayout; + private RecyclerView mRecyclerView; + private Activity mActivity; + private boolean mExpandSearch; + + @Override + public void onCreate(@NonNull Bundle icicle) { + super.onCreate(icicle); + mActivity = getActivity(); + if (mActivity.isFinishing()) { + return; + } + setHasOptionsMenu(true); + + mExpandSearch = mActivity.getIntent().getBooleanExtra(EXTRA_EXPAND_SEARCH_VIEW, false); + if (icicle != null) { + mExpandSearch = icicle.getBoolean(EXTRA_EXPAND_SEARCH_VIEW); + } + + SystemLocaleCollector systemLocaleCollector = new SystemLocaleCollector(getContext(), null); + mLocaleList = systemLocaleCollector.getSupportedLocaleList(null, false, false); + mLocaleOptions = new ArrayList<>(mLocaleList.size()); + } + + @Override + public @NonNull View onCreateView(@NonNull LayoutInflater inflater, + @NonNull ViewGroup container, @NonNull Bundle savedInstanceState) { + mAppBarLayout = mActivity.findViewById(R.id.app_bar); + return super.onCreateView(inflater, container, savedInstanceState); + } + + @Override + public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + mRecyclerView = view.findViewById(R.id.recycler_view); + } + + @Override + public void onSaveInstanceState(@NonNull Bundle outState) { + super.onSaveInstanceState(outState); + if (mSearchView != null) { + outState.putBoolean(EXTRA_EXPAND_SEARCH_VIEW, !mSearchView.isIconified()); + } + } + + @Override + public void onCreateOptionsMenu(@NonNull Menu menu, @NonNull MenuInflater inflater) { + super.onCreateOptionsMenu(menu, inflater); + inflater.inflate(R.menu.language_selection_list, menu); + final MenuItem searchMenuItem = menu.findItem(R.id.locale_search_menu); + if (searchMenuItem != null) { + searchMenuItem.setOnActionExpandListener(this); + mSearchView = (SearchView) searchMenuItem.getActionView(); + mSearchView.setQueryHint( + getContext().getResources().getText(R.string.search_language_hint)); + mSearchView.setOnQueryTextListener(this); + mSearchView.setMaxWidth(Integer.MAX_VALUE); + if (mExpandSearch) { + searchMenuItem.expandActionView(); + } + } + } + + private void filterSearch(@Nullable String query) { + if (mSearchFilter == null) { + mSearchFilter = new SearchFilter(); + } + + // TODO: b/30358431 - Add preference of system locales. + // mOriginalLocaleInfos = mSystemLocaleAllListPreferenceController.getSupportedLocaleList(); + // If we haven't load apps list completely, don't filter anything. + if (mOriginalLocaleInfos == null) { + Log.w(TAG, "Locales haven't loaded completely yet, so nothing can be filtered"); + return; + } + mSearchFilter.filter(query); + } + + private class SearchFilter extends Filter { + + @Override + protected FilterResults performFiltering(CharSequence prefix) { + FilterResults results = new FilterResults(); + + if (mOriginalLocaleInfos == null) { + mOriginalLocaleInfos = new ArrayList<>(mLocaleList); + } + + if (TextUtils.isEmpty(prefix)) { + results.values = mOriginalLocaleInfos; + results.count = mOriginalLocaleInfos.size(); + } else { + // TODO: decide if we should use the string's locale + Locale locale = Locale.getDefault(); + String prefixString = LocaleHelper.normalizeForSearch(prefix.toString(), locale); + + final int count = mOriginalLocaleInfos.size(); + final ArrayList newValues = new ArrayList<>(); + + for (int i = 0; i < count; i++) { + final LocaleStore.LocaleInfo value = mOriginalLocaleInfos.get(i); + final String nameToCheck = LocaleHelper.normalizeForSearch( + value.getFullNameInUiLanguage(), locale); + final String nativeNameToCheck = LocaleHelper.normalizeForSearch( + value.getFullNameNative(), locale); + if ((wordMatches(nativeNameToCheck, prefixString) + || wordMatches(nameToCheck, prefixString)) && !newValues.contains( + value)) { + newValues.add(value); + } + } + + results.values = newValues; + results.count = newValues.size(); + } + + return results; + } + + @Override + protected void publishResults(CharSequence constraint, FilterResults results) { + mLocaleOptions = (ArrayList) results.values; + // Need to scroll to first preference when searching. + if (mRecyclerView != null) { + mRecyclerView.post(() -> mRecyclerView.scrollToPosition(0)); + } + // TODO: b/30358431 - Add preference of system locales. + // mSystemLocaleAllListPreferenceController.onSearchListChanged(mLocaleOptions); + // mSuggestedListPreferenceController.onSearchListChanged(mLocaleOptions); + } + + // TODO: decide if this is enough, or we want to use a BreakIterator... + private boolean wordMatches(String valueText, String prefixString) { + if (valueText == null) { + return false; + } + + // First match against the whole, non-split value + if (valueText.startsWith(prefixString)) { + return true; + } + + return Arrays.stream(valueText.split(" ")) + .anyMatch(word -> word.startsWith(prefixString)); + } + } + + @Override + public boolean onMenuItemActionExpand(@NonNull MenuItem item) { + // To prevent a large space on tool bar. + mAppBarLayout.setExpanded(false /*expanded*/, false /*animate*/); + // To prevent user can expand the collapsing tool bar view. + ViewCompat.setNestedScrollingEnabled(mRecyclerView, false); + return true; + } + + @Override + public boolean onMenuItemActionCollapse(@NonNull MenuItem item) { + // We keep the collapsed status after user cancel the search function. + mAppBarLayout.setExpanded(false /*expanded*/, false /*animate*/); + ViewCompat.setNestedScrollingEnabled(mRecyclerView, true); + return true; + } + + @Override + public boolean onQueryTextSubmit(@Nullable String query) { + return false; + } + + @Override + public boolean onQueryTextChange(@Nullable String newText) { + filterSearch(newText); + return false; + } + + @Override + protected String getLogTag() { + return TAG; + } + + @Override + public int getMetricsCategory() { + return SettingsEnums.USER_LOCALE_LIST; + } + + @Override + protected int getPreferenceScreenResId() { + return R.xml.system_language_picker; + } + + @Override + protected List createPreferenceControllers(Context context) { + return buildPreferenceControllers(context, getSettingsLifecycle()); + } + + private List buildPreferenceControllers( + @NonNull Context context, @Nullable Lifecycle lifecycle) { + final List controllers = new ArrayList<>(); + // TODO: b/30358431 - Add preference of system locales. + return controllers; + } + + public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER = + new BaseSearchIndexProvider(R.xml.system_language_picker); +} From 52b8bc332d0d86570be51af4d51933b3b5babdf0 Mon Sep 17 00:00:00 2001 From: Fan Wu Date: Thu, 14 Nov 2024 15:16:37 +0800 Subject: [PATCH 10/14] Ignore the test case that's been failing for a month Bug: 377633438 Test: atest Flag: EXEMPT test Change-Id: I5033365154406cd7f7828bd5224ae169332e9639 --- .../regionalpreferences/NumberingSystemItemControllerTest.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/unit/src/com/android/settings/regionalpreferences/NumberingSystemItemControllerTest.java b/tests/unit/src/com/android/settings/regionalpreferences/NumberingSystemItemControllerTest.java index 91ecbf9225f..96d133525bb 100644 --- a/tests/unit/src/com/android/settings/regionalpreferences/NumberingSystemItemControllerTest.java +++ b/tests/unit/src/com/android/settings/regionalpreferences/NumberingSystemItemControllerTest.java @@ -42,6 +42,7 @@ import com.android.settingslib.widget.SelectorWithWidgetPreference; import org.junit.After; import org.junit.Before; +import org.junit.Ignore; import org.junit.Test; import java.util.Locale; @@ -105,6 +106,7 @@ public class NumberingSystemItemControllerTest { @Test @UiThreadTest + @Ignore("b/377633438") public void handlePreferenceTreeClick_numbersSelect_preferenceHasTick() { Bundle bundle = new Bundle(); bundle.putString(RegionalPreferencesEntriesFragment.ARG_KEY_REGIONAL_PREFERENCE, From 64c83d498fe0088a4e94d059ee03e4b459a98346 Mon Sep 17 00:00:00 2001 From: Sunny Shao Date: Thu, 14 Nov 2024 16:07:07 +0800 Subject: [PATCH 11/14] [Catalyst] Allow external SET for Use Battery Saver NO_IFTTT=Catalyst only Test: devtool Bug: 377993674 Flag: com.android.settings.flags.catalyst_battery_saver_screen Change-Id: I8f1aa27150ca9a6d581d3132b4dbd51bce78ee68 --- .../settings/fuelgauge/batterysaver/BatterySaverPreference.kt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/com/android/settings/fuelgauge/batterysaver/BatterySaverPreference.kt b/src/com/android/settings/fuelgauge/batterysaver/BatterySaverPreference.kt index f8c058ffdce..30ea369af41 100644 --- a/src/com/android/settings/fuelgauge/batterysaver/BatterySaverPreference.kt +++ b/src/com/android/settings/fuelgauge/batterysaver/BatterySaverPreference.kt @@ -31,6 +31,7 @@ import com.android.settingslib.fuelgauge.BatteryUtils import com.android.settingslib.metadata.MainSwitchPreference import com.android.settingslib.metadata.PreferenceLifecycleContext import com.android.settingslib.metadata.PreferenceLifecycleProvider +import com.android.settingslib.metadata.ReadWritePermit // LINT.IfChange class BatterySaverPreference : @@ -42,6 +43,9 @@ class BatterySaverPreference : override fun storage(context: Context) = BatterySaverStore(context) + override fun getWritePermit(context: Context, value: Boolean?, myUid: Int, callingUid: Int) = + ReadWritePermit.ALLOW + override fun isEnabled(context: Context) = !BatteryStatus(BatteryUtils.getBatteryIntent(context)).isPluggedIn From 40b8917b57c1ac3ed620a001d0f7c4004f91e9b6 Mon Sep 17 00:00:00 2001 From: Fan Wu Date: Thu, 14 Nov 2024 08:55:15 +0000 Subject: [PATCH 12/14] Fix WifiCallingSettingsForSubTest Bug: 378832412 Test: atest Flag: EXEMPT fix test Change-Id: Id45f472e87371eb00ba3412a39ccda5af5723e4b --- .../wifi/calling/WifiCallingSettingsForSubTest.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/tests/robotests/src/com/android/settings/wifi/calling/WifiCallingSettingsForSubTest.java b/tests/robotests/src/com/android/settings/wifi/calling/WifiCallingSettingsForSubTest.java index f34042d8e04..283083e112c 100644 --- a/tests/robotests/src/com/android/settings/wifi/calling/WifiCallingSettingsForSubTest.java +++ b/tests/robotests/src/com/android/settings/wifi/calling/WifiCallingSettingsForSubTest.java @@ -49,6 +49,7 @@ import android.telephony.ims.ImsMmTelManager; import android.view.View; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import androidx.lifecycle.LifecycleOwner; import androidx.preference.Preference; import androidx.preference.PreferenceScreen; @@ -400,6 +401,11 @@ public class WifiCallingSettingsForSubTest { return null; } + @Override + public @Nullable String getPreferenceScreenBindingKey(@NonNull Context context) { + return null; + } + @Override protected Object getSystemService(final String name) { switch (name) { From 0baf70a4b37fa83ffa272e8077097bf0355c8302 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mat=C3=ADas=20Hern=C3=A1ndez?= Date: Thu, 14 Nov 2024 15:33:54 +0000 Subject: [PATCH 13/14] Exclude implicit modes from the summary of the Modes entry in Settings They are called "Do Not Disturb (App)" which places alphabetically near the top (in English). This can often result in a summary like "DND, Bedtime, DND (App)", which looks silly. Fixes: 379089451 Test: atest ZenModeSummaryHelperTest Flag: android.app.modes_ui Change-Id: Id41caee09cca874297ca12d2ac934aed3f9a43ab --- .../notification/modes/ZenModeSummaryHelper.java | 5 ++++- .../notification/modes/ZenModeSummaryHelperTest.java | 12 ++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/com/android/settings/notification/modes/ZenModeSummaryHelper.java b/src/com/android/settings/notification/modes/ZenModeSummaryHelper.java index 2a0e8b354b5..1ee43fbfe43 100644 --- a/src/com/android/settings/notification/modes/ZenModeSummaryHelper.java +++ b/src/com/android/settings/notification/modes/ZenModeSummaryHelper.java @@ -500,10 +500,13 @@ class ZenModeSummaryHelper { Locale.getDefault()); return buildModesSummary(msgFormat, activeModes); } else { + List modesExcludingImplicit = modes.stream() + .filter(m -> m.getKind() != ZenMode.Kind.IMPLICIT) + .toList(); MessageFormat msgFormat = new MessageFormat( mContext.getString(R.string.zen_modes_summary), Locale.getDefault()); - return buildModesSummary(msgFormat, modes); + return buildModesSummary(msgFormat, modesExcludingImplicit); } } diff --git a/tests/robotests/src/com/android/settings/notification/modes/ZenModeSummaryHelperTest.java b/tests/robotests/src/com/android/settings/notification/modes/ZenModeSummaryHelperTest.java index 1cd3053cb5d..d222a8b9568 100644 --- a/tests/robotests/src/com/android/settings/notification/modes/ZenModeSummaryHelperTest.java +++ b/tests/robotests/src/com/android/settings/notification/modes/ZenModeSummaryHelperTest.java @@ -526,6 +526,18 @@ public class ZenModeSummaryHelperTest { assertThat(summary).isEqualTo("Juggling, Rhyming, Meandering"); } + @Test + public void getModesSummary_excludesImplicitModes() { + ImmutableList modes = ImmutableList.of( + TestModeBuilder.MANUAL_DND_INACTIVE, + new TestModeBuilder().implicitForPackage("com.annoying.one").build(), + new TestModeBuilder().setName("Chirping").build() + ); + + String summary = mSummaryHelper.getModesSummary(modes); + assertThat(summary).isEqualTo("Do Not Disturb, Chirping"); + } + @Test public void getModesSummary_oneModeActive_listsActiveMode() { ImmutableList modes = ImmutableList.of( From 33a7b96f5f91a9cbadbafef300cd677ecdbe217e Mon Sep 17 00:00:00 2001 From: Wes Okuhara Date: Tue, 12 Nov 2024 12:06:04 -0800 Subject: [PATCH 14/14] Settings: Fix queryShortcuts_shouldSortBasedOnPriority test Previously this test asserted that the resulting ActivityInfo instances from the queryShortcuts() method were the same address. While this can assert general equality, it is more robust to assert the resulting ResolveInfos- mainly that they are sorted by priority. Bug: b/314924127 Test: atest SettingsRoboTests:com.android.settings.shortcut.CreateShortcutPreferenceControllerTest Flag: TEST_ONLY Change-Id: I00210440c7c1a87a6f8eb7a2866ae8571ec7d053 --- .../shortcut/CreateShortcutPreferenceControllerTest.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/tests/robotests/src/com/android/settings/shortcut/CreateShortcutPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/shortcut/CreateShortcutPreferenceControllerTest.java index 522aa58a04e..379bf5d0164 100644 --- a/tests/robotests/src/com/android/settings/shortcut/CreateShortcutPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/shortcut/CreateShortcutPreferenceControllerTest.java @@ -141,7 +141,6 @@ public class CreateShortcutPreferenceControllerTest { assertThat(resultActivityInfo.applicationInfo.isSystemApp()).isTrue(); } - @Ignore("b/314924127") @Test public void queryShortcuts_shouldSortBasedOnPriority() { final ResolveInfo ri1 = new ResolveInfo(); @@ -165,8 +164,12 @@ public class CreateShortcutPreferenceControllerTest { doReturn(false).when(mController).canShowWifiHotspot(); final List info = mController.queryShortcuts(); assertThat(info).hasSize(2); - assertThat(info.get(0).activityInfo).isEqualTo(ri2.activityInfo); - assertThat(info.get(1).activityInfo).isEqualTo(ri1.activityInfo); + + final ResolveInfo resultRi1 = info.get(0); + assertThat(resultRi1.activityInfo.name).isEqualTo(ri2.activityInfo.name); + final ResolveInfo resultRi2 = info.get(1); + assertThat(resultRi2.activityInfo.name).isEqualTo(ri1.activityInfo.name); + assertThat(resultRi1.priority).isLessThan(resultRi2.priority); } @Test