From 1aeca095d380c3cef633d7f97588bc04000f3496 Mon Sep 17 00:00:00 2001 From: Robin Lee Date: Mon, 11 Dec 2017 18:24:03 +0100 Subject: [PATCH 01/11] Handle getActiveAdmins() == null safely. Test: adb install -r $OUT/system/priv-app/Settings/Settings.apk && adb shell am start -n com.android.settings/.DeviceAdminAdd --es android.app.extra.DEVICE_ADMIN_PACKAGE_NAME com.example.nonexistent Change-Id: I1e3cf406e8053f6dbf99669f33b7c16648c9c8f8 Fix: 70491813 --- src/com/android/settings/DeviceAdminAdd.java | 25 +++++++++++++------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/src/com/android/settings/DeviceAdminAdd.java b/src/com/android/settings/DeviceAdminAdd.java index 2fd769b42a2..0ad882df9a2 100644 --- a/src/com/android/settings/DeviceAdminAdd.java +++ b/src/com/android/settings/DeviceAdminAdd.java @@ -69,6 +69,7 @@ import org.xmlpull.v1.XmlPullParserException; import java.io.IOException; import java.util.ArrayList; import java.util.List; +import java.util.Optional; public class DeviceAdminAdd extends Activity { static final String TAG = "DeviceAdminAdd"; @@ -145,18 +146,14 @@ public class DeviceAdminAdd extends Activity { DevicePolicyManager.EXTRA_DEVICE_ADMIN); if (who == null) { String packageName = getIntent().getStringExtra(EXTRA_DEVICE_ADMIN_PACKAGE_NAME); - for (ComponentName component : mDPM.getActiveAdmins()) { - if (component.getPackageName().equals(packageName)) { - who = component; - mUninstalling = true; - break; - } - } - if (who == null) { + Optional installedAdmin = findAdminWithPackageName(packageName); + if (!installedAdmin.isPresent()) { Log.w(TAG, "No component specified in " + action); finish(); return; } + who = installedAdmin.get(); + mUninstalling = true; } if (action != null && action.equals(DevicePolicyManager.ACTION_SET_PROFILE_OWNER)) { @@ -692,6 +689,18 @@ public class DeviceAdminAdd extends Activity { return info != null ? info.isManagedProfile() : false; } + /** + * @return an {@link Optional} containing the admin with a given package name, if it exists, + * or {@link Optional#empty()} otherwise. + */ + private Optional findAdminWithPackageName(String packageName) { + List admins = mDPM.getActiveAdmins(); + if (admins == null) { + return Optional.empty(); + } + return admins.stream().filter(i -> i.getPackageName().equals(packageName)).findAny(); + } + private boolean isAdminUninstallable() { // System apps can't be uninstalled. return !mDeviceAdmin.getActivityInfo().applicationInfo.isSystemApp(); From 3040fde446753363a2b0c325452aef0403f44a70 Mon Sep 17 00:00:00 2001 From: Jordan Liu Date: Mon, 11 Dec 2017 17:19:45 -0800 Subject: [PATCH 02/11] Add signal strength customization Also add default behavior in case carrier config bundle is null. Bug: 69730732 Test: manual and new unit test Change-Id: Ia38462a7e1b6f2e27ff45d93beef09465a68ae5c --- .../simstatus/SimStatusDialogController.java | 28 ++++++++++++++-- .../SimStatusDialogControllerTest.java | 33 +++++++++++++++++++ 2 files changed, 58 insertions(+), 3 deletions(-) diff --git a/src/com/android/settings/deviceinfo/simstatus/SimStatusDialogController.java b/src/com/android/settings/deviceinfo/simstatus/SimStatusDialogController.java index 15ca87bd859..35b8bd1576a 100644 --- a/src/com/android/settings/deviceinfo/simstatus/SimStatusDialogController.java +++ b/src/com/android/settings/deviceinfo/simstatus/SimStatusDialogController.java @@ -68,6 +68,8 @@ public class SimStatusDialogController implements LifecycleObserver, OnResume, O @VisibleForTesting final static int SERVICE_STATE_VALUE_ID = R.id.service_state_value; @VisibleForTesting + final static int SIGNAL_STRENGTH_LABEL_ID = R.id.signal_strength_label; + @VisibleForTesting final static int SIGNAL_STRENGTH_VALUE_ID = R.id.signal_strength_value; @VisibleForTesting final static int CELLULAR_NETWORK_TYPE_VALUE_ID = R.id.network_type_value; @@ -262,6 +264,21 @@ public class SimStatusDialogController implements LifecycleObserver, OnResume, O } private void updateSignalStrength(SignalStrength signalStrength) { + final int subscriptionId = mSubscriptionInfo.getSubscriptionId(); + final PersistableBundle carrierConfig = + mCarrierConfigManager.getConfigForSubId(subscriptionId); + // by default we show the signal strength + boolean showSignalStrength = true; + if (carrierConfig != null) { + showSignalStrength = carrierConfig.getBoolean( + CarrierConfigManager.KEY_SHOW_SIGNAL_STRENGTH_IN_SIM_STATUS_BOOL); + } + if (!showSignalStrength) { + mDialog.removeSettingFromScreen(SIGNAL_STRENGTH_LABEL_ID); + mDialog.removeSettingFromScreen(SIGNAL_STRENGTH_VALUE_ID); + return; + } + final int state = getCurrentServiceState().getState(); if ((ServiceState.STATE_OUT_OF_SERVICE == state) || @@ -327,9 +344,14 @@ public class SimStatusDialogController implements LifecycleObserver, OnResume, O private void updateIccidNumber() { final int subscriptionId = mSubscriptionInfo.getSubscriptionId(); - final PersistableBundle carrierConfig = mCarrierConfigManager.getConfigForSubId(subscriptionId); - final boolean showIccId = carrierConfig.getBoolean( - CarrierConfigManager.KEY_SHOW_ICCID_IN_SIM_STATUS_BOOL); + final PersistableBundle carrierConfig = + mCarrierConfigManager.getConfigForSubId(subscriptionId); + // do not show iccid by default + boolean showIccId = false; + if (carrierConfig != null) { + showIccId = carrierConfig.getBoolean( + CarrierConfigManager.KEY_SHOW_ICCID_IN_SIM_STATUS_BOOL); + } if (!showIccId) { mDialog.removeSettingFromScreen(ICCID_INFO_LABEL_ID); mDialog.removeSettingFromScreen(ICCID_INFO_VALUE_ID); diff --git a/tests/robotests/src/com/android/settings/deviceinfo/simstatus/SimStatusDialogControllerTest.java b/tests/robotests/src/com/android/settings/deviceinfo/simstatus/SimStatusDialogControllerTest.java index fd4816233f2..2f896ac9f27 100644 --- a/tests/robotests/src/com/android/settings/deviceinfo/simstatus/SimStatusDialogControllerTest.java +++ b/tests/robotests/src/com/android/settings/deviceinfo/simstatus/SimStatusDialogControllerTest.java @@ -34,11 +34,14 @@ import static com.android.settings.deviceinfo.simstatus.SimStatusDialogControlle .ROAMING_INFO_VALUE_ID; import static com.android.settings.deviceinfo.simstatus.SimStatusDialogController .SERVICE_STATE_VALUE_ID; +import static com.android.settings.deviceinfo.simstatus.SimStatusDialogController + .SIGNAL_STRENGTH_LABEL_ID; import static com.android.settings.deviceinfo.simstatus.SimStatusDialogController .SIGNAL_STRENGTH_VALUE_ID; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyInt; +import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; @@ -157,6 +160,9 @@ public class SimStatusDialogControllerTest { @Test public void initialize_updateDataStateWithPowerOff_shouldUpdateSettingAndResetSignalStrength() { when(mServiceState.getState()).thenReturn(ServiceState.STATE_POWER_OFF); + when(mPersistableBundle.getBoolean( + CarrierConfigManager.KEY_SHOW_SIGNAL_STRENGTH_IN_SIM_STATUS_BOOL)).thenReturn( + true); mController.initialize(); @@ -172,6 +178,9 @@ public class SimStatusDialogControllerTest { final int signalAsu = 50; doReturn(signalDbm).when(mController).getDbm(mSignalStrength); doReturn(signalAsu).when(mController).getAsuLevel(mSignalStrength); + when(mPersistableBundle.getBoolean( + CarrierConfigManager.KEY_SHOW_SIGNAL_STRENGTH_IN_SIM_STATUS_BOOL)).thenReturn( + true); mController.initialize(); @@ -225,6 +234,30 @@ public class SimStatusDialogControllerTest { verify(mDialog).removeSettingFromScreen(ICCID_INFO_VALUE_ID); } + @Test + public void initialize_doNotShowSignalStrength_shouldRemoveSignalStrengthSetting() { + when(mPersistableBundle.getBoolean( + CarrierConfigManager.KEY_SHOW_SIGNAL_STRENGTH_IN_SIM_STATUS_BOOL)).thenReturn( + false); + + mController.initialize(); + + verify(mDialog).removeSettingFromScreen(SIGNAL_STRENGTH_LABEL_ID); + verify(mDialog).removeSettingFromScreen(SIGNAL_STRENGTH_VALUE_ID); + } + + @Test + public void initialize_showSignalStrengthAndIccId_shouldShowSignalStrengthAndIccIdSetting() { + // getConfigForSubId is nullable, so make sure the default behavior is correct + when(mCarrierConfigManager.getConfigForSubId(anyInt())).thenReturn(null); + + mController.initialize(); + + verify(mDialog).setText(eq(SIGNAL_STRENGTH_VALUE_ID), any()); + verify(mDialog).removeSettingFromScreen(ICCID_INFO_LABEL_ID); + verify(mDialog).removeSettingFromScreen(ICCID_INFO_VALUE_ID); + } + @Test public void initialize_showIccid_shouldSetIccidToSetting() { final String iccid = "12351351231241"; From d27fe3275faafb702219bc7f751f713e53c351a4 Mon Sep 17 00:00:00 2001 From: "Philip P. Moltmann" Date: Wed, 22 Nov 2017 16:07:48 -0800 Subject: [PATCH 03/11] Switch to modern ArgumentMatchers Test: adb shell am instrument -w -e class com.android.settings.vpn2.PreferenceListTest com.android.settings.tests.unit/android.support.test.runner.AndroidJUnitRunner Change-Id: Id2e4684f6d3048cfb60fee1f747d0796c157a3da --- .../android/settings/vpn2/PreferenceListTest.java | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/tests/unit/src/com/android/settings/vpn2/PreferenceListTest.java b/tests/unit/src/com/android/settings/vpn2/PreferenceListTest.java index bb12efacf09..2accbf2aa0c 100644 --- a/tests/unit/src/com/android/settings/vpn2/PreferenceListTest.java +++ b/tests/unit/src/com/android/settings/vpn2/PreferenceListTest.java @@ -36,9 +36,9 @@ import java.util.List; import java.util.Map; import org.mockito.ArgumentCaptor; +import org.mockito.ArgumentMatcher; import org.mockito.Mock; import org.mockito.MockitoAnnotations; -import org.mockito.compat.ArgumentMatcher; public class PreferenceListTest extends AndroidTestCase { private static final String TAG = "PreferenceListTest"; @@ -135,13 +135,10 @@ public class PreferenceListTest extends AndroidTestCase { /* lockdownVpnKey */ null); updater.run(); - final ArgumentMatcher equalsFake = new ArgumentMatcher() { - @Override - public boolean matchesObject(final Object arg) { - if (arg == vpnProfile) return true; - if (arg == null) return false; - return TextUtils.equals(((VpnProfile) arg).key, vpnProfile.key); - } + final ArgumentMatcher equalsFake = arg -> { + if (arg == vpnProfile) return true; + if (arg == null) return false; + return TextUtils.equals(arg.key, vpnProfile.key); }; // The VPN profile should have been used to create a preference and set up at laest once From e29587e3345f617b832f43edb73d3b6ed61d70bb Mon Sep 17 00:00:00 2001 From: Doris Ling Date: Mon, 11 Dec 2017 17:32:03 -0800 Subject: [PATCH 04/11] Fix crashes related to ExternalSourcesDetails. - ExternalSourcesSettingsTest crashes due to the package moved of ExternalSourcesDetails. Corresponding xml has been updated in previous CLs. So, reverting the suppress tag for the test class. - ExternalSourcesDetails can be launched directly with MANAGE_UNKNOWN_APP_SOURCES intent, and client can pass in invalid package while launching ExternalSourcesDetails. Need to check whether the app info is invalid before we try to launch the fragment. - also fix test failure for not founding the app list as list object type and id had been changed. Change-Id: Id7787ca889f770e10d7a8e9fbf8dc79c9d6e884d Fixes: 70383636 Test: make RunSettingsRoboTests, make SettingsUnitTests --- .../appinfo/ExternalSourcesDetails.java | 3 + .../appinfo/ExternalSourcesDetailsTest.java | 97 +++++++++++++++++++ .../ExternalSourcesSettingsTest.java | 7 +- 3 files changed, 103 insertions(+), 4 deletions(-) create mode 100644 tests/robotests/src/com/android/settings/applications/appinfo/ExternalSourcesDetailsTest.java diff --git a/src/com/android/settings/applications/appinfo/ExternalSourcesDetails.java b/src/com/android/settings/applications/appinfo/ExternalSourcesDetails.java index 04000666d0c..87e5fdb359d 100644 --- a/src/com/android/settings/applications/appinfo/ExternalSourcesDetails.java +++ b/src/com/android/settings/applications/appinfo/ExternalSourcesDetails.java @@ -107,6 +107,9 @@ public class ExternalSourcesDetails extends AppInfoWithHeader @Override protected boolean refreshUi() { + if (mPackageInfo == null || mPackageInfo.applicationInfo == null) { + return false; + } if (mUserManager.hasBaseUserRestriction(UserManager.DISALLOW_INSTALL_UNKNOWN_SOURCES, UserHandle.of(UserHandle.myUserId()))) { mSwitchPref.setChecked(false); diff --git a/tests/robotests/src/com/android/settings/applications/appinfo/ExternalSourcesDetailsTest.java b/tests/robotests/src/com/android/settings/applications/appinfo/ExternalSourcesDetailsTest.java new file mode 100644 index 00000000000..ce38a562bdc --- /dev/null +++ b/tests/robotests/src/com/android/settings/applications/appinfo/ExternalSourcesDetailsTest.java @@ -0,0 +1,97 @@ +/* + * Copyright (C) 2017 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License + */ + +package com.android.settings.applications.appinfo; + +import static com.google.common.truth.Truth.assertThat; + +import static org.mockito.ArgumentMatchers.anyInt; +import static org.mockito.ArgumentMatchers.nullable; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +import android.content.pm.ApplicationInfo; +import android.content.pm.PackageInfo; +import android.os.UserManager; + +import com.android.settings.TestConfig; +import com.android.settings.applications.AppStateInstallAppsBridge; +import com.android.settings.applications.AppStateInstallAppsBridge.InstallAppsState; +import com.android.settings.testutils.SettingsRobolectricTestRunner; +import com.android.settingslib.RestrictedSwitchPreference; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.robolectric.annotation.Config; +import org.robolectric.util.ReflectionHelpers; + +@RunWith(SettingsRobolectricTestRunner.class) +@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) +public class ExternalSourcesDetailsTest { + + @Mock + private UserManager mUserManager; + @Mock + private RestrictedSwitchPreference mSwitchPref; + @Mock + private PackageInfo mPackageInfo; + + private ExternalSourcesDetails mFragment; + + @Before + public void setUp() { + MockitoAnnotations.initMocks(this); + + mFragment = new ExternalSourcesDetails(); + ReflectionHelpers.setField(mFragment, "mUserManager", mUserManager); + ReflectionHelpers.setField(mFragment, "mSwitchPref", mSwitchPref); + } + + @Test + public void refreshUi_noPackageInfo_shouldReturnFalseAndNoCrash() { + mFragment.refreshUi(); + + assertThat(mFragment.refreshUi()).isFalse(); + // should not crash + } + + @Test + public void refreshUi_noApplicationInfo_shouldReturnFalseAndNoCrash() { + ReflectionHelpers.setField(mFragment, "mPackageInfo", mPackageInfo); + + mFragment.refreshUi(); + + assertThat(mFragment.refreshUi()).isFalse(); + // should not crash + } + + @Test + public void refreshUi_hasApplicationInfo_shouldReturnTrue() { + ReflectionHelpers.setField(mFragment, "mPackageInfo", mPackageInfo); + mPackageInfo.applicationInfo = new ApplicationInfo(); + final AppStateInstallAppsBridge appBridge = mock(AppStateInstallAppsBridge.class); + ReflectionHelpers.setField(mFragment, "mAppBridge", appBridge); + when(appBridge.createInstallAppsStateFor(nullable(String.class), anyInt())) + .thenReturn(mock(InstallAppsState.class)); + + mFragment.refreshUi(); + + assertThat(mFragment.refreshUi()).isTrue(); + } +} diff --git a/tests/unit/src/com/android/settings/applications/ExternalSourcesSettingsTest.java b/tests/unit/src/com/android/settings/applications/ExternalSourcesSettingsTest.java index f7e956b3205..22d4bf6e04e 100644 --- a/tests/unit/src/com/android/settings/applications/ExternalSourcesSettingsTest.java +++ b/tests/unit/src/com/android/settings/applications/ExternalSourcesSettingsTest.java @@ -37,7 +37,6 @@ import android.os.UserManager; import android.provider.Settings; import android.support.test.InstrumentationRegistry; import android.support.test.filters.LargeTest; -import android.support.test.filters.Suppress; import android.support.test.runner.AndroidJUnit4; import android.support.test.uiautomator.By; import android.support.test.uiautomator.BySelector; @@ -46,7 +45,7 @@ import android.support.test.uiautomator.Direction; import android.support.test.uiautomator.UiDevice; import android.support.test.uiautomator.UiObject2; import android.support.test.uiautomator.Until; -import android.widget.ListView; +import android.support.v7.widget.RecyclerView; import android.widget.Switch; import android.widget.TextView; @@ -57,7 +56,6 @@ import org.junit.runner.RunWith; import java.util.List; -@Suppress @RunWith(AndroidJUnit4.class) @LargeTest public class ExternalSourcesSettingsTest { @@ -124,7 +122,8 @@ public class ExternalSourcesSettingsTest { final String testAppLabel = getApplicationLabel(mPackageName); mContext.startActivity(createManageExternalSourcesListIntent()); - final BySelector preferenceListSelector = By.clazz(ListView.class).res("android:id/list"); + final BySelector preferenceListSelector = + By.clazz(RecyclerView.class).res("com.android.settings:id/apps_list"); final UiObject2 preferenceList = mUiDevice.wait(Until.findObject(preferenceListSelector), START_ACTIVITY_TIMEOUT); assertNotNull("App list not shown", preferenceList); From e30af484ffea825bc8a6c81c3207d846d2fc63b8 Mon Sep 17 00:00:00 2001 From: Bill Yi Date: Tue, 12 Dec 2017 16:19:14 -0800 Subject: [PATCH 05/11] Import translations. DO NOT MERGE Auto-generated-cl: translation import Bug: 64712476 Change-Id: I37fb135ddf373093ede9b1d56bf6452ea52ef093 --- res/values-af/strings.xml | 4 +- res/values-ar/strings.xml | 4 +- res/values-az/strings.xml | 4 +- res/values-b+sr+Latn/strings.xml | 4 +- res/values-be/strings.xml | 4 +- res/values-bg/strings.xml | 4 +- res/values-bn/strings.xml | 4 +- res/values-bs/strings.xml | 3 +- res/values-ca/strings.xml | 3 +- res/values-cs/strings.xml | 4 +- res/values-da/strings.xml | 12 ++--- res/values-de/strings.xml | 9 ++-- res/values-el/strings.xml | 14 +++--- res/values-es-rUS/strings.xml | 6 +-- res/values-et/strings.xml | 4 +- res/values-eu/strings.xml | 4 +- res/values-fa/strings.xml | 3 +- res/values-fi/strings.xml | 4 +- res/values-fr-rCA/strings.xml | 4 +- res/values-fr/strings.xml | 4 +- res/values-gl/strings.xml | 4 +- res/values-gu/strings.xml | 4 +- res/values-hi/strings.xml | 86 ++++++++++++++++---------------- res/values-hr/strings.xml | 4 +- res/values-hu/strings.xml | 4 +- res/values-hy/strings.xml | 4 +- res/values-is/strings.xml | 4 +- res/values-it/strings.xml | 8 ++- res/values-iw/strings.xml | 4 +- res/values-ja/strings.xml | 4 +- res/values-ka/strings.xml | 4 +- res/values-kk/strings.xml | 4 +- res/values-km/strings.xml | 4 +- res/values-kn/strings.xml | 4 +- res/values-ko/strings.xml | 4 +- res/values-ky/strings.xml | 4 +- res/values-lo/strings.xml | 4 +- res/values-lt/strings.xml | 4 +- res/values-lv/strings.xml | 4 +- res/values-ml/strings.xml | 4 +- res/values-mn/strings.xml | 4 +- res/values-mr/strings.xml | 3 +- res/values-ms/strings.xml | 4 +- res/values-my/strings.xml | 4 +- res/values-nb/strings.xml | 4 +- res/values-ne/strings.xml | 4 +- res/values-pa/strings.xml | 6 +-- res/values-pl/strings.xml | 4 +- res/values-ru/strings.xml | 14 +++--- res/values-sq/strings.xml | 4 +- res/values-sr/strings.xml | 4 +- res/values-sv/strings.xml | 4 +- res/values-sw/strings.xml | 4 +- res/values-ta/strings.xml | 4 +- res/values-te/strings.xml | 4 +- res/values-th/strings.xml | 4 +- res/values-tl/strings.xml | 4 +- res/values-tr/strings.xml | 4 +- res/values-uk/strings.xml | 3 +- res/values-ur/strings.xml | 4 +- res/values-uz/strings.xml | 4 +- res/values-vi/strings.xml | 4 +- res/values-zh-rCN/strings.xml | 6 +-- res/values-zh-rHK/strings.xml | 4 +- res/values-zh-rTW/strings.xml | 4 +- res/values-zu/strings.xml | 4 +- 66 files changed, 129 insertions(+), 255 deletions(-) diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml index 7af1d22e45d..808ceccc7ed 100644 --- a/res/values-af/strings.xml +++ b/res/values-af/strings.xml @@ -624,7 +624,7 @@ "Om saam te bind met:<br><b>%1$s</b><br><br>maak seker dit wys hierdie geheimsleutel:<br><b>%2$s</b>" "Van:<br><b>%1$s</b><br><br>Bind met hierdie toestel saam?" "Om saam te bind met:<br><b>%1$s</b><br><br>Voer daarop in:<br><b>%2$s</b>, druk dan Return of Enter." - "Gee %1$s toegang tot jou kontakte en oproepgeskiedenis" + "Laat toegang tot jou kontakte en oproepgeskiedenis toe" "Kon nie aan %1$s koppel nie." "Soek vir toestelle" @@ -3400,8 +3400,6 @@ "Gebruik koeler skermkleure" "Skakel skerm af om kleur toe te pas" "Herselflaai toestel om telefonie-monitorverandering toe te pas" - "Kamera-HAL-HDR+" - "Herselflaai toestel om Kamera-HAL-HDR+-verandering toe te pas" "Kameralasersensor" "Outomatiese stelselopdaterings" "Gebruik" diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml index ecf5c223af2..5a5686d2d58 100644 --- a/res/values-ar/strings.xml +++ b/res/values-ar/strings.xml @@ -668,7 +668,7 @@ "‏للاقتران مع:<br><b>%1$s</b><br><br>تأكد من أنه يعرض مفتاح المرور هذا:<br><b>%2$s</b>" "‏من:<br><b>%1$s</b><br><br>الاقتران مع هذا الجهاز؟" "‏للإقران مع:<br><b>%1$s</b><br><br>اكتب عليه:<br><b>%2$s</b>, ثم اضغط على Return أو Enter." - "السماح للجهاز %1$s بالدخول إلى جهات الاتصال وسجل المكالمات" + "السماح بالوصول إلى جهات الاتصال وسجلّ المكالمات" "تعذر الاتصال بـ %1$s." "البحث عن أجهزة" @@ -3568,8 +3568,6 @@ "استخدم ألوان عرض هادئة" "لتطبيق التغيير في اللون، أوقف الشاشة." "لتطبيق التغيير الذي تم إجراؤه على خدمة مراقبة الاتصالات الهاتفية، يُرجى إعادة تشغيل الجهاز" - "Camera HAL HDR+‎" - "‏لتطبيق تغيير Camera HAL HDR+‎، يمكنك إعادة تشغيل الجهاز" "مُستشعِر الليزر في الكاميرا" "تحديثات النظام التلقائية" "الاستخدام" diff --git a/res/values-az/strings.xml b/res/values-az/strings.xml index 346f00f010a..3afda01e0af 100644 --- a/res/values-az/strings.xml +++ b/res/values-az/strings.xml @@ -624,7 +624,7 @@ "<br><b>%1$s</b><br><br> ilə birləşdirmək üçün, onun bu ana açarı göstərdiyinə əmin olun:<br><b>%2$s</b>" "Kimdən:<br><b>%1$s</b><br><br>Cihazınız bu cihazla cütləşsin?" "Bunlarla cütlənmək üçün:<br><b>%1$s</b><br><br>Bunu yazın:<br><b>%2$s</b>, sonra Geri və ya Giriş basın." - "Əlaqə və zəng tarixçəsinə giriş üçün %1$s cihazına icazə verin" + "Kontaktlar və zəng tarixçəsinə giriş icazəsi verin" "%1$s cihazına qoşula bilmədi." "Cihaz axtarın" @@ -3400,8 +3400,6 @@ "Serinləşdirici ekran rənglərini istifadə edin" "Rəng dəyişikliyini tətbiq etmək üçün ekranı söndürün" "Telefoniya monitoruna dəyişikliyi tətbiq etmək üçün cihazı yenidən yükləyin" - "Kamera HAL HDR+" - "Kamera HAL HDR+ dəyişikliyi əlavə etmək üçün cihazı yenidən işə salın" "Kamera Lazer Sensoru" "Avtomatik sistem güncəlləmələri" "İstifadə" diff --git a/res/values-b+sr+Latn/strings.xml b/res/values-b+sr+Latn/strings.xml index 7c7b22c3c30..5a03e2d34db 100644 --- a/res/values-b+sr+Latn/strings.xml +++ b/res/values-b+sr+Latn/strings.xml @@ -635,7 +635,7 @@ "Da biste se uparili sa uređajem:<br><b>%1$s</b><br><br>Uverite se da prikazuje ovaj pristupni kôd:<br><b>%2$s</b>" "Sa uređaja:<br><b>%1$s</b><br><br>Želite li da se uparite sa tim uređajem?" "Za uparivanje sa uređajem:<br><b>%1$s</b><br><br>Unesite na njemu:<br><b>%2$s</b>, a zatim pritisnite Return ili Enter." - "Dozvolite uređaju %1$s da pristupa kontaktima i istoriji poziva" + "Dozvolite pristup kontaktima i istoriji poziva" "Nije moguće povezati se sa uređajem %1$s." "Skeniranje za uređaje" @@ -3442,8 +3442,6 @@ "Koristi hladnije boje ekrana" "Da biste primenili promenu boje, isključite ekran" "Restartujte uređaj da biste primenili promenu TelephonyMonitor-a" - "Kamera HAL HDR+" - "Da biste primenili promenu na kameru HAL HDR+, restartujte uređaj" "Senzor lasera Kamere" "Automatska ažuriranja sistema" "Potrošnja" diff --git a/res/values-be/strings.xml b/res/values-be/strings.xml index 5d178ee888a..1a1796e18b1 100644 --- a/res/values-be/strings.xml +++ b/res/values-be/strings.xml @@ -646,7 +646,7 @@ "Каб падключыцца да прылады <br><b>%1$s</b><br><br>пераканайцеся, што яна адлюстроўвае ключ доступу:<br><b>%2$s</b>" "Ад: <br><b>%1$sПадключыцца да гэтай прылады?" "Каб падключыцца да прылады <br><b>%1$s</b><br><br>, увядзiце <br><b>%2$s</b>, затым нацiснiце \"Назад\" або Enter" - "Дазволіць прыладзе %1$s доступ да вашых кантактаў і гісторыі выклікаў" + "Дазвольце доступ да сваіх кантактаў і гісторыі выклікаў" "Не атрымалася падлучыцца да прылады %1$s" "Шукаць прылады" @@ -3486,8 +3486,6 @@ "Выкарыстоўваць больш халодныя колеры экрана" "Каб прымяніць змяненне колеру, адключыце экран" "Каб змены ў сродку адсочвання тэлефаніі былі прыменены, трэба перазагрузіць прыладу" - "HDR+ для камеры HAL" - "Каб уключыць HDR+ для камеры HAL, перазагрузіце прыладу" "Лазерны датчык камеры" "Аўтаматычныя абнаўленні сістэмы" "Выкарыстанне" diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml index 39482337a62..d4a4791e371 100644 --- a/res/values-bg/strings.xml +++ b/res/values-bg/strings.xml @@ -624,7 +624,7 @@ "За сдвояване със::<br><b>%1$s</b><br><br>Уверете се, че показва този код за достъп:<br><b>%2$s</b>" "От:<br><b>%1$s</b><br><br>Да се сдвои ли с това устройство?" "За сдвояване със: <br><b>%1$s</b><br><br> Въведете: <br><b>%2$s</b>, след това натиснете „Return“ или „Enter“." - "Разрешаване на „%1$s“ да осъществява достъп до вашите контакти и история на обажданията" + "Разрешаване на достъпа до контактите и историята на обажданията ви" "Не можа да се установи връзка със: %1$s." "Сканиране за устройства" @@ -3400,8 +3400,6 @@ "Използване на по-студени цветове за дисплея" "За да приложите промяната на цветовете, изключете екрана" "За да приложите промяната във функцията за наблюдение на телефонията, рестартирайте устройството" - "HDR+ с Camera HAL" - "За да приложите промяната, свързана с режима „HDR+ с Camera HAL“, рестартирайте устройството" "Сензор на лазера на камерата" "Автоматични системни актуализации" "Пренос на данни" diff --git a/res/values-bn/strings.xml b/res/values-bn/strings.xml index b68975a5bfb..6dec3e7d558 100644 --- a/res/values-bn/strings.xml +++ b/res/values-bn/strings.xml @@ -624,7 +624,7 @@ "এর সঙ্গে যুক্ত করতে:<br><b>%1$s</b><br><br>নিশ্চিত করুন যে এটি এই পাস কী দেখাচ্ছে:<br><b>%2$s</b>" "এর থেকে:<br><b>%1$s</b><br><br>এই ডিভাইসের সঙ্গে যুক্ত করবেন?" "এর সঙ্গে যুক্ত করতে:<br><b>%1$s</b><br><br>এটিতে টাইপ করুন:<br><b>%2$s</b>, তারপর Return বা Enter টিপুন।" - "%1$sকে আপনার পরিচিতি এবং কলের ইতিহাস অ্যাক্সেস করার মঞ্জুরি দিন" + "আপনার পরিচিতি এবং কল ইতিহাস অ্যাক্সেসের অনুমতি দিন" "%1$s এ সংযোগ করতে পারেনি।" "ডিভাইসগুলির জন্য স্ক্যান করুন" @@ -3400,8 +3400,6 @@ "কুলার প্রদর্শনী রঙগুলি ব্যবহার করুন" "রঙের পরিবর্তন প্রয়োগ করতে, স্ক্রীন বন্ধ করুন" "টেলিফোনি মনিটর এ করা পরিবর্তন প্রয়োগ করতে ডিভাইসটি বন্ধ করে আবার চালু করুন" - "ক্যামেরায় HAL HDR+" - "ক্যামেরায় HAL HDR+ পরিবর্তনটি প্রয়োগ করতে ডিভাইসটি বন্ধ করে আবার চালু করুন" "ক্যামেরা লেজার সেন্সর" "স্বয়ংক্রিয় সিস্টেম আপডেটগুলি" "ব্যবহার" diff --git a/res/values-bs/strings.xml b/res/values-bs/strings.xml index a94d2d17971..df11c6e311e 100644 --- a/res/values-bs/strings.xml +++ b/res/values-bs/strings.xml @@ -635,8 +635,7 @@ "Da biste izvršilu uparivanje s uređajem:<br><b>%1$s</b><br><br>Provjerite da li se prikazuje sljedeći pristupni ključ:<br><b>%2$s</b>" "Od:<br><b>%1$s</b><br><br>Želite izvršiti uparivanje s ovim uređajem?" "Da biste izvršili uparivanje s uređajem:<br><b>%1$s</b><br><br>Otkucajte na njemu:<br><b>%2$s</b>, a zatim pritisnite Return ili Enter." - - + "Dozvolite pristup kontaktima i historiji poziva" "Nije uspjelo povezivanje sa uređajem %1$s." "Potraži uređaje" diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml index c4a60c60e9d..38077956308 100644 --- a/res/values-ca/strings.xml +++ b/res/values-ca/strings.xml @@ -624,8 +624,7 @@ "Per vincular amb:<br><b>%1$s</b><br><br>Assegura\'t que apareix aquesta contrasenya:<br><b>%2$s</b>" "De:<br><b>%1$s</b><br><br>Vols vincular-lo amb aquest dispositiu?" "Per vincular amb:<br><b>%1$s</b><br><br>Escriu <br><b>%2$s</b> en el dispositiu i, a continuació, prem la tecla de retorn." - - + "Permet l\'accés als contactes i a l\'historial de trucades" "No s\'ha pogut connectar amb %1$s." "Cerca dispositius" diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml index 029a7fbc793..f953a39a54c 100644 --- a/res/values-cs/strings.xml +++ b/res/values-cs/strings.xml @@ -646,7 +646,7 @@ "Párování se zařízením:<br><b>%1$s</b><br><br>Zkontrolujte, zda zařízení zobrazuje tento přístupový klíč:<br><b>%2$s</b>" "Ze zařízení:<br><b>%1$s</b><br><br>Spárovat s tímto zařízením?" "Párování se zařízením:<br><b>%1$s</b><br><br>Zadejte:<br><b>%2$s</b> a poté stiskněte klávesu Return nebo Enter." - "Povolit zařízení %1$s přístup k vašim kontaktům a historii volání" + "Povolit přístup ke kontaktům a historii volání" "K zařízení %1$s se nelze připojit." "Vyhledat zařízení" @@ -3484,8 +3484,6 @@ "Použijí se studenější barvy zobrazení" "Chcete-li změnu barev použít, vypněte obrazovku" "Chcete-li použít změnu sledování telefonních služeb, restartujte zařízení" - "Fotoaparát HAL HDR+" - "Chcete-li použít změnu fotoaparátu HAL HDR+, restartujte zařízení" "Laserový senzor fotoaparátu" "Automatické aktualizace systému" "Využití" diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml index 6bd335c0dd3..c913966b312 100644 --- a/res/values-da/strings.xml +++ b/res/values-da/strings.xml @@ -624,7 +624,7 @@ "Sådan parrer du med:<br><b>%1$s</b><br><br>Sørg for, at den viser denne adgangsnøgle:<br><b>%2$s</b>" "Fra:<br><b>%1$s</b><br><br>Par med denne enhed?" "Sådan parres med:<br><b>%1$s</b><br><br>Skriv på den:<br><b>%2$s</b>, og tryk derefter på Retur eller Enter." - "Giv %1$s adgang til dine kontaktpersoner og din opkaldshistorik" + "Giv adgang til dine kontaktpersoner og din opkaldshistorik" "Der kunne ikke oprettes forbindelse til %1$s." "Søg efter enheder" @@ -2803,7 +2803,7 @@ "arbejdsprofil, administreret profil, samle, samling, arbejde, profil" "bevægelser" "betal, tryk, betalinger" - "sikkerhedskopiering, sikkerhedskopiér" + "backup, sikkerhedskopiér" "bevægelse" "Konfigurer NFC-tag for Wi-Fi" "Skriv" @@ -3038,7 +3038,7 @@ Skift til Kun alarmer i %1$d minutter (indtil %2$s) - Skift til Kun alarmer i %1$d timer indtil %2$s + Skift til Kun alarmer i %1$d time indtil %2$s Skift til Kun alarmer i %1$d timer indtil %2$s "Skift til Kun alarmer frem til %1$s" @@ -3052,7 +3052,7 @@ "Når skærmen er tændt" "Når skærmen er slukket" "Når skærmen er tændt eller slukket" - "Indstillinger for underretninger" + "Underretningsindstillinger" "Send feedback om denne enhed" "Indtast administratorpinkoden" "Til" @@ -3350,7 +3350,7 @@ "%1$s er standard" "TIL/%1$s" "FRA" - "Sikkerhedskopiering er slået fra" + "Backup er slået fra" "Opdateret til Android %1$s" "Handlingen er ikke tilladt" "Lydstyrken kan ikke ændres" @@ -3400,8 +3400,6 @@ "Brug køligere skærmfarver" "Du skal slå skærmen fra, før du kan anvende farveændringer" "Genstart enheden for at anvende ændringen i forbindelse med Overvågning af telefoni" - "Camera HAL HDR+" - "Genstart enheden for at anvende ændringen i forbindelse med Camera HAL HDR+" "Kameraets lasersensor" "Automatiske systemopdateringer" "Forbrug" diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml index 74d00395352..a5c80c2651a 100644 --- a/res/values-de/strings.xml +++ b/res/values-de/strings.xml @@ -624,8 +624,7 @@ ) --> "Von:<br><b>%1$s</b><br><br> Mit diesem Gerät koppeln?" "Gib zur Kopplung mit <br><b>%1$s</b><br><br> <br><b>%2$s</b> ein und drücke anschließend die Eingabetaste." - - + "Zugriff auf deine Kontakte und deine Anrufliste zulassen" "Keine Verbindung zu %1$s möglich" "Scan nach Geräten" @@ -2170,7 +2169,7 @@ "Spracheingabe" "Spracheingabedienste" "Vollständiger Sprachinteraktionsdienst einschließlich der Verwendung von Hotwords" - "Einfache Text-in-Sprache-Funktion" + "Einfache Sprachausgabe-Funktion" "Dieser Spracheingabedienst kann Spracheingaben jederzeit überwachen und Anwendungen, die Sprachbefehle unterstützen, für dich steuern. Er wird von der Anwendung %s bereitgestellt. Möchtest du diesen Dienst aktivieren?" "Bevorzugtes Modul" "Moduleinstellungen" @@ -2258,7 +2257,7 @@ "Apps zur Geräteverwaltung" "Keine App zur Geräteverwaltung verfügbar" "Nutzer" - "Arbeit" + "Geschäftlich" "Keine verfügbaren Trust Agents" "App zur Geräteverwaltung aktivieren?" "Diese App zur Geräteverwaltung aktivieren" @@ -3130,7 +3129,7 @@ "Installierte Apps" "Instant-Apps" "Nutzer" - "Arbeit" + "Geschäftlich" "Apps: alle" "Apps: deaktiviert" "Kategorien: sehr hohe Wichtigkeit" diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml index 6bb177d374b..32bd91f85f0 100644 --- a/res/values-el/strings.xml +++ b/res/values-el/strings.xml @@ -624,7 +624,7 @@ "Για σύζευξη με τη συσκευή:<br><b>%1$s</b><br><br>Βεβαιωθείτε ότι εμφανίζεται το κλειδί πρόσβασης:<br><b>%2$s</b>" "Από:<br><b>%1$s</b><br><br>Να γίνει σύζευξη με αυτήν τη συσκευή;" "Για σύζευξη με:<br><b>%1$s</b><br><br>Πληκτρολογήστε:<br><b>%2$s</b> και πιέστε το πλήκτρο επιστροφής (Return) ή το πλήκτρο Enter." - "Να επιτρέπεται στη συσκευή %1$s να έχει πρόσβαση στις επαφές και το ιστορικό κλήσεών σας" + "Να επιτρέπεται η πρόσβαση στις επαφές σας και στο ιστορικό κλήσεων" "Δεν ήταν δυνατή η σύνδεση με τη συσκευή %1$s." "Ανίχνευση για συσκευές" @@ -1580,13 +1580,13 @@ "Δεδομένα χρήστη" "Εφαρμογή αποθηκευτικού χώρου USB" "Κάρτα SD" - "Κατάργηση εγκατάστασης" - "Κατάργηση εγκατάστασης για όλους τους χρήστες" + "Απεγκατάσταση" + "Απεγκατάσταση για όλους τους χρήστες" "Εγκατάσταση" "Απενεργοποίηση" "Ενεργοποίηση" "Διαγραφή δεδομένων" - "Κατάργηση εγκατάστασης ενημερώσεων" + "Απεγκατάσταση ενημερώσεων" "Έχετε επιλέξει να γίνεται εκκίνηση αυτής της εφαρμογής από προεπιλογή για ορισμένες ενέργειες." "Έχετε επιλέξει να επιτρέπεται σε αυτήν την εφαρμογή η δημιουργία γραφικών στοιχείων και η πρόσβαση στα δεδομένα τους." "Δεν έχουν οριστεί προεπιλογές." @@ -2252,7 +2252,7 @@ "Ρυθμίσεις διαχειριστή συσκευής" "Εφαρμογή διαχειριστή συσκευής" "Απενεργοποίηση αυτής της εφαρμογής διαχειριστή συσκευής" - "Κατάργηση εγκατάστασης εφαρμογής" + "Απεγκατάσταση εφαρμογής" "Απενεργοποίηση και απεγκατάσταση" "Εφαρμογές διαχειριστή συσκευής" "Δεν υπάρχουν διαθέσιμες εφαρμογές διαχειριστή συσκευής" @@ -3400,8 +3400,6 @@ "Χρήση πιο ψυχρών χρωμάτων οθόνης" "Για να εφαρμόσετε μια αλλαγή στο χρώμα, απενεργοποιήστε την οθόνη" "Για να πραγματοποιήσετε αλλαγές στην παρακολούθηση τηλεφωνίας, επανεκκινήστε τη συσκευή" - "HDR+ HAL κάμερας" - "Για να πραγματοποιήσετε αλλαγές στο HDR+ HAL κάμερας, επανεκκινήστε τη συσκευή" "Αισθητήρας λέιζερ κάμερας" "Αυτόματες ενημερώσεις συστήματος" "Χρήση" @@ -3678,7 +3676,7 @@ Εφαρμογή κάμερας "Εφαρμογή ημερολογίου" - "Εφαρμογή επαφών" + "Εφαρμογή Επαφές" Εφαρμογές ηλεκτρ. ταχυδρομείου Εφαρμογή ηλεκτρ. ταχυδρομείου diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml index 0c2863cf807..ce0da7394a7 100644 --- a/res/values-es-rUS/strings.xml +++ b/res/values-es-rUS/strings.xml @@ -624,7 +624,7 @@ "Para sincronizar con<br><b>%1$s</b><br><br>asegúrate de que se muestre esta clave de acceso:<br><b>%2$s</b>." "¿Desde: <br><b>%1$s</b><br><br>sincronizas con este dispositivo?" "Para sincronizar con:<br><b>%1$s</b><br><br>Escribe allí:<br><b>%2$s</b> y luego presiona Volver o Enter." - "Permitir que %1$s acceda a los contactos y al historial de llamadas" + "Permitir el acceso a tus contactos y al historial de llamadas" "No se pudo establecer conexión con %1$s." "Buscar dispositivos" @@ -1603,7 +1603,7 @@ "Restablecer preferencias" "¿Restablecer?" "Se restablecerán las preferencias de:\n\n "
  • "Apps inhabilitadas"
  • \n" "
  • "Notificaciones de apps inhabilitadas"
  • \n" "
  • "Apps predeterminadas para realizar acciones"
  • \n" "
  • "Restricciones de datos en segundo plano para apps"
  • \n" "
  • "Restricciones de permisos"
  • \n\n" No se perderán los datos de las apps."
    - "Restablecer aplicaciones" + "Restablecer apps" "Administrar el espacio" "Filtro" "Elegir opciones de filtro" @@ -3398,8 +3398,6 @@ "Usar colores de pantalla más fríos" "Para aplicar el cambio de color, apaga la pantalla" "Para aplicar el cambio de Telephony Monitor, reinicia el dispositivo" - "Cámara HAL HDR+" - "Para aplicar el cambio a la cámara HAL HDR+, reinicia el dispositivo" "Sensor láser de la cámara" "Actualizaciones automáticas del sistema" "Uso" diff --git a/res/values-et/strings.xml b/res/values-et/strings.xml index 7022c82c132..973d36ec9e9 100644 --- a/res/values-et/strings.xml +++ b/res/values-et/strings.xml @@ -624,7 +624,7 @@ "Sidumine seadmega<br><b>%1$s</b><br><br>Veenduge, et see kuvaks järgmist parooli:<br><b>%2$s</b>" "Seadmelt: <br><b>%1$s</b><br><br> Kas siduda seadmega?" "Siduda seadmega:<br><b>%1$s</b><br><br>Sisestage:<br><b>%2$s</b>, seejärel vajutage naasmis- või sisestusklahvi." - "Lubage seadmel %1$s juurde pääseda teie kontaktidele ja kõneajaloole" + "Luba juurdepääs kontaktidele ja kõneajaloole" "Seadmega %1$s ei saanud ühendust." "Otsi seadmeid" @@ -3400,8 +3400,6 @@ "Kasutatakse külmemaid ekraanivärve" "Värvi muutmise rakendamiseks lülitage ekraan välja" "Teenuse Telephony Monitor muudatuse rakendamiseks taaskäivitage seade" - "Kaamera HAL HDR+" - "Kaamera HAL HDR+ muudatuse rakendamiseks taaskäivitage seade" "Kaamera laserandur" "Automaatsed süsteemivärskendused" "Kasutus" diff --git a/res/values-eu/strings.xml b/res/values-eu/strings.xml index 92fda464074..ea1677c9f25 100644 --- a/res/values-eu/strings.xml +++ b/res/values-eu/strings.xml @@ -624,7 +624,7 @@ "Gailu honekin parekatzeko:<br><b>%1$s</b><br><br>Ziurtatu pasakode hau erakusten duela:<br><b>%2$s</b>" "Igorlea:<br><b>%1$s</b><br><br>Gailuarekin parekatu?" "Honekin parekatzeko:<br><b>%1$s</b><br><br>Idatzi hau bertan:<br><b>%2$s</b>, eta sakatu Itzuli edo Sartu." - "Baimendu %1$s gailuari zure kontaktuak eta deien historia atzitzea" + "Baimendu kontaktuak eta deien historia atzitzea" "Ezin izan da %1$s gailura konektatu." "Bilatu gailuak" @@ -3400,8 +3400,6 @@ "Erabili kolore hotzagoak pantailan" "Kolorea aldatzeko, itzal ezazu pantaila" "Telefono-gainbegiratzailean egindako aldaketa aplikatzeko, berrabiarazi gailua" - "Kameraren HAL HDR+ modua" - "Kamera HAL HDR+ modura aldatzeko, berrabiarazi gailua" "Kameraren laser-sentsorea" "Sistemaren eguneratze automatikoak" "Erabilera" diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml index fbf1fbfbee8..0b8f2d7ba54 100644 --- a/res/values-fa/strings.xml +++ b/res/values-fa/strings.xml @@ -624,8 +624,7 @@ "‏برای مرتبط‌سازی با:<br><b>%1$s</b><br><br>مطمئن شوید که دستگاه این کلیدواژه را نمایش می‌دهد:<br><b>%2$s</b>" "‏از::<br><b>%1$s</b><br><br>با این دستگاه مرتبط‌سازی شود؟" "‏برای مرتبط‌سازی با:<br><b>%1$s</b><br><br>روی آن تایپ کنید:<br><b>%2$s</b>، سپس Return یا Enter را فشار دهید." - - + "اجازه دسترسی به مخاطبین و سابقه تماس" "اتصال به %1$s ممکن نیست." "اسکن برای دستگاه‌ها" diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml index cd64171bdd5..3af39e2ba3c 100644 --- a/res/values-fi/strings.xml +++ b/res/values-fi/strings.xml @@ -624,7 +624,7 @@ "Parin muodostus seuraavan laitteen kanssa:<br><b>%1$s</b><br><br>Varmista, että laite esittää tämän koodin:<br><b>%2$s</b>" "Laitteesta<br><b>%1$s</b><br><br>Muodostetaanko pari tämän laitteen kanssa?" "Jos haluat muodostaa laiteparin laitteen <br><b>%1$s</b><br><br> kanssa, kirjoita laitteelle <br><b>%2$s</b> ja paina Rivinvaihto tai Enter." - "Salli laitteen %1$s käyttää yhteystietojasi ja puheluhistoriaasi" + "Anna yhteystietojesi ja puheluhistoriasi käyttöoikeus" "Yhteyden muodostaminen laitteeseen %1$s epäonnistui." "Etsi laitteita" @@ -3400,8 +3400,6 @@ "Käytä viileämpiä värilämpötiloja" "Ota värin muutos käyttöön sammuttamalla näyttö." "Käynnistä laite uudelleen, niin puhelinpalvelujen seurannan muutokset astuvat voimaan." - "Kameran HAL HDR+" - "Käynnistä laite uudelleen, niin kameran HAL HDR+ ‑muutos astuu voimaan." "Kameran laseranturi" "Automaattiset järjestelmäpäivitykset" "Käyttö" diff --git a/res/values-fr-rCA/strings.xml b/res/values-fr-rCA/strings.xml index 4d14643062f..46ef7d9105e 100644 --- a/res/values-fr-rCA/strings.xml +++ b/res/values-fr-rCA/strings.xml @@ -624,7 +624,7 @@ "Pour associer votre appareil à :<br><b>%1$s</b><br><br>Assurez-vous que le mot de passe <br><b>%2$s</b> s\'affiche." "De :<br><b>%1$s</b><br><br>Associer à cet appareil?" "Pour l\'association à :<br><b>%1$s</b><br><br>Saisissez <br><b>%2$s</b>, puis appuyez sur « Retour » ou sur « Entrée »." - "Autoriser « %1$s » à accéder à vos contacts et à l\'historique des appels" + "Autoriser l\'accès à vos contacts et à l\'historique des appels" "Impossible de se connecter à %1$s." "Recherche d\'appareils" @@ -3400,8 +3400,6 @@ "Utiliser des couleurs plus froides à l\'écran" "Pour appliquer la modification des couleurs, éteignez l\'écran" "Pour appliquer les changements de TelephonyMonitor, redémarrez l\'appareil" - "Mode HAL HDR+ de l\'appareil photo" - "Pour appliquer les changements HAL HDR+ de l\'appareil photo, redémarrez l\'appareil" "Capteur laser de l\'appareil photo" "Mises à jour automatiques du système" "Utilisation" diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml index b2a62b468df..5e12062df7e 100644 --- a/res/values-fr/strings.xml +++ b/res/values-fr/strings.xml @@ -624,7 +624,7 @@ "Pour associer votre appareil à :<br><b>%1$s</b><br><br>Assurez-vous que le mot de passe <br><b>%2$s</b> s\'affiche." "De :<br><b>%1$s</b><br><br>Associer à cet appareil ?" "Pour l\'association à :<br><b>%1$s</b><br><br>Saisissez <br><b>%2$s</b>, puis appuyez sur \"Retour\" ou sur \"Entrée\"." - "Autoriser %1$s à accéder à vos contacts et à l\'historique des appels" + "Autoriser l\'accès à vos contacts et à l\'historique des appels" "Impossible de se connecter à %1$s." "Rechercher des appareils" @@ -3400,8 +3400,6 @@ "Utiliser des couleurs plus froides à l\'écran" "Pour appliquer la modification des couleurs, éteignez l\'écran." "Pour appliquer la modification effectuée par Telephony Monitor, redémarrez l\'appareil" - "Fonction HDR+ HAL de la caméra" - "Pour activer la fonction HDR+ dans l\'HAL de la caméra, redémarrez l\'appareil" "Capteur du laser de l\'appareil photo" "Mises à jour automatiques du système" "Consommation" diff --git a/res/values-gl/strings.xml b/res/values-gl/strings.xml index f9b437fd922..8cdfd66082e 100644 --- a/res/values-gl/strings.xml +++ b/res/values-gl/strings.xml @@ -624,7 +624,7 @@ "Para sincronizar con:<br><b>%1$s</b><br><br>Asegúrate de que está mostrando este contrasinal:<br><b>%2$s</b>" "De:<br><b>%1$s</b><br><br>Sincronizar con este dispositivo?" "Para sincronizar con:<br><b>%1$s</b><br><br>Escribe nel:<br><b>%2$s</b> e, a continuación, preme Retroceso ou Intro." - "Permitir que %1$s acceda aos teus contactos e ao historial de chamadas" + "Permitir o acceso aos teus contactos e ao historial de chamadas" "Non se puido conectar a %1$s." "Buscar dispositivos" @@ -3400,8 +3400,6 @@ "Utiliza cores de visualización máis frías" "Para aplicar o cambio de cor, apaga a pantalla" "Para aplicar o cambio do monitor de telefonía, reinicia o dispositivo" - "Cámara HAL HDR+" - "Para aplicar o cambio da cámara HAL HDR+, reinicia o dispositivo" "Sensor láser da cámara" "Actualizacións automáticas do sistema" "Uso" diff --git a/res/values-gu/strings.xml b/res/values-gu/strings.xml index 13085efa818..9c2dd819c2d 100644 --- a/res/values-gu/strings.xml +++ b/res/values-gu/strings.xml @@ -624,7 +624,7 @@ "આની સાથે જોડી કરવા માટે:<br><b>%1$s</b><br><br>ખાતરી કરો કે તે આ પાસકી દર્શાવી રહ્યું છે:<br><b>%2$s</b>" "અહીંથી:<br><b>%1$s</b><br><br>આ ઉપકરણ સાથે જોડી કરીએ?" "આની સાથે જોડી કરવા:<br><b>%1$s</b><br><br>તેના પર લખો:<br><b>%2$s</b>, પછી Return અથવા Enter દબાવો." - "%1$s ને તમારા સંપર્કો અને કૉલ ઇતિહાસને ઍક્સેસ કરવાની મંજૂરી આપો" + "તમારા સંપર્કો અને કૉલ ઇતિહાસના ઍક્સેસની મંજૂરી આપો" "%1$s સાથે કનેક્ટ કરી શકાયું નથી." "ઉપકરણો માટે સ્કૅન કરો" @@ -3400,8 +3400,6 @@ "વધુ કૂલ પ્રદર્શન રંગોનો ઉપયોગ કરો" "રંગ ફેરફાર લાગુ કરવા માટે, સ્ક્રીન બંધ કરો" "Telephony Monitor ના ફેરફારો લાગુ કરવા, ઉપકરણને રીબૂટ કરો" - "કૅમેરા HAL HDR+" - "કૅમેરા HAL HDR+ ફેરફાર લાગુ કરવા માટે, ઉપકરણને રીબૂટ કરો." "કૅમેરાનું લેસર સેન્સર" "સ્વચાલિત સિસ્ટમ અપડેટ્સ" "વપરાશ" diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml index 1926e1ba011..334e5265181 100644 --- a/res/values-hi/strings.xml +++ b/res/values-hi/strings.xml @@ -250,7 +250,7 @@ "अभी नहीं" "आगे" "भाषाएं" - "भाषा प्राथमिकताएं" + "पसंदीदा भाषा" "निकालें" "भाषा जोड़ें" @@ -304,7 +304,7 @@ "ऑपरेटर चयन" "कोई नेटवर्क ऑपरेटर चुनें" "तारीख और समय" - "दिनांक और समय सेट करें" + "तारीख और समय सेट करें" "तारीख, समय, समय क्षेत्र और प्रारूप सेट करें" "ऑटोमैटिक तारीख और समय" "नेटवर्क-प्रदत्त समय का उपयोग करें" @@ -325,7 +325,7 @@ "तारीख" "समय" "अपने आप लॉक करें" - "%1$s निष्क्रियता के बाद" + "%1$s तक इस्तेमाल न होने के बाद" "सो जाने के तुरंत बाद, %1$s के द्वारा अनलॉक रखे जाने को छोड़कर" "%2$s के अनलॉक रखे जाने के अलावा, कम बैटरी मोड में होने के बाद %1$s" "लॉक स्‍क्रीन पर अपनी जानकारी दिखाएं" @@ -353,7 +353,7 @@ "सुरक्षा स्थिति" "स्क्रीन लॉक, फ़िंगरप्रिंट" "स्क्रीन लॉक" - "अंगुली की छाप" + "उंगली की छाप" "फ़िंगरप्रिंट प्रबंधित करें" "इनके हेतु फ़िंगरप्रिंट उपयोग करें" "फ़िंगरप्रिंट जोड़ें" @@ -384,7 +384,7 @@ "फिर भी आगे बढ़ें" "वापस जाएं" "सेंसर को छुएं" - "यह आपके फ़ोन के पीछे दिया गया है. अपने अंगूठे के पास की अंगुली का उपयोग करें." + "यह आपके फ़ोन के पीछे दिया गया है. अपने अंगूठे के पास की उंगली का उपयोग करें." "डिवाइस और उस पर फ़िंगरप्रिंट सेंसर की जगह बताने वाला चित्रण" "नाम" "ठीक है" @@ -392,7 +392,7 @@ "सेंसर को छुएं" "अपनी उंगली सेंसर पर रखें और कंपन (वाइब्रेशन) महसूस होने पर उठा लें" "उठाएं, फिर दोबारा छुएं" - "अपने फ़िंगरप्रिंट के अलग-अलग भागों को जोड़ने के लिए अपनी अंगुली को उठाते रहें" + "अपने फ़िंगरप्रिंट के अलग-अलग भागों को जोड़ने के लिए अपनी उंगली को उठाते रहें" "फ़िंगरप्रिंट जोड़ा गया" "जब आपको यह आइकॉन दिखाई दे, तब पहचान के लिए या खरीदारियों की स्वीकृति देने के लिए अपने फ़िंगरप्रिंट का इस्तेमाल करें." "इसे बाद में करें" @@ -401,10 +401,10 @@ "स्‍क्रीन लॉक सेट करें" "हो गया" "ओह हो, वह सेंसर नहीं है" - "अपने फ़ोन के पीछे लगे सेंसर को छुएं. अपनी तर्जनी (अंगूठे के बगल वाली) अंगुली का इस्तेमाल करें." + "अपने फ़ोन के पीछे लगे सेंसर को छुएं. अपनी तर्जनी (अंगूठे के बगल वाली) उंगली का इस्तेमाल करें." "नामांकन पूर्ण नहीं हुआ था" "फ़िंगरप्रिंट नामांकन समय की सीमा पार हो गई है. फिर से प्रयास करें." - "फ़िंगरप्रिंट नामांकन ने काम नहीं किया. फिर से प्रयास करें या किसी दूसरी अंगुली का उपयोग करें." + "फ़िंगरप्रिंट नामांकन ने काम नहीं किया. फिर से प्रयास करें या किसी दूसरी उंगली का उपयोग करें." "कोई और जोड़ें" "आगे" "अपना फ़ोन अनलॉक करने के साथ-साथ, खरीदारी और ऐप ऐक्‍सेस को अधिकृत करने के लिए आप अपनी फ़िंगरप्रिंट का भी उपयोग कर सकते हैं. ""ज़्यादा जानें" @@ -497,7 +497,7 @@ "आकार" "पिन" "पासवर्ड" - "स्‍क्रीन लॉक सेट करने के बाद, आप सेटिंग और सुरक्षा में अपनी अंगुली की छाप भी सेट कर सकते हैं." + "स्‍क्रीन लॉक सेट करने के बाद, आप सेटिंग और सुरक्षा में अपनी उंगली की छाप भी सेट कर सकते हैं." "स्‍क्रीन लॉक बंद करें" "डिवाइस सुरक्षा निकालें?" "प्रोफ़ाइल सुरक्षा निकालें?" @@ -624,7 +624,7 @@ "इससे युग्मित करने के लिए:<br><b>%1$s</b><br><br>सुनिश्चित करें कि वह यह पासकी दिखा रहा है:<br><b>%2$s</b>" "इससे:<br><b>%1$s</b><br><br>इस डिवाइस से जोड़ें?" "इसके साथ युग्‍मित करने के लिए:<br><b>%1$s</b><br><br>इस पर लिखें:<br><b>%2$s</b>, फिर Return या Enter दबाएं." - "%1$s को अपने संपर्कों तथा कॉल इतिहास ऐक्‍सेस करने की अनुमति दें" + "आपके संपर्क और कॉल इतिहास देखने की मंज़ूरी दें" "%1$s से कनेक्‍ट नहीं किया जा सका." "डिवाइस के लिए स्‍कैन" @@ -651,7 +651,7 @@ "विकल्प…" "बेहतर सेटिंग" "बेहतर ब्लूटूथ" - "ब्लूटूथ के चालू होने पर, आपका डिवाइस आस-पास के और ब्लूटूथ डिवाइस से संचार कर सकता है." + "ब्लूटूथ चालू होने पर, आपका डिवाइस आस-पास के दूसरे ब्लूटूथ डिवाइस से संपर्क कर सकता है." "जगह की सटीकता को बेहतर बनाने के लिए, सिस्‍टम ऐप और सेवाएं अभी भी ब्‍लूटूथ डिवाइसों का पता लगा सकती हैं. आप इसे LINK_BEGINस्‍कैन करने की सेटिंगLINK_END में बदल सकते हैं." "कनेक्ट नहीं हो सका. फिर से कोशिश करें." "डिवाइस विवरण" @@ -698,13 +698,13 @@ "%1$d Mbps" "%s वाई-फ़ाई को चालू करना चाहता है" "%s वाई-फ़ाई को बंद करना चाहता है" - "आस-पास के उपकरणों से संपर्क (एन एफ सी)" + "आस-पास के डिवाइस से संपर्क (एनएफसी)" "जब टैबलेट अन्य डिवाइस को स्पर्श करे तो डेटा ट्रांसफर करने दें" "जब फ़ोन अन्य डिवाइस को स्पर्श करे तो डेटा ट्रांसफर करने दें" "NFC चालू करें" "NFC इस डिवाइस और आस-पास के अन्य डिवाइस या लक्ष्यों के बीच डेटा का आदान-प्रदान करता है, जैसे कि भुगतान टर्मिनल, एक्सेस रीडर और सहभागी विज्ञापन या टैग." "Android बीम" - "NFC के माध्यम से ऐप सामग्री प्रसारित करने के लिए तैयार" + "एनएफसी के ज़रिए ऐप की सामग्री भेजने के लिए तैयार" "बंद" "अनुपलब्‍ध है क्‍योंकि NFC बंद है" "Android बीम" @@ -791,7 +791,7 @@ "सिग्‍नल शक्ति" "स्थिति" "लिंक गति" - "आवृत्ति" + "फ़्रीक्वेंसी" "आईपी पता" "के द्वारा सहेजा गया" "%1$s प्रमाणिकता" @@ -951,7 +951,7 @@ "आवाज़" "आवाज़" "संगीत प्रभाव" - "रिंग वॉल्यूम" + "रिंग की आवाज़" "शांत होने पर कंपन (वाइब्रेशन) करे" "सूचना की डिफ़ॉल्ट आवाज़" "रिंगटोन" @@ -960,7 +960,7 @@ "कार्य प्रोफ़ाइल का समर्थन नहीं करता है" "सूचना की डिफ़ॉल्ट आवाज़" "मीडिया" - "संगीत और वीडियो के लिए वॉल्‍यूम सेट करें" + "संगीत और वीडियो के लिए आवाज़ सेट करें" "अलार्म" "संलग्‍न किए गए डॉक के लिए ऑडियो सेटिंग" "कॉल करते समय ध्वनी सुने" @@ -1052,7 +1052,7 @@ "सूर्योदय होने पर अपने आप बंद हो जाएगा" "सुलाएं (कम बैटरी मोड)" "स्क्रीन बंद हो जाती है" - "नि‍ष्‍क्रि‍यता के %1$s के बाद" + "%1$s तक इस्तेमाल न होने पर" "वॉलपेपर" "डिफ़ॉल्ट" "कस्टम" @@ -1512,7 +1512,7 @@ "अनलॉक पिन बदलें" "अनलॉक आकार बनाएं" "सहायता के लिए मेन्यू दबाएं." - "पूरा होने पर अंगुली हटा लें" + "पूरा होने पर उंगली हटा लें" "कम से कम %d बिंदुओं को कनेक्‍ट करें. पुन: प्रयास करें:" "आकार रिकॉर्ड किया गया" "पुष्टि के लिए आकार को फिर से बनाएं" @@ -1547,7 +1547,7 @@ "ऐप्स प्रबंधित करें" "इंस्‍टॉल किए गए ऐप्स प्रबंधित करें और निकालें" "ऐप की जानकारी" - "ऐप्स प्रबंधित करें, त्‍वरित लॉन्‍च शॉर्टकट सेट करें" + "ऐप प्रबंधित करें, तुरंत लॉन्‍च करने वाले शॉर्टकट सेट करें" "ऐप्स सेटिंग" "नामालूम स्रोत" "सभी ऐप्स स्रोतों को अनुमति दें" @@ -1737,7 +1737,7 @@ "स्‍वत: अक्षर बड़े करना" "वाक्‍यों में प्रथम अक्षर को बड़ा लिखें" "स्‍वत: विरामचिह्न लगाएं" - "भौतिक कीबोर्ड सेटिंग" + "सामान्य कीबोर्ड की सेटिंग" "\".\" सम्‍मिलित करने के लिए Space कुंजी दो बार दबाएं" "पासवर्ड दिखाएं" "लिखते समय वर्ण दिखाएं" @@ -1749,9 +1749,9 @@ "उपलब्‍ध वर्चुअल कीबोर्ड" "कीबोर्ड प्रबंधित करें" "कीबोर्ड सहायता" - "भौतिक कीबोर्ड" + "सामान्य कीबोर्ड" "वर्चुअल कीबोर्ड दिखाएं" - "भौतिक कीबोर्ड के सक्रिय होने के दौरान इसे स्‍क्रीन पर बनाए रखें" + "सामान्य कीबोर्ड चालू रहने के दौरान इसे स्‍क्रीन पर दिखाते रहें" "कीबोर्ड शॉर्टकट सहायक" "उपलब्ध शॉर्टकट दिखाएं" "डिफ़ॉल्ट" @@ -1799,8 +1799,8 @@ "%1$s सेटिंग" "सक्रिय इनपुट पद्धतियां चुनें" "ऑनस्‍क्रीन कीबोर्ड सेटिंग" - "भौतिक कीबोर्ड" - "भौतिक कीबोर्ड सेटिंग" + "सामान्य कीबोर्ड" + "सामान्य कीबोर्ड की सेटिंग" "गैजेट चुनें" "विजेट चुनें" "विजेट बनाएं और पहुंच की अनुमति दें?" @@ -1836,12 +1836,12 @@ "ज़ूम करने के लिए 3 बार टैप करें" "ज़ूम करने के लिए किसी बटन पर टैप करें" "ज़ूम करने के लिए"", स्क्रीन पर 3 बार जल्दी-जल्दी टैप करें.\n"
    • "स्क्रोल करने के लिए 2 या उससे ज़्यादा उंगलियां खींचें"
    • \n
    • "ज़ूम एडजस्ट करने के लिए 2 या उससे ज़्यादा उंगलियों से पिंच करें"
    \n\n"थोड़ी देर तक ज़ूम करने के लिए"", स्क्रीन पर 3 बार जल्दी-जल्दी टैप करें और तीसरे टैप पर अपनी उंगली दबाए रखें.\n"
    • "स्क्रीन पर यहां-वहां ले जाने के लिए खींचें"
    • \n
    • "ज़ूम आउट करने के लिए अपनी उंगली उठा लें"
    \n\n"आप कीबोर्ड या नेविगेशन बार पर ज़ूम इन नहीं कर सकते हैं."
    - "बड़ा करने की सुविधा चालू होने पर, फटाफट बड़ा करने के लिए स्क्रीन के नीचे दिए गए सुलभता बटन का इस्तेमाल करें.\n\n""ज़ूम करने के लिए"", सुलभता बटन पर टैप करें, फिर स्क्रीन पर कहीं भी टैप करें.\n"
    • "स्क्रोल करने के लिए 2 या उससे ज़्यादा अंगुलियां खींचें"
    • \n
    • "ज़ूम को कम या ज़्यादा करने के लिए 2 या उससे ज़्यादा अंगुलियों से पिंच करें"
    \n\n"थोड़े समय तक ज़ूम करने के लिए"", सुलभता बटन पर टैप करें, फिर स्क्रीन पर कहीं भी छुएं और दबाकर रखें.\n"
    • "स्क्रीन पर इधर-उधर ले जाने के लिए खींचें"
    • \n
    • "ज़ूम आउट करने के लिए अंगुली उठाएं"
    \n\n"आप कीबोर्ड या नेविगेशन बार पर ज़ूम इन नहीं कर सकते."
    + "बड़ा करने की सुविधा चालू होने पर, फटाफट बड़ा करने के लिए स्क्रीन के नीचे दिए गए सुलभता बटन का इस्तेमाल करें.\n\n""ज़ूम करने के लिए"", सुलभता बटन पर टैप करें, फिर स्क्रीन पर कहीं भी टैप करें.\n"
    • "स्क्रोल करने के लिए 2 या उससे ज़्यादा अंगुलियां खींचें"
    • \n
    • "ज़ूम को कम या ज़्यादा करने के लिए 2 या उससे ज़्यादा अंगुलियों से पिंच करें"
    \n\n"थोड़े समय तक ज़ूम करने के लिए"", सुलभता बटन पर टैप करें, फिर स्क्रीन पर कहीं भी छुएं और दबाकर रखें.\n"
    • "स्क्रीन पर इधर-उधर ले जाने के लिए खींचें"
    • \n
    • "ज़ूम आउट करने के लिए उंगली उठाएं"
    \n\n"आप कीबोर्ड या नेविगेशन बार पर ज़ूम इन नहीं कर सकते."
    "सुलभता बटन %1$s पर सेट है. बड़ा करने के लिए, सुलभता बटन को दबाकर रखें, फिर बड़ा करना चुनें." - "वॉल्यूम कुंजी शॉर्टकट" + "आवाज़ कुंजी का शॉर्टकट" "शॉर्टकट सेवा" "लॉक स्क्रीन से अनुमति दें" - "शॉर्टकट चालू होने पर, आप किसी सुलभता सेवा को शुरू करने के लिए दोनों वॉल्यूम कुंजियों को 3 सेकंड तक दबाए रख सकते हैं." + "शॉर्टकट चालू होने पर, आप कोई सुलभता सेवा शुरू करने के लिए आवाज़ की दोनों कुंजियों को 3 सेकंड तक दबाए रख सकते हैं." "उच्च कंट्रास्ट लेख" "स्क्रीन को बड़ा करने की सुविधा को अपने आप अपडेट करें" "एेप ट्रांज़िशन पर स्क्रीन को बड़ा दिखाना अपडेट करें" @@ -2540,7 +2540,7 @@ "कोई यूज़र क्रेडेंशियल इंस्टॉल नहीं है" "शब्द जाँच" "अपना वर्तमान पूर्ण बैकअप पासवर्ड यहां लिखें" - "पूर्ण बैकअप के लिए यहां नया पासवर्ड लिखें" + "पूरे बैक अप के लिए यहां नया पासवर्ड लिखें" "यहां अपना नया पूर्ण बैकअप पासवर्ड फिर से लिखें" "बैकअप पासवर्ड सेट करें" "रद्द करें" @@ -2673,7 +2673,7 @@ "आपातकालीन सूचनाएं" "नेटवर्क ऑपरेटर" - "एक्सेस पॉइंट का नाम" + "एक्सेस प्वाइंट का नाम" "बेहतर 4G LTE मोड" "ध्वनि और संचारों को उन्नत बनाने के लिए LTE डेटा का उपयोग करें (सुझाए गए)" "पसंदीदा नेटवर्क प्रकार" @@ -2774,7 +2774,7 @@ "प्रोजेक्ट, कास्ट करें" "जगह, डिस्क, हार्ड डिस्क, डिवाइस का इस्तेमाल" "पावर उपयोग, शुल्क" - "वर्तनी शब्दकोश वर्तनीजांच स्‍वत: सुधार" + "वर्तनी या स्पेलिंग, शब्दकोश या डिक्शनरी, वर्तनी जाँच, अपने आप सुधार" "पहचानकर्ता, इनपुट, बोली, बोलें, भाषा, हैंड्सफ़्री, हैंड फ़्री, पहचान, आपत्तिजनक, शब्द, ऑडियो, इतिहास, ब्लूटूथ, हेडसेट" "रेट करें, भाषा, डिफ़ॉल्ट, बोलें, बोलना, tts, सुलभता स्क्रीन रीडर, नेत्रहीन" "घड़ी, सेना" @@ -2813,14 +2813,14 @@ "NFC टैग में डेटा लिखने में असमर्थ. यदि समस्या बनी रहती है, तो कोई भिन्न टैग आज़माकर देखें" "NFC टैग लिखने योग्य नहीं है. कृपया किसी भिन्न टैग का उपयोग करें." "डिफ़ॉल्‍ट ध्‍वनि" - "रिंग वॉल्यूम %1$s पर है" + "रिंग की आवाज़ %1$s है" "आवाज़, कंपन (वाइब्रेशन), परेशान न करें" "रिंगर, कंपन (वाइब्रेशन) पर सेट है" "रिंगर मौन पर सेट है" - "रिंग वॉल्यूम 80% पर है" - "मीडिया वॉल्‍यूम" - "अलार्म वॉल्‍यूम" - "रिंग का वॉल्यूम" + "रिंग की आवाज़ 80% है" + "मीडिया की आवाज़" + "अलार्म की आवाज़" + "रिंग की आवाज़" "सूचना की आवाज़" "फ़ोन रिंगटोन" "सूचना की डिफ़ॉल्ट आवाज़" @@ -2851,7 +2851,7 @@ "प्राथमिकता इनकी अनुमति देती है" "अॉटोमैटिक नियम" "परेशान न करें के नियम सेट करें" - "निश्चित समय पर ध्वनियों और कंपनों को सीमित करें" + "तय समय पर आवाज़ और वाइब्रेशन को सीमित करें" "सिर्फ़ प्राथमिकता" "केवल अलार्म" "पूरी तरह शांत" @@ -3265,7 +3265,7 @@ %1$d ऐप्स द्वारा पिछले %2$s में उपयोग की गई मेमोरी %1$d ऐप्स द्वारा पिछले %2$s में उपयोग की गई मेमोरी
    - "आवृत्ति" + "फ़्रीक्वेंसी" "अधिकतम उपयोग" "किसी डेटा का उपयोग नहीं किया गया" "%1$s के लिए परेशान न करें की ऐक्सेस की अनुमति दें?" @@ -3350,10 +3350,10 @@ "%1$s डिफ़ॉल्ट है" "चालू / %1$s" "बंद" - "बैक अप अक्षम किया गया" + "बैक अप बंद किया गया" "Android %1$s में अपडेट किया गया" "कार्रवाई की अनुमति नहीं" - "वॉल्यूम बदला नहीं जा सकता" + "आवाज़ बदली नहीं जा सकती" "कॉल करने की अनुमति नहीं है" "मैसेज (एसएमएस) की अनुमति नहीं है" "कैमरा की अनुमति नहीं है" @@ -3400,8 +3400,6 @@ "डिसप्ले में हलके रंगों का इस्तेमाल करें" "रंग बदलाव लागू करने के लिए, स्‍क्रीन बंद करें" "टेलीफ़ोनी मॉनिटर बदलाव लागू करने के लिए, डिवाइस को रीबूट करें" - "कैमरा HAL HDR+" - "कैमरा HAL HDR+ में किये गए बदलाव लागू करने के लिए, डिवाइस को फिर से चालू करें" "कैमरा लेज़र सेंसर" "स्वचालित सिस्टम अपडेट" "उपयोग" @@ -3449,15 +3447,15 @@ "अपना डिवाइस चालू करने के लिए पिन ज़रूरी बनाएं. बंद होने पर, यह डिवाइस कॉल, मैसेज, नोटिफिकेशन, या अलार्म नहीं पा सकता." "अपना डिवाइस चालू करने के लिए पासवर्ड ज़रूरी बनाएं. बंद होने पर, यह डिवाइस कॉल, मैसेज, नोटिफिकेशन, या अलार्म नहीं पा सकता." "और फ़िंगरप्रिंट जोड़ें" - "किसी दूसरी अंगुली से अनलॉक करें" + "किसी दूसरी उंगली से अनलॉक करें" "चालू / %1$s" "बंद / %1$s" "कभी अपने आप चालू ना करें" "%1$s बैटरी शेष रहने पर अपने आप चालू करें" "बैटरी ऑप्टिमाइज़ेशन का उपयोग नहीं कर रहा है" "अगर डिवाइस लॉक है, तो सूचनाओं का जवाब या अन्य लेख लिखने से रोकें" - "डिफ़ॉल्ट वर्तनी-जाँचकर्ता" - "वर्तनी-जाँचकर्ता चुनें" + "डिफ़ॉल्ट स्पेलिंग जाँचकर्ता" + "वर्तनी/स्पेलिंग जाँचकर्ता चुनें" "नहीं चुना गया" "(कुछ नहीं)" ": " diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml index 74f2d738173..9f6047cf340 100644 --- a/res/values-hr/strings.xml +++ b/res/values-hr/strings.xml @@ -635,7 +635,7 @@ "Za uparivanje s:<br><b>%1$s</b><br><br>Uvjerite se da prikazuje ovaj pristupni kôd:<br><b>%2$s</b>" "Od:<br><b>%1$s</b><br><br>Upariti se s ovim uređajem?" "Za uparivanje s uređajem:<br><b>%1$s</b><br><br>upišite:<br><b>%2$s</b> na tom uređaju pa pritisnite tipke Return ili Enter." - "Dopusti uređaju %1$s pristup kontaktima i povijesti poziva" + "Dopustite pristup kontaktima i povijesti poziva" "Nije moguće povezati se na %1$s." "Skeniranjem traži uređaje" @@ -3442,8 +3442,6 @@ "Upotrebljavaj hladnije boje prikaza" "Da biste primijenili promjenu boje, isključite zaslon" "Da biste primijenili promjenu koju je izvršio TelephonyMonitor, ponovo pokrenite uređaj." - "HAL HDR+ fotoaparata" - "Da biste primijenili promjenu HAL HDR+ fotoaparata, ponovo pokrenite uređaj" "Laserski senzor fotoaparata" "Automatska ažuriranja sustava" "Potrošnja" diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml index 7e3a83779a9..1891f37db9c 100644 --- a/res/values-hu/strings.xml +++ b/res/values-hu/strings.xml @@ -624,7 +624,7 @@ "Párosítás ezzel:<br><b>%1$s</b><br><br>Győződjön meg arról, hogy a következő azonosítókulcs látható rajta:<br><b>%2$s</b>" "Küldő:<br><b>%1$s</b><br><br>Párosítja a készüléket?" "A(z) <br><b>%1$s</b><br><br> eszközzel való párosításhoz írja be rajta a következőt: <br><b>%2$s </b>, majd nyomja meg a Return vagy az Enter billentyűt." - "A(z) %1$s engedélyezése a névjegyek és híváselőzmények eléréséhez" + "Hozzáférést biztosít névjegyeihez és híváslistájához" "Nem sikerült csatlakozni a következőhöz: %1$s." "Eszközök keresése" @@ -3402,8 +3402,6 @@ "Hidegebb színhőmérséklet használata a kijelzőn" "A színmódosítások alkalmazásához kapcsolja ki a képernyőt" "A telefonos szolgáltatások figyelésének módosításához indítsa újra az eszközt" - "Kamera HAL HDR+" - "A Kamera HAL HDR+ módosításához indítsa újra az eszközt" "A kamera lézeres érzékelője" "Automatikus rendszerfrissítések" "Használat" diff --git a/res/values-hy/strings.xml b/res/values-hy/strings.xml index 764324ca292..80a2fd487b1 100644 --- a/res/values-hy/strings.xml +++ b/res/values-hy/strings.xml @@ -624,7 +624,7 @@ "<br><b>%1$s</b><br><br>-ի հետ զուգավորելու համար համոզվեք այն ցուցադրում է անցաբառը`:<br><b>%2$s</b>" "Ումից`<br><b>%1$s</b><br><br>Զուգավորվե՞լ այս սարքի հետ:" "<br><b>%1$s</b><br><br>-ի հետ զուգավորելու համար մուտքագրեք`<br><b>%2$s</b>, այնուհետև սեղմեք հետդարձ կամ հաստատում:" - "Թույլ տալ %1$s սարքին օգտագործել ձեր կոնտակտներն ու զանգերի պատմությունը" + "Թույլատրել կոնտակտների ու զանգերի պատմության հասանելիությունը" "Հնարավոր չեղավ միանալ %1$s-ին:" "Սկանավորել սարքերի համար" @@ -3400,8 +3400,6 @@ "Օգտագործել էկրանի ավելի սառը գույներ" "Գույնի փոփոխությունը կիրառելու համար անջատեք էկրանը" "Telephony Monitor-ի փոփոխությունը կիրառելու համար վերագործարկեք սարքը" - "Ֆոտոխցիկի HAL HDR+" - "Ֆոտոխցիկի HAL HDR+ կիրառելու համար վերաբեռնեք սարքը" "Տեսախցիկի լազերային սենսոր" "Ավտոմատ համակարգային թարմացումներ" "Օգտագործում" diff --git a/res/values-is/strings.xml b/res/values-is/strings.xml index b35c8589373..dc55fda00bd 100644 --- a/res/values-is/strings.xml +++ b/res/values-is/strings.xml @@ -624,7 +624,7 @@ "Til að para við:<br><b>%1$s</b><br><br>Gakktu úr skugga um að þessi aðgangslykill birtist:<br><b>%2$s</b>" "Frá:<br><b>%1$s</b><br><br>Para við þetta tæki?" "Til að para við:<br><b>%1$s</b><br><br>Sláðu inn:<br><b>%2$s</b> og ýttu síðan á vendihnappinn eða Enter." - "Veita %1$s aðgang að tengiliðunum þínum og símtalaferli" + "Veita aðgang að tengiliðum þínum og símtalaferli" "Ekki tókst að tengjast %1$s." "Leita að tækjum" @@ -3400,8 +3400,6 @@ "Nota svalari skjáliti" "Slökktu á skjánum til að virkja litbreytinguna" "Til að breyta fjarskiptaumsjón skaltu endurræsa tækið" - "Myndavél HAL HDR+" - "Endurræstu tækið til að virkja breytingu á myndavél HAL HDR+" "Leysigeislaskynjari myndavélar" "Sjálfvirkar kerfisuppfærslur" "Notkun" diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml index 99b54631c85..ccca9cbfa0c 100644 --- a/res/values-it/strings.xml +++ b/res/values-it/strings.xml @@ -624,7 +624,7 @@ "Per l\'accoppiamento con:<br><b>%1$s</b><br><br>Assicurati che sia visualizzata questa passkey:<br><b>%2$s</b>" "Da:<br><b>%1$s</b><br><br>Accoppiare con questo dispositivo?" "Per eseguire l\'accoppiamento con <br><b>%1$s</b><br><br>, digita sul dispositivo <br><b>%2$s</b>, quindi premi A capo o Invio." - "Consenti al dispositivo %1$s di accedere ai contatti e alla cronologia chiamate" + "Consenti l\'accesso ai tuoi contatti e alla cronologia chiamate" "Impossibile collegarsi a %1$s." "Cerca dispositivi" @@ -1573,7 +1573,7 @@
    "Cancella accesso" "Controlli" - "Termina" + "Forza interruzione" "Totale" "Dimensioni app" "App in archivio USB" @@ -2062,7 +2062,7 @@ "Capacità totale batteria" "Consumo energetico totale previsto" "Consumo energetico effettivo" - "Termina" + "Forza interruzione" "Informazioni app" "Impostazioni applicazioni" "Impostazioni schermo" @@ -3400,8 +3400,6 @@ "Utilizza colori del display più freddi" "Per applicare la modifica ai colori, disattiva lo schermo" "Per applicare la modifica a TelephonyMonitor, riavvia il dispositivo" - "Fotocamera HAL HDR+" - "Per applicare la modifica relativa alla Fotocamera HAL HDR+, riavvia il dispositivo" "Sensore laser della fotocamera" "Aggiornamenti di sistema automatici" "Utilizzo" diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml index a030f819cb7..23ae6ba76fc 100644 --- a/res/values-iw/strings.xml +++ b/res/values-iw/strings.xml @@ -646,7 +646,7 @@ "‏כדי להתאים עם:<br><b>%1$s</b><br><br>ודא שהמכשיר מציג סיסמה זו:<br><b>%2$s</b>" "‏מאת:<br><b>%1$s</b><br><br>לבצע התאמה עם מכשיר זה?" "‏כדי להתאים עם:<br><b>%1$s</b><br><br>הקלד בו:<br><b>%2$s</b>, ולאחר מכן הקש על Return או Enter." - "התר ל-%1$s לגשת אל אנשי הקשר ואל היסטוריית השיחות" + "מתן גישה אל אנשי הקשר ולהיסטוריית השיחות" "לא הייתה אפשרות להתחבר אל %1$s." "סרוק אחר מכשירים" @@ -3486,8 +3486,6 @@ "השתמש בצבעי תצוגה קרירים יותר" "כבה את המסך כדי להחיל שינוי צבע" "‏כדי להחיל את השינוי ב-Telephony Monitor, הפעל מחדש את המכשיר" - "‏צילום באיכות +HDR עם HAL" - "‏כדי להפעיל צילום באיכות +HDR עם HAL, עליך להפעיל את המכשיר מחדש" "חיישן הלייזר של המצלמה" "עדכוני מערכת אוטומטיים" "שימוש" diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml index b4095d1133f..a02bc67cdf5 100644 --- a/res/values-ja/strings.xml +++ b/res/values-ja/strings.xml @@ -624,7 +624,7 @@ "次のデバイスをペアに設定する場合:<br><b>%1$s</b><br><br>次のパスキーが表示されていることを確認してください:<br><b>%2$s</b>" "発信元:<br><b>%1$s</b><br><br>このデバイスをペアに設定しますか?" "<br><b>%1$s</b><br><br>をペアに設定するには、「<br><b>%2$s</b>」と入力してから、ReturnキーまたはEnterキーを押します。" - "自分の連絡先や通話履歴へのアクセスを%1$sに許可する" + "連絡先と通話履歴へのアクセスを許可する" "%1$sに接続できませんでした。" "デバイスのスキャン" @@ -3404,8 +3404,6 @@ "寒色の表示色を使用します" "色の変更を適用するには、画面を OFF にしてください" "Telephony Monitor の変更を適用するには、端末を再起動してください" - "カメラ HAL HDR+" - "カメラ HAL HDR+ の変更を適用するには、端末を再起動してください" "カメラのレーザー センサー" "自動システム アップデート" "使用量" diff --git a/res/values-ka/strings.xml b/res/values-ka/strings.xml index 1330072e9b2..8e990f7d2d9 100644 --- a/res/values-ka/strings.xml +++ b/res/values-ka/strings.xml @@ -624,7 +624,7 @@ "<br><b>%1$s</b><br><br>-თან დასაწყვილებლად დარწმუნდით, რომ ის გიჩვენებთ წვდომის გასაღებს:<br><b>%2$s</b>" "<br><b>%1$s</b><br><br>-ისგან. დაწყვილდეს ამ მოწყობილობასთან?" "<br><b>%1$s</b><br><br>-თან დასაწყვილებლად დაბეჭდეთ მასზე:<br><b>%2$s</b>, შემდეგ დააწკაპუნეთ ღილაკზე Return ან Enter." - "მიეცით %1$s-ს თქვენს კონტაქტებსა და საუბრის ისტორიაზე წვდომის უფლება" + "კონტაქტებსა და საუბრის ისტორიაზე წვდომის დაშვება" "%1$s-თან დაკავშირება ვერ მოხერხდა." "სკანირება მოწყობილობების აღმოსაჩენად" @@ -3400,8 +3400,6 @@ "ეკრანზე ცივი ფერების გამოყენება" "ფერთა ცვლილების მისასადაგებლად, გამორთეთ ეკრანი" "ტელეფონიის კონტროლიორთან დაკავშირებული ცვლილებების მისასადაგებლად, გადატვირთეთ მოწყობილობა" - "კამერის HAL HDR+" - "კამერის HAL HDR+ ცვლილების მისასადაგებლად გადატვირთეთ მოწყობილობა" "კამერის ლაზერული სენსორი" "სისტემის ავტომატური განახლება" "მოხმარება" diff --git a/res/values-kk/strings.xml b/res/values-kk/strings.xml index 639d1c963ad..e6ad2ec85c9 100644 --- a/res/values-kk/strings.xml +++ b/res/values-kk/strings.xml @@ -624,7 +624,7 @@ "Жұпталу үшін:<br><b>%1$s</b><br><br>Оның келесі кілтсөзді көрсетуін қадағалаңыз:<br><b>%2$s</b>" "Келесі құрылғыдан:<br><b>%1$s</b><br><br>Осы құрылғымен жұпталсын ба?" "Жұпталу үшін:<br><b>%1$s</b><br><br>Теріңіз:<br><b>%2$s</b>, одан кейін Оралу немесе Енгізу пәрменін басыңыз." - "%1$s құрылғысына контактілерге және қоңыраулар тарихына қатынасуға рұқсат ету" + "Контактілер мен қоңыраулар тарихына кіруге рұқсат беру" "%1$s құрылғысына жалғану мүмкін болмады." "Құрылғыларды скандау" @@ -3400,8 +3400,6 @@ "Суығырақ дисплей түстерін пайдалану" "Түс өзгерісін қолдану үшін экранды өшіріңіз" "Telephony Monitor функциясындағы өзгеріс күшіне енуі үшін, құрылғыны қайта жүктеңіз" - "HAL HDR+ камера режимі" - "HAL HDR+ камера режимінің өзгерісі күшіне енуі үшін құрылғыны қайта жүктеңіз" "Камераның лазер сенсоры" "Автоматты жүйе жаңартулары" "Трафик" diff --git a/res/values-km/strings.xml b/res/values-km/strings.xml index 1e3fa34d144..0b1827b2130 100644 --- a/res/values-km/strings.xml +++ b/res/values-km/strings.xml @@ -624,7 +624,7 @@ "ដើម្បី​ផ្គូផ្គង​ជា​មួយ៖<br><b>%1$s</b><br><br>ប្រាកដ​ថា វា​កំពុង​បង្ហាញ​​លេខ​កូដ​នេះ៖<br><b>%2$s</b>" "ពី៖ <br><b>%1$s</b><br><br>ផ្គូផ្គង​ជា​មួយ​ឧបករណ៍​នេះ?" "ដើម្បី​ផ្គូផ្គង​ជា​មួយ៖ <br><b>%1$s</b><br><br>វាយ​បញ្ចូល៖ <br><b>%2$s</b> បន្ទាប់​មក​ចុច​ Return ឬ Enter ។" - "អនុញ្ញាតឲ្យ %1$s ចូលប្រើទំនាក់ទំនង និងប្រវត្តិហៅចេញរបស់អ្នក" + "ផ្ដល់​សិទ្ធិ​អនុញ្ញាត​ចូល​ប្រើ​ទំនាក់ទំនង​ និង​ប្រវត្តិ​ហៅ​ទូរសព្ទ​របស់អ្នក" "មិន​អាច​តភ្ជាប់​ទៅ %1$s ។" "វិភាគ​រក​ឧបករណ៍" @@ -3400,8 +3400,6 @@ "ប្រើពណ៌បង្ហាញត្រជាក់ជាងមុន" "ដើម្បីប្តូរពណ៌ សូមបិទអេក្រង់" "ដើម្បី​អនុវត្ត​ការ​ផ្លាស់ប្តូរ telephony monitor សូម​ចាប់ផ្តើម​ឧបករណ៍​ឡើងវិញ" - "កាមេរ៉ា HAL HDR+" - "ដើម្បី​អនុវត្ត​ការ​ផ្លាស់ប្តូរ​លើកាមេរ៉ា HAL HDR+ សូមចាប់ផ្តើម​ឧបករណ៍​ឡើងវិញ" "ឧបករណ៍ចាប់សញ្ញារបស់កាមេរ៉ាដែលការពារពន្លឺឡាស៊ែរ" "ការអាប់ដេតប្រព័ន្ធដោយស្វ័យប្រវត្តិ" "ការប្រើប្រាស់" diff --git a/res/values-kn/strings.xml b/res/values-kn/strings.xml index c86e5597b34..1a43ded6d6f 100644 --- a/res/values-kn/strings.xml +++ b/res/values-kn/strings.xml @@ -624,7 +624,7 @@ "ಇದರೊಂದಿಗೆ ಜೋಡಿಸಲು:<br><b>%1$s</b><br><br>ಇದು ಈ ಪಾಸ್‌ಕೀ ಅನ್ನು ತೋರಿಸುತ್ತಿದೆಯೇ ಎಂಬುದನ್ನು ಖಾತ್ರಿಪಡಿಸಿಕೊಳ್ಳಿ:<br><b>%2$s</b>" "ಇದರಿಂದ:<br><b>%1$s</b><br><br>ಈ ಸಾಧನದೊಂದಿಗೆ ಜೋಡಿಸುವುದೇ?" "ಇದರೊಂದಿಗೆ ಜೋಡಿಸಲು:<br><b>%1$s</b><br><br>ಇದರಲ್ಲಿ ಟೈಪ್‌ ಮಾಡಿ:<br><b>%2$s</b>, ನಂತರ ಹಿಂತಿರುಗು ಅಥವಾ ನಮೂದಿಸು ಒತ್ತಿರಿ." - "ನಿಮ್ಮ ಸಂಪರ್ಕಗಳು ಹಾಗೂ ಕರೆ ಇತಿಹಾಸವನ್ನು ಪ್ರವೇಶಿಸಲು %1$s ಸಾಧನವನ್ನು ಅನುಮತಿಸಿ" + "ನಿಮ್ಮ ಸಂಪರ್ಕಗಳು ಮತ್ತು ಕರೆ ಇತಿಹಾಸಕ್ಕೆ ಪ್ರವೇಶವನ್ನು ಅನುಮತಿಸಿ" "%1$s ಗೆ ಸಂಪರ್ಕಪಡಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ." "ಸಾಧನಗಳಿಗಾಗಿ ಸ್ಕ್ಯಾನ್ ಮಾಡು" @@ -3400,8 +3400,6 @@ "ತಂಪಾದ ಪ್ರದರ್ಶನ ಬಣ್ಣಗಳನ್ನು ಬಳಸಿ" "ಬಣ್ಣದ ಬದಲಾವಣೆಯನ್ನು ಅನ್ವಯಿಸಲು, ಪರದೆ ಆಫ್ ಮಾಡಿ" "ದೂರವಾಣಿ ಮಾನಿಟರ್ ಬದಲಾವಣೆಯನ್ನು ಅನ್ವಯಿಸಲು, ಸಾಧನವನ್ನು ರೀಬೂಟ್ ಮಾಡಿ" - "HAL HDR+ ಕ್ಯಾಮೆರಾ" - "HAL HDR+ ಕ್ಯಾಮೆರಾ ಬದಲಾವಣೆಯನ್ನು ಅನ್ವಯಿಸಲು, ಸಾಧನವನ್ನು ರೀಬೂಟ್ ಮಾಡಿ" "ಕ್ಯಾಮೆರಾ ಲೇಸರ್ ಸೆನ್ಸಾರ್" "ಸ್ವಯಂಚಾಲಿತ ಸಿಸ್ಟಂ ಅಪ್‌ಡೇಟ್‌ಗಳು" "ಬಳಕೆ" diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml index 777b817f02b..79879099221 100644 --- a/res/values-ko/strings.xml +++ b/res/values-ko/strings.xml @@ -624,7 +624,7 @@ "<b>%1$s</b>와(과) 페어링하려면<br><br>이 패스키(<b>%2$s</b>)가 표시되는지 확인하세요.<br><br>" "출처:<br><b>%1$s</b><br><br>이 기기와 페어링하시겠습니까?" "<br><b>%1$s</b><br><br>와(과) 페어링하려면 <br><b>%2$s</b>을(를) 입력한 다음 Return 또는 Enter 키를 누르세요." - "%1$s이(가) 연락처 및 통화 기록에 액세스하도록 허용합니다." + "연락처 및 통화 기록 액세스 허용" "%1$s에 연결할 수 없습니다." "장치 검색" @@ -3400,8 +3400,6 @@ "더 차가운 디스플레이 색상 사용" "색상 변경을 적용하려면 화면을 끄세요." "통신 모니터의 변경사항을 적용하려면 기기를 재부팅하세요." - "카메라 HAL HDR+" - "카메라 HAL HDR+의 변경사항을 적용하려면 기기를 재부팅하세요." "카메라 레이저 센서" "자동 시스템 업데이트" "사용량" diff --git a/res/values-ky/strings.xml b/res/values-ky/strings.xml index 8f1a014775d..708dc68f1d9 100644 --- a/res/values-ky/strings.xml +++ b/res/values-ky/strings.xml @@ -623,7 +623,7 @@ "Муну менен туташыш үчүн:<br><b>%1$s</b><br><br>Ал бул кодду көрсөтүп жатканын текшериңиз:<br><b>%2$s</b>" "Жөнөтүүчү:<br><b>%1$s</b><br><br>Бул түзмөк менен туташсынбы?" "Кийинки менен туташуу үчүн:<br><b>%1$s</b><br><br>Андан муну терип:<br><b>%2$s</b>, Return же Enter\'ди басыңыз." - "%1$s түзмөгүнө байланыштарыңыз жана чалуу таржымалына кирүү мүмкүнчүлүгүн бериңиз" + "Байланыштар менен чалуулар таржымалын пайдалануу мүмкүнчүлүгү берилсин" "%1$s менен байланыша албай жатат." "Түзмөктөрдү издөө" @@ -3403,8 +3403,6 @@ "Салкыныраак дисплей түстөрүн колдонуңуз" "Түс өзгөртүүлөрүн күчүнө киргизүү үчүн, экранды өчүрүңүз" "Telephony Monitor функциясын колдонуу үчүн түзмөктү өчүрүп-күйгүзүү керек" - "HAL HDR+ камера режими" - "HAL HDR+ камера режимин колдонуу үчүн түзмөктү өчүрүп-күйгүзүңүз" "Камеранын лазердик сенсору" "Автоматтык тутум жаңыртуулары" "Дайындардын өткөрүлүшү" diff --git a/res/values-lo/strings.xml b/res/values-lo/strings.xml index 32e6f1064dc..cfc0934dcbb 100644 --- a/res/values-lo/strings.xml +++ b/res/values-lo/strings.xml @@ -624,7 +624,7 @@ "ເພື່ອຈັບຄູ່ກັບ:<br><b>%1$s</b><br><br>ໃຫ້ກວດສອບວ່າມັນສະແດງ passkey ນີ້ຢູ່:<br><b>%2$s</b>" "ຈາກ:<br><b>%1$s</b><br><br>ຈັບຄູ່ກັບອຸປະກອນນີ້ບໍ່?" "ເພື່ອຈັບຄູ່ກັບ:<br><b>%1$s</b><br><br>ໃຫ້ພິມ:<br><b>%2$s</b>, ຈາກນັ້ນກົດ Return ຫຼື Enter." - "ອະ​ນຸ​ຍາດ​ໃຫ້ %1$s ເຂົ້າ​ຫາ​ລາ​ຍ​ຊື່ ແລະ ປະ​ຫວັດ​ການ​ໂທ​ຂອງ​ທ່ານ" + "ອະນຸຍາດໃຫ້ເຂົ້າເຖິງລາຍຊື່ຜູ້ຕິດຕໍ່ ແລະ ປະຫວັດການໂທຂອງທ່ານ" "ບໍ່ສາມາດເຊື່ອມຕໍ່ຫາ %1$s ໄດ້." "ສະແກນຫາອຸປະກອນ" @@ -3400,8 +3400,6 @@ "ໃຊ້ສີຈໍສະແດງຜົນທີ່ເຢັນກວ່າ" "ເພື່ອນຳໃຊ້ການປ່ຽນສີ, ໃຫ້ປິດໜ້າຈໍ" "ເພື່ອນຳໃຊ້ການປ່ຽນແປງ Telephony Monitor, ໃຫ້ປິດແລ້ວເປີດອຸປະກອນຄືນໃໝ່" - "ກ້ອງຖ່າຍຮູບ HAL HDR+" - "ເພື່ອນຳໃຊ້ການປ່ຽນແປງກ້ອງຖ່າຍຮູບ HAL HDR+, ໃກ້ປິດເປີດອຸປະກອນຄືນໃໝ່" "ເຊັນເຊີເລເຊີກ້ອງ" "ການອັບເດດລະບົບອັດຕະໂນມັດ" "ການໃຊ້" diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml index 6a04b7bd709..46eb6446621 100644 --- a/res/values-lt/strings.xml +++ b/res/values-lt/strings.xml @@ -646,7 +646,7 @@ "Jei norite suporuoti su:<br><b>%1$s</b><br><br>Įsitikinkite, kad jame rodomas šis prieigos raktas:<br><b>%2$s</b>" "Iš:<br><b>%1$s</b><br><br>Poruoti su šiuo įrenginiu?" "Susieti su: <br><b>%1$s</b><br><br> Įveskite: <br><b>%2$s</b>, tada paspauskite „Grįžti“ arba „Enter“." - "Leisti „%1$s“ pasiekti kontaktus ir skambučių istoriją" + "Leisti pasiekti jūsų kontaktus ir skambučių istoriją" "Nepavyko prisijungti prie „%1$s“." "Nuskaityti ieškant įrenginių" @@ -3484,8 +3484,6 @@ "Naudoti šaltesnes ekrano spalvas" "Kad pritaikytumėte spalvos pakeitimą, išjunkite ekraną" "Kad pritaikytumėte telefonijos stebėjimo priemonės pakeitimą, paleiskite įrenginį iš naujo" - "Fotoaparatas HAL HDR+" - "Kad pritaikytumėte fotoaparato HAL HDR+ pakeitimą, paleiskite įrenginį iš naujo" "Fotoaparato lazerio jutiklis" "Automatiniai sistemos naujiniai" "Naudojimas" diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml index a42515f523a..f46f55933ca 100644 --- a/res/values-lv/strings.xml +++ b/res/values-lv/strings.xml @@ -635,7 +635,7 @@ "Lai savienotu pārī ar:<br><b>%1$s</b><br><br>Pārliecinieties, ka tiek rādīta šī ieejas atslēga:<br><b>%2$s</b>" "No:<br><b>%1$s</b><br><br>Vai savienot pārī ar šo ierīci?" "Lai izveidotu savienojumu pārī ar ierīci <br><b>%1$s</b><br><br>, ierakstiet tajā atslēgu <br><b>%2$s</b> un pēc tam nospiediet ievadīšanas taustiņu." - "Atļaut ierīcei %1$s piekļūt jūsu kontaktpersonām un zvanu vēsturei" + "Atļaut piekļuvi jūsu kontaktpersonām un zvanu vēsturei" "Nevarēja izveidot savienojumu ar ierīci %1$s." "Skenēt ierīces" @@ -3442,8 +3442,6 @@ "Izmantot vēsākas krāsas" "Lai mainītu krāsas, izslēdziet ekrānu" "Lai lietotu telefonijas pārrauga izmaiņas, atkārtoti palaidiet ierīci." - "Kameras HAL HDR+" - "Lai piemērotu kameras HAL HDR+ izmaiņas, restartējiet ierīci." "Kameras lāzera sensors" "Automātiski sistēmas atjauninājumi" "Lietojums" diff --git a/res/values-ml/strings.xml b/res/values-ml/strings.xml index abf10fddbf3..a30dd1611d8 100644 --- a/res/values-ml/strings.xml +++ b/res/values-ml/strings.xml @@ -624,7 +624,7 @@ "ഇതുമായി ജോടിയാക്കുന്നതിന്:<br><b>%1$s</b><br><br>അത് ഈ പാസ്കീ തന്നെയാണ് ദൃശ്യമാക്കുന്നതെന്ന് ഉറപ്പാക്കുക:<br><b>%2$s</b>" "ഇതിൽ നിന്ന്:<br><b>%1$s</b><br><br>ഈ ഉപകരണവുമായി ജോടിയാക്കണോ?" "ഇതുമായി ജോടിയാക്കുക:<br><b>%1$s</b><br><br>ഇതിൽ ടൈപ്പുചെയ്യുക:<br><b>%2$s</b>, തുടർന്ന് മടങ്ങുക അല്ലെങ്കിൽ നൽകുക അമർത്തുക." - "നിങ്ങളുടെ കോൺടാക്റ്റുകളെയും കോൾ ചരിത്രവും ആക്സസ് ചെയ്യാൻ %1$s എന്നതിനെ അനുവദിക്കുക" + "കോൺടാക്‌റ്റുകളിലേക്കും കോൾ ചരിത്രത്തിലേക്കും ആക്‌സസ് അനുവദിക്കുക" "%1$s എന്നതിലേക്ക് കണക്റ്റുചെയ്യാനായില്ല." "ഉപകരണങ്ങൾക്കായി സ്‌കാൻ ചെയ്യുക" @@ -3400,8 +3400,6 @@ "കൂടുതൽ തണുത്ത ഡിസ്പ്ലേ വർണ്ണങ്ങൾ ഉപയോഗിക്കുക" "വർണ്ണ മാറ്റം ബാധകമാക്കാൻ, സ്ക്രീൻ ഓഫാക്കുക" "ടെലിഫോണി മോണിറ്ററിലെ മാറ്റം പ്രയോഗിക്കാൻ ഉപകരണം റീബൂട്ടുചെയ്യുക" - "ക്യാമറ HAL HDR+" - "ക്യാമറ HAL HDR+ മാറ്റം പ്രയോഗിക്കാൻ, ഉപകരണം റീബൂട്ട് ചെയ്യുക" "ക്യാമറ ലേസർ സെൻസർ" "സ്വയമേവയുള്ള സിസ്റ്റം അപ്ഡേറ്റുകൾ" "ഉപയോഗം" diff --git a/res/values-mn/strings.xml b/res/values-mn/strings.xml index bfbdf5141c4..53c9ce9b4f5 100644 --- a/res/values-mn/strings.xml +++ b/res/values-mn/strings.xml @@ -624,7 +624,7 @@ "Дараахтай хослуулах:<br><b>%1$s</b><br><br>Дараах түлхүүрийг харуулж байгаа эсэхийг анхаарна уу:<br><b>%2$s</b>" "Юунаас:<br><b>%1$s</b><br><br>Энэ төхөөрөмжтэй хослуулах уу?" "<br><b>%1$s</b><br><br>-тай хослуулахын тулд дээр нь <br><b>%2$s</b>-г оруулаанд Буцах буюу Оруулах товчийг дарна уу." - "%1$s таны харилцагчийн хаяг, дуудлагын түүхэнд хандахыг зөвшөөрөх" + "Харилцагч болон дуудлагын түүхийн хандалтыг зөвшөөрөх" "%1$s-д холбогдож чадсангүй." "Төхөөрөмжүүдийг скан хийх" @@ -3398,8 +3398,6 @@ "Илүү хүйтэн дэлгэцийн өнгө ашиглах" "Өнгөний өөрчлөлтийг оруулахын тулд дэлгэцийг унтраана уу" "Утасны хяналтын өөрчлөлтийг хэрэгжүүлэхийн тулд төхөөрөмжийг дахин асаана уу" - "Камер HAL HDR+" - "Камер HAL HDR+ өөрчлөлтийг хэрэгжүүлэхийн тулд төхөөрөмжийг дахин асаана уу" "Камерын лазер мэдрэгч" "Системийн автомат шинэчлэлтүүд" "Хэрэглээ" diff --git a/res/values-mr/strings.xml b/res/values-mr/strings.xml index e837e8e5bf3..f3b6f31dd48 100644 --- a/res/values-mr/strings.xml +++ b/res/values-mr/strings.xml @@ -624,8 +624,7 @@ "यासह जोडण्यासाठी:<br><b>%1$s</b><br><br>हे ही पासकी दर्शवत असल्याचे सुनिश्चित करा:<br><b>%2$s</b>" "यावरून:<br><b>%1$s</b><br><br>हे डिव्हाइस जोडायचे?" "यासह जोडण्यासाठी:<br><b>%1$s</b><br><br>यावर टाइप करा:<br><b>%2$s</b>, नंतर Return किंवा Enter दाबा." - - + "तुमच्या संपर्क आणि कॉल इतिहासातील अ‍ॅक्सेसची अनुमती द्या" "%1$s सह कनेक्ट करणे शक्य झाले नाही." "डिव्हाइसेससाठी स्कॅन करा" diff --git a/res/values-ms/strings.xml b/res/values-ms/strings.xml index a2016618bb5..cb02a867c30 100644 --- a/res/values-ms/strings.xml +++ b/res/values-ms/strings.xml @@ -624,7 +624,7 @@ "Untuk menjadi pasangan:<br><b>%1$s</b><br><br>Pastikan ia menunjukkan kunci laluan ini:<br><b>%2$s</b>" "Dari:<br><b>%1$s</b><br><br>Jadikan pasangan peranti ini?" "Untuk berpasangan dengan:<br><b>%1$s</b><br><br>Taip padanya:<br><b>%2$s</b>, kemudian tekan Kembali atau Enter." - "Benarkan %1$s mengakses kenalan dan sejarah panggilan anda" + "Benarkan akses kepada kenalan dan sejarah panggilan anda" "Tidak dapat menyambung ke %1$s." "Imbas untuk mengesan peranti" @@ -3400,8 +3400,6 @@ "Gunakan warna paparan yang lebih sejuk" "Untuk mengenakan perubahan warna, matikan skrin" "Untuk menggunakan perubahan telephony monitor, but semula peranti" - "Camera HAL HDR+" - "Untuk menggunakan perubahan Camera HAL HDR+, but semula peranti" "Penderia Laser Kamera" "Kemas kini sistem automatik" "Penggunaan" diff --git a/res/values-my/strings.xml b/res/values-my/strings.xml index 060086d9653..4bbe8bbc0b4 100644 --- a/res/values-my/strings.xml +++ b/res/values-my/strings.xml @@ -624,7 +624,7 @@ ":<br><b>%1$s</b><br><br>များနှင့်တွဲချိတ်စေရန် <br><b>%2$s</b>ဖြတ်သန်းခွင့်ကီးပြသစေရန် သေချာပါစေ" ":<br><b>%1$s</b><br><br>မှ ဤစက်နှင့်တွဲချိတ်မည်လား" ":<br><b>%1$s</b><br><br>နှင့်ချိတ်တွဲရန်:<br><b>%2$s</b>ကိုရိုက်ထည့်ကာ, Return သို့မဟုတ် Enterကိုနှိပ်ပါ" - "%1$s အားသင့်ရဲ့အဆက်အသွယ်များနှင့်ဖုန်းခေါ်ခြင်းသမိုင်းကိုရယူသုံးစွဲရန်ခွင့်ပြုပါ" + "သင်၏ အဆက်အသွယ်များနှင့် ယခင်ခေါ်ဆိုမှုများကို ရယူအသုံးချခွင့် ပြုပါ" "%1$s ကို ချိတ်ဆက်မရပါ။" "စက်များကိုရှာဖွေရန် စကင်ပြုလုပ်နေသည်" @@ -3400,8 +3400,6 @@ "ပိုအေးသည့် မျက်နှာပြင် အရောင်များကိုအသုံးပြုရန်" "အရောင်ပြောင်းလဲမှု ပြုလုပ်ရန်၊ မျက်နှာပြင်ကိုပိတ်ပါ" "တယ်လီဖုန်း ဆက်သွယ်မှုမော်နီတာကို ပြောင်းလဲမှု ပြုလုပ်ရန် စက်ပစ္စည်းကို ပြန်လည်စတင်ပါ" - "ကင်မရာ HAL HDR+" - "ကင်မရာ HAL HDR+ ပြောင်းလဲမှုကို ပြုလုပ်ရန် စက်ပစ္စည်းကို ပြန်လည်စတင်ပါ" "Camera လေဆာ အာရုံခံကိရိယာ" "အလိုအလျောက် စနစ်အပ်ဒိတ်များ" "အသုံးပြုမှု" diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml index d55e8dbdb69..75dd15926d7 100644 --- a/res/values-nb/strings.xml +++ b/res/values-nb/strings.xml @@ -624,7 +624,7 @@ "Sånn kobler du til:<br><b>%1$s</b><br><br>Kontroller at dette passordet vises:<br><b>%2$s</b>" "Fra:<br><b>%1$s</b><br><br>Vil du koble til denne enheten?" "Sånn kobler du til: <br><b>%1$s</b><br><br> Skriv inn følgende: <br><b>%2$s</b>, og trykk deretter på Retur eller Enter." - "Gi %1$s tilgang til kontaktene dine og anropsloggen din" + "Gi tilgang til kontaktene dine og anropsloggen din" "Kunne ikke koble til %1$s." "Let etter enheter" @@ -3400,8 +3400,6 @@ "Bruk kaldere skjermfarger" "For å bruke fargeendringen, slå av skjermen" "Start enheten på nytt for å aktivere endringene i telefonmonitoren" - "Kamera HAL HDR+" - "Start enheten på nytt for å aktivere endringene i Kamera HAL HDR+" "Kameraets lasersensor" "Automatiske systemoppdateringer" "Bruk" diff --git a/res/values-ne/strings.xml b/res/values-ne/strings.xml index 9a0f2dfd11e..43e9a060895 100644 --- a/res/values-ne/strings.xml +++ b/res/values-ne/strings.xml @@ -624,7 +624,7 @@ "%1$s को साथ जोडी पार्न निश्चित गर्नुहोस् यसले यो पास कुञ्जी देखाइरहेको छ %2$s" "बाट: <br> <b> %1$s </ b> यस उपकरणका साथ जोडा बाँध्ने हो?" "<br><b>%1$s</b><br><br>सँग जोडी गर्न यसमा टाइप गर्नुहोस्: <br><b> %2$s </b> अनि रिटर्न वा इन्टर थिच्नुहोस्।" - "%1$sलाई तपाईंको सम्पर्क र कल इतिहास पहुँच गर्न अनुमति दिनुहोस्" + "तपाईंका सम्पर्क ठेगानाहरू र फोन सम्पर्कको इतिहासमाथि पहुँचको अनुमति दिनुहोस्" "%1$s उपकरणसँग जडान गर्न सकेन।" "उपकरणहरूको लागि स्क्यान गर्नुहोस्" @@ -3400,8 +3400,6 @@ "अझ सुन्दर प्रदर्शनको रंगहरू प्रयोग गर्नुहोस्" "रंगको परिवर्तन लागू गर्न स्क्रिन बन्द गर्नुहोस्" "टेलिफोनी मनिटरमा गरिएको परिवर्तनलाई लागू गर्न यन्त्रलाई पुनःबुट गर्नुहोस्" - "क्यामेरा HAL HDR+" - "क्यामेरा HAL HDR+ मा गरिएको परिवर्तनलाई लागू गर्न यन्त्रलाई पुनः बुट गर्नुहोस्" "क्यामेरा लेजरको सेन्सर" "स्वचालित प्रणाली अद्यावधिकहरू" "उपयोग" diff --git a/res/values-pa/strings.xml b/res/values-pa/strings.xml index 54ecf4a1de7..77c5af2c9b0 100644 --- a/res/values-pa/strings.xml +++ b/res/values-pa/strings.xml @@ -624,7 +624,7 @@ "ਇਸ ਨਾਲ ਪੇਅਰ ਕਰਨ ਲਈ:<br><b>%1$s</b><br><br>ਯਕੀਨੀ ਬਣਾਓ ਕਿ ਇਹ ਇਸ ਪਾਸਕੁੰਜੀ ਨੂੰ ਦਿਖਾ ਰਿਹਾ ਹੈ:<br><b>%2$s</b>" "ਇਸਤੋਂ:<br><b>%1$s</b><br><br>ਕੀ ਇਸ ਡੀਵਾਈਸ ਨਾਲ ਜੋੜਾਬੱਧ ਕਰਨਾ ਹੈ?" "ਇਸ ਨਾਲ ਜੋੜਾਬੱਧ ਕਰਨ ਲਈ:<br><b>%1$s</b><br><br>ਇਸਤੇ ਟਾਈਪ ਕਰੋ:<br><b>%2$s</b>, ਫਿਰ \'ਵਾਪਸ ਜਾਓ\' ਜਾਂ \'ਦਾਖਲ ਕਰੋ\' ਕੁੰਜੀ ਨੂੰ ਦਬਾਓ।" - "ਆਪਣੇ ਸੰਪਰਕਾਂ ਅਤੇ ਕਾਲ ਇਤਿਹਾਸ ਨੂੰ ਪਹੁੰਚ ਕਰਨ ਦੀ %1$s ਨੂੰ ਆਗਿਆ ਦਿਓ" + "ਆਪਣੇ ਸੰਪਰਕਾਂ ਅਤੇ ਕਾਲ ਇਤਿਹਾਸ \'ਤੇ ਪਹੁੰਚ ਕਰਨ ਦਿਓ" "%1$sਨਾਲ ਕਨੈਕਟ ਨਹੀਂ ਕਰ ਸਕਿਆ।" "ਡਿਵਾਈਸਾਂ ਲਈ ਸਕੈਨ ਕਰੋ" @@ -3173,7 +3173,7 @@ "(ਸਿਸਟਮ ਪੂਰਵ-ਨਿਰਧਾਰਤ)" "ਐਪਾਂ ਦੀ ਸਟੋਰੇਜ" "ਉਪਯੋਗ ਪਹੁੰਚ" - "ਪਰਮਿਟ ਵਰਤੋਂਕਾਰ ਪਹੁੰਚ" + "ਵਰਤੋਂ ਪਹੁੰਚ ਲਈ ਮਨਜ਼ੂਰੀ" "ਐਪ ਉਪਯੋਗਤਾ ਪਸੰਦ" "ਵਰਤੋਂ ਪਹੁੰਚ ਤੁਸੀਂ ਕਿਹੜੀਆਂ ਐਪਾਂ ਦੀ ਵਰਤੋਂ ਕਰ ਰਹੇ ਹੋ ਅਤੇ ਕਿੰਨੀ ਵਾਰੀ, ਇਸਦੇ ਨਾਲ-ਨਾਲ ਆਪਣੇ ਕੈਰੀਅਰ, ਭਾਸ਼ਾ ਸੈਟਿੰਗਾਂ, ਅਤੇ ਹੋਰ ਵੇਰਵੇ ਨੂੰ ਟਰੈਕ ਕਰਨ ਲਈ ਕਿਸੇ ਐਪ ਨੂੰ ਆਗਿਆ ਦਿੰਦਾ ਹੈ।" "ਮੈਮਰੀ" @@ -3400,8 +3400,6 @@ "ਵਧੇਰੇ ਠੰਡੇ ਡਿਸਪਲੇ ਰੰਗਾਂ ਦੀ ਵਰਤੋਂ ਕਰੋ" "ਰੰਗ ਬਦਲਾਅ ਲਾਗੂ ਕਰਨ ਲਈ, ਸਕ੍ਰੀਨ ਨੂੰ ਬੰਦ ਕਰੋ" "ਟੈਲੀਫ਼ੋਨੀ ਮੋਨੀਟਰ ਤਬਦੀਲੀ ਲਾਗੂ ਕਰਨ ਲਈ, ਡੀਵਾਈਸ ਨੂੰ ਰੀਬੂਟ ਕਰੋ" - "ਕੈਮਰਾ HAL HDR+" - "ਕੈਮਰਾ HAL HDR+ ਤਬਦੀਲੀ ਲਾਗੂ ਕਰਨ ਲਈ, ਡੀਵਾਈਸ ਨੂੰ ਰੀਬੂਟ ਕਰੋ" "ਕੈਮਰਾ ਲੇਜ਼ਰ ਸੈਂਸਰ" "ਸਵੈਚਾਲਿਤ ਸਿਸਟਮ ਅੱਪਡੇਟਾਂ" "ਵਰਤੋਂ" diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml index 7b3116ad701..4d493dd0c33 100644 --- a/res/values-pl/strings.xml +++ b/res/values-pl/strings.xml @@ -646,7 +646,7 @@ "Aby sparować z urządzeniem:<br><b>%1$s</b><br><br>Upewnij się, że jest na nim wyświetlony następujący klucz:<br><b>%2$s</b>" "Od:<br><b>%1$s</b><br><br>Sparować z tym urządzeniem?" "Aby sparować z urządzeniem <br><b>%1$s</b><br><br>, wpisz na nim klucz <br><b>%2$s</b>, a następnie naciśnij klawisz zatwierdzania." - "Zezwól urządzeniu %1$s na dostęp do Twoich kontaktów i historii połączeń" + "Zezwól na dostęp do kontaktów i historii połączeń" "Nie udało się nawiązać połączenia z %1$s." "Wyszukaj urządzenia" @@ -3484,8 +3484,6 @@ "Używaj chłodniejszych kolorów na ekranie" "Aby zastosować zmianę kolorów, wyłącz ekran" "Aby zmiana ustawienia monitorowania telefonii zaczęła obowiązywać, zrestartuj urządzenie" - "HAL HDR+ aparatu" - "Aby zmiana HAL HDR+ aparatu zaczęła obowiązywać, zrestartuj urządzenie" "Czujnik lasera aparatu" "Automatyczne aktualizacje systemu" "Wykorzystanie danych" diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml index 73395de7964..48f34366a39 100644 --- a/res/values-ru/strings.xml +++ b/res/values-ru/strings.xml @@ -646,7 +646,7 @@ "Для подключения к устройству<br><b>%1$s</b><br><br>на нем должен отображаться этот код доступа:<br><b>%2$s" "Запрос от: <br><b>%1$s</b><br><br>Подключиться к этому устройству?" "Для подключения к устройству <br><b>%1$s</b><br><br> введите на нем код <br><b>%2$s</b>, а затем нажмите клавишу Return или Enter." - "Открыть %1$s доступ к списку контактов и журналу звонков" + "Разрешить доступ к контактам и журналу звонков" "Не удалось подключиться к %1$s." "Поиск устройств" @@ -1701,7 +1701,7 @@ "Если в настройках этого приложения отключены уведомления, вы можете пропустить важные оповещения и обновления." "Магазин" "О приложении" - "Приложение скачано из %1$s" + "Откуда скачано приложение: %1$s" "Подробнее (%1$s)" "Операции в приложениях" "Выполняется" @@ -2957,7 +2957,7 @@ "Высокий" "Крайняя важность" "Разрешить оповещения" - "Включить звуковой сигнал, вибрацию, а также показывать оповещения поверх других приложений" + "Включить звуковой сигнал, вибрацию, а также показывать уведомления поверх других приложений" "Низкая важность" "Средняя важность" "Высокая важность" @@ -3484,8 +3484,6 @@ "Использовать более холодные цвета на экране" "Для изменения цветовых настроек нужно отключить экран" "Чтобы включить Telephony Monitor, перезагрузите устройство" - "HDR+ HAL камеры" - "Чтобы включить HDR+ HAL камеры, перезагрузите устройство" "Лазерный датчик камеры" "Автоматические обновления системы" "Передача данных" @@ -3533,9 +3531,9 @@ "Главное приложение" "Главное приложение не выбрано" "Безопасный запуск" - "Запрашивать графический ключ при запуске. Когда устройство отключено, вызовы, сообщения и оповещения не принимаются." - "Запрашивать PIN-код при запуске. Когда устройство отключено, вызовы, сообщения и оповещения не принимаются." - "Запрашивать пароль при запуске. Когда устройство отключено, вызовы, сообщения и оповещения не принимаются." + "Запрашивать графический ключ при запуске. Когда устройство отключено, вызовы, сообщения и уведомления не принимаются." + "Запрашивать PIN-код при запуске. Когда устройство отключено, вызовы, сообщения и уведомления не принимаются." + "Запрашивать пароль при запуске. Когда устройство отключено, вызовы, сообщения и уведомления не принимаются." "Добавьте ещё один отпечаток" "Добавьте отпечаток другого пальца" "Включено/%1$s" diff --git a/res/values-sq/strings.xml b/res/values-sq/strings.xml index 2a80fa3aa78..9846cc40902 100644 --- a/res/values-sq/strings.xml +++ b/res/values-sq/strings.xml @@ -624,7 +624,7 @@ "Për ta çiftuar me:<br><b>%1$s</b><br><br>sigurohu që të tregojë këtë kod:<br><b>%2$s</b>" "Nga:<br><b>%1$s</b><br><br>Të çiftohet me këtë pajisje?" "Për ta çiftuar me:<br><b>%1$s</b><br><br>Shkruaj në të:<br><b>%2$s</b> dhe më pas shtyp Kthehu ose Hyr." - "Lejo që %1$s të ketë qasje te kontaktet dhe historiku i telefonatave" + "Lejo qasjen te kontaktet dhe historiku i telefonatave" "Nuk mundi të lidhej me %1$s." "Skano për pajisje" @@ -3400,8 +3400,6 @@ "Përdor ngjyra të ftohta të ekranit" "Për të zbatuar ndryshimin e ngjyrës, çaktivizoje ekranin" "Për të zbatuar ndryshimin e monitorit të telefonisë, rindizni pajisjen" - "HAL HDR+ i kamerës" - "Për të zbatuar ndryshimin e HAL HDR+ të kamerës, rindiz pajisjen" "Sensori me laser i kamerës" "Përditësimet automatike të sistemit" "Përdorimi" diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml index b60aa02f91b..365b7c2e422 100644 --- a/res/values-sr/strings.xml +++ b/res/values-sr/strings.xml @@ -635,7 +635,7 @@ "Да бисте се упарили са уређајем:<br><b>%1$s</b><br><br>Уверите се да приказује овај приступни кôд:<br><b>%2$s</b>" "Са уређаја:<br><b>%1$s</b><br><br>Желите ли да се упарите са тим уређајем?" "За упаривање са уређајем:<br><b>%1$s</b><br><br>Унесите на њему:<br><b>%2$s</b>, а затим притисните Return или Enter." - "Дозволите уређају %1$s да приступа контактима и историји позива" + "Дозволите приступ контактима и историји позива" "Није могуће повезати се са уређајем %1$s." "Скенирање за уређаје" @@ -3442,8 +3442,6 @@ "Користи хладније боје екрана" "Да бисте применили промену боје, искључите екран" "Рестартујте уређај да бисте применили промену TelephonyMonitor-а" - "Камера HAL HDR+" - "Да бисте применили промену на камеру HAL HDR+, рестартујте уређај" "Сензор ласера Камере" "Аутоматска ажурирања система" "Потрошња" diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml index 17e81e3a089..41b6afc41a8 100644 --- a/res/values-sv/strings.xml +++ b/res/values-sv/strings.xml @@ -624,7 +624,7 @@ "Om du vill koppla med:<br><b>%1$s</b><br><br> måste lösenordet <br><b>%2$s</b> visas i den" "Från:<br><b>%1$s</b><br><br>Vill du koppla den till enheten?" "Koppla till:<br><b>%1$s</b><br><br>Skriv:<br><b>%2$s</b> och tryck sedan på Retur." - "Tillåt att %1$s får åtkomst till dina kontakter och din samtalshistorik" + "Tillåt åtkomst till kontakter och sökhistorik" "Det gick inte att ansluta till %1$s." "Sök efter enheter" @@ -3400,8 +3400,6 @@ "Använd svalare färger på skärmen" "Stäng av skärmen om du vill tillämpa färgändringen" "Starta om enheten om du vill tillämpa ändringen för Telephony Monitor" - "HAL HDR+ för kamera" - "Starta om enheten om du vill tillämpa ändringen HAL HDR+ för kamera" "Lasersensor för kamera" "Automatiska systemuppdateringar" "Användning" diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml index 20fe95b33c7..3d7b9a9d761 100644 --- a/res/values-sw/strings.xml +++ b/res/values-sw/strings.xml @@ -624,7 +624,7 @@ "Ili kuoanisha na :<br><b>%1$s</b><br><br>hakikisha inaonyesha nenosiri hili:<br><b>%2$s</b>" "From:<br><b>%1$s</b><br><br>Llinganisha na kifaa hiki?" "Kulinganisha na: <br><b> %1$s </b><br><br> Andika: <br><b> %2$s </b>, kisha bonyeza Rejea au Ingiza." - "Ruhusu %1$s ifikie anwani zako na rekodi ya simu" + "Ruhusu ufikiaji wa anwani na historia ya simu ulizopiga" "Haikuweza kuunganisha kwa %1$s." "Chunguza vifaa" @@ -3400,8 +3400,6 @@ "Tumia rangi yenye halijoto ya baridi zaidi kwenye onyesho" "Zima skrini ili uweze kutekeleza ubadilishaji wa rangi" "Ili kuweka mabadiliko ya kichunguzi cha shughuli za simu, washa kifaa tena" - "HAL HDR+ ya Kamera" - "Ili kutekeleza mabadiliko ya HAL HDR+ ya Kamera, washa kifaa tena" "Kitambuzi cha Leza ya Kamera" "Masasisho ya mfumo kiotomatiki" "Matumizi" diff --git a/res/values-ta/strings.xml b/res/values-ta/strings.xml index 10261d1626e..16b30ca8db1 100644 --- a/res/values-ta/strings.xml +++ b/res/values-ta/strings.xml @@ -624,7 +624,7 @@ "பின்வருவதுடன் இணைக்கவும்:<br><b>%1$s</b><br><br>இது, இந்தக் கடவுச்சொல்லைக் காட்டுகிறது என்பதை உறுதிப்படுத்தவும்:<br><b>%2$s</b>" "பின்வருவதில் இருந்து:<br><b>%1$s</b><br><br>இந்தச் சாதனத்தை இணைக்கவா?" "இதனுடன் இணைக்க:<br><b>%1$s</b><br><br>இதை உள்ளிடவும்:<br><b>%2$s</b>, Return அல்லது Enter ஐ அழுத்தவும்." - "தொடர்புகளையும் அழைப்பு வரலாற்றையும் அணுக, %1$sஐ அனுமதி" + "உங்கள் தொடர்புகள் மற்றும் அழைப்பு வரலாற்றை அணுக அனுமதிக்கவும்" "%1$s உடன் இணைக்க முடியவில்லை." "சாதனங்களுக்கு ஸ்கேன் செய்" @@ -3400,8 +3400,6 @@ "நீல வண்ணங்களைத் திரைக்குப் பயன்படுத்து" "வண்ண மாற்றத்தைப் பயன்படுத்த, திரையை முடக்கவும்" "டெலிஃபோனி மானிட்டரில் செய்த மாற்றத்தைப் பயன்படுத்த, சாதனத்தை மறுதொடக்கம் செய்யவும்" - "கேமரா HAL HDR+" - "கேமரா HAL HDR+ இல் செய்த மாற்றத்தைப் பயன்படுத்த, சாதனத்தை மறுதொடக்கம் செய்யவும்" "கேமராவின் லேசர் சென்சார்" "தானியங்கு முறைமை புதுப்பிப்புகள்" "பயன்பாடு" diff --git a/res/values-te/strings.xml b/res/values-te/strings.xml index 92be0658075..783bed2b0bf 100644 --- a/res/values-te/strings.xml +++ b/res/values-te/strings.xml @@ -624,7 +624,7 @@ "దీనితో జత చేయడానికి:<br><b>%1$s</b><br><br>ఇది ఈ పాస్‌కీని చూపుతోందని నిర్ధారించుకోండి:<br><b>%2$s</b>" "దీని నుండి:<br><b>%1$s</b><br><br>ఈ పరికరంతో జత చేయాలా?" "దీనితో జత చేయడానికి:<br><b>%1$s</b><br><br>దీనిలో టైప్ చేయండి:<br><b>%2$s</b>, ఆపై తిరిగి వెళ్లు లేదా Enter నొక్కండి." - "మీ పరిచయాలు మరియు కాల్ చరిత్రను యాక్సెస్ చేయడానికి %1$sని అనుమతించండి" + "మీ పరిచయాలకు మరియు కాల్ చరిత్రకు యాక్సెస్‌ని అనుమతించండి" "%1$sకి కనెక్ట్ చేయడం సాధ్యపడలేదు." "పరికరాల కోసం స్కాన్ చేయి" @@ -3401,8 +3401,6 @@ "ప్రశాంత భావనను కలిగించే ప్రదర్శన రంగులను ఉపయోగిస్తుంది" "రంగు మార్పును వర్తింపజేయడానికి, స్క్రీన్‌ను ఆఫ్ చేయండి" "టెలిఫోనీ మానిటర్ మార్పును వర్తింపజేయాలంటే, పరికరాన్ని రీబూట్ చేయండి" - "కెమెరా HAL HDR+" - "కెమెరా HAL HDR+ మార్పును వర్తింపజేయడానికి, పరికరాన్ని రీబూట్ చేయండి" "కెమెరా లేజర్ సెన్సార్" "స్వయంచాలక సిస్టమ్ అప్‌డేట్‌లు" "వినియోగం" diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml index 0b3ffdb47bb..689a44ef73e 100644 --- a/res/values-th/strings.xml +++ b/res/values-th/strings.xml @@ -624,7 +624,7 @@ "หากต้องการจับคู่กับ:<br><b>%1$s</b><br><br>ตรวจสอบให้แน่ใจว่าอุปกรณ์แสดงรหัสผ่านนี้:<br><b>%2$s</b>" "จาก:<br><b>%1$s</b><br><br>จับคู่กับอุปกรณ์นี้หรือไม่" "ในการจับคู่กับ: <br><b>%1$s</b><br><br> ให้พิมพ์: <br><b>%2$s</b> แล้วกด Return หรือ Enter" - "อนุญาตให้ %1$s เข้าถึงรายชื่อติดต่อและประวัติการโทรของคุณ" + "ให้สิทธิ์เข้าถึงรายชื่อติดต่อและประวัติการโทร" "ไม่สามารถเชื่อมต่อกับ %1$s" "สแกนหาอุปกรณ์" @@ -3400,8 +3400,6 @@ "ใช้สีแสดงผลที่เย็นกว่านี้" "หากต้องการใช้การเปลี่ยนสี ให้ปิดหน้าจอ" "เริ่มต้นอุปกรณ์ใหม่เพื่อให้การเปลี่ยนแปลงการตรวจสอบโทรศัพท์มีผล" - "HAL HDR+ ของกล้อง" - "เริ่มต้นอุปกรณ์ใหม่เพื่อให้การเปลี่ยนแปลง HAL HDR+ ของกล้องมีผล" "เซ็นเซอร์เลเซอร์ของกล้อง" "การอัปเดตระบบอัตโนมัติ" "การใช้งาน" diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml index ad9e8372c3f..caf2206afe7 100644 --- a/res/values-tl/strings.xml +++ b/res/values-tl/strings.xml @@ -624,7 +624,7 @@ "Upang makipagpares sa:<br><b>%1$s</b><br><br>Tiyaking ipinapakita nito ang passkey na ito:<br><b>%2$s</b>" "Mula sa:<br><b>%1$s</b><br><br>Makipagpares sa device na ito?" "Upang ipares sa:<br><b>%1$s</b><br><br>Mag-type dito:<br><b>%2$s</b>, pagkatapos ay pindutin ang Return o Enter." - "Payagan ang %1$s na ma-access ang iyong mga contact at history ng tawag" + "Payagan ang access sa iyong mga contact at history ng tawag" "Hindi makakonekta sa %1$s." "Mag-scan para sa mga device" @@ -3400,8 +3400,6 @@ "Gumamit ng mas malalamig na kulay ng display" "Upang ilapat ang pagbabago sa kulay, i-off ang screen" "Upang ilapat ang pagbabago sa telephony monitor, i-reboot ang device" - "Camera HAL HDR+" - "Upang mailapat ang pagbabago sa Camera HAL HDR+, i-reboot ang device" "Sensor ng Laser ng Camera" "Mga awtomatikong pag-update ng system" "Paggamit" diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml index c6ab8a61627..a8809b16384 100644 --- a/res/values-tr/strings.xml +++ b/res/values-tr/strings.xml @@ -624,7 +624,7 @@ "Şu cihazla eşlemek için:<br><b>%1$s</b><br><br>Şu parolanın göründüğünden emin olun:<br><b>%2$s</b>" "Kaynak:<br><b>%1$s</b><br><br>Bu cihaz ile eşlensin mi?" "<br><b>%1$s</b><br><br> ile eşlemek için cihaz üzerinde <br><b>%2$s</b> yazarak Return veya Enter tuşuna basın." - "%1$s adlı cihazın kişilerime ve çağrı geçmişime erişmesine izin ver" + "Kişilerinize ve çağrı geçmişinize erişime izin verin" "%1$s adlı cihaza bağlanılamadı." "Cihazları tara" @@ -3400,8 +3400,6 @@ "Daha soğuk ekran renkleri kullan" "Renk değişikliğini uygulamak için ekranı kapatın" "Telephony monitor değişikliğini uygulamak için cihazı yeniden başlatın" - "Kamera HAL HDR+" - "Kamera HAL HDR+ değişikliğini uygulamak için cihazı yeniden başlatın" "Kamera Lazer Sensörü" "Otomatik sistem güncellemeleri" "Kullanım" diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml index d927a20f8ab..5cc0fcb301a 100644 --- a/res/values-uk/strings.xml +++ b/res/values-uk/strings.xml @@ -646,8 +646,7 @@ "Щоб створити пару з пристроєм:<br><b>%1$s</b><br><br>Переконайтеся, що відображається цей ключ доступу:<br><b>%2$s</b>" "Від пристрою:<br><b>%1$s</b><br><br>Створити пару з цим пристроєм?" "Щоб створити пару з пристроєм: <br><b>%1$s</b><br><br> Введіть на ньому: <br><b>%2$s</b>, а потім натисніть \"Повернутися\" або \"Ввійти\"." - - + "Дозволити доступ до контактів та історії викликів" "Не вдалося з’єднатися з пристроєм %1$s." "Сканув. пристроїв" diff --git a/res/values-ur/strings.xml b/res/values-ur/strings.xml index f41c5b990a7..633185df391 100644 --- a/res/values-ur/strings.xml +++ b/res/values-ur/strings.xml @@ -624,7 +624,7 @@ "‏اس کے ساتھ جوڑا بنانے کیلئے:<br><b>%1$s</b><br><br>اس بات کو یقینی بنائیں کہ یہ اس پاس کلید کو دکھا رہا ہے:<br><b>%2$s</b>" "‏منجانب:‎<br><b>%1$s</b><br><br>‎اس آلہ کے ساتھ جوڑا بنائیں؟" "اس کے ساتھ جوڑا بنانے کیلئے:<br><b>%1$s</b><br><br>اس پر ٹائپ کریں:<br><b>%2$s</b>, پھر واپس جائیں یا انٹر کریں کو دبائیں۔" - "%1$s کو اپنے رابطوں اور کال کی سرگزشت تک رسائی کی اجازت دیں" + "اپنے رابطوں اور کال کی سرگزشت تک رسائی کی اجازت دیں" "%1$s سے مربوط نہیں ہو سکا۔" "آلات کیلئے اسکین کریں" @@ -3398,8 +3398,6 @@ "ڈسپلے کیلئے سرد رنگ استعمال کریں" "رنگ میں تبدیلی لاگو کرنے کیلئے اسکرین آف کریں" "ٹیلیفونی مانیٹر کی تبدیلی لاگو کرنے کیلئے، آلہ ریبوٹ کریں" - "‏کیمرا HAL HDR+‎" - "‏کیمرا HAL HDR+‎ کی تبدیلی لاگو کرنے کے لیے، آلہ ریبوٹ کریں" "کیمرا لیزر سینسر" "خودکار سسٹم اپ ڈیٹس" "استعمال" diff --git a/res/values-uz/strings.xml b/res/values-uz/strings.xml index 89eea460908..bb2a7962be3 100644 --- a/res/values-uz/strings.xml +++ b/res/values-uz/strings.xml @@ -624,7 +624,7 @@ "%1$s<br><b>bilan biriktirish uchun,</b><br><br>unda mana bu kalit so‘z ko‘rsatilayotganligini tekshiring:<br><b>%2$s</b>" "<br><b>%1$sdan so‘rov</b><br><br>Ushbu qurilma bilan biriktirilsinmi?" "<br><b>%1$s</b><br><br>bilan biriktirish uchun, uni ekranida:<br><b>%2$s</b> terib, Return yoki Enter tugmalarini bosing." - "%1$s qurilmasiga kontaktlarim va qo‘ng‘iroqlar tarixiga kirish uchun ruxsat berilsin" + "Kontakt va chaqiruvlar tarixiga ruxsat berish" "%1$sga o‘zaro bog‘lanmadi." "Qurilmalarni izlash" @@ -3412,8 +3412,6 @@ "Salqin displey ranglaridan foydalanish" "Rangni o‘zgartirish uchun ekranni o‘chiring" "Telefoniya nazoratiga o‘zgartirish kiritish uchun qurilmani o‘chirib yoqing" - "Kamera HAL HDR+" - "Kamera HAL HDR+ qilib o‘zgartirish uchun qurilmani qayta ishga tushiring" "Kameraning lazer sensori" "Avtomatik tizim yangilanishlari" "Trafik sarfi" diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml index 17df30a2837..150f185789e 100644 --- a/res/values-vi/strings.xml +++ b/res/values-vi/strings.xml @@ -624,7 +624,7 @@ "Để ghép nối với:<br><b>%1$s</b><br><br>Hãy đảm bảo thiết bị đang hiển thị mã xác nhận này:<br><b>%2$s</b>" "Từ:<br><b>%1$s</b><br><br>Ghép nối với thiết bị này?" "Để ghép nối với:<br><b>%1$s</b><br><br>Hãy nhập trên thiết bị:<br><b>%2$s</b> rồi nhấn Quay lại hoặc Enter." - "Cho phép %1$s truy cập danh bạ và nhật ký cuộc gọi của bạn" + "Cho phép truy cập vào danh bạ và lịch sử cuộc gọi của bạn" "Không thể kết nối với %1$s." "Dò tìm thiết bị" @@ -3400,8 +3400,6 @@ "Sử dụng màu hiển thị lạnh hơn" "Để áp dụng thay đổi màu, hãy tắt màn hình" "Để áp dụng thay đổi với giám sát điện thoại, hãy khởi động lại thiết bị" - "Máy ảnh HAL HDR+" - "Để áp dụng thay đổi Máy ảnh HAL HDR+, hãy khởi động lại thiết bị" "Cảm biến laser của máy ảnh" "Cập nhật hệ thống tự động" "Sử dụng" diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml index ebc4143c204..a59cd4379ab 100644 --- a/res/values-zh-rCN/strings.xml +++ b/res/values-zh-rCN/strings.xml @@ -624,7 +624,7 @@ "要与以下设备配对:<br><b>%1$s</b><br><br>请确保其显示的配对密钥为:<br><b>%2$s</b>" "来自:<br><b>%1$s</b><br><br>要与此设备配对吗?" "要与 <br><b>%1$s</b><br><br> 设备配对,请在该设备上键入:<br><b>%2$s</b>,然后按回车键。" - "允许%1$s访问您的通讯录和通话记录" + "允许访问您的通讯录和通话记录" "无法连接到%1$s。" "扫描设备" @@ -2749,7 +2749,7 @@ "移动网络" "流量使用" "热点" - "已关联的设备" + "已连接的设备" "蓝牙、投射、NFC" "蓝牙、投射" "应用和通知" @@ -3400,8 +3400,6 @@ "使用较冷的显示颜色" "要应用颜色更改,请关闭屏幕" "要应用电话监控器的变更内容,请重新启动设备" - "相机 HAL HDR+" - "要应用对“相机 HAL HDR+”设置所做的更改,请重新启动设备" "相机激光传感器" "自动系统更新" "流量消耗" diff --git a/res/values-zh-rHK/strings.xml b/res/values-zh-rHK/strings.xml index f6fd6c27c3a..f289b377544 100644 --- a/res/values-zh-rHK/strings.xml +++ b/res/values-zh-rHK/strings.xml @@ -624,7 +624,7 @@ "如要與下列裝置配對:<br><b>%1$s</b><br><br>請確認該裝置是否顯示下列密碼金鑰:<br><b>%2$s</b>" "來自:<br><b>%1$s</b><br><br>要與這部裝置配對嗎?" "如要與 <br><b>%1$s</b><br><br> 配對,請在該裝置上輸入:<br><b>%2$s</b>,然後按 Return 或 Enter 鍵。" - "允許%1$s存取您的聯絡人和通話記錄" + "允許存取您的聯絡人和通話記錄" "無法連接「%1$s」。" "掃描裝置" @@ -3403,8 +3403,6 @@ "使用較冷的顯示器顏色" "如要套用色溫變更,請先關閉螢幕" "如要套用「電話監控工具」的變更內容,請重新啟動裝置" - "相機 HAL HDR+" - "如要套用「相機 HAL HDR+」的變更內容,請重新啟動裝置" "相機鐳射感應器" "自動系統更新" "用量" diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml index 68b581b7de6..a33f03c776d 100644 --- a/res/values-zh-rTW/strings.xml +++ b/res/values-zh-rTW/strings.xml @@ -624,7 +624,7 @@ "如要與下列裝置配對:<br><b>%1$s</b><br><br>請確認該裝置是否顯示下列密碼金鑰:<br><b>%2$s</b>" "來自:<br><b>%1$s</b><br><br>要與這個裝置配對嗎?" "如要與 <br><b>%1$s</b><br><br> 配對,請輸入:<br><b>%2$s</b>,然後按下 [返回] 或 [輸入]。" - "允許「%1$s」存取你的聯絡人和通話紀錄" + "允許存取你的聯絡人和通話紀錄" "無法連線至「%1$s」。" "掃描裝置" @@ -3404,8 +3404,6 @@ "使用較冷的顯示器色溫" "如要套用色溫變更設定,請關閉螢幕" "如要套用 Telephony Monitor 的變更內容,請重新啟動裝置" - "相機 HAL HDR+" - "如要套用你對「相機 HAL HDR+」設定所做的變更,請重新啟動裝置" "相機雷射感應器" "自動系統更新" "使用情況" diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml index 577ad6427d4..63fc7786aa6 100644 --- a/res/values-zu/strings.xml +++ b/res/values-zu/strings.xml @@ -624,7 +624,7 @@ "Ukuhambisa ngokubili:<br><b>%1$s</b><br><br>Qinisekisa ukuthi ibonisa ukhiye wokungena:<br><b>%2$s</b>" "Kusuka ku:<br><b>%1$s</b><br><br>Beka eceleni namanye amadivayisi?" "Ukubhangqa ne:<br><b>%1$s</b><br><br>Thayipha kuyona:<br><b>%2$s</b>, bese ucindezela inkinobho uBuyisela noma uNgena." - "Vumela i-%1$s ukuthi ifinyelele koxhumana nabo nakumlando wekholi" + "Vumela ukufinyelela koxhumana nabo nomlando wekholi" "Ayikwazanga ukuxhuma ku-%1$s." "Skena amadivaysi" @@ -3401,8 +3401,6 @@ "Sebenzisa imibala yesibonisi esipholile" "Ukuze usebenzise ukushintshwa kombala, vala isikrini" "Ukuze usebenzise ushintsho lokuqapha ifoni, qalisa kabusha idivayisi" - "Ikhamera ye-HAL HDR+" - "Ukuze usebenzise ikhamera ye-HAL HDR+ ushintsho, qalisa idivayisi" "Inzwa ye-Laser yekhamera" "Izibuyekezo zesistimu ezenzakalelayo" "Ukusetshenziswa" From 1d6d60f2517470201fbd10fa6b207c77901397c8 Mon Sep 17 00:00:00 2001 From: Bill Yi Date: Tue, 12 Dec 2017 16:25:18 -0800 Subject: [PATCH 06/11] Import translations. DO NOT MERGE Auto-generated-cl: translation import Bug: 64712476 Change-Id: If249fffda6df063fd39ec95e4ba04b412a1ea9e1 --- res/values-af/strings.xml | 2 +- res/values-ar/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 | 3 +- res/values-ca/strings.xml | 3 +- res/values-cs/strings.xml | 2 +- res/values-da/strings.xml | 10 ++-- res/values-de/strings.xml | 9 ++-- res/values-el/strings.xml | 12 ++--- res/values-es-rUS/strings.xml | 4 +- res/values-et/strings.xml | 2 +- res/values-eu/strings.xml | 2 +- res/values-fa/strings.xml | 3 +- 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 | 82 ++++++++++++++++---------------- res/values-hr/strings.xml | 2 +- res/values-hu/strings.xml | 2 +- res/values-hy/strings.xml | 2 +- res/values-is/strings.xml | 2 +- res/values-it/strings.xml | 6 +-- 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-ml/strings.xml | 2 +- res/values-mn/strings.xml | 2 +- res/values-mr/strings.xml | 3 +- 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-pa/strings.xml | 4 +- res/values-pl/strings.xml | 2 +- res/values-ru/strings.xml | 12 ++--- 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 | 3 +- res/values-ur/strings.xml | 2 +- res/values-uz/strings.xml | 2 +- res/values-vi/strings.xml | 2 +- res/values-zh-rCN/strings.xml | 4 +- res/values-zh-rHK/strings.xml | 2 +- res/values-zh-rTW/strings.xml | 2 +- res/values-zu/strings.xml | 2 +- 66 files changed, 128 insertions(+), 134 deletions(-) diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml index 7accac22273..93a9f49617d 100644 --- a/res/values-af/strings.xml +++ b/res/values-af/strings.xml @@ -618,7 +618,7 @@ "Om saam te bind met:<br><b>%1$s</b><br><br>maak seker dit wys hierdie geheimsleutel:<br><b>%2$s</b>" "Van:<br><b>%1$s</b><br><br>Bind met hierdie toestel saam?" "Om saam te bind met:<br><b>%1$s</b><br><br>Voer daarop in:<br><b>%2$s</b>, druk dan Return of Enter." - "Gee %1$s toegang tot jou kontakte en oproepgeskiedenis" + "Laat toegang tot jou kontakte en oproepgeskiedenis toe" "Kon nie aan %1$s koppel nie." "Soek vir toestelle" diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml index 4e998dbb8c9..0865df7818b 100644 --- a/res/values-ar/strings.xml +++ b/res/values-ar/strings.xml @@ -662,7 +662,7 @@ "‏للاقتران مع:<br><b>%1$s</b><br><br>تأكد من أنه يعرض مفتاح المرور هذا:<br><b>%2$s</b>" "‏من:<br><b>%1$s</b><br><br>الاقتران مع هذا الجهاز؟" "‏للإقران مع:<br><b>%1$s</b><br><br>اكتب عليه:<br><b>%2$s</b>, ثم اضغط على Return أو Enter." - "السماح للجهاز %1$s بالدخول إلى جهات الاتصال وسجل المكالمات" + "السماح بالوصول إلى جهات الاتصال وسجلّ المكالمات" "تعذر الاتصال بـ %1$s." "البحث عن أجهزة" diff --git a/res/values-az/strings.xml b/res/values-az/strings.xml index 3b277c23e88..e8cb3b44245 100644 --- a/res/values-az/strings.xml +++ b/res/values-az/strings.xml @@ -618,7 +618,7 @@ "<br><b>%1$s</b><br><br> ilə birləşdirmək üçün, onun bu ana açarı göstərdiyinə əmin olun:<br><b>%2$s</b>" "Kimdən:<br><b>%1$s</b><br><br>Cihazınız bu cihazla cütləşsin?" "Bunlarla cütlənmək üçün:<br><b>%1$s</b><br><br>Bunu yazın:<br><b>%2$s</b>, sonra Geri və ya Giriş basın." - "Əlaqə və zəng tarixçəsinə giriş üçün %1$s cihazına icazə verin" + "Kontaktlar və zəng tarixçəsinə giriş icazəsi verin" "%1$s cihazına qoşula bilmədi." "Cihaz axtarın" diff --git a/res/values-b+sr+Latn/strings.xml b/res/values-b+sr+Latn/strings.xml index 9ab172b5dad..c7f346d95c1 100644 --- a/res/values-b+sr+Latn/strings.xml +++ b/res/values-b+sr+Latn/strings.xml @@ -629,7 +629,7 @@ "Da biste se uparili sa uređajem:<br><b>%1$s</b><br><br>Uverite se da prikazuje ovaj pristupni kôd:<br><b>%2$s</b>" "Sa uređaja:<br><b>%1$s</b><br><br>Želite li da se uparite sa tim uređajem?" "Za uparivanje sa uređajem:<br><b>%1$s</b><br><br>Unesite na njemu:<br><b>%2$s</b>, a zatim pritisnite Return ili Enter." - "Dozvolite uređaju %1$s da pristupa kontaktima i istoriji poziva" + "Dozvolite pristup kontaktima i istoriji poziva" "Nije moguće povezati se sa uređajem %1$s." "Skeniranje za uređaje" diff --git a/res/values-be/strings.xml b/res/values-be/strings.xml index c16ecdf0a4b..8f3700e5528 100644 --- a/res/values-be/strings.xml +++ b/res/values-be/strings.xml @@ -640,7 +640,7 @@ "Каб падключыцца да прылады <br><b>%1$s</b><br><br>пераканайцеся, што яна адлюстроўвае ключ доступу:<br><b>%2$s</b>" "Ад: <br><b>%1$sПадключыцца да гэтай прылады?" "Каб падключыцца да прылады <br><b>%1$s</b><br><br>, увядзiце <br><b>%2$s</b>, затым нацiснiце \"Назад\" або Enter" - "Дазволіць прыладзе %1$s доступ да вашых кантактаў і гісторыі выклікаў" + "Дазвольце доступ да сваіх кантактаў і гісторыі выклікаў" "Не атрымалася падлучыцца да прылады %1$s" "Шукаць прылады" diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml index bdaf9e816e2..a3ba9f20ca0 100644 --- a/res/values-bg/strings.xml +++ b/res/values-bg/strings.xml @@ -618,7 +618,7 @@ "За сдвояване със::<br><b>%1$s</b><br><br>Уверете се, че показва този код за достъп:<br><b>%2$s</b>" "От:<br><b>%1$s</b><br><br>Да се сдвои ли с това устройство?" "За сдвояване със: <br><b>%1$s</b><br><br> Въведете: <br><b>%2$s</b>, след това натиснете „Return“ или „Enter“." - "Разрешаване на „%1$s“ да осъществява достъп до вашите контакти и история на обажданията" + "Разрешаване на достъпа до контактите и историята на обажданията ви" "Не можа да се установи връзка със: %1$s." "Сканиране за устройства" diff --git a/res/values-bn/strings.xml b/res/values-bn/strings.xml index 6c63ec75f50..06aa936f6cb 100644 --- a/res/values-bn/strings.xml +++ b/res/values-bn/strings.xml @@ -618,7 +618,7 @@ "এর সঙ্গে যুক্ত করতে:<br><b>%1$s</b><br><br>নিশ্চিত করুন যে এটি এই পাস কী দেখাচ্ছে:<br><b>%2$s</b>" "এর থেকে:<br><b>%1$s</b><br><br>এই ডিভাইসের সঙ্গে যুক্ত করবেন?" "এর সঙ্গে যুক্ত করতে:<br><b>%1$s</b><br><br>এটিতে টাইপ করুন:<br><b>%2$s</b>, তারপর Return বা Enter টিপুন।" - "%1$sকে আপনার পরিচিতি এবং কলের ইতিহাস অ্যাক্সেস করার মঞ্জুরি দিন" + "আপনার পরিচিতি এবং কল ইতিহাস অ্যাক্সেসের অনুমতি দিন" "%1$s এ সংযোগ করতে পারেনি।" "ডিভাইসগুলির জন্য স্ক্যান করুন" diff --git a/res/values-bs/strings.xml b/res/values-bs/strings.xml index 9878e9e800b..2964d7977db 100644 --- a/res/values-bs/strings.xml +++ b/res/values-bs/strings.xml @@ -629,8 +629,7 @@ "Da biste izvršilu uparivanje s uređajem:<br><b>%1$s</b><br><br>Provjerite da li se prikazuje sljedeći pristupni ključ:<br><b>%2$s</b>" "Od:<br><b>%1$s</b><br><br>Želite izvršiti uparivanje s ovim uređajem?" "Da biste izvršili uparivanje s uređajem:<br><b>%1$s</b><br><br>Otkucajte na njemu:<br><b>%2$s</b>, a zatim pritisnite Return ili Enter." - - + "Dozvolite pristup kontaktima i historiji poziva" "Nije uspjelo povezivanje sa uređajem %1$s." "Potraži uređaje" diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml index d6e991894b5..6352fbf8bc7 100644 --- a/res/values-ca/strings.xml +++ b/res/values-ca/strings.xml @@ -618,8 +618,7 @@ "Per vincular amb:<br><b>%1$s</b><br><br>Assegura\'t que apareix aquesta contrasenya:<br><b>%2$s</b>" "De:<br><b>%1$s</b><br><br>Vols vincular-lo amb aquest dispositiu?" "Per vincular amb:<br><b>%1$s</b><br><br>Escriu <br><b>%2$s</b> en el dispositiu i, a continuació, prem la tecla de retorn." - - + "Permet l\'accés als contactes i a l\'historial de trucades" "No s\'ha pogut connectar amb %1$s." "Cerca dispositius" diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml index dec43bdf5e5..d662e8f2e1c 100644 --- a/res/values-cs/strings.xml +++ b/res/values-cs/strings.xml @@ -640,7 +640,7 @@ "Párování se zařízením:<br><b>%1$s</b><br><br>Zkontrolujte, zda zařízení zobrazuje tento přístupový klíč:<br><b>%2$s</b>" "Ze zařízení:<br><b>%1$s</b><br><br>Spárovat s tímto zařízením?" "Párování se zařízením:<br><b>%1$s</b><br><br>Zadejte:<br><b>%2$s</b> a poté stiskněte klávesu Return nebo Enter." - "Povolit zařízení %1$s přístup k vašim kontaktům a historii volání" + "Povolit přístup ke kontaktům a historii volání" "K zařízení %1$s se nelze připojit." "Vyhledat zařízení" diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml index 848ef3d30dd..467b4bcec52 100644 --- a/res/values-da/strings.xml +++ b/res/values-da/strings.xml @@ -618,7 +618,7 @@ "Sådan parrer du med:<br><b>%1$s</b><br><br>Sørg for, at den viser denne adgangsnøgle:<br><b>%2$s</b>" "Fra:<br><b>%1$s</b><br><br>Par med denne enhed?" "Sådan parres med:<br><b>%1$s</b><br><br>Skriv på den:<br><b>%2$s</b>, og tryk derefter på Retur eller Enter." - "Giv %1$s adgang til dine kontaktpersoner og din opkaldshistorik" + "Giv adgang til dine kontaktpersoner og din opkaldshistorik" "Der kunne ikke oprettes forbindelse til %1$s." "Søg efter enheder" @@ -2794,7 +2794,7 @@ "arbejdsprofil, administreret profil, samle, samling, arbejde, profil" "bevægelser" "betal, tryk, betalinger" - "sikkerhedskopiering, sikkerhedskopiér" + "backup, sikkerhedskopiér" "bevægelse" "Konfigurer NFC-tag for Wi-Fi" "Skriv" @@ -3028,7 +3028,7 @@ Skift til Kun alarmer i %1$d minutter (indtil %2$s) - Skift til Kun alarmer i %1$d timer indtil %2$s + Skift til Kun alarmer i %1$d time indtil %2$s Skift til Kun alarmer i %1$d timer indtil %2$s "Skift til Kun alarmer frem til %1$s" @@ -3042,7 +3042,7 @@ "Når skærmen er tændt" "Når skærmen er slukket" "Når skærmen er tændt eller slukket" - "Indstillinger for underretninger" + "Underretningsindstillinger" "Send feedback om denne enhed" "Indtast administratorpinkoden" "Til" @@ -3339,7 +3339,7 @@ "%1$s er standard" "TIL/%1$s" "FRA" - "Sikkerhedskopiering er slået fra" + "Backup er slået fra" "Opdateret til Android %1$s" "Handlingen er ikke tilladt" "Lydstyrken kan ikke ændres" diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml index 181746db29a..47d464394b9 100644 --- a/res/values-de/strings.xml +++ b/res/values-de/strings.xml @@ -618,8 +618,7 @@ ) --> "Von:<br><b>%1$s</b><br><br> Mit diesem Gerät koppeln?" "Gib zur Kopplung mit <br><b>%1$s</b><br><br> <br><b>%2$s</b> ein und drücke anschließend die Eingabetaste." - - + "Zugriff auf deine Kontakte und deine Anrufliste zulassen" "Keine Verbindung zu %1$s möglich" "Scan nach Geräten" @@ -2165,7 +2164,7 @@ "Spracheingabe" "Spracheingabedienste" "Vollständiger Sprachinteraktionsdienst einschließlich der Verwendung von Hotwords" - "Einfache Text-in-Sprache-Funktion" + "Einfache Sprachausgabe-Funktion" "Dieser Spracheingabedienst kann Spracheingaben jederzeit überwachen und Anwendungen, die Sprachbefehle unterstützen, für dich steuern. Er wird von der Anwendung %s bereitgestellt. Möchtest du diesen Dienst aktivieren?" "Bevorzugtes Modul" "Moduleinstellungen" @@ -2253,7 +2252,7 @@ "Apps zur Geräteverwaltung" "Keine App zur Geräteverwaltung verfügbar" "Nutzer" - "Arbeit" + "Geschäftlich" "Keine verfügbaren Trust Agents" "App zur Geräteverwaltung aktivieren?" "Diese App zur Geräteverwaltung aktivieren" @@ -3120,7 +3119,7 @@ "Installierte Apps" "Instant-Apps" "Nutzer" - "Arbeit" + "Geschäftlich" "Apps: alle" "Apps: deaktiviert" "Kategorien: sehr hohe Wichtigkeit" diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml index 940e1e80ead..ddbb1dec368 100644 --- a/res/values-el/strings.xml +++ b/res/values-el/strings.xml @@ -618,7 +618,7 @@ "Για σύζευξη με τη συσκευή:<br><b>%1$s</b><br><br>Βεβαιωθείτε ότι εμφανίζεται το κλειδί πρόσβασης:<br><b>%2$s</b>" "Από:<br><b>%1$s</b><br><br>Να γίνει σύζευξη με αυτήν τη συσκευή;" "Για σύζευξη με:<br><b>%1$s</b><br><br>Πληκτρολογήστε:<br><b>%2$s</b> και πιέστε το πλήκτρο επιστροφής (Return) ή το πλήκτρο Enter." - "Να επιτρέπεται στη συσκευή %1$s να έχει πρόσβαση στις επαφές και το ιστορικό κλήσεών σας" + "Να επιτρέπεται η πρόσβαση στις επαφές σας και στο ιστορικό κλήσεων" "Δεν ήταν δυνατή η σύνδεση με τη συσκευή %1$s." "Ανίχνευση για συσκευές" @@ -1567,13 +1567,13 @@ "Δεδομένα χρήστη" "Εφαρμογή αποθηκευτικού χώρου USB" "Κάρτα SD" - "Κατάργηση εγκατάστασης" - "Κατάργηση εγκατάστασης για όλους τους χρήστες" + "Απεγκατάσταση" + "Απεγκατάσταση για όλους τους χρήστες" "Εγκατάσταση" "Απενεργοποίηση" "Ενεργοποίηση" "Διαγραφή δεδομένων" - "Κατάργηση εγκατάστασης ενημερώσεων" + "Απεγκατάσταση ενημερώσεων" "Έχετε επιλέξει να γίνεται εκκίνηση αυτής της εφαρμογής από προεπιλογή για ορισμένες ενέργειες." "Έχετε επιλέξει να επιτρέπεται σε αυτήν την εφαρμογή η δημιουργία γραφικών στοιχείων και η πρόσβαση στα δεδομένα τους." "Δεν έχουν οριστεί προεπιλογές." @@ -2247,7 +2247,7 @@ "Ρυθμίσεις διαχειριστή συσκευής" "Εφαρμογή διαχειριστή συσκευής" "Απενεργοποίηση αυτής της εφαρμογής διαχειριστή συσκευής" - "Κατάργηση εγκατάστασης εφαρμογής" + "Απεγκατάσταση εφαρμογής" "Απενεργοποίηση και απεγκατάσταση" "Εφαρμογές διαχειριστή συσκευής" "Δεν υπάρχουν διαθέσιμες εφαρμογές διαχειριστή συσκευής" @@ -3660,7 +3660,7 @@ Εφαρμογή κάμερας "Εφαρμογή ημερολογίου" - "Εφαρμογή επαφών" + "Εφαρμογή Επαφές" Εφαρμογές ηλεκτρ. ταχυδρομείου Εφαρμογή ηλεκτρ. ταχυδρομείου diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml index 6938e58a017..3b09cb8c338 100644 --- a/res/values-es-rUS/strings.xml +++ b/res/values-es-rUS/strings.xml @@ -618,7 +618,7 @@ "Para sincronizar con<br><b>%1$s</b><br><br>asegúrate de que se muestre esta clave de acceso:<br><b>%2$s</b>." "¿Desde: <br><b>%1$s</b><br><br>sincronizas con este dispositivo?" "Para sincronizar con:<br><b>%1$s</b><br><br>Escribe allí:<br><b>%2$s</b> y luego presiona Volver o Enter." - "Permitir que %1$s acceda a los contactos y al historial de llamadas" + "Permitir el acceso a tus contactos y al historial de llamadas" "No se pudo establecer conexión con %1$s." "Buscar dispositivos" @@ -1590,7 +1590,7 @@ "Restablecer preferencias" "¿Restablecer?" "Se restablecerán las preferencias de:\n\n "
  • "Apps inhabilitadas"
  • \n" "
  • "Notificaciones de apps inhabilitadas"
  • \n" "
  • "Apps predeterminadas para realizar acciones"
  • \n" "
  • "Restricciones de datos en segundo plano para apps"
  • \n" "
  • "Restricciones de permisos"
  • \n\n" No se perderán los datos de las apps."
    - "Restablecer aplicaciones" + "Restablecer apps" "Administrar el espacio" "Filtro" "Elegir opciones de filtro" diff --git a/res/values-et/strings.xml b/res/values-et/strings.xml index d813128df61..94ffb24d581 100644 --- a/res/values-et/strings.xml +++ b/res/values-et/strings.xml @@ -618,7 +618,7 @@ "Sidumine seadmega<br><b>%1$s</b><br><br>Veenduge, et see kuvaks järgmist parooli:<br><b>%2$s</b>" "Seadmelt: <br><b>%1$s</b><br><br> Kas siduda seadmega?" "Siduda seadmega:<br><b>%1$s</b><br><br>Sisestage:<br><b>%2$s</b>, seejärel vajutage naasmis- või sisestusklahvi." - "Lubage seadmel %1$s juurde pääseda teie kontaktidele ja kõneajaloole" + "Luba juurdepääs kontaktidele ja kõneajaloole" "Seadmega %1$s ei saanud ühendust." "Otsi seadmeid" diff --git a/res/values-eu/strings.xml b/res/values-eu/strings.xml index 1cba8ffe9da..5e7b1d04ce3 100644 --- a/res/values-eu/strings.xml +++ b/res/values-eu/strings.xml @@ -618,7 +618,7 @@ "Gailu honekin parekatzeko:<br><b>%1$s</b><br><br>Ziurtatu pasakode hau erakusten duela:<br><b>%2$s</b>" "Igorlea:<br><b>%1$s</b><br><br>Gailuarekin parekatu?" "Honekin parekatzeko:<br><b>%1$s</b><br><br>Idatzi hau bertan:<br><b>%2$s</b>, eta sakatu Itzuli edo Sartu." - "Baimendu %1$s gailuari zure kontaktuak eta deien historia atzitzea" + "Baimendu kontaktuak eta deien historia atzitzea" "Ezin izan da %1$s gailura konektatu." "Bilatu gailuak" diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml index de0003a42ba..13f77480e4a 100644 --- a/res/values-fa/strings.xml +++ b/res/values-fa/strings.xml @@ -618,8 +618,7 @@ "‏برای مرتبط‌سازی با:<br><b>%1$s</b><br><br>مطمئن شوید که دستگاه این کلیدواژه را نمایش می‌دهد:<br><b>%2$s</b>" "‏از::<br><b>%1$s</b><br><br>با این دستگاه مرتبط‌سازی شود؟" "‏برای مرتبط‌سازی با:<br><b>%1$s</b><br><br>روی آن تایپ کنید:<br><b>%2$s</b>، سپس Return یا Enter را فشار دهید." - - + "اجازه دسترسی به مخاطبین و سابقه تماس" "اتصال به %1$s ممکن نیست." "اسکن برای دستگاه‌ها" diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml index 642698d3191..cbe94639d0c 100644 --- a/res/values-fi/strings.xml +++ b/res/values-fi/strings.xml @@ -618,7 +618,7 @@ "Parin muodostus seuraavan laitteen kanssa:<br><b>%1$s</b><br><br>Varmista, että laite esittää tämän koodin:<br><b>%2$s</b>" "Laitteesta<br><b>%1$s</b><br><br>Muodostetaanko pari tämän laitteen kanssa?" "Jos haluat muodostaa laiteparin laitteen <br><b>%1$s</b><br><br> kanssa, kirjoita laitteelle <br><b>%2$s</b> ja paina Rivinvaihto tai Enter." - "Salli laitteen %1$s käyttää yhteystietojasi ja puheluhistoriaasi" + "Anna yhteystietojesi ja puheluhistoriasi käyttöoikeus" "Yhteyden muodostaminen laitteeseen %1$s epäonnistui." "Etsi laitteita" diff --git a/res/values-fr-rCA/strings.xml b/res/values-fr-rCA/strings.xml index a2058fce584..53a66ced892 100644 --- a/res/values-fr-rCA/strings.xml +++ b/res/values-fr-rCA/strings.xml @@ -618,7 +618,7 @@ "Pour associer votre appareil à :<br><b>%1$s</b><br><br>Assurez-vous que le mot de passe <br><b>%2$s</b> s\'affiche." "De :<br><b>%1$s</b><br><br>Associer à cet appareil?" "Pour l\'association à :<br><b>%1$s</b><br><br>Saisissez <br><b>%2$s</b>, puis appuyez sur « Retour » ou sur « Entrée »." - "Autoriser « %1$s » à accéder à vos contacts et à l\'historique des appels" + "Autoriser l\'accès à vos contacts et à l\'historique des appels" "Impossible de se connecter à %1$s." "Recherche d\'appareils" diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml index 11cc8012445..d3fafb662fd 100644 --- a/res/values-fr/strings.xml +++ b/res/values-fr/strings.xml @@ -618,7 +618,7 @@ "Pour associer votre appareil à :<br><b>%1$s</b><br><br>Assurez-vous que le mot de passe <br><b>%2$s</b> s\'affiche." "De :<br><b>%1$s</b><br><br>Associer à cet appareil ?" "Pour l\'association à :<br><b>%1$s</b><br><br>Saisissez <br><b>%2$s</b>, puis appuyez sur \"Retour\" ou sur \"Entrée\"." - "Autoriser %1$s à accéder à vos contacts et à l\'historique des appels" + "Autoriser l\'accès à vos contacts et à l\'historique des appels" "Impossible de se connecter à %1$s." "Rechercher des appareils" diff --git a/res/values-gl/strings.xml b/res/values-gl/strings.xml index 46867887ca6..458dfbd5e2f 100644 --- a/res/values-gl/strings.xml +++ b/res/values-gl/strings.xml @@ -618,7 +618,7 @@ "Para sincronizar con:<br><b>%1$s</b><br><br>Asegúrate de que está mostrando este contrasinal:<br><b>%2$s</b>" "De:<br><b>%1$s</b><br><br>Sincronizar con este dispositivo?" "Para sincronizar con:<br><b>%1$s</b><br><br>Escribe nel:<br><b>%2$s</b> e, a continuación, preme Retroceso ou Intro." - "Permitir que %1$s acceda aos teus contactos e ao historial de chamadas" + "Permitir o acceso aos teus contactos e ao historial de chamadas" "Non se puido conectar a %1$s." "Buscar dispositivos" diff --git a/res/values-gu/strings.xml b/res/values-gu/strings.xml index 485f65c0f53..c506997fc65 100644 --- a/res/values-gu/strings.xml +++ b/res/values-gu/strings.xml @@ -618,7 +618,7 @@ "આની સાથે જોડી કરવા માટે:<br><b>%1$s</b><br><br>ખાતરી કરો કે તે આ પાસકી દર્શાવી રહ્યું છે:<br><b>%2$s</b>" "અહીંથી:<br><b>%1$s</b><br><br>આ ઉપકરણ સાથે જોડી કરીએ?" "આની સાથે જોડી કરવા:<br><b>%1$s</b><br><br>તેના પર લખો:<br><b>%2$s</b>, પછી Return અથવા Enter દબાવો." - "%1$s ને તમારા સંપર્કો અને કૉલ ઇતિહાસને ઍક્સેસ કરવાની મંજૂરી આપો" + "તમારા સંપર્કો અને કૉલ ઇતિહાસના ઍક્સેસની મંજૂરી આપો" "%1$s સાથે કનેક્ટ કરી શકાયું નથી." "ઉપકરણો માટે સ્કૅન કરો" diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml index 7ca128076ef..37332a08dea 100644 --- a/res/values-hi/strings.xml +++ b/res/values-hi/strings.xml @@ -250,7 +250,7 @@ "अभी नहीं" "आगे" "भाषाएं" - "भाषा प्राथमिकताएं" + "पसंदीदा भाषा" "निकालें" "भाषा जोड़ें" @@ -304,7 +304,7 @@ "ऑपरेटर चयन" "कोई नेटवर्क ऑपरेटर चुनें" "तारीख और समय" - "दिनांक और समय सेट करें" + "तारीख और समय सेट करें" "तारीख, समय, समय क्षेत्र और प्रारूप सेट करें" "ऑटोमैटिक तारीख और समय" "नेटवर्क-प्रदत्त समय का उपयोग करें" @@ -325,7 +325,7 @@ "तारीख" "समय" "अपने आप लॉक करें" - "%1$s निष्क्रियता के बाद" + "%1$s तक इस्तेमाल न होने के बाद" "सो जाने के तुरंत बाद, %1$s के द्वारा अनलॉक रखे जाने को छोड़कर" "%2$s के अनलॉक रखे जाने के अलावा, कम बैटरी मोड में होने के बाद %1$s" "लॉक स्‍क्रीन पर अपनी जानकारी दिखाएं" @@ -353,7 +353,7 @@ "सुरक्षा स्थिति" "स्क्रीन लॉक, फ़िंगरप्रिंट" "स्क्रीन लॉक" - "अंगुली की छाप" + "उंगली की छाप" "फ़िंगरप्रिंट प्रबंधित करें" "इनके हेतु फ़िंगरप्रिंट उपयोग करें" "फ़िंगरप्रिंट जोड़ें" @@ -381,7 +381,7 @@ "फिर भी आगे बढ़ें" "वापस जाएं" "सेंसर को छुएं" - "यह आपके फ़ोन के पीछे दिया गया है. अपने अंगूठे के पास की अंगुली का उपयोग करें." + "यह आपके फ़ोन के पीछे दिया गया है. अपने अंगूठे के पास की उंगली का उपयोग करें." "डिवाइस और उस पर फ़िंगरप्रिंट सेंसर की जगह बताने वाला चित्रण" "नाम" "ठीक है" @@ -389,7 +389,7 @@ "सेंसर को छुएं" "अपनी उंगली सेंसर पर रखें और कंपन (वाइब्रेशन) महसूस होने पर उठा लें" "उठाएं, फिर दोबारा छुएं" - "अपने फ़िंगरप्रिंट के अलग-अलग भागों को जोड़ने के लिए अपनी अंगुली को उठाते रहें" + "अपने फ़िंगरप्रिंट के अलग-अलग भागों को जोड़ने के लिए अपनी उंगली को उठाते रहें" "फ़िंगरप्रिंट जोड़ा गया" "जब आपको यह आइकॉन दिखाई दे, तब पहचान के लिए या खरीदारियों की स्वीकृति देने के लिए अपने फ़िंगरप्रिंट का इस्तेमाल करें." "इसे बाद में करें" @@ -398,10 +398,10 @@ "स्‍क्रीन लॉक सेट करें" "हो गया" "ओह हो, वह सेंसर नहीं है" - "अपने फ़ोन के पीछे लगे सेंसर को छुएं. अपनी तर्जनी (अंगूठे के बगल वाली) अंगुली का इस्तेमाल करें." + "अपने फ़ोन के पीछे लगे सेंसर को छुएं. अपनी तर्जनी (अंगूठे के बगल वाली) उंगली का इस्तेमाल करें." "नामांकन पूर्ण नहीं हुआ था" "फ़िंगरप्रिंट नामांकन समय की सीमा पार हो गई है. फिर से प्रयास करें." - "फ़िंगरप्रिंट नामांकन ने काम नहीं किया. फिर से प्रयास करें या किसी दूसरी अंगुली का उपयोग करें." + "फ़िंगरप्रिंट नामांकन ने काम नहीं किया. फिर से प्रयास करें या किसी दूसरी उंगली का उपयोग करें." "कोई और जोड़ें" "आगे" "अपना फ़ोन अनलॉक करने के साथ-साथ, खरीदारी और ऐप ऐक्‍सेस को अधिकृत करने के लिए आप अपनी फ़िंगरप्रिंट का भी उपयोग कर सकते हैं. ""ज़्यादा जानें" @@ -492,7 +492,7 @@ "आकार" "पिन" "पासवर्ड" - "स्‍क्रीन लॉक सेट करने के बाद, आप सेटिंग और सुरक्षा में अपनी अंगुली की छाप भी सेट कर सकते हैं." + "स्‍क्रीन लॉक सेट करने के बाद, आप सेटिंग और सुरक्षा में अपनी उंगली की छाप भी सेट कर सकते हैं." "स्‍क्रीन लॉक बंद करें" "डिवाइस सुरक्षा निकालें?" "प्रोफ़ाइल सुरक्षा निकालें?" @@ -618,7 +618,7 @@ "इससे युग्मित करने के लिए:<br><b>%1$s</b><br><br>सुनिश्चित करें कि वह यह पासकी दिखा रहा है:<br><b>%2$s</b>" "इससे:<br><b>%1$s</b><br><br>इस डिवाइस से जोड़ें?" "इसके साथ युग्‍मित करने के लिए:<br><b>%1$s</b><br><br>इस पर लिखें:<br><b>%2$s</b>, फिर Return या Enter दबाएं." - "%1$s को अपने संपर्कों तथा कॉल इतिहास ऐक्‍सेस करने की अनुमति दें" + "आपके संपर्क और कॉल इतिहास देखने की मंज़ूरी दें" "%1$s से कनेक्‍ट नहीं किया जा सका." "डिवाइस के लिए स्‍कैन" @@ -645,7 +645,7 @@ "विकल्प…" "बेहतर सेटिंग" "बेहतर ब्लूटूथ" - "ब्लूटूथ के चालू होने पर, आपका डिवाइस आस-पास के और ब्लूटूथ डिवाइस से संचार कर सकता है." + "ब्लूटूथ चालू होने पर, आपका डिवाइस आस-पास के दूसरे ब्लूटूथ डिवाइस से संपर्क कर सकता है." "जगह की सटीकता को बेहतर बनाने के लिए, सिस्‍टम ऐप और सेवाएं अभी भी ब्‍लूटूथ डिवाइसों का पता लगा सकती हैं. आप इसे LINK_BEGINस्‍कैन करने की सेटिंगLINK_END में बदल सकते हैं." "कनेक्ट नहीं हो सका. फिर से कोशिश करें." "डिवाइस विवरण" @@ -692,13 +692,13 @@ "%1$d Mbps" "%s वाई-फ़ाई को चालू करना चाहता है" "%s वाई-फ़ाई को बंद करना चाहता है" - "आस-पास के उपकरणों से संपर्क (एन एफ सी)" + "आस-पास के डिवाइस से संपर्क (एनएफसी)" "जब टैबलेट अन्य डिवाइस को स्पर्श करे तो डेटा ट्रांसफर करने दें" "जब फ़ोन अन्य डिवाइस को स्पर्श करे तो डेटा ट्रांसफर करने दें" "NFC चालू करें" "NFC इस डिवाइस और आस-पास के अन्य डिवाइस या लक्ष्यों के बीच डेटा का आदान-प्रदान करता है, जैसे कि भुगतान टर्मिनल, एक्सेस रीडर और सहभागी विज्ञापन या टैग." "Android बीम" - "NFC के माध्यम से ऐप सामग्री प्रसारित करने के लिए तैयार" + "एनएफसी के ज़रिए ऐप की सामग्री भेजने के लिए तैयार" "बंद" "अनुपलब्‍ध है क्‍योंकि NFC बंद है" "Android बीम" @@ -785,7 +785,7 @@ "सिग्‍नल शक्ति" "स्थिति" "लिंक गति" - "आवृत्ति" + "फ़्रीक्वेंसी" "आईपी पता" "के द्वारा सहेजा गया" "%1$s प्रमाणिकता" @@ -942,7 +942,7 @@ "आवाज़" "आवाज़" "संगीत प्रभाव" - "रिंग वॉल्यूम" + "रिंग की आवाज़" "शांत होने पर कंपन (वाइब्रेशन) करे" "सूचना की डिफ़ॉल्ट आवाज़" "रिंगटोन" @@ -951,7 +951,7 @@ "कार्य प्रोफ़ाइल का समर्थन नहीं करता है" "सूचना की डिफ़ॉल्ट आवाज़" "मीडिया" - "संगीत और वीडियो के लिए वॉल्‍यूम सेट करें" + "संगीत और वीडियो के लिए आवाज़ सेट करें" "अलार्म" "संलग्‍न किए गए डॉक के लिए ऑडियो सेटिंग" "कॉल करते समय ध्वनी सुने" @@ -1042,7 +1042,7 @@ "सूर्योदय होने पर अपने आप बंद हो जाएगा" "सुलाएं (कम बैटरी मोड)" "स्क्रीन बंद हो जाती है" - "नि‍ष्‍क्रि‍यता के %1$s के बाद" + "%1$s तक इस्तेमाल न होने पर" "वॉलपेपर" "डिफ़ॉल्ट" "कस्टम" @@ -1499,7 +1499,7 @@ "अनलॉक पिन बदलें" "अनलॉक आकार बनाएं" "सहायता के लिए मेन्यू दबाएं." - "पूरा होने पर अंगुली हटा लें" + "पूरा होने पर उंगली हटा लें" "कम से कम %d बिंदुओं को कनेक्‍ट करें. पुन: प्रयास करें:" "आकार रिकॉर्ड किया गया" "पुष्टि के लिए आकार को फिर से बनाएं" @@ -1534,7 +1534,7 @@ "ऐप्स प्रबंधित करें" "इंस्‍टॉल किए गए ऐप्स प्रबंधित करें और निकालें" "ऐप की जानकारी" - "ऐप्स प्रबंधित करें, त्‍वरित लॉन्‍च शॉर्टकट सेट करें" + "ऐप प्रबंधित करें, तुरंत लॉन्‍च करने वाले शॉर्टकट सेट करें" "ऐप्स सेटिंग" "नामालूम स्रोत" "सभी ऐप्स स्रोतों को अनुमति दें" @@ -1724,7 +1724,7 @@ "स्‍वत: अक्षर बड़े करना" "वाक्‍यों में प्रथम अक्षर को बड़ा लिखें" "स्‍वत: विरामचिह्न लगाएं" - "भौतिक कीबोर्ड सेटिंग" + "सामान्य कीबोर्ड की सेटिंग" "\".\" सम्‍मिलित करने के लिए Space कुंजी दो बार दबाएं" "पासवर्ड दिखाएं" "लिखते समय वर्ण दिखाएं" @@ -1736,9 +1736,9 @@ "उपलब्‍ध वर्चुअल कीबोर्ड" "कीबोर्ड प्रबंधित करें" "कीबोर्ड सहायता" - "भौतिक कीबोर्ड" + "सामान्य कीबोर्ड" "वर्चुअल कीबोर्ड दिखाएं" - "भौतिक कीबोर्ड के सक्रिय होने के दौरान इसे स्‍क्रीन पर बनाए रखें" + "सामान्य कीबोर्ड चालू रहने के दौरान इसे स्‍क्रीन पर दिखाते रहें" "कीबोर्ड शॉर्टकट सहायक" "उपलब्ध शॉर्टकट दिखाएं" "डिफ़ॉल्ट" @@ -1786,8 +1786,8 @@ "%1$s सेटिंग" "सक्रिय इनपुट पद्धतियां चुनें" "ऑनस्‍क्रीन कीबोर्ड सेटिंग" - "भौतिक कीबोर्ड" - "भौतिक कीबोर्ड सेटिंग" + "सामान्य कीबोर्ड" + "सामान्य कीबोर्ड की सेटिंग" "गैजेट चुनें" "विजेट चुनें" "विजेट बनाएं और पहुंच की अनुमति दें?" @@ -1830,12 +1830,12 @@ "ज़ूम करने के लिए 3 बार टैप करें" "ज़ूम करने के लिए किसी बटन पर टैप करें" "ज़ूम करने के लिए"", स्क्रीन पर 3 बार जल्दी-जल्दी टैप करें.\n"
    • "स्क्रोल करने के लिए 2 या उससे ज़्यादा उंगलियां खींचें"
    • \n
    • "ज़ूम एडजस्ट करने के लिए 2 या उससे ज़्यादा उंगलियों से पिंच करें"
    \n\n"थोड़ी देर तक ज़ूम करने के लिए"", स्क्रीन पर 3 बार जल्दी-जल्दी टैप करें और तीसरे टैप पर अपनी उंगली दबाए रखें.\n"
    • "स्क्रीन पर यहां-वहां ले जाने के लिए खींचें"
    • \n
    • "ज़ूम आउट करने के लिए अपनी उंगली उठा लें"
    \n\n"आप कीबोर्ड या नेविगेशन बार पर ज़ूम इन नहीं कर सकते हैं."
    - "बड़ा करने की सुविधा चालू होने पर, फटाफट बड़ा करने के लिए स्क्रीन के नीचे दिए गए सुलभता बटन का इस्तेमाल करें.\n\n""ज़ूम करने के लिए"", सुलभता बटन पर टैप करें, फिर स्क्रीन पर कहीं भी टैप करें.\n"
    • "स्क्रोल करने के लिए 2 या उससे ज़्यादा अंगुलियां खींचें"
    • \n
    • "ज़ूम को कम या ज़्यादा करने के लिए 2 या उससे ज़्यादा अंगुलियों से पिंच करें"
    \n\n"थोड़े समय तक ज़ूम करने के लिए"", सुलभता बटन पर टैप करें, फिर स्क्रीन पर कहीं भी छुएं और दबाकर रखें.\n"
    • "स्क्रीन पर इधर-उधर ले जाने के लिए खींचें"
    • \n
    • "ज़ूम आउट करने के लिए अंगुली उठाएं"
    \n\n"आप कीबोर्ड या नेविगेशन बार पर ज़ूम इन नहीं कर सकते."
    + "बड़ा करने की सुविधा चालू होने पर, फटाफट बड़ा करने के लिए स्क्रीन के नीचे दिए गए सुलभता बटन का इस्तेमाल करें.\n\n""ज़ूम करने के लिए"", सुलभता बटन पर टैप करें, फिर स्क्रीन पर कहीं भी टैप करें.\n"
    • "स्क्रोल करने के लिए 2 या उससे ज़्यादा अंगुलियां खींचें"
    • \n
    • "ज़ूम को कम या ज़्यादा करने के लिए 2 या उससे ज़्यादा अंगुलियों से पिंच करें"
    \n\n"थोड़े समय तक ज़ूम करने के लिए"", सुलभता बटन पर टैप करें, फिर स्क्रीन पर कहीं भी छुएं और दबाकर रखें.\n"
    • "स्क्रीन पर इधर-उधर ले जाने के लिए खींचें"
    • \n
    • "ज़ूम आउट करने के लिए उंगली उठाएं"
    \n\n"आप कीबोर्ड या नेविगेशन बार पर ज़ूम इन नहीं कर सकते."
    "सुलभता बटन %1$s पर सेट है. बड़ा करने के लिए, सुलभता बटन को दबाकर रखें, फिर बड़ा करना चुनें." "सरल उपयोग शॉर्टकट" "शॉर्टकट सेवा" "लॉक स्क्रीन से अनुमति दें" - "शॉर्टकट चालू होने पर, दोनों वॉल्यूम बटनों को 3 सेकंड तक दबाए रखकर आप किसी सुलभता सेवा को चालू कर सकते हैं." + "जब शॉर्टकट चालू हो जाए, तो आवाज़ के दोनों बटन 3 सेकंड तक दबाए रखकर आप किसी सुलभता सेवा को चालू कर सकते हैं." "उच्च कंट्रास्ट लेख" "स्क्रीन को बड़ा करने की सुविधा को अपने आप अपडेट करें" "एेप ट्रांज़िशन पर स्क्रीन को बड़ा दिखाना अपडेट करें" @@ -2531,7 +2531,7 @@ "कोई यूज़र क्रेडेंशियल इंस्टॉल नहीं है" "शब्द जाँच" "अपना वर्तमान पूर्ण बैकअप पासवर्ड यहां लिखें" - "पूर्ण बैकअप के लिए यहां नया पासवर्ड लिखें" + "पूरे बैक अप के लिए यहां नया पासवर्ड लिखें" "यहां अपना नया पूर्ण बैकअप पासवर्ड फिर से लिखें" "बैकअप पासवर्ड सेट करें" "रद्द करें" @@ -2664,7 +2664,7 @@ "आपातकालीन प्रसारण" "नेटवर्क ऑपरेटर" - "एक्सेस पॉइंट का नाम" + "एक्सेस प्वाइंट का नाम" "बेहतर 4G LTE मोड" "ध्वनि और संचारों को उन्नत बनाने के लिए LTE डेटा का उपयोग करें (सुझाए गए)" "पसंदीदा नेटवर्क प्रकार" @@ -2765,7 +2765,7 @@ "प्रोजेक्ट, कास्ट करें" "जगह, डिस्क, हार्ड डिस्क, डिवाइस का इस्तेमाल" "पावर उपयोग, शुल्क" - "वर्तनी शब्दकोश वर्तनीजांच स्‍वत: सुधार" + "वर्तनी या स्पेलिंग, शब्दकोश या डिक्शनरी, वर्तनी जाँच, अपने आप सुधार" "पहचानकर्ता, इनपुट, बोली, बोलें, भाषा, हैंड्सफ़्री, हैंड फ़्री, पहचान, आपत्तिजनक, शब्द, ऑडियो, इतिहास, ब्लूटूथ, हेडसेट" "रेट करें, भाषा, डिफ़ॉल्ट, बोलें, बोलना, tts, सुलभता स्क्रीन रीडर, नेत्रहीन" "घड़ी, सेना" @@ -2804,14 +2804,14 @@ "NFC टैग में डेटा लिखने में असमर्थ. यदि समस्या बनी रहती है, तो कोई भिन्न टैग आज़माकर देखें" "NFC टैग लिखने योग्य नहीं है. कृपया किसी भिन्न टैग का उपयोग करें." "डिफ़ॉल्‍ट ध्‍वनि" - "रिंग वॉल्यूम %1$s पर है" + "रिंग की आवाज़ %1$s है" "आवाज़, कंपन (वाइब्रेशन), परेशान न करें" "रिंगर, कंपन (वाइब्रेशन) पर सेट है" "रिंगर मौन पर सेट है" - "रिंग वॉल्यूम 80% पर है" - "मीडिया वॉल्‍यूम" - "अलार्म वॉल्‍यूम" - "रिंग का वॉल्यूम" + "रिंग की आवाज़ 80% है" + "मीडिया की आवाज़" + "अलार्म की आवाज़" + "रिंग की आवाज़" "सूचना की आवाज़" "फ़ोन रिंगटोन" "सूचना की डिफ़ॉल्ट आवाज़" @@ -2842,7 +2842,7 @@ "प्राथमिकता इनकी अनुमति देती है" "अॉटोमैटिक नियम" "परेशान न करें के नियम सेट करें" - "निश्चित समय पर ध्वनियों और कंपनों को सीमित करें" + "तय समय पर आवाज़ और वाइब्रेशन को सीमित करें" "सिर्फ़ प्राथमिकता" "केवल अलार्म" "पूरी तरह शांत" @@ -3254,7 +3254,7 @@ %1$d ऐप्स द्वारा पिछले %2$s में उपयोग की गई मेमोरी %1$d ऐप्स द्वारा पिछले %2$s में उपयोग की गई मेमोरी
    - "आवृत्ति" + "फ़्रीक्वेंसी" "अधिकतम उपयोग" "किसी डेटा का उपयोग नहीं किया गया" "%1$s के लिए परेशान न करें की ऐक्सेस की अनुमति दें?" @@ -3339,10 +3339,10 @@ "%1$s डिफ़ॉल्ट है" "चालू / %1$s" "बंद" - "बैक अप अक्षम किया गया" + "बैक अप बंद किया गया" "Android %1$s में अपडेट किया गया" "कार्रवाई की अनुमति नहीं" - "वॉल्यूम बदला नहीं जा सकता" + "आवाज़ बदली नहीं जा सकती" "कॉल करने की अनुमति नहीं है" "मैसेज (एसएमएस) की अनुमति नहीं है" "कैमरा की अनुमति नहीं है" @@ -3433,15 +3433,15 @@ "अपना डिवाइस चालू करने के लिए पिन ज़रूरी बनाएं. बंद होने पर, यह डिवाइस कॉल, मैसेज, नोटिफिकेशन, या अलार्म नहीं पा सकता." "अपना डिवाइस चालू करने के लिए पासवर्ड ज़रूरी बनाएं. बंद होने पर, यह डिवाइस कॉल, मैसेज, नोटिफिकेशन, या अलार्म नहीं पा सकता." "और फ़िंगरप्रिंट जोड़ें" - "किसी दूसरी अंगुली से अनलॉक करें" + "किसी दूसरी उंगली से अनलॉक करें" "चालू / %1$s" "बंद / %1$s" "कभी अपने आप चालू ना करें" "%1$s बैटरी शेष रहने पर अपने आप चालू करें" "बैटरी ऑप्टिमाइज़ेशन का उपयोग नहीं कर रहा है" "अगर डिवाइस लॉक है, तो सूचनाओं का जवाब या अन्य लेख लिखने से रोकें" - "डिफ़ॉल्ट वर्तनी-जाँचकर्ता" - "वर्तनी-जाँचकर्ता चुनें" + "डिफ़ॉल्ट स्पेलिंग जाँचकर्ता" + "वर्तनी/स्पेलिंग जाँचकर्ता चुनें" "नहीं चुना गया" "(कुछ नहीं)" ": " diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml index 65414496a89..ed04799bd0d 100644 --- a/res/values-hr/strings.xml +++ b/res/values-hr/strings.xml @@ -629,7 +629,7 @@ "Za uparivanje s:<br><b>%1$s</b><br><br>Uvjerite se da prikazuje ovaj pristupni kôd:<br><b>%2$s</b>" "Od:<br><b>%1$s</b><br><br>Upariti se s ovim uređajem?" "Za uparivanje s uređajem:<br><b>%1$s</b><br><br>upišite:<br><b>%2$s</b> na tom uređaju pa pritisnite tipke Return ili Enter." - "Dopusti uređaju %1$s pristup kontaktima i povijesti poziva" + "Dopustite pristup kontaktima i povijesti poziva" "Nije moguće povezati se na %1$s." "Skeniranjem traži uređaje" diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml index cd7cb1729e9..6de94d311ed 100644 --- a/res/values-hu/strings.xml +++ b/res/values-hu/strings.xml @@ -618,7 +618,7 @@ "Párosítás ezzel:<br><b>%1$s</b><br><br>Győződjön meg arról, hogy a következő azonosítókulcs látható rajta:<br><b>%2$s</b>" "Küldő:<br><b>%1$s</b><br><br>Párosítja a készüléket?" "A(z) <br><b>%1$s</b><br><br> eszközzel való párosításhoz írja be rajta a következőt: <br><b>%2$s </b>, majd nyomja meg a Return vagy az Enter billentyűt." - "A(z) %1$s engedélyezése a névjegyek és híváselőzmények eléréséhez" + "Hozzáférést biztosít névjegyeihez és híváslistájához" "Nem sikerült csatlakozni a következőhöz: %1$s." "Eszközök keresése" diff --git a/res/values-hy/strings.xml b/res/values-hy/strings.xml index 7a3d7d9644c..b2e1bf00257 100644 --- a/res/values-hy/strings.xml +++ b/res/values-hy/strings.xml @@ -618,7 +618,7 @@ "<br><b>%1$s</b><br><br>-ի հետ զուգավորելու համար համոզվեք այն ցուցադրում է անցաբառը`:<br><b>%2$s</b>" "Ումից`<br><b>%1$s</b><br><br>Զուգավորվե՞լ այս սարքի հետ:" "<br><b>%1$s</b><br><br>-ի հետ զուգավորելու համար մուտքագրեք`<br><b>%2$s</b>, այնուհետև սեղմեք հետդարձ կամ հաստատում:" - "Թույլ տալ %1$s սարքին օգտագործել ձեր կոնտակտներն ու զանգերի պատմությունը" + "Թույլատրել կոնտակտների ու զանգերի պատմության հասանելիությունը" "Հնարավոր չեղավ միանալ %1$s-ին:" "Սկանավորել սարքերի համար" diff --git a/res/values-is/strings.xml b/res/values-is/strings.xml index df374a5ce52..d978f2c2ab8 100644 --- a/res/values-is/strings.xml +++ b/res/values-is/strings.xml @@ -618,7 +618,7 @@ "Til að para við:<br><b>%1$s</b><br><br>Gakktu úr skugga um að þessi aðgangslykill birtist:<br><b>%2$s</b>" "Frá:<br><b>%1$s</b><br><br>Para við þetta tæki?" "Til að para við:<br><b>%1$s</b><br><br>Sláðu inn:<br><b>%2$s</b> og ýttu síðan á vendihnappinn eða Enter." - "Veita %1$s aðgang að tengiliðunum þínum og símtalaferli" + "Veita aðgang að tengiliðum þínum og símtalaferli" "Ekki tókst að tengjast %1$s." "Leita að tækjum" diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml index 104fa49ef6e..f20ed023504 100644 --- a/res/values-it/strings.xml +++ b/res/values-it/strings.xml @@ -618,7 +618,7 @@ "Per l\'accoppiamento con:<br><b>%1$s</b><br><br>Assicurati che sia visualizzata questa passkey:<br><b>%2$s</b>" "Da:<br><b>%1$s</b><br><br>Accoppiare con questo dispositivo?" "Per eseguire l\'accoppiamento con <br><b>%1$s</b><br><br>, digita sul dispositivo <br><b>%2$s</b>, quindi premi A capo o Invio." - "Consenti al dispositivo %1$s di accedere ai contatti e alla cronologia chiamate" + "Consenti l\'accesso ai tuoi contatti e alla cronologia chiamate" "Impossibile collegarsi a %1$s." "Cerca dispositivi" @@ -1560,7 +1560,7 @@
    "Cancella accesso" "Controlli" - "Termina" + "Forza interruzione" "Totale" "Dimensioni app" "App in archivio USB" @@ -2057,7 +2057,7 @@ "Capacità totale batteria" "Consumo energetico totale previsto" "Consumo energetico effettivo" - "Termina" + "Forza interruzione" "Informazioni app" "Impostazioni applicazioni" "Impostazioni schermo" diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml index 54e719c9334..5c0a27f2295 100644 --- a/res/values-iw/strings.xml +++ b/res/values-iw/strings.xml @@ -640,7 +640,7 @@ "‏כדי להתאים עם:<br><b>%1$s</b><br><br>ודא שהמכשיר מציג סיסמה זו:<br><b>%2$s</b>" "‏מאת:<br><b>%1$s</b><br><br>לבצע התאמה עם מכשיר זה?" "‏כדי להתאים עם:<br><b>%1$s</b><br><br>הקלד בו:<br><b>%2$s</b>, ולאחר מכן הקש על Return או Enter." - "התר ל-%1$s לגשת אל אנשי הקשר ואל היסטוריית השיחות" + "מתן גישה אל אנשי הקשר ולהיסטוריית השיחות" "לא הייתה אפשרות להתחבר אל %1$s." "סרוק אחר מכשירים" diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml index da13c994981..e13a6734428 100644 --- a/res/values-ja/strings.xml +++ b/res/values-ja/strings.xml @@ -618,7 +618,7 @@ "次のデバイスをペアに設定する場合:<br><b>%1$s</b><br><br>次のパスキーが表示されていることを確認してください:<br><b>%2$s</b>" "発信元:<br><b>%1$s</b><br><br>このデバイスをペアに設定しますか?" "<br><b>%1$s</b><br><br>をペアに設定するには、「<br><b>%2$s</b>」と入力してから、ReturnキーまたはEnterキーを押します。" - "自分の連絡先や通話履歴へのアクセスを%1$sに許可する" + "連絡先と通話履歴へのアクセスを許可する" "%1$sに接続できませんでした。" "デバイスのスキャン" diff --git a/res/values-ka/strings.xml b/res/values-ka/strings.xml index 13b5dc1f962..ab2af6d7386 100644 --- a/res/values-ka/strings.xml +++ b/res/values-ka/strings.xml @@ -618,7 +618,7 @@ "<br><b>%1$s</b><br><br>-თან დასაწყვილებლად დარწმუნდით, რომ ის გიჩვენებთ წვდომის გასაღებს:<br><b>%2$s</b>" "<br><b>%1$s</b><br><br>-ისგან. დაწყვილდეს ამ მოწყობილობასთან?" "<br><b>%1$s</b><br><br>-თან დასაწყვილებლად დაბეჭდეთ მასზე:<br><b>%2$s</b>, შემდეგ დააწკაპუნეთ ღილაკზე Return ან Enter." - "მიეცით %1$s-ს თქვენს კონტაქტებსა და საუბრის ისტორიაზე წვდომის უფლება" + "კონტაქტებსა და საუბრის ისტორიაზე წვდომის დაშვება" "%1$s-თან დაკავშირება ვერ მოხერხდა." "სკანირება მოწყობილობების აღმოსაჩენად" diff --git a/res/values-kk/strings.xml b/res/values-kk/strings.xml index d8c1376efe3..c8926b7d8e4 100644 --- a/res/values-kk/strings.xml +++ b/res/values-kk/strings.xml @@ -618,7 +618,7 @@ "Жұпталу үшін:<br><b>%1$s</b><br><br>Оның келесі кілтсөзді көрсетуін қадағалаңыз:<br><b>%2$s</b>" "Келесі құрылғыдан:<br><b>%1$s</b><br><br>Осы құрылғымен жұпталсын ба?" "Жұпталу үшін:<br><b>%1$s</b><br><br>Теріңіз:<br><b>%2$s</b>, одан кейін Оралу немесе Енгізу пәрменін басыңыз." - "%1$s құрылғысына контактілерге және қоңыраулар тарихына қатынасуға рұқсат ету" + "Контактілер мен қоңыраулар тарихына кіруге рұқсат беру" "%1$s құрылғысына жалғану мүмкін болмады." "Құрылғыларды скандау" diff --git a/res/values-km/strings.xml b/res/values-km/strings.xml index 22506fbfcb0..10f1d0978b2 100644 --- a/res/values-km/strings.xml +++ b/res/values-km/strings.xml @@ -618,7 +618,7 @@ "ដើម្បី​ផ្គូផ្គង​ជា​មួយ៖<br><b>%1$s</b><br><br>ប្រាកដ​ថា វា​កំពុង​បង្ហាញ​​លេខ​កូដ​នេះ៖<br><b>%2$s</b>" "ពី៖ <br><b>%1$s</b><br><br>ផ្គូផ្គង​ជា​មួយ​ឧបករណ៍​នេះ?" "ដើម្បី​ផ្គូផ្គង​ជា​មួយ៖ <br><b>%1$s</b><br><br>វាយ​បញ្ចូល៖ <br><b>%2$s</b> បន្ទាប់​មក​ចុច​ Return ឬ Enter ។" - "អនុញ្ញាតឲ្យ %1$s ចូលប្រើទំនាក់ទំនង និងប្រវត្តិហៅចេញរបស់អ្នក" + "ផ្ដល់​សិទ្ធិ​អនុញ្ញាត​ចូល​ប្រើ​ទំនាក់ទំនង​ និង​ប្រវត្តិ​ហៅ​ទូរសព្ទ​របស់អ្នក" "មិន​អាច​តភ្ជាប់​ទៅ %1$s ។" "វិភាគ​រក​ឧបករណ៍" diff --git a/res/values-kn/strings.xml b/res/values-kn/strings.xml index d273d775cad..4ea9fdc5a6c 100644 --- a/res/values-kn/strings.xml +++ b/res/values-kn/strings.xml @@ -618,7 +618,7 @@ "ಇದರೊಂದಿಗೆ ಜೋಡಿಸಲು:<br><b>%1$s</b><br><br>ಇದು ಈ ಪಾಸ್‌ಕೀ ಅನ್ನು ತೋರಿಸುತ್ತಿದೆಯೇ ಎಂಬುದನ್ನು ಖಾತ್ರಿಪಡಿಸಿಕೊಳ್ಳಿ:<br><b>%2$s</b>" "ಇದರಿಂದ:<br><b>%1$s</b><br><br>ಈ ಸಾಧನದೊಂದಿಗೆ ಜೋಡಿಸುವುದೇ?" "ಇದರೊಂದಿಗೆ ಜೋಡಿಸಲು:<br><b>%1$s</b><br><br>ಇದರಲ್ಲಿ ಟೈಪ್‌ ಮಾಡಿ:<br><b>%2$s</b>, ನಂತರ ಹಿಂತಿರುಗು ಅಥವಾ ನಮೂದಿಸು ಒತ್ತಿರಿ." - "ನಿಮ್ಮ ಸಂಪರ್ಕಗಳು ಹಾಗೂ ಕರೆ ಇತಿಹಾಸವನ್ನು ಪ್ರವೇಶಿಸಲು %1$s ಸಾಧನವನ್ನು ಅನುಮತಿಸಿ" + "ನಿಮ್ಮ ಸಂಪರ್ಕಗಳು ಮತ್ತು ಕರೆ ಇತಿಹಾಸಕ್ಕೆ ಪ್ರವೇಶವನ್ನು ಅನುಮತಿಸಿ" "%1$s ಗೆ ಸಂಪರ್ಕಪಡಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ." "ಸಾಧನಗಳಿಗಾಗಿ ಸ್ಕ್ಯಾನ್ ಮಾಡು" diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml index 488edb1a639..561b9ff1779 100644 --- a/res/values-ko/strings.xml +++ b/res/values-ko/strings.xml @@ -618,7 +618,7 @@ "<b>%1$s</b>와(과) 페어링하려면<br><br>이 패스키(<b>%2$s</b>)가 표시되는지 확인하세요.<br><br>" "출처:<br><b>%1$s</b><br><br>이 기기와 페어링하시겠습니까?" "<br><b>%1$s</b><br><br>와(과) 페어링하려면 <br><b>%2$s</b>을(를) 입력한 다음 Return 또는 Enter 키를 누르세요." - "%1$s이(가) 연락처 및 통화 기록에 액세스하도록 허용합니다." + "연락처 및 통화 기록 액세스 허용" "%1$s에 연결할 수 없습니다." "장치 검색" diff --git a/res/values-ky/strings.xml b/res/values-ky/strings.xml index b9c2b630e11..528899d6e6f 100644 --- a/res/values-ky/strings.xml +++ b/res/values-ky/strings.xml @@ -617,7 +617,7 @@ "Муну менен туташыш үчүн:<br><b>%1$s</b><br><br>Ал бул кодду көрсөтүп жатканын текшериңиз:<br><b>%2$s</b>" "Жөнөтүүчү:<br><b>%1$s</b><br><br>Бул түзмөк менен туташсынбы?" "Кийинки менен туташуу үчүн:<br><b>%1$s</b><br><br>Андан муну терип:<br><b>%2$s</b>, Return же Enter\'ди басыңыз." - "%1$s түзмөгүнө байланыштарыңыз жана чалуу таржымалына кирүү мүмкүнчүлүгүн бериңиз" + "Байланыштар менен чалуулар таржымалын пайдалануу мүмкүнчүлүгү берилсин" "%1$s менен байланыша албай жатат." "Түзмөктөрдү издөө" diff --git a/res/values-lo/strings.xml b/res/values-lo/strings.xml index a2257ea47da..ca182451fdf 100644 --- a/res/values-lo/strings.xml +++ b/res/values-lo/strings.xml @@ -618,7 +618,7 @@ "ເພື່ອຈັບຄູ່ກັບ:<br><b>%1$s</b><br><br>ໃຫ້ກວດສອບວ່າມັນສະແດງ passkey ນີ້ຢູ່:<br><b>%2$s</b>" "ຈາກ:<br><b>%1$s</b><br><br>ຈັບຄູ່ກັບອຸປະກອນນີ້ບໍ່?" "ເພື່ອຈັບຄູ່ກັບ:<br><b>%1$s</b><br><br>ໃຫ້ພິມ:<br><b>%2$s</b>, ຈາກນັ້ນກົດ Return ຫຼື Enter." - "ອະ​ນຸ​ຍາດ​ໃຫ້ %1$s ເຂົ້າ​ຫາ​ລາ​ຍ​ຊື່ ແລະ ປະ​ຫວັດ​ການ​ໂທ​ຂອງ​ທ່ານ" + "ອະນຸຍາດໃຫ້ເຂົ້າເຖິງລາຍຊື່ຜູ້ຕິດຕໍ່ ແລະ ປະຫວັດການໂທຂອງທ່ານ" "ບໍ່ສາມາດເຊື່ອມຕໍ່ຫາ %1$s ໄດ້." "ສະແກນຫາອຸປະກອນ" diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml index 50e99b47984..d247edc0a77 100644 --- a/res/values-lt/strings.xml +++ b/res/values-lt/strings.xml @@ -640,7 +640,7 @@ "Jei norite suporuoti su:<br><b>%1$s</b><br><br>Įsitikinkite, kad jame rodomas šis prieigos raktas:<br><b>%2$s</b>" "Iš:<br><b>%1$s</b><br><br>Poruoti su šiuo įrenginiu?" "Susieti su: <br><b>%1$s</b><br><br> Įveskite: <br><b>%2$s</b>, tada paspauskite „Grįžti“ arba „Enter“." - "Leisti „%1$s“ pasiekti kontaktus ir skambučių istoriją" + "Leisti pasiekti jūsų kontaktus ir skambučių istoriją" "Nepavyko prisijungti prie „%1$s“." "Nuskaityti ieškant įrenginių" diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml index 989b0055bbf..5c0e70edc85 100644 --- a/res/values-lv/strings.xml +++ b/res/values-lv/strings.xml @@ -629,7 +629,7 @@ "Lai savienotu pārī ar:<br><b>%1$s</b><br><br>Pārliecinieties, ka tiek rādīta šī ieejas atslēga:<br><b>%2$s</b>" "No:<br><b>%1$s</b><br><br>Vai savienot pārī ar šo ierīci?" "Lai izveidotu savienojumu pārī ar ierīci <br><b>%1$s</b><br><br>, ierakstiet tajā atslēgu <br><b>%2$s</b> un pēc tam nospiediet ievadīšanas taustiņu." - "Atļaut ierīcei %1$s piekļūt jūsu kontaktpersonām un zvanu vēsturei" + "Atļaut piekļuvi jūsu kontaktpersonām un zvanu vēsturei" "Nevarēja izveidot savienojumu ar ierīci %1$s." "Skenēt ierīces" diff --git a/res/values-ml/strings.xml b/res/values-ml/strings.xml index 407c0acf7db..19316475fa1 100644 --- a/res/values-ml/strings.xml +++ b/res/values-ml/strings.xml @@ -618,7 +618,7 @@ "ഇതുമായി ജോടിയാക്കുന്നതിന്:<br><b>%1$s</b><br><br>അത് ഈ പാസ്കീ തന്നെയാണ് ദൃശ്യമാക്കുന്നതെന്ന് ഉറപ്പാക്കുക:<br><b>%2$s</b>" "ഇതിൽ നിന്ന്:<br><b>%1$s</b><br><br>ഈ ഉപകരണവുമായി ജോടിയാക്കണോ?" "ഇതുമായി ജോടിയാക്കുക:<br><b>%1$s</b><br><br>ഇതിൽ ടൈപ്പുചെയ്യുക:<br><b>%2$s</b>, തുടർന്ന് മടങ്ങുക അല്ലെങ്കിൽ നൽകുക അമർത്തുക." - "നിങ്ങളുടെ കോൺടാക്റ്റുകളെയും കോൾ ചരിത്രവും ആക്സസ് ചെയ്യാൻ %1$s എന്നതിനെ അനുവദിക്കുക" + "കോൺടാക്‌റ്റുകളിലേക്കും കോൾ ചരിത്രത്തിലേക്കും ആക്‌സസ് അനുവദിക്കുക" "%1$s എന്നതിലേക്ക് കണക്റ്റുചെയ്യാനായില്ല." "ഉപകരണങ്ങൾക്കായി സ്‌കാൻ ചെയ്യുക" diff --git a/res/values-mn/strings.xml b/res/values-mn/strings.xml index 8ced3fcfe5d..cd9b9272892 100644 --- a/res/values-mn/strings.xml +++ b/res/values-mn/strings.xml @@ -618,7 +618,7 @@ "Дараахтай хослуулах:<br><b>%1$s</b><br><br>Дараах түлхүүрийг харуулж байгаа эсэхийг анхаарна уу:<br><b>%2$s</b>" "Юунаас:<br><b>%1$s</b><br><br>Энэ төхөөрөмжтэй хослуулах уу?" "<br><b>%1$s</b><br><br>-тай хослуулахын тулд дээр нь <br><b>%2$s</b>-г оруулаанд Буцах буюу Оруулах товчийг дарна уу." - "%1$s таны харилцагчийн хаяг, дуудлагын түүхэнд хандахыг зөвшөөрөх" + "Харилцагч болон дуудлагын түүхийн хандалтыг зөвшөөрөх" "%1$s-д холбогдож чадсангүй." "Төхөөрөмжүүдийг скан хийх" diff --git a/res/values-mr/strings.xml b/res/values-mr/strings.xml index 8c0161b963b..3ef146f31f6 100644 --- a/res/values-mr/strings.xml +++ b/res/values-mr/strings.xml @@ -618,8 +618,7 @@ "यासह जोडण्यासाठी:<br><b>%1$s</b><br><br>हे ही पासकी दर्शवत असल्याचे सुनिश्चित करा:<br><b>%2$s</b>" "यावरून:<br><b>%1$s</b><br><br>हे डिव्हाइस जोडायचे?" "यासह जोडण्यासाठी:<br><b>%1$s</b><br><br>यावर टाइप करा:<br><b>%2$s</b>, नंतर Return किंवा Enter दाबा." - - + "तुमच्या संपर्क आणि कॉल इतिहासातील अ‍ॅक्सेसची अनुमती द्या" "%1$s सह कनेक्ट करणे शक्य झाले नाही." "डिव्हाइसेससाठी स्कॅन करा" diff --git a/res/values-ms/strings.xml b/res/values-ms/strings.xml index 0168bf8d5b4..4bb09cb9c83 100644 --- a/res/values-ms/strings.xml +++ b/res/values-ms/strings.xml @@ -618,7 +618,7 @@ "Untuk menjadi pasangan:<br><b>%1$s</b><br><br>Pastikan ia menunjukkan kunci laluan ini:<br><b>%2$s</b>" "Dari:<br><b>%1$s</b><br><br>Jadikan pasangan peranti ini?" "Untuk berpasangan dengan:<br><b>%1$s</b><br><br>Taip padanya:<br><b>%2$s</b>, kemudian tekan Kembali atau Enter." - "Benarkan %1$s mengakses kenalan dan sejarah panggilan anda" + "Benarkan akses kepada kenalan dan sejarah panggilan anda" "Tidak dapat menyambung ke %1$s." "Imbas untuk mengesan peranti" diff --git a/res/values-my/strings.xml b/res/values-my/strings.xml index 7ef3a0fe37b..9cd0ab879aa 100644 --- a/res/values-my/strings.xml +++ b/res/values-my/strings.xml @@ -618,7 +618,7 @@ ":<br><b>%1$s</b><br><br>များနှင့်တွဲချိတ်စေရန် <br><b>%2$s</b>ဖြတ်သန်းခွင့်ကီးပြသစေရန် သေချာပါစေ" ":<br><b>%1$s</b><br><br>မှ ဤစက်နှင့်တွဲချိတ်မည်လား" ":<br><b>%1$s</b><br><br>နှင့်ချိတ်တွဲရန်:<br><b>%2$s</b>ကိုရိုက်ထည့်ကာ, Return သို့မဟုတ် Enterကိုနှိပ်ပါ" - "%1$s အားသင့်ရဲ့အဆက်အသွယ်များနှင့်ဖုန်းခေါ်ခြင်းသမိုင်းကိုရယူသုံးစွဲရန်ခွင့်ပြုပါ" + "သင်၏ အဆက်အသွယ်များနှင့် ယခင်ခေါ်ဆိုမှုများကို ရယူအသုံးချခွင့် ပြုပါ" "%1$s ကို ချိတ်ဆက်မရပါ။" "စက်များကိုရှာဖွေရန် စကင်ပြုလုပ်နေသည်" diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml index 6290f724e3d..653ca619656 100644 --- a/res/values-nb/strings.xml +++ b/res/values-nb/strings.xml @@ -618,7 +618,7 @@ "Sånn kobler du til:<br><b>%1$s</b><br><br>Kontroller at dette passordet vises:<br><b>%2$s</b>" "Fra:<br><b>%1$s</b><br><br>Vil du koble til denne enheten?" "Sånn kobler du til: <br><b>%1$s</b><br><br> Skriv inn følgende: <br><b>%2$s</b>, og trykk deretter på Retur eller Enter." - "Gi %1$s tilgang til kontaktene dine og anropsloggen din" + "Gi tilgang til kontaktene dine og anropsloggen din" "Kunne ikke koble til %1$s." "Let etter enheter" diff --git a/res/values-ne/strings.xml b/res/values-ne/strings.xml index 0e5d2574273..c9726a2598c 100644 --- a/res/values-ne/strings.xml +++ b/res/values-ne/strings.xml @@ -618,7 +618,7 @@ "%1$s को साथ जोडी पार्न निश्चित गर्नुहोस् यसले यो पास कुञ्जी देखाइरहेको छ %2$s" "बाट: <br> <b> %1$s </ b> यस उपकरणका साथ जोडा बाँध्ने हो?" "<br><b>%1$s</b><br><br>सँग जोडी गर्न यसमा टाइप गर्नुहोस्: <br><b> %2$s </b> अनि रिटर्न वा इन्टर थिच्नुहोस्।" - "%1$sलाई तपाईंको सम्पर्क र कल इतिहास पहुँच गर्न अनुमति दिनुहोस्" + "तपाईंका सम्पर्क ठेगानाहरू र फोन सम्पर्कको इतिहासमाथि पहुँचको अनुमति दिनुहोस्" "%1$s उपकरणसँग जडान गर्न सकेन।" "उपकरणहरूको लागि स्क्यान गर्नुहोस्" diff --git a/res/values-pa/strings.xml b/res/values-pa/strings.xml index 64e149d8da0..48b58634961 100644 --- a/res/values-pa/strings.xml +++ b/res/values-pa/strings.xml @@ -618,7 +618,7 @@ "ਇਸ ਨਾਲ ਪੇਅਰ ਕਰਨ ਲਈ:<br><b>%1$s</b><br><br>ਯਕੀਨੀ ਬਣਾਓ ਕਿ ਇਹ ਇਸ ਪਾਸਕੁੰਜੀ ਨੂੰ ਦਿਖਾ ਰਿਹਾ ਹੈ:<br><b>%2$s</b>" "ਇਸਤੋਂ:<br><b>%1$s</b><br><br>ਕੀ ਇਸ ਡੀਵਾਈਸ ਨਾਲ ਜੋੜਾਬੱਧ ਕਰਨਾ ਹੈ?" "ਇਸ ਨਾਲ ਜੋੜਾਬੱਧ ਕਰਨ ਲਈ:<br><b>%1$s</b><br><br>ਇਸਤੇ ਟਾਈਪ ਕਰੋ:<br><b>%2$s</b>, ਫਿਰ \'ਵਾਪਸ ਜਾਓ\' ਜਾਂ \'ਦਾਖਲ ਕਰੋ\' ਕੁੰਜੀ ਨੂੰ ਦਬਾਓ।" - "ਆਪਣੇ ਸੰਪਰਕਾਂ ਅਤੇ ਕਾਲ ਇਤਿਹਾਸ ਨੂੰ ਪਹੁੰਚ ਕਰਨ ਦੀ %1$s ਨੂੰ ਆਗਿਆ ਦਿਓ" + "ਆਪਣੇ ਸੰਪਰਕਾਂ ਅਤੇ ਕਾਲ ਇਤਿਹਾਸ \'ਤੇ ਪਹੁੰਚ ਕਰਨ ਦਿਓ" "%1$sਨਾਲ ਕਨੈਕਟ ਨਹੀਂ ਕਰ ਸਕਿਆ।" "ਡਿਵਾਈਸਾਂ ਲਈ ਸਕੈਨ ਕਰੋ" @@ -3163,7 +3163,7 @@ "(ਸਿਸਟਮ ਪੂਰਵ-ਨਿਰਧਾਰਤ)" "ਐਪਾਂ ਦੀ ਸਟੋਰੇਜ" "ਉਪਯੋਗ ਪਹੁੰਚ" - "ਪਰਮਿਟ ਵਰਤੋਂਕਾਰ ਪਹੁੰਚ" + "ਵਰਤੋਂ ਪਹੁੰਚ ਲਈ ਮਨਜ਼ੂਰੀ" "ਐਪ ਉਪਯੋਗਤਾ ਪਸੰਦ" "ਵਰਤੋਂ ਪਹੁੰਚ ਤੁਸੀਂ ਕਿਹੜੀਆਂ ਐਪਾਂ ਦੀ ਵਰਤੋਂ ਕਰ ਰਹੇ ਹੋ ਅਤੇ ਕਿੰਨੀ ਵਾਰੀ, ਇਸਦੇ ਨਾਲ-ਨਾਲ ਆਪਣੇ ਕੈਰੀਅਰ, ਭਾਸ਼ਾ ਸੈਟਿੰਗਾਂ, ਅਤੇ ਹੋਰ ਵੇਰਵੇ ਨੂੰ ਟਰੈਕ ਕਰਨ ਲਈ ਕਿਸੇ ਐਪ ਨੂੰ ਆਗਿਆ ਦਿੰਦਾ ਹੈ।" "ਮੈਮਰੀ" diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml index 4901dbf98dc..2f4b6f0b67d 100644 --- a/res/values-pl/strings.xml +++ b/res/values-pl/strings.xml @@ -640,7 +640,7 @@ "Aby sparować z urządzeniem:<br><b>%1$s</b><br><br>Upewnij się, że jest na nim wyświetlony następujący klucz:<br><b>%2$s</b>" "Od:<br><b>%1$s</b><br><br>Sparować z tym urządzeniem?" "Aby sparować z urządzeniem <br><b>%1$s</b><br><br>, wpisz na nim klucz <br><b>%2$s</b>, a następnie naciśnij klawisz zatwierdzania." - "Zezwól urządzeniu %1$s na dostęp do Twoich kontaktów i historii połączeń" + "Zezwól na dostęp do kontaktów i historii połączeń" "Nie udało się nawiązać połączenia z %1$s." "Wyszukaj urządzenia" diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml index d7f46a01dd0..dc681f80a26 100644 --- a/res/values-ru/strings.xml +++ b/res/values-ru/strings.xml @@ -640,7 +640,7 @@ "Для подключения к устройству<br><b>%1$s</b><br><br>на нем должен отображаться этот код доступа:<br><b>%2$s" "Запрос от: <br><b>%1$s</b><br><br>Подключиться к этому устройству?" "Для подключения к устройству <br><b>%1$s</b><br><br> введите на нем код <br><b>%2$s</b>, а затем нажмите клавишу Return или Enter." - "Открыть %1$s доступ к списку контактов и журналу звонков" + "Разрешить доступ к контактам и журналу звонков" "Не удалось подключиться к %1$s." "Поиск устройств" @@ -1690,7 +1690,7 @@ "Если в настройках этого приложения отключены уведомления, вы можете пропустить важные оповещения и обновления." "Магазин" "О приложении" - "Приложение скачано из %1$s" + "Откуда скачано приложение: %1$s" "Подробнее (%1$s)" "Операции в приложениях" "Выполняется" @@ -2949,7 +2949,7 @@ "Высокий" "Крайняя важность" "Разрешить звуковой сигнал" - "Отключить звуковой сигнал и вибрацию, не показывать оповещения поверх других приложений." + "Отключить звуковой сигнал и вибрацию, не показывать уведомления поверх других приложений." "Низкая важность" "Средняя важность" "Высокая важность" @@ -3519,9 +3519,9 @@ "Главное приложение" "Главное приложение не выбрано" "Безопасный запуск" - "Запрашивать графический ключ при запуске. Когда устройство отключено, вызовы, сообщения и оповещения не принимаются." - "Запрашивать PIN-код при запуске. Когда устройство отключено, вызовы, сообщения и оповещения не принимаются." - "Запрашивать пароль при запуске. Когда устройство отключено, вызовы, сообщения и оповещения не принимаются." + "Запрашивать графический ключ при запуске. Когда устройство отключено, вызовы, сообщения и уведомления не принимаются." + "Запрашивать PIN-код при запуске. Когда устройство отключено, вызовы, сообщения и уведомления не принимаются." + "Запрашивать пароль при запуске. Когда устройство отключено, вызовы, сообщения и уведомления не принимаются." "Добавьте ещё один отпечаток" "Добавьте отпечаток другого пальца" "Включено/%1$s" diff --git a/res/values-sq/strings.xml b/res/values-sq/strings.xml index 7bfaa169927..e0c7df6ca29 100644 --- a/res/values-sq/strings.xml +++ b/res/values-sq/strings.xml @@ -618,7 +618,7 @@ "Për ta çiftuar me:<br><b>%1$s</b><br><br>sigurohu që të tregojë këtë kod:<br><b>%2$s</b>" "Nga:<br><b>%1$s</b><br><br>Të çiftohet me këtë pajisje?" "Për ta çiftuar me:<br><b>%1$s</b><br><br>Shkruaj në të:<br><b>%2$s</b> dhe më pas shtyp Kthehu ose Hyr." - "Lejo që %1$s të ketë qasje te kontaktet dhe historiku i telefonatave" + "Lejo qasjen te kontaktet dhe historiku i telefonatave" "Nuk mundi të lidhej me %1$s." "Skano për pajisje" diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml index a47a791df3d..02499dd1df2 100644 --- a/res/values-sr/strings.xml +++ b/res/values-sr/strings.xml @@ -629,7 +629,7 @@ "Да бисте се упарили са уређајем:<br><b>%1$s</b><br><br>Уверите се да приказује овај приступни кôд:<br><b>%2$s</b>" "Са уређаја:<br><b>%1$s</b><br><br>Желите ли да се упарите са тим уређајем?" "За упаривање са уређајем:<br><b>%1$s</b><br><br>Унесите на њему:<br><b>%2$s</b>, а затим притисните Return или Enter." - "Дозволите уређају %1$s да приступа контактима и историји позива" + "Дозволите приступ контактима и историји позива" "Није могуће повезати се са уређајем %1$s." "Скенирање за уређаје" diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml index 58e3aa159cb..59d73494eca 100644 --- a/res/values-sv/strings.xml +++ b/res/values-sv/strings.xml @@ -618,7 +618,7 @@ "Om du vill koppla med:<br><b>%1$s</b><br><br> måste lösenordet <br><b>%2$s</b> visas i den" "Från:<br><b>%1$s</b><br><br>Vill du koppla den till enheten?" "Koppla till:<br><b>%1$s</b><br><br>Skriv:<br><b>%2$s</b> och tryck sedan på Retur." - "Tillåt att %1$s får åtkomst till dina kontakter och din samtalshistorik" + "Tillåt åtkomst till kontakter och sökhistorik" "Det gick inte att ansluta till %1$s." "Sök efter enheter" diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml index 6c20f8b45ca..23fa4e07891 100644 --- a/res/values-sw/strings.xml +++ b/res/values-sw/strings.xml @@ -618,7 +618,7 @@ "Ili kuoanisha na :<br><b>%1$s</b><br><br>hakikisha inaonyesha nenosiri hili:<br><b>%2$s</b>" "From:<br><b>%1$s</b><br><br>Llinganisha na kifaa hiki?" "Kulinganisha na: <br><b> %1$s </b><br><br> Andika: <br><b> %2$s </b>, kisha bonyeza Rejea au Ingiza." - "Ruhusu %1$s ifikie anwani zako na rekodi ya simu" + "Ruhusu ufikiaji wa anwani na historia ya simu ulizopiga" "Haikuweza kuunganisha kwa %1$s." "Chunguza vifaa" diff --git a/res/values-ta/strings.xml b/res/values-ta/strings.xml index 5caf0a2d6df..6b5b173b433 100644 --- a/res/values-ta/strings.xml +++ b/res/values-ta/strings.xml @@ -618,7 +618,7 @@ "பின்வருவதுடன் இணைக்கவும்:<br><b>%1$s</b><br><br>இது, இந்தக் கடவுச்சொல்லைக் காட்டுகிறது என்பதை உறுதிப்படுத்தவும்:<br><b>%2$s</b>" "பின்வருவதில் இருந்து:<br><b>%1$s</b><br><br>இந்தச் சாதனத்தை இணைக்கவா?" "இதனுடன் இணைக்க:<br><b>%1$s</b><br><br>இதை உள்ளிடவும்:<br><b>%2$s</b>, Return அல்லது Enter ஐ அழுத்தவும்." - "தொடர்புகளையும் அழைப்பு வரலாற்றையும் அணுக, %1$sஐ அனுமதி" + "உங்கள் தொடர்புகள் மற்றும் அழைப்பு வரலாற்றை அணுக அனுமதிக்கவும்" "%1$s உடன் இணைக்க முடியவில்லை." "சாதனங்களுக்கு ஸ்கேன் செய்" diff --git a/res/values-te/strings.xml b/res/values-te/strings.xml index 5a23a45ecf8..6db8726afeb 100644 --- a/res/values-te/strings.xml +++ b/res/values-te/strings.xml @@ -618,7 +618,7 @@ "దీనితో జత చేయడానికి:<br><b>%1$s</b><br><br>ఇది ఈ పాస్‌కీని చూపుతోందని నిర్ధారించుకోండి:<br><b>%2$s</b>" "దీని నుండి:<br><b>%1$s</b><br><br>ఈ పరికరంతో జత చేయాలా?" "దీనితో జత చేయడానికి:<br><b>%1$s</b><br><br>దీనిలో టైప్ చేయండి:<br><b>%2$s</b>, ఆపై తిరిగి వెళ్లు లేదా Enter నొక్కండి." - "మీ పరిచయాలు మరియు కాల్ చరిత్రను యాక్సెస్ చేయడానికి %1$sని అనుమతించండి" + "మీ పరిచయాలకు మరియు కాల్ చరిత్రకు యాక్సెస్‌ని అనుమతించండి" "%1$sకి కనెక్ట్ చేయడం సాధ్యపడలేదు." "పరికరాల కోసం స్కాన్ చేయి" diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml index f64b44535ee..d472de9cd26 100644 --- a/res/values-th/strings.xml +++ b/res/values-th/strings.xml @@ -618,7 +618,7 @@ "หากต้องการจับคู่กับ:<br><b>%1$s</b><br><br>ตรวจสอบให้แน่ใจว่าอุปกรณ์แสดงรหัสผ่านนี้:<br><b>%2$s</b>" "จาก:<br><b>%1$s</b><br><br>จับคู่กับอุปกรณ์นี้หรือไม่" "ในการจับคู่กับ: <br><b>%1$s</b><br><br> ให้พิมพ์: <br><b>%2$s</b> แล้วกด Return หรือ Enter" - "อนุญาตให้ %1$s เข้าถึงรายชื่อติดต่อและประวัติการโทรของคุณ" + "ให้สิทธิ์เข้าถึงรายชื่อติดต่อและประวัติการโทร" "ไม่สามารถเชื่อมต่อกับ %1$s" "สแกนหาอุปกรณ์" diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml index 27950fe3020..525b55b72e8 100644 --- a/res/values-tl/strings.xml +++ b/res/values-tl/strings.xml @@ -618,7 +618,7 @@ "Upang makipagpares sa:<br><b>%1$s</b><br><br>Tiyaking ipinapakita nito ang passkey na ito:<br><b>%2$s</b>" "Mula sa:<br><b>%1$s</b><br><br>Makipagpares sa device na ito?" "Upang ipares sa:<br><b>%1$s</b><br><br>Mag-type dito:<br><b>%2$s</b>, pagkatapos ay pindutin ang Return o Enter." - "Payagan ang %1$s na ma-access ang iyong mga contact at history ng tawag" + "Payagan ang access sa iyong mga contact at history ng tawag" "Hindi makakonekta sa %1$s." "Mag-scan para sa mga device" diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml index 0b192c3a1ce..eadc533d439 100644 --- a/res/values-tr/strings.xml +++ b/res/values-tr/strings.xml @@ -618,7 +618,7 @@ "Şu cihazla eşlemek için:<br><b>%1$s</b><br><br>Şu parolanın göründüğünden emin olun:<br><b>%2$s</b>" "Kaynak:<br><b>%1$s</b><br><br>Bu cihaz ile eşlensin mi?" "<br><b>%1$s</b><br><br> ile eşlemek için cihaz üzerinde <br><b>%2$s</b> yazarak Return veya Enter tuşuna basın." - "%1$s adlı cihazın kişilerime ve çağrı geçmişime erişmesine izin ver" + "Kişilerinize ve çağrı geçmişinize erişime izin verin" "%1$s adlı cihaza bağlanılamadı." "Cihazları tara" diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml index 0e83e8b0786..2eeead21c56 100644 --- a/res/values-uk/strings.xml +++ b/res/values-uk/strings.xml @@ -640,8 +640,7 @@ "Щоб створити пару з пристроєм:<br><b>%1$s</b><br><br>Переконайтеся, що відображається цей ключ доступу:<br><b>%2$s</b>" "Від пристрою:<br><b>%1$s</b><br><br>Створити пару з цим пристроєм?" "Щоб створити пару з пристроєм: <br><b>%1$s</b><br><br> Введіть на ньому: <br><b>%2$s</b>, а потім натисніть \"Повернутися\" або \"Ввійти\"." - - + "Дозволити доступ до контактів та історії викликів" "Не вдалося з’єднатися з пристроєм %1$s." "Сканув. пристроїв" diff --git a/res/values-ur/strings.xml b/res/values-ur/strings.xml index 469db229157..9e9a9710bf2 100644 --- a/res/values-ur/strings.xml +++ b/res/values-ur/strings.xml @@ -618,7 +618,7 @@ "‏اس کے ساتھ جوڑا بنانے کیلئے:<br><b>%1$s</b><br><br>اس بات کو یقینی بنائیں کہ یہ اس پاس کلید کو دکھا رہا ہے:<br><b>%2$s</b>" "‏منجانب:‎<br><b>%1$s</b><br><br>‎اس آلہ کے ساتھ جوڑا بنائیں؟" "اس کے ساتھ جوڑا بنانے کیلئے:<br><b>%1$s</b><br><br>اس پر ٹائپ کریں:<br><b>%2$s</b>, پھر واپس جائیں یا انٹر کریں کو دبائیں۔" - "%1$s کو اپنے رابطوں اور کال کی سرگزشت تک رسائی کی اجازت دیں" + "اپنے رابطوں اور کال کی سرگزشت تک رسائی کی اجازت دیں" "%1$s سے مربوط نہیں ہو سکا۔" "آلات کیلئے اسکین کریں" diff --git a/res/values-uz/strings.xml b/res/values-uz/strings.xml index 2ff8075e507..6c76e8d2078 100644 --- a/res/values-uz/strings.xml +++ b/res/values-uz/strings.xml @@ -618,7 +618,7 @@ "%1$s<br><b>bilan biriktirish uchun,</b><br><br>unda mana bu kalit so‘z ko‘rsatilayotganligini tekshiring:<br><b>%2$s</b>" "<br><b>%1$sdan so‘rov</b><br><br>Ushbu qurilma bilan biriktirilsinmi?" "<br><b>%1$s</b><br><br>bilan biriktirish uchun, uni ekranida:<br><b>%2$s</b> terib, Return yoki Enter tugmalarini bosing." - "%1$s qurilmasiga kontaktlarim va qo‘ng‘iroqlar tarixiga kirish uchun ruxsat berilsin" + "Kontakt va chaqiruvlar tarixiga ruxsat berish" "%1$sga o‘zaro bog‘lanmadi." "Qurilmalarni izlash" diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml index e9613e774b6..cdce5c750de 100644 --- a/res/values-vi/strings.xml +++ b/res/values-vi/strings.xml @@ -618,7 +618,7 @@ "Để ghép nối với:<br><b>%1$s</b><br><br>Hãy đảm bảo thiết bị đang hiển thị mã xác nhận này:<br><b>%2$s</b>" "Từ:<br><b>%1$s</b><br><br>Ghép nối với thiết bị này?" "Để ghép nối với:<br><b>%1$s</b><br><br>Hãy nhập trên thiết bị:<br><b>%2$s</b> rồi nhấn Quay lại hoặc Enter." - "Cho phép %1$s truy cập danh bạ và nhật ký cuộc gọi của bạn" + "Cho phép truy cập vào danh bạ và lịch sử cuộc gọi của bạn" "Không thể kết nối với %1$s." "Dò tìm thiết bị" diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml index 25e191fa1e2..d460a7a209e 100644 --- a/res/values-zh-rCN/strings.xml +++ b/res/values-zh-rCN/strings.xml @@ -618,7 +618,7 @@ "要与以下设备配对:<br><b>%1$s</b><br><br>请确保其显示的配对密钥为:<br><b>%2$s</b>" "来自:<br><b>%1$s</b><br><br>要与此设备配对吗?" "要与 <br><b>%1$s</b><br><br> 设备配对,请在该设备上键入:<br><b>%2$s</b>,然后按回车键。" - "允许%1$s访问您的通讯录和通话记录" + "允许访问您的通讯录和通话记录" "无法连接到%1$s。" "扫描设备" @@ -2740,7 +2740,7 @@ "移动网络" "流量使用" "热点" - "已关联的设备" + "已连接的设备" "蓝牙、投射、NFC" "蓝牙、投射" "应用和通知" diff --git a/res/values-zh-rHK/strings.xml b/res/values-zh-rHK/strings.xml index 3e1a382f6db..6a272a2433d 100644 --- a/res/values-zh-rHK/strings.xml +++ b/res/values-zh-rHK/strings.xml @@ -618,7 +618,7 @@ "如要與下列裝置配對:<br><b>%1$s</b><br><br>請確認該裝置是否顯示下列密碼金鑰:<br><b>%2$s</b>" "來自:<br><b>%1$s</b><br><br>要與這部裝置配對嗎?" "如要與 <br><b>%1$s</b><br><br> 配對,請在該裝置上輸入:<br><b>%2$s</b>,然後按 Return 或 Enter 鍵。" - "允許%1$s存取您的聯絡人和通話記錄" + "允許存取您的聯絡人和通話記錄" "無法連接「%1$s」。" "掃描裝置" diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml index 2f9f3c2add6..739b368858f 100644 --- a/res/values-zh-rTW/strings.xml +++ b/res/values-zh-rTW/strings.xml @@ -618,7 +618,7 @@ "如要與下列裝置配對:<br><b>%1$s</b><br><br>請確認該裝置是否顯示下列密碼金鑰:<br><b>%2$s</b>" "來自:<br><b>%1$s</b><br><br>要與這個裝置配對嗎?" "如要與 <br><b>%1$s</b><br><br> 配對,請輸入:<br><b>%2$s</b>,然後按下 [返回] 或 [輸入]。" - "允許「%1$s」存取你的聯絡人和通話紀錄" + "允許存取你的聯絡人和通話紀錄" "無法連線至「%1$s」。" "掃描裝置" diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml index 42f27c27bec..2224aa0748f 100644 --- a/res/values-zu/strings.xml +++ b/res/values-zu/strings.xml @@ -618,7 +618,7 @@ "Ukuhambisa ngokubili:<br><b>%1$s</b><br><br>Qinisekisa ukuthi ibonisa ukhiye wokungena:<br><b>%2$s</b>" "Kusuka ku:<br><b>%1$s</b><br><br>Beka eceleni namanye amadivayisi?" "Ukubhangqa ne:<br><b>%1$s</b><br><br>Thayipha kuyona:<br><b>%2$s</b>, bese ucindezela inkinobho uBuyisela noma uNgena." - "Vumela i-%1$s ukuthi ifinyelele koxhumana nabo nakumlando wekholi" + "Vumela ukufinyelela koxhumana nabo nomlando wekholi" "Ayikwazanga ukuxhuma ku-%1$s." "Skena amadivaysi" From a0006d93bdeb24137cb29f44cfb2de020bd64f6e Mon Sep 17 00:00:00 2001 From: Doris Ling Date: Thu, 7 Dec 2017 15:30:18 -0800 Subject: [PATCH 07/11] Move AppInfoDashboardFragment into appinfo package. - update all references to AppInfoDashboardFragment - removed PackageUtil inner class and change the corresponding function to be a simple method. Bug: 69384089 Test: make RunSettingsRoboTests Change-Id: Ief067e25a303ef16db20b2ca1d8840cb06eff5f9 --- .../applications/InstalledAppDetails.java | 1 + .../applications/InstalledAppDetailsTop.java | 1 + .../RecentAppsPreferenceController.java | 1 + .../AppBatteryPreferenceController.java | 1 - .../AppDataUsagePreferenceController.java | 1 - .../AppInfoDashboardFragment.java | 175 +++++++---------- .../AppInfoPreferenceControllerBase.java | 1 - .../AppInstallerInfoPreferenceController.java | 1 - .../AppMemoryPreferenceController.java | 1 - .../AppNotificationPreferenceController.java | 1 - .../AppOpenByDefaultPreferenceController.java | 1 - .../AppPermissionPreferenceController.java | 1 - .../AppStoragePreferenceController.java | 1 - .../AppVersionPreferenceController.java | 1 - ...DrawOverlayDetailPreferenceController.java | 1 - ...ernalSourceDetailPreferenceController.java | 1 - ...InstantAppButtonsPreferenceController.java | 1 - ...InstantAppDomainsPreferenceController.java | 1 - ...reInPictureDetailPreferenceController.java | 1 - ...iteSystemSettingsPreferenceController.java | 1 - .../ManageApplications.java | 2 +- .../core/gateway/SettingsGateway.java | 2 +- .../datausage/UnrestrictedDataAccess.java | 2 +- ...ntLocationRequestPreferenceController.java | 2 +- .../widget/EntityHeaderController.java | 2 +- ...randfather_not_implementing_index_provider | 2 +- .../AppBatteryPreferenceControllerTest.java | 1 - .../AppDataUsagePreferenceControllerTest.java | 1 - .../AppInfoDashboardFragmentTest.java | 176 ++++++++++++------ .../AppInfoPreferenceControllerBaseTest.java | 1 - ...InstallerInfoPreferenceControllerTest.java | 1 - .../AppMemoryPreferenceControllerTest.java | 1 - ...pNotificationPreferenceControllerTest.java | 1 - ...OpenByDefaultPreferenceControllerTest.java | 1 - ...AppPermissionPreferenceControllerTest.java | 1 - .../AppStoragePreferenceControllerTest.java | 1 - .../AppVersionPreferenceControllerTest.java | 1 - ...pShortcutPreferenceControllerBaseTest.java | 1 - ...OverlayDetailPreferenceControllerTest.java | 1 - ...lSourceDetailPreferenceControllerTest.java | 1 - ...antAppButtonsPreferenceControllerTest.java | 1 - ...antAppDomainsPreferenceControllerTest.java | 3 - ...PictureDetailPreferenceControllerTest.java | 1 - ...ystemSettingsPreferenceControllerTest.java | 1 - ...cationRequestPreferenceControllerTest.java | 2 +- .../applications/PackageUtilTest.java | 1 + .../SpecialAppAccessSettingsTest.java | 13 +- 47 files changed, 198 insertions(+), 219 deletions(-) rename src/com/android/settings/applications/{ => appinfo}/AppInfoDashboardFragment.java (85%) rename tests/robotests/src/com/android/settings/applications/{ => appinfo}/AppInfoDashboardFragmentTest.java (60%) diff --git a/src/com/android/settings/applications/InstalledAppDetails.java b/src/com/android/settings/applications/InstalledAppDetails.java index 2098bd6bf48..f78459f6980 100755 --- a/src/com/android/settings/applications/InstalledAppDetails.java +++ b/src/com/android/settings/applications/InstalledAppDetails.java @@ -75,6 +75,7 @@ import com.android.settings.R; import com.android.settings.SettingsActivity; import com.android.settings.SettingsPreferenceFragment; import com.android.settings.Utils; +import com.android.settings.applications.appinfo.AppInfoDashboardFragment; import com.android.settings.applications.appinfo.DrawOverlayDetails; import com.android.settings.applications.appinfo.ExternalSourcesDetails; import com.android.settings.applications.appinfo.PictureInPictureDetails; diff --git a/src/com/android/settings/applications/InstalledAppDetailsTop.java b/src/com/android/settings/applications/InstalledAppDetailsTop.java index 174a86a2dfc..8090de03ea2 100644 --- a/src/com/android/settings/applications/InstalledAppDetailsTop.java +++ b/src/com/android/settings/applications/InstalledAppDetailsTop.java @@ -20,6 +20,7 @@ import android.content.Intent; import android.util.FeatureFlagUtils; import com.android.settings.SettingsActivity; +import com.android.settings.applications.appinfo.AppInfoDashboardFragment; import com.android.settings.core.FeatureFlags; public class InstalledAppDetailsTop extends SettingsActivity { diff --git a/src/com/android/settings/applications/RecentAppsPreferenceController.java b/src/com/android/settings/applications/RecentAppsPreferenceController.java index c613a7b166e..ee954acf250 100644 --- a/src/com/android/settings/applications/RecentAppsPreferenceController.java +++ b/src/com/android/settings/applications/RecentAppsPreferenceController.java @@ -40,6 +40,7 @@ import android.util.Log; import com.android.settings.R; import com.android.settings.Utils; +import com.android.settings.applications.appinfo.AppInfoDashboardFragment; import com.android.settings.core.FeatureFlags; import com.android.settings.core.PreferenceControllerMixin; import com.android.settings.widget.AppPreference; diff --git a/src/com/android/settings/applications/appinfo/AppBatteryPreferenceController.java b/src/com/android/settings/applications/appinfo/AppBatteryPreferenceController.java index 017afe75479..ffe2bf313f9 100644 --- a/src/com/android/settings/applications/appinfo/AppBatteryPreferenceController.java +++ b/src/com/android/settings/applications/appinfo/AppBatteryPreferenceController.java @@ -32,7 +32,6 @@ import com.android.internal.os.BatteryStatsHelper; import com.android.settings.R; import com.android.settings.SettingsActivity; import com.android.settings.Utils; -import com.android.settings.applications.AppInfoDashboardFragment; import com.android.settings.core.BasePreferenceController; import com.android.settings.fuelgauge.AdvancedPowerUsageDetail; import com.android.settings.fuelgauge.BatteryEntry; diff --git a/src/com/android/settings/applications/appinfo/AppDataUsagePreferenceController.java b/src/com/android/settings/applications/appinfo/AppDataUsagePreferenceController.java index 61f3e46ca8e..669bc5a3a9e 100644 --- a/src/com/android/settings/applications/appinfo/AppDataUsagePreferenceController.java +++ b/src/com/android/settings/applications/appinfo/AppDataUsagePreferenceController.java @@ -34,7 +34,6 @@ import android.text.format.Formatter; import com.android.settings.R; import com.android.settings.SettingsPreferenceFragment; import com.android.settings.Utils; -import com.android.settings.applications.AppInfoDashboardFragment; import com.android.settings.datausage.AppDataUsage; import com.android.settings.datausage.DataUsageList; import com.android.settings.datausage.DataUsageUtils; diff --git a/src/com/android/settings/applications/AppInfoDashboardFragment.java b/src/com/android/settings/applications/appinfo/AppInfoDashboardFragment.java similarity index 85% rename from src/com/android/settings/applications/AppInfoDashboardFragment.java rename to src/com/android/settings/applications/appinfo/AppInfoDashboardFragment.java index 1e24df900fc..0929dad3809 100755 --- a/src/com/android/settings/applications/AppInfoDashboardFragment.java +++ b/src/com/android/settings/applications/appinfo/AppInfoDashboardFragment.java @@ -14,7 +14,7 @@ * under the License. */ -package com.android.settings.applications; +package com.android.settings.applications.appinfo; import static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin; @@ -23,7 +23,6 @@ import android.app.ActivityManager; import android.app.AlertDialog; import android.app.Dialog; import android.app.DialogFragment; -import android.app.Fragment; import android.app.admin.DevicePolicyManager; import android.content.BroadcastReceiver; import android.content.ComponentName; @@ -59,27 +58,8 @@ import com.android.settings.R; import com.android.settings.SettingsActivity; import com.android.settings.SettingsPreferenceFragment; import com.android.settings.Utils; -import com.android.settings.applications.appinfo.AppBatteryPreferenceController; -import com.android.settings.applications.appinfo.AppDataUsagePreferenceController; -import com.android.settings.applications.appinfo.AppInstallerInfoPreferenceController; -import com.android.settings.applications.appinfo.AppInstallerPreferenceCategoryController; -import com.android.settings.applications.appinfo.AppMemoryPreferenceController; -import com.android.settings.applications.appinfo.AppNotificationPreferenceController; -import com.android.settings.applications.appinfo.AppOpenByDefaultPreferenceController; -import com.android.settings.applications.appinfo.AppPermissionPreferenceController; -import com.android.settings.applications.appinfo.AppStoragePreferenceController; -import com.android.settings.applications.appinfo.AppVersionPreferenceController; -import com.android.settings.applications.appinfo.DefaultBrowserShortcutPreferenceController; -import com.android.settings.applications.appinfo.DefaultEmergencyShortcutPreferenceController; -import com.android.settings.applications.appinfo.DefaultHomeShortcutPreferenceController; -import com.android.settings.applications.appinfo.DefaultPhoneShortcutPreferenceController; -import com.android.settings.applications.appinfo.DefaultSmsShortcutPreferenceController; -import com.android.settings.applications.appinfo.DrawOverlayDetailPreferenceController; -import com.android.settings.applications.appinfo.ExternalSourceDetailPreferenceController; -import com.android.settings.applications.appinfo.InstantAppButtonsPreferenceController; -import com.android.settings.applications.appinfo.InstantAppDomainsPreferenceController; -import com.android.settings.applications.appinfo.PictureInPictureDetailPreferenceController; -import com.android.settings.applications.appinfo.WriteSystemSettingsPreferenceController; +import com.android.settings.applications.ApplicationFeatureProvider; +import com.android.settings.applications.LayoutPreference; import com.android.settings.applications.manageapplications.ManageApplications; import com.android.settings.core.instrumentation.InstrumentedDialogFragment; import com.android.settings.dashboard.DashboardFragment; @@ -116,19 +96,19 @@ public class AppInfoDashboardFragment extends DashboardFragment private static final String TAG = "AppInfoDashboard"; // Menu identifiers - public static final int UNINSTALL_ALL_USERS_MENU = 1; - public static final int UNINSTALL_UPDATES = 2; + private static final int UNINSTALL_ALL_USERS_MENU = 1; + private static final int UNINSTALL_UPDATES = 2; // Result code identifiers - public static final int REQUEST_UNINSTALL = 0; + @VisibleForTesting + static final int REQUEST_UNINSTALL = 0; private static final int REQUEST_REMOVE_DEVICE_ADMIN = 1; - public static final int SUB_INFO_FRAGMENT = 1; + static final int SUB_INFO_FRAGMENT = 1; - public static final int LOADER_CHART_DATA = 2; - public static final int LOADER_STORAGE = 3; - @VisibleForTesting - public static final int LOADER_BATTERY = 4; + static final int LOADER_CHART_DATA = 2; + static final int LOADER_STORAGE = 3; + static final int LOADER_BATTERY = 4; // Dialog identifiers used in showDialog private static final int DLG_BASE = 0; @@ -137,12 +117,12 @@ public class AppInfoDashboardFragment extends DashboardFragment private static final int DLG_SPECIAL_DISABLE = DLG_BASE + 3; private static final String KEY_HEADER = "header_view"; private static final String KEY_ACTION_BUTTONS = "action_buttons"; + private static final String KEY_ADVANCED_APP_INFO_CATEGORY = "advanced_app_info"; public static final String ARG_PACKAGE_NAME = "package"; public static final String ARG_PACKAGE_UID = "uid"; - protected static final boolean localLOGV = false; - private static final String KEY_ADVANCED_APP_INFO_CATEGORY = "advanced_app_info"; + private static final boolean localLOGV = false; private EnforcedAdmin mAppsControlDisallowedAdmin; private boolean mAppsControlDisallowedBySystem; @@ -278,7 +258,7 @@ public class AppInfoDashboardFragment extends DashboardFragment } try { - IWebViewUpdateService webviewUpdateService = + final IWebViewUpdateService webviewUpdateService = IWebViewUpdateService.Stub.asInterface(ServiceManager.getService("webviewupdate")); if (webviewUpdateService.isFallbackPackage(mAppEntry.info.packageName)) { enabled = false; @@ -414,20 +394,21 @@ public class AppInfoDashboardFragment extends DashboardFragment return controllers; } - public ApplicationsState.AppEntry getAppEntry() { + ApplicationsState.AppEntry getAppEntry() { if (mAppEntry == null) { retrieveAppEntry(); } return mAppEntry; } - public PackageInfo getPackageInfo() { + PackageInfo getPackageInfo() { if (mAppEntry == null) { retrieveAppEntry(); } return mPackageInfo; } + @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); if (mFinishing) { @@ -492,7 +473,7 @@ public class AppInfoDashboardFragment extends DashboardFragment } menu.findItem(UNINSTALL_ALL_USERS_MENU).setVisible(shouldShowUninstallForAll(mAppEntry)); mUpdatedSysApp = (mAppEntry.info.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0; - MenuItem uninstallUpdatesItem = menu.findItem(UNINSTALL_UPDATES); + final MenuItem uninstallUpdatesItem = menu.findItem(UNINSTALL_UPDATES); uninstallUpdatesItem.setVisible(mUpdatedSysApp && !mAppsControlDisallowedBySystem); if (uninstallUpdatesItem.isVisible()) { RestrictedLockUtils.setMenuItemAsDisabledByAdmin(getActivity(), @@ -525,7 +506,7 @@ public class AppInfoDashboardFragment extends DashboardFragment mDisableAfterUninstall = false; new DisableChanger(this, mAppEntry.info, PackageManager.COMPONENT_ENABLED_STATE_DISABLED_USER) - .execute((Object)null); + .execute((Object) null); } // continue with following operations case REQUEST_REMOVE_DEVICE_ADMIN: @@ -569,7 +550,7 @@ public class AppInfoDashboardFragment extends DashboardFragment showIt = false; } else if (mUserManager.getUsers().size() < 2) { showIt = false; - } else if (PackageUtil.countPackageInUsers(mPm, mUserManager, mPackageName) < 2 + } else if (getNumberOfUserWithPackageInstalled(mPackageName) < 2 && (appEntry.info.flags & ApplicationInfo.FLAG_INSTALLED) != 0) { showIt = false; } else if (AppUtils.isInstant(appEntry.info)) { @@ -605,11 +586,11 @@ public class AppInfoDashboardFragment extends DashboardFragment } // Get list of "home" apps and trace through any meta-data references - List homeActivities = new ArrayList(); + final List homeActivities = new ArrayList(); mPm.getHomeActivities(homeActivities); mHomePackages.clear(); for (int i = 0; i< homeActivities.size(); i++) { - ResolveInfo ri = homeActivities.get(i); + final ResolveInfo ri = homeActivities.get(i); final String activityPkg = ri.activityInfo.packageName; mHomePackages.add(activityPkg); @@ -628,7 +609,7 @@ public class AppInfoDashboardFragment extends DashboardFragment initUninstallButtons(); // Update the preference summaries. - Activity context = getActivity(); + final Activity context = getActivity(); for (Callback callback : mCallbacks) { callback.refreshUi(); } @@ -641,7 +622,7 @@ public class AppInfoDashboardFragment extends DashboardFragment // All other times: if the app no longer exists then we want // to go away. try { - ApplicationInfo ainfo = context.getPackageManager().getApplicationInfo( + final ApplicationInfo ainfo = context.getPackageManager().getApplicationInfo( mAppEntry.info.packageName, PackageManager.MATCH_DISABLED_COMPONENTS | PackageManager.MATCH_ANY_USER); @@ -712,8 +693,8 @@ public class AppInfoDashboardFragment extends DashboardFragment private void uninstallPkg(String packageName, boolean allUsers, boolean andDisable) { stopListeningToPackageRemove(); // Create new intent to launch Uninstaller activity - Uri packageURI = Uri.parse("package:"+packageName); - Intent uninstallIntent = new Intent(Intent.ACTION_UNINSTALL_PACKAGE, packageURI); + final Uri packageURI = Uri.parse("package:"+packageName); + final Intent uninstallIntent = new Intent(Intent.ACTION_UNINSTALL_PACKAGE, packageURI); uninstallIntent.putExtra(Intent.EXTRA_UNINSTALL_ALL_USERS, allUsers); mMetricsFeatureProvider.action( getContext(), MetricsEvent.ACTION_SETTINGS_UNINSTALL_APP); @@ -723,13 +704,13 @@ public class AppInfoDashboardFragment extends DashboardFragment private void forceStopPackage(String pkgName) { mMetricsFeatureProvider.action(getContext(), MetricsEvent.ACTION_APP_FORCE_STOP, pkgName); - ActivityManager am = (ActivityManager) getActivity().getSystemService( + final ActivityManager am = (ActivityManager) getActivity().getSystemService( Context.ACTIVITY_SERVICE); Log.d(TAG, "Stopping package " + pkgName); am.forceStopPackage(pkgName); - int userId = UserHandle.getUserId(mAppEntry.info.uid); + final int userId = UserHandle.getUserId(mAppEntry.info.uid); mState.invalidatePackage(pkgName, userId); - AppEntry newEnt = mState.getEntry(pkgName, userId); + final AppEntry newEnt = mState.getEntry(pkgName, userId); if (newEnt != null) { mAppEntry = newEnt; } @@ -758,7 +739,7 @@ public class AppInfoDashboardFragment extends DashboardFragment Log.w(TAG, "App is not explicitly stopped"); updateForceStopButton(true); } else { - Intent intent = new Intent(Intent.ACTION_QUERY_PACKAGE_RESTART, + final Intent intent = new Intent(Intent.ACTION_QUERY_PACKAGE_RESTART, Uri.fromParts("package", mAppEntry.info.packageName, null)); intent.putExtra(Intent.EXTRA_PACKAGES, new String[] { mAppEntry.info.packageName }); intent.putExtra(Intent.EXTRA_UID, mAppEntry.info.uid); @@ -773,11 +754,11 @@ public class AppInfoDashboardFragment extends DashboardFragment public static void startAppInfoFragment(Class fragment, int title, SettingsPreferenceFragment caller, AppEntry appEntry) { // start new fragment to display extended information - Bundle args = new Bundle(); + final Bundle args = new Bundle(); args.putString(ARG_PACKAGE_NAME, appEntry.info.packageName); args.putInt(ARG_PACKAGE_UID, appEntry.info.uid); - SettingsActivity sa = (SettingsActivity) caller.getActivity(); + final SettingsActivity sa = (SettingsActivity) caller.getActivity(); sa.startPreferencePanel(caller, fragment.getName(), args, title, null, caller, SUB_INFO_FRAGMENT); } @@ -790,8 +771,8 @@ public class AppInfoDashboardFragment extends DashboardFragment final String packageName = mAppEntry.info.packageName; if (mDpm.packageHasActiveAdmins(mPackageInfo.packageName)) { stopListeningToPackageRemove(); - Activity activity = getActivity(); - Intent uninstallDAIntent = new Intent(activity, DeviceAdminAdd.class); + final Activity activity = getActivity(); + final Intent uninstallDAIntent = new Intent(activity, DeviceAdminAdd.class); uninstallDAIntent.putExtra(DeviceAdminAdd.EXTRA_DEVICE_ADMIN_PACKAGE_NAME, mPackageName); mMetricsFeatureProvider.action( @@ -799,9 +780,9 @@ public class AppInfoDashboardFragment extends DashboardFragment activity.startActivityForResult(uninstallDAIntent, REQUEST_REMOVE_DEVICE_ADMIN); return; } - EnforcedAdmin admin = RestrictedLockUtils.checkIfUninstallBlocked(getActivity(), + final EnforcedAdmin admin = RestrictedLockUtils.checkIfUninstallBlocked(getActivity(), packageName, mUserId); - boolean uninstallBlockedBySystem = mAppsControlDisallowedBySystem || + final boolean uninstallBlockedBySystem = mAppsControlDisallowedBySystem || RestrictedLockUtils.hasBaseUserRestriction(getActivity(), packageName, mUserId); if (admin != null && !uninstallBlockedBySystem) { RestrictedLockUtils.sendShowAdminSupportDetailsIntent(getActivity(), admin); @@ -847,8 +828,7 @@ public class AppInfoDashboardFragment extends DashboardFragment /** Returns whether there is only one user on this device, not including the system-only user */ private boolean isSingleUser() { final int userCount = mUserManager.getUserCount(); - return userCount == 1 - || (mUserManager.isSplitSystemUser() && userCount == 2); + return userCount == 1 || (mUserManager.isSplitSystemUser() && userCount == 2); } private void onPackageRemoved() { @@ -856,35 +836,25 @@ public class AppInfoDashboardFragment extends DashboardFragment getActivity().finishAndRemoveTask(); } - /** - * Elicit this class for testing. Test cannot be done in robolectric because it - * invokes the new API. - */ @VisibleForTesting - public static class PackageUtil { - /** - * Count how many users in device have installed package {@paramref packageName} - */ - public static int countPackageInUsers(PackageManager packageManager, UserManager - userManager, String packageName) { - final List userInfos = userManager.getUsers(true); - int count = 0; + int getNumberOfUserWithPackageInstalled(String packageName) { + final List userInfos = mUserManager.getUsers(true); + int count = 0; - for (final UserInfo userInfo : userInfos) { - try { - // Use this API to check whether user has this package - final ApplicationInfo info = packageManager.getApplicationInfoAsUser( - packageName, PackageManager.GET_META_DATA, userInfo.id); - if ((info.flags & ApplicationInfo.FLAG_INSTALLED) != 0) { - count++; - } - } catch(NameNotFoundException e) { - Log.e(TAG, "Package: " + packageName + " not found for user: " + userInfo.id); + for (final UserInfo userInfo : userInfos) { + try { + // Use this API to check whether user has this package + final ApplicationInfo info = mPm.getApplicationInfoAsUser( + packageName, PackageManager.GET_META_DATA, userInfo.id); + if ((info.flags & ApplicationInfo.FLAG_INSTALLED) != 0) { + count++; } + } catch(NameNotFoundException e) { + Log.e(TAG, "Package: " + packageName + " not found for user: " + userInfo.id); } - - return count; } + + return count; } private static class DisableChanger extends AsyncTask { @@ -924,7 +894,7 @@ public class AppInfoDashboardFragment extends DashboardFragment final Bundle args = getArguments(); mPackageName = (args != null) ? args.getString(ARG_PACKAGE_NAME) : null; if (mPackageName == null) { - Intent intent = (args == null) ? + final Intent intent = (args == null) ? getActivity().getIntent() : (Intent) args.getParcelable("intent"); if (intent != null) { mPackageName = intent.getData().getSchemeSpecificPart(); @@ -964,16 +934,15 @@ public class AppInfoDashboardFragment extends DashboardFragment private void setIntentAndFinish(boolean finish, boolean appChanged) { if (localLOGV) Log.i(TAG, "appChanged="+appChanged); - Intent intent = new Intent(); + final Intent intent = new Intent(); intent.putExtra(ManageApplications.APP_CHG, appChanged); - SettingsActivity sa = (SettingsActivity)getActivity(); + final SettingsActivity sa = (SettingsActivity)getActivity(); sa.finishPreferencePanel(this, Activity.RESULT_OK, intent); mFinishing = true; } - public void showDialogInner(int id, int moveErrorCode) { - DialogFragment newFragment = - MyAlertDialogFragment.newInstance(id, moveErrorCode); + void showDialogInner(int id, int moveErrorCode) { + final DialogFragment newFragment = MyAlertDialogFragment.newInstance(id, moveErrorCode); newFragment.setTargetFragment(this, 0); newFragment.show(getFragmentManager(), "dialog " + id); } @@ -1015,24 +984,6 @@ public class AppInfoDashboardFragment extends DashboardFragment } } - public static void startAppInfoFragment(Class fragment, int titleRes, - String pkg, int uid, Fragment source, int request, int sourceMetricsCategory) { - startAppInfoFragment(fragment, titleRes, pkg, uid, source.getActivity(), request, - sourceMetricsCategory); - } - - public static void startAppInfoFragment(Class fragment, int titleRes, - String pkg, int uid, Activity source, int request, int sourceMetricsCategory) { - Bundle args = new Bundle(); - args.putString(ARG_PACKAGE_NAME, pkg); - args.putInt(ARG_PACKAGE_UID, uid); - - Intent intent = Utils.onBuildStartFragmentIntent(source, fragment.getName(), - args, null, titleRes, null, false, sourceMetricsCategory); - source.startActivityForResultAsUser(intent, request, - new UserHandle(UserHandle.getUserId(uid))); - } - public static class MyAlertDialogFragment extends InstrumentedDialogFragment { private static final String ARG_ID = "id"; @@ -1044,10 +995,10 @@ public class AppInfoDashboardFragment extends DashboardFragment @Override public Dialog onCreateDialog(Bundle savedInstanceState) { - int id = getArguments().getInt(ARG_ID); - int errorCode = getArguments().getInt("moveError"); - Dialog dialog = ((AppInfoDashboardFragment) getTargetFragment()) - .createDialog(id, errorCode); + final int id = getArguments().getInt(ARG_ID); + final int errorCode = getArguments().getInt("moveError"); + final Dialog dialog = + ((AppInfoDashboardFragment) getTargetFragment()).createDialog(id, errorCode); if (dialog == null) { throw new IllegalArgumentException("unknown id " + id); } @@ -1055,8 +1006,8 @@ public class AppInfoDashboardFragment extends DashboardFragment } public static MyAlertDialogFragment newInstance(int id, int errorCode) { - MyAlertDialogFragment dialogFragment = new MyAlertDialogFragment(); - Bundle args = new Bundle(); + final MyAlertDialogFragment dialogFragment = new MyAlertDialogFragment(); + final Bundle args = new Bundle(); args.putInt(ARG_ID, id); args.putInt("moveError", errorCode); dialogFragment.setArguments(args); @@ -1085,7 +1036,7 @@ public class AppInfoDashboardFragment extends DashboardFragment private final BroadcastReceiver mPackageRemovedReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { - String packageName = intent.getData().getSchemeSpecificPart(); + final String packageName = intent.getData().getSchemeSpecificPart(); if (!mFinishing && (mAppEntry == null || mAppEntry.info == null || TextUtils.equals(mAppEntry.info.packageName, packageName))) { onPackageRemoved(); diff --git a/src/com/android/settings/applications/appinfo/AppInfoPreferenceControllerBase.java b/src/com/android/settings/applications/appinfo/AppInfoPreferenceControllerBase.java index eac0a0c94c5..105a01e38f4 100644 --- a/src/com/android/settings/applications/appinfo/AppInfoPreferenceControllerBase.java +++ b/src/com/android/settings/applications/appinfo/AppInfoPreferenceControllerBase.java @@ -22,7 +22,6 @@ import android.support.v7.preference.PreferenceScreen; import android.text.TextUtils; import com.android.settings.SettingsPreferenceFragment; -import com.android.settings.applications.AppInfoDashboardFragment; import com.android.settings.core.BasePreferenceController; /* diff --git a/src/com/android/settings/applications/appinfo/AppInstallerInfoPreferenceController.java b/src/com/android/settings/applications/appinfo/AppInstallerInfoPreferenceController.java index 2449004b525..1fdc690d8d1 100644 --- a/src/com/android/settings/applications/appinfo/AppInstallerInfoPreferenceController.java +++ b/src/com/android/settings/applications/appinfo/AppInstallerInfoPreferenceController.java @@ -23,7 +23,6 @@ import android.support.v7.preference.Preference; import com.android.settings.R; import com.android.settings.Utils; -import com.android.settings.applications.AppInfoDashboardFragment; import com.android.settings.applications.AppStoreUtil; import com.android.settingslib.applications.AppUtils; diff --git a/src/com/android/settings/applications/appinfo/AppMemoryPreferenceController.java b/src/com/android/settings/applications/appinfo/AppMemoryPreferenceController.java index 3943041b2fd..7b497a9c8e8 100644 --- a/src/com/android/settings/applications/appinfo/AppMemoryPreferenceController.java +++ b/src/com/android/settings/applications/appinfo/AppMemoryPreferenceController.java @@ -26,7 +26,6 @@ import android.text.format.Formatter; import com.android.settings.R; import com.android.settings.SettingsActivity; -import com.android.settings.applications.AppInfoDashboardFragment; import com.android.settings.applications.ProcStatsData; import com.android.settings.applications.ProcStatsEntry; import com.android.settings.applications.ProcStatsPackageEntry; diff --git a/src/com/android/settings/applications/appinfo/AppNotificationPreferenceController.java b/src/com/android/settings/applications/appinfo/AppNotificationPreferenceController.java index 7eef370ecc1..1f1950418b3 100644 --- a/src/com/android/settings/applications/appinfo/AppNotificationPreferenceController.java +++ b/src/com/android/settings/applications/appinfo/AppNotificationPreferenceController.java @@ -20,7 +20,6 @@ import android.content.Context; import android.support.v7.preference.Preference; import com.android.settings.SettingsPreferenceFragment; -import com.android.settings.applications.AppInfoDashboardFragment; import com.android.settings.notification.AppNotificationSettings; import com.android.settings.notification.NotificationBackend; import com.android.settingslib.applications.ApplicationsState; diff --git a/src/com/android/settings/applications/appinfo/AppOpenByDefaultPreferenceController.java b/src/com/android/settings/applications/appinfo/AppOpenByDefaultPreferenceController.java index a56e3fb6712..3f20381dbb5 100644 --- a/src/com/android/settings/applications/appinfo/AppOpenByDefaultPreferenceController.java +++ b/src/com/android/settings/applications/appinfo/AppOpenByDefaultPreferenceController.java @@ -26,7 +26,6 @@ import android.support.v7.preference.Preference; import android.support.v7.preference.PreferenceScreen; import com.android.settings.SettingsPreferenceFragment; -import com.android.settings.applications.AppInfoDashboardFragment; import com.android.settings.applications.AppLaunchSettings; import com.android.settingslib.applications.AppUtils; import com.android.settingslib.applications.ApplicationsState; diff --git a/src/com/android/settings/applications/appinfo/AppPermissionPreferenceController.java b/src/com/android/settings/applications/appinfo/AppPermissionPreferenceController.java index 815e8d854c2..b844f785d90 100644 --- a/src/com/android/settings/applications/appinfo/AppPermissionPreferenceController.java +++ b/src/com/android/settings/applications/appinfo/AppPermissionPreferenceController.java @@ -26,7 +26,6 @@ import android.support.v7.preference.Preference; import android.util.Log; import com.android.settings.R; -import com.android.settings.applications.AppInfoDashboardFragment; import com.android.settingslib.applications.PermissionsSummaryHelper; import java.util.ArrayList; diff --git a/src/com/android/settings/applications/appinfo/AppStoragePreferenceController.java b/src/com/android/settings/applications/appinfo/AppStoragePreferenceController.java index d737288c62b..86383cb0678 100644 --- a/src/com/android/settings/applications/appinfo/AppStoragePreferenceController.java +++ b/src/com/android/settings/applications/appinfo/AppStoragePreferenceController.java @@ -28,7 +28,6 @@ import android.text.format.Formatter; import com.android.settings.R; import com.android.settings.SettingsPreferenceFragment; -import com.android.settings.applications.AppInfoDashboardFragment; import com.android.settings.applications.AppStorageSettings; import com.android.settings.applications.FetchPackageStorageAsyncLoader; import com.android.settingslib.applications.StorageStatsSource; diff --git a/src/com/android/settings/applications/appinfo/AppVersionPreferenceController.java b/src/com/android/settings/applications/appinfo/AppVersionPreferenceController.java index 82719f7f006..0cfeb008a3b 100644 --- a/src/com/android/settings/applications/appinfo/AppVersionPreferenceController.java +++ b/src/com/android/settings/applications/appinfo/AppVersionPreferenceController.java @@ -21,7 +21,6 @@ import android.support.v7.preference.Preference; import android.text.BidiFormatter; import com.android.settings.R; -import com.android.settings.applications.AppInfoDashboardFragment; public class AppVersionPreferenceController extends AppInfoPreferenceControllerBase { diff --git a/src/com/android/settings/applications/appinfo/DrawOverlayDetailPreferenceController.java b/src/com/android/settings/applications/appinfo/DrawOverlayDetailPreferenceController.java index 314d7995bf7..37a9edfff05 100644 --- a/src/com/android/settings/applications/appinfo/DrawOverlayDetailPreferenceController.java +++ b/src/com/android/settings/applications/appinfo/DrawOverlayDetailPreferenceController.java @@ -25,7 +25,6 @@ import android.support.annotation.VisibleForTesting; import android.support.v7.preference.Preference; import com.android.settings.SettingsPreferenceFragment; -import com.android.settings.applications.AppInfoDashboardFragment; public class DrawOverlayDetailPreferenceController extends AppInfoPreferenceControllerBase { diff --git a/src/com/android/settings/applications/appinfo/ExternalSourceDetailPreferenceController.java b/src/com/android/settings/applications/appinfo/ExternalSourceDetailPreferenceController.java index 4ac67ed77a5..6fb6dc356c9 100644 --- a/src/com/android/settings/applications/appinfo/ExternalSourceDetailPreferenceController.java +++ b/src/com/android/settings/applications/appinfo/ExternalSourceDetailPreferenceController.java @@ -22,7 +22,6 @@ import android.support.annotation.VisibleForTesting; import android.support.v7.preference.Preference; import com.android.settings.SettingsPreferenceFragment; -import com.android.settings.applications.AppInfoDashboardFragment; import com.android.settings.applications.AppStateInstallAppsBridge; public class ExternalSourceDetailPreferenceController extends AppInfoPreferenceControllerBase { diff --git a/src/com/android/settings/applications/appinfo/InstantAppButtonsPreferenceController.java b/src/com/android/settings/applications/appinfo/InstantAppButtonsPreferenceController.java index e35fa76b85f..b9fe0039cf2 100644 --- a/src/com/android/settings/applications/appinfo/InstantAppButtonsPreferenceController.java +++ b/src/com/android/settings/applications/appinfo/InstantAppButtonsPreferenceController.java @@ -22,7 +22,6 @@ import android.support.annotation.VisibleForTesting; import android.support.v7.preference.PreferenceScreen; import com.android.settings.R; -import com.android.settings.applications.AppInfoDashboardFragment; import com.android.settings.applications.ApplicationFeatureProvider; import com.android.settings.applications.LayoutPreference; import com.android.settings.applications.instantapps.InstantAppButtonsController; diff --git a/src/com/android/settings/applications/appinfo/InstantAppDomainsPreferenceController.java b/src/com/android/settings/applications/appinfo/InstantAppDomainsPreferenceController.java index 1d2229127da..d89c538d764 100644 --- a/src/com/android/settings/applications/appinfo/InstantAppDomainsPreferenceController.java +++ b/src/com/android/settings/applications/appinfo/InstantAppDomainsPreferenceController.java @@ -22,7 +22,6 @@ import android.support.v7.preference.Preference; import com.android.settings.Utils; import com.android.settings.applications.AppDomainsPreference; -import com.android.settings.applications.AppInfoDashboardFragment; import com.android.settingslib.applications.AppUtils; import java.util.Set; diff --git a/src/com/android/settings/applications/appinfo/PictureInPictureDetailPreferenceController.java b/src/com/android/settings/applications/appinfo/PictureInPictureDetailPreferenceController.java index aea6baef922..18736832158 100644 --- a/src/com/android/settings/applications/appinfo/PictureInPictureDetailPreferenceController.java +++ b/src/com/android/settings/applications/appinfo/PictureInPictureDetailPreferenceController.java @@ -26,7 +26,6 @@ import android.support.v7.preference.Preference; import android.util.Log; import com.android.settings.SettingsPreferenceFragment; -import com.android.settings.applications.AppInfoDashboardFragment; public class PictureInPictureDetailPreferenceController extends AppInfoPreferenceControllerBase { diff --git a/src/com/android/settings/applications/appinfo/WriteSystemSettingsPreferenceController.java b/src/com/android/settings/applications/appinfo/WriteSystemSettingsPreferenceController.java index 55b181ab7b4..2a88d2f6c9d 100644 --- a/src/com/android/settings/applications/appinfo/WriteSystemSettingsPreferenceController.java +++ b/src/com/android/settings/applications/appinfo/WriteSystemSettingsPreferenceController.java @@ -25,7 +25,6 @@ import android.support.annotation.VisibleForTesting; import android.support.v7.preference.Preference; import com.android.settings.SettingsPreferenceFragment; -import com.android.settings.applications.AppInfoDashboardFragment; public class WriteSystemSettingsPreferenceController extends AppInfoPreferenceControllerBase { diff --git a/src/com/android/settings/applications/manageapplications/ManageApplications.java b/src/com/android/settings/applications/manageapplications/ManageApplications.java index 067e167a92f..7371294e124 100644 --- a/src/com/android/settings/applications/manageapplications/ManageApplications.java +++ b/src/com/android/settings/applications/manageapplications/ManageApplications.java @@ -93,7 +93,7 @@ import com.android.settings.applications.InstalledAppCounter; import com.android.settings.applications.InstalledAppDetails; import com.android.settings.applications.NotificationApps; import com.android.settings.applications.UsageAccessDetails; -import com.android.settings.applications.AppInfoDashboardFragment; +import com.android.settings.applications.appinfo.AppInfoDashboardFragment; import com.android.settings.applications.appinfo.DrawOverlayDetails; import com.android.settings.applications.appinfo.ExternalSourcesDetails; import com.android.settings.applications.appinfo.WriteSettingsDetails; diff --git a/src/com/android/settings/core/gateway/SettingsGateway.java b/src/com/android/settings/core/gateway/SettingsGateway.java index acb20d55c4f..3b38df64a7f 100644 --- a/src/com/android/settings/core/gateway/SettingsGateway.java +++ b/src/com/android/settings/core/gateway/SettingsGateway.java @@ -47,7 +47,7 @@ import com.android.settings.applications.ProcessStatsSummary; import com.android.settings.applications.ProcessStatsUi; import com.android.settings.applications.UsageAccessDetails; import com.android.settings.applications.VrListenerSettings; -import com.android.settings.applications.AppInfoDashboardFragment; +import com.android.settings.applications.appinfo.AppInfoDashboardFragment; import com.android.settings.applications.appinfo.DrawOverlayDetails; import com.android.settings.applications.appinfo.ExternalSourcesDetails; import com.android.settings.applications.appinfo.PictureInPictureDetails; diff --git a/src/com/android/settings/datausage/UnrestrictedDataAccess.java b/src/com/android/settings/datausage/UnrestrictedDataAccess.java index 5b55ada19c6..e8a7bbfa2f9 100644 --- a/src/com/android/settings/datausage/UnrestrictedDataAccess.java +++ b/src/com/android/settings/datausage/UnrestrictedDataAccess.java @@ -32,7 +32,7 @@ import com.android.settings.R; import com.android.settings.SettingsPreferenceFragment; import com.android.settings.applications.AppStateBaseBridge; import com.android.settings.applications.InstalledAppDetails; -import com.android.settings.applications.AppInfoDashboardFragment; +import com.android.settings.applications.appinfo.AppInfoDashboardFragment; import com.android.settings.core.FeatureFlags; import com.android.settings.datausage.AppStateDataUsageBridge.DataUsageState; import com.android.settings.overlay.FeatureFactory; diff --git a/src/com/android/settings/location/RecentLocationRequestPreferenceController.java b/src/com/android/settings/location/RecentLocationRequestPreferenceController.java index 8c4fa5798ef..461f6e36a75 100644 --- a/src/com/android/settings/location/RecentLocationRequestPreferenceController.java +++ b/src/com/android/settings/location/RecentLocationRequestPreferenceController.java @@ -25,7 +25,7 @@ import android.util.FeatureFlagUtils; import com.android.settings.R; import com.android.settings.SettingsActivity; import com.android.settings.applications.InstalledAppDetails; -import com.android.settings.applications.AppInfoDashboardFragment; +import com.android.settings.applications.appinfo.AppInfoDashboardFragment; import com.android.settings.core.FeatureFlags; import com.android.settings.widget.AppPreference; import com.android.settingslib.core.lifecycle.Lifecycle; diff --git a/src/com/android/settings/widget/EntityHeaderController.java b/src/com/android/settings/widget/EntityHeaderController.java index 5fa75862898..0d07e67f809 100644 --- a/src/com/android/settings/widget/EntityHeaderController.java +++ b/src/com/android/settings/widget/EntityHeaderController.java @@ -45,7 +45,7 @@ import com.android.settings.Utils; import com.android.settings.applications.AppInfoBase; import com.android.settings.applications.InstalledAppDetails; import com.android.settings.applications.LayoutPreference; -import com.android.settings.applications.AppInfoDashboardFragment; +import com.android.settings.applications.appinfo.AppInfoDashboardFragment; import com.android.settings.core.FeatureFlags; import com.android.settings.overlay.FeatureFactory; import com.android.settingslib.applications.ApplicationsState; diff --git a/tests/robotests/assets/grandfather_not_implementing_index_provider b/tests/robotests/assets/grandfather_not_implementing_index_provider index 6d3ec9a3c96..ebcea43a42a 100644 --- a/tests/robotests/assets/grandfather_not_implementing_index_provider +++ b/tests/robotests/assets/grandfather_not_implementing_index_provider @@ -1,4 +1,4 @@ -com.android.settings.applications.AppInfoDashboardFragment +com.android.settings.applications.appinfo.AppInfoDashboardFragment com.android.settings.bluetooth.DevicePickerFragment com.android.settings.bluetooth.BluetoothDeviceDetailsFragment com.android.settings.bluetooth.BluetoothPairingDetail diff --git a/tests/robotests/src/com/android/settings/applications/appinfo/AppBatteryPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/applications/appinfo/AppBatteryPreferenceControllerTest.java index 3516445f120..91833f562cf 100644 --- a/tests/robotests/src/com/android/settings/applications/appinfo/AppBatteryPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/applications/appinfo/AppBatteryPreferenceControllerTest.java @@ -40,7 +40,6 @@ import com.android.internal.os.BatterySipper; import com.android.internal.os.BatteryStatsHelper; import com.android.settings.SettingsActivity; import com.android.settings.TestConfig; -import com.android.settings.applications.AppInfoDashboardFragment; import com.android.settings.fuelgauge.BatteryUtils; import com.android.settings.testutils.SettingsRobolectricTestRunner; diff --git a/tests/robotests/src/com/android/settings/applications/appinfo/AppDataUsagePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/applications/appinfo/AppDataUsagePreferenceControllerTest.java index b02e01e30fe..76160eeba77 100644 --- a/tests/robotests/src/com/android/settings/applications/appinfo/AppDataUsagePreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/applications/appinfo/AppDataUsagePreferenceControllerTest.java @@ -37,7 +37,6 @@ import android.os.Bundle; import android.support.v7.preference.Preference; import com.android.settings.TestConfig; -import com.android.settings.applications.AppInfoDashboardFragment; import com.android.settings.datausage.AppDataUsage; import com.android.settings.testutils.SettingsRobolectricTestRunner; import com.android.settingslib.applications.ApplicationsState.AppEntry; diff --git a/tests/robotests/src/com/android/settings/applications/AppInfoDashboardFragmentTest.java b/tests/robotests/src/com/android/settings/applications/appinfo/AppInfoDashboardFragmentTest.java similarity index 60% rename from tests/robotests/src/com/android/settings/applications/AppInfoDashboardFragmentTest.java rename to tests/robotests/src/com/android/settings/applications/appinfo/AppInfoDashboardFragmentTest.java index e742549e720..b208253b3cd 100644 --- a/tests/robotests/src/com/android/settings/applications/AppInfoDashboardFragmentTest.java +++ b/tests/robotests/src/com/android/settings/applications/appinfo/AppInfoDashboardFragmentTest.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.settings.applications; +package com.android.settings.applications.appinfo; import static com.google.common.truth.Truth.assertThat; @@ -32,6 +32,7 @@ import android.content.Intent; import android.content.pm.ApplicationInfo; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; +import android.content.pm.UserInfo; import android.content.res.Resources; import android.os.UserManager; @@ -59,7 +60,9 @@ import org.robolectric.annotation.Implementation; import org.robolectric.annotation.Implements; import org.robolectric.util.ReflectionHelpers; +import java.util.ArrayList; import java.util.HashSet; +import java.util.List; @RunWith(SettingsRobolectricTestRunner.class) @Config( @@ -84,7 +87,7 @@ public final class AppInfoDashboardFragmentTest { private AppOpsManager mAppOpsManager; private FakeFeatureFactory mFeatureFactory; - private AppInfoDashboardFragment mAppDetail; + private AppInfoDashboardFragment mFragment; private Context mShadowContext; @@ -93,12 +96,12 @@ public final class AppInfoDashboardFragmentTest { MockitoAnnotations.initMocks(this); mFeatureFactory = FakeFeatureFactory.setupForTest(); mShadowContext = RuntimeEnvironment.application; - mAppDetail = spy(new AppInfoDashboardFragment()); - doReturn(mActivity).when(mAppDetail).getActivity(); - doReturn(mShadowContext).when(mAppDetail).getContext(); + mFragment = spy(new AppInfoDashboardFragment()); + doReturn(mActivity).when(mFragment).getActivity(); + doReturn(mShadowContext).when(mFragment).getContext(); doReturn(mPackageManager).when(mActivity).getPackageManager(); doReturn(mAppOpsManager).when(mActivity).getSystemService(Context.APP_OPS_SERVICE); - mAppDetail.mActionButtons = ActionButtonPreferenceTest.createMock(); + mFragment.mActionButtons = ActionButtonPreferenceTest.createMock(); // Default to not considering any apps to be instant (individual tests can override this). ReflectionHelpers.setStaticField(AppUtils.class, "sInstantAppDataProvider", @@ -109,68 +112,68 @@ public final class AppInfoDashboardFragmentTest { public void shouldShowUninstallForAll_installForOneOtherUserOnly_shouldReturnTrue() { when(mDevicePolicyManager.packageHasActiveAdmins(nullable(String.class))).thenReturn(false); when(mUserManager.getUsers().size()).thenReturn(2); - ReflectionHelpers.setField(mAppDetail, "mDpm", mDevicePolicyManager); - ReflectionHelpers.setField(mAppDetail, "mUserManager", mUserManager); + ReflectionHelpers.setField(mFragment, "mDpm", mDevicePolicyManager); + ReflectionHelpers.setField(mFragment, "mUserManager", mUserManager); final ApplicationInfo info = new ApplicationInfo(); info.enabled = true; final AppEntry appEntry = mock(AppEntry.class); appEntry.info = info; final PackageInfo packageInfo = mock(PackageInfo.class); - ReflectionHelpers.setField(mAppDetail, "mPackageInfo", packageInfo); + ReflectionHelpers.setField(mFragment, "mPackageInfo", packageInfo); - assertThat(mAppDetail.shouldShowUninstallForAll(appEntry)).isTrue(); + assertThat(mFragment.shouldShowUninstallForAll(appEntry)).isTrue(); } @Test public void shouldShowUninstallForAll_installForSelfOnly_shouldReturnFalse() { when(mDevicePolicyManager.packageHasActiveAdmins(nullable(String.class))).thenReturn(false); when(mUserManager.getUsers().size()).thenReturn(2); - ReflectionHelpers.setField(mAppDetail, "mDpm", mDevicePolicyManager); - ReflectionHelpers.setField(mAppDetail, "mUserManager", mUserManager); + ReflectionHelpers.setField(mFragment, "mDpm", mDevicePolicyManager); + ReflectionHelpers.setField(mFragment, "mUserManager", mUserManager); final ApplicationInfo info = new ApplicationInfo(); info.flags = ApplicationInfo.FLAG_INSTALLED; info.enabled = true; final AppEntry appEntry = mock(AppEntry.class); appEntry.info = info; final PackageInfo packageInfo = mock(PackageInfo.class); - ReflectionHelpers.setField(mAppDetail, "mPackageInfo", packageInfo); + ReflectionHelpers.setField(mFragment, "mPackageInfo", packageInfo); - assertThat(mAppDetail.shouldShowUninstallForAll(appEntry)).isFalse(); + assertThat(mFragment.shouldShowUninstallForAll(appEntry)).isFalse(); } @Test public void launchFragment_hasNoPackageInfo_shouldFinish() { - ReflectionHelpers.setField(mAppDetail, "mPackageInfo", null); + ReflectionHelpers.setField(mFragment, "mPackageInfo", null); - assertThat(mAppDetail.ensurePackageInfoAvailable(mActivity)).isFalse(); + assertThat(mFragment.ensurePackageInfoAvailable(mActivity)).isFalse(); verify(mActivity).finishAndRemoveTask(); } @Test public void launchFragment_hasPackageInfo_shouldReturnTrue() { final PackageInfo packageInfo = mock(PackageInfo.class); - ReflectionHelpers.setField(mAppDetail, "mPackageInfo", packageInfo); + ReflectionHelpers.setField(mFragment, "mPackageInfo", packageInfo); - assertThat(mAppDetail.ensurePackageInfoAvailable(mActivity)).isTrue(); + assertThat(mFragment.ensurePackageInfoAvailable(mActivity)).isTrue(); verify(mActivity, never()).finishAndRemoveTask(); } @Test public void packageSizeChange_isOtherPackage_shouldNotRefreshUi() { - ReflectionHelpers.setField(mAppDetail, "mPackageName", PACKAGE_NAME); - mAppDetail.onPackageSizeChanged("Not_" + PACKAGE_NAME); + ReflectionHelpers.setField(mFragment, "mPackageName", PACKAGE_NAME); + mFragment.onPackageSizeChanged("Not_" + PACKAGE_NAME); - verify(mAppDetail, never()).refreshUi(); + verify(mFragment, never()).refreshUi(); } @Test public void packageSizeChange_isOwnPackage_shouldRefreshUi() { - doReturn(Boolean.TRUE).when(mAppDetail).refreshUi(); - ReflectionHelpers.setField(mAppDetail, "mPackageName", PACKAGE_NAME); + doReturn(Boolean.TRUE).when(mFragment).refreshUi(); + ReflectionHelpers.setField(mFragment, "mPackageName", PACKAGE_NAME); - mAppDetail.onPackageSizeChanged(PACKAGE_NAME); + mFragment.onPackageSizeChanged(PACKAGE_NAME); - verify(mAppDetail).refreshUi(); + verify(mFragment).refreshUi(); } // Tests that we don't show the "uninstall for all users" button for instant apps. @@ -188,11 +191,11 @@ public final class AppInfoDashboardFragmentTest { appEntry.info = info; final PackageInfo packageInfo = mock(PackageInfo.class); - ReflectionHelpers.setField(mAppDetail, "mDpm", mDevicePolicyManager); - ReflectionHelpers.setField(mAppDetail, "mUserManager", mUserManager); - ReflectionHelpers.setField(mAppDetail, "mPackageInfo", packageInfo); + ReflectionHelpers.setField(mFragment, "mDpm", mDevicePolicyManager); + ReflectionHelpers.setField(mFragment, "mUserManager", mUserManager); + ReflectionHelpers.setField(mFragment, "mPackageInfo", packageInfo); - assertThat(mAppDetail.shouldShowUninstallForAll(appEntry)).isFalse(); + assertThat(mFragment.shouldShowUninstallForAll(appEntry)).isFalse(); } // Tests that we don't show the uninstall button for instant apps" @@ -209,12 +212,12 @@ public final class AppInfoDashboardFragmentTest { final PackageInfo packageInfo = mock(PackageInfo.class); packageInfo.applicationInfo = info; - ReflectionHelpers.setField(mAppDetail, "mUserManager", mUserManager); - ReflectionHelpers.setField(mAppDetail, "mAppEntry", appEntry); - ReflectionHelpers.setField(mAppDetail, "mPackageInfo", packageInfo); + ReflectionHelpers.setField(mFragment, "mUserManager", mUserManager); + ReflectionHelpers.setField(mFragment, "mAppEntry", appEntry); + ReflectionHelpers.setField(mFragment, "mPackageInfo", packageInfo); - mAppDetail.initUninstallButtonForUserApp(); - verify(mAppDetail.mActionButtons).setButton1Visible(false); + mFragment.initUninstallButtonForUserApp(); + verify(mFragment.mActionButtons).setButton1Visible(false); } // Tests that we don't show the force stop button for instant apps (they aren't allowed to run @@ -229,19 +232,19 @@ public final class AppInfoDashboardFragmentTest { final ApplicationInfo info = new ApplicationInfo(); appEntry.info = info; - ReflectionHelpers.setField(mAppDetail, "mDpm", mDevicePolicyManager); - ReflectionHelpers.setField(mAppDetail, "mPackageInfo", packageInfo); - ReflectionHelpers.setField(mAppDetail, "mAppEntry", appEntry); + ReflectionHelpers.setField(mFragment, "mDpm", mDevicePolicyManager); + ReflectionHelpers.setField(mFragment, "mPackageInfo", packageInfo); + ReflectionHelpers.setField(mFragment, "mAppEntry", appEntry); - mAppDetail.checkForceStop(); - verify(mAppDetail.mActionButtons).setButton2Visible(false); + mFragment.checkForceStop(); + verify(mFragment.mActionButtons).setButton2Visible(false); } @Test public void onActivityResult_uninstalledUpdates_shouldInvalidateOptionsMenu() { - doReturn(true).when(mAppDetail).refreshUi(); + doReturn(true).when(mFragment).refreshUi(); - mAppDetail.onActivityResult(InstalledAppDetails.REQUEST_UNINSTALL, 0, mock(Intent.class)); + mFragment.onActivityResult(mFragment.REQUEST_UNINSTALL, 0, mock(Intent.class)); verify(mActivity).invalidateOptionsMenu(); } @@ -256,11 +259,11 @@ public final class AppInfoDashboardFragmentTest { final HashSet homePackages = new HashSet<>(); homePackages.add(info.packageName); - ReflectionHelpers.setField(mAppDetail, "mHomePackages", homePackages); - ReflectionHelpers.setField(mAppDetail, "mAppEntry", appEntry); + ReflectionHelpers.setField(mFragment, "mHomePackages", homePackages); + ReflectionHelpers.setField(mFragment, "mAppEntry", appEntry); - assertThat(mAppDetail.handleDisableable()).isFalse(); - verify(mAppDetail.mActionButtons).setButton1Text(R.string.disable_text); + assertThat(mFragment.handleDisableable()).isFalse(); + verify(mFragment.mActionButtons).setButton1Text(R.string.disable_text); } @Test @@ -276,12 +279,12 @@ public final class AppInfoDashboardFragmentTest { when(mFeatureFactory.applicationFeatureProvider.getKeepEnabledPackages()).thenReturn( new HashSet<>()); - ReflectionHelpers.setField(mAppDetail, "mApplicationFeatureProvider", + ReflectionHelpers.setField(mFragment, "mApplicationFeatureProvider", mFeatureFactory.applicationFeatureProvider); - ReflectionHelpers.setField(mAppDetail, "mAppEntry", appEntry); + ReflectionHelpers.setField(mFragment, "mAppEntry", appEntry); - assertThat(mAppDetail.handleDisableable()).isTrue(); - verify(mAppDetail.mActionButtons).setButton1Text(R.string.disable_text); + assertThat(mFragment.handleDisableable()).isTrue(); + verify(mFragment.mActionButtons).setButton1Text(R.string.disable_text); } @Test @@ -297,13 +300,13 @@ public final class AppInfoDashboardFragmentTest { when(mFeatureFactory.applicationFeatureProvider.getKeepEnabledPackages()).thenReturn( new HashSet<>()); - ReflectionHelpers.setField(mAppDetail, "mApplicationFeatureProvider", + ReflectionHelpers.setField(mFragment, "mApplicationFeatureProvider", mFeatureFactory.applicationFeatureProvider); - ReflectionHelpers.setField(mAppDetail, "mAppEntry", appEntry); + ReflectionHelpers.setField(mFragment, "mAppEntry", appEntry); - assertThat(mAppDetail.handleDisableable()).isTrue(); - verify(mAppDetail.mActionButtons).setButton1Text(R.string.enable_text); - verify(mAppDetail.mActionButtons).setButton1Positive(true); + assertThat(mFragment.handleDisableable()).isTrue(); + verify(mFragment.mActionButtons).setButton1Text(R.string.enable_text); + verify(mFragment.mActionButtons).setButton1Positive(true); } @Test @@ -322,12 +325,12 @@ public final class AppInfoDashboardFragmentTest { when(mFeatureFactory.applicationFeatureProvider.getKeepEnabledPackages()).thenReturn( packages); - ReflectionHelpers.setField(mAppDetail, "mApplicationFeatureProvider", + ReflectionHelpers.setField(mFragment, "mApplicationFeatureProvider", mFeatureFactory.applicationFeatureProvider); - ReflectionHelpers.setField(mAppDetail, "mAppEntry", appEntry); + ReflectionHelpers.setField(mFragment, "mAppEntry", appEntry); - assertThat(mAppDetail.handleDisableable()).isFalse(); - verify(mAppDetail.mActionButtons).setButton1Text(R.string.disable_text); + assertThat(mFragment.handleDisableable()).isFalse(); + verify(mFragment.mActionButtons).setButton1Text(R.string.disable_text); } @Test @@ -337,12 +340,61 @@ public final class AppInfoDashboardFragmentTest { info.enabled = true; final PackageInfo packageInfo = mock(PackageInfo.class); packageInfo.applicationInfo = info; - ReflectionHelpers.setField(mAppDetail, "mUserManager", mUserManager); - ReflectionHelpers.setField(mAppDetail, "mPackageInfo", packageInfo); + ReflectionHelpers.setField(mFragment, "mUserManager", mUserManager); + ReflectionHelpers.setField(mFragment, "mPackageInfo", packageInfo); - mAppDetail.initUninstallButtonForUserApp(); + mFragment.initUninstallButtonForUserApp(); + + verify(mFragment.mActionButtons).setButton1Positive(false); + } + + @Test + public void getNumberOfUserWithPackageInstalled_twoUsersInstalled_shouldReturnTwo() + throws PackageManager.NameNotFoundException{ + final String packageName = "Package1"; + final int userID1 = 1; + final int userID2 = 2; + final List userInfos = new ArrayList<>(); + userInfos.add(new UserInfo(userID1, "User1", UserInfo.FLAG_PRIMARY)); + userInfos.add(new UserInfo(userID2, "yue", UserInfo.FLAG_GUEST)); + when(mUserManager.getUsers(true)).thenReturn(userInfos); + ReflectionHelpers.setField(mFragment, "mUserManager", mUserManager); + final ApplicationInfo appInfo = new ApplicationInfo(); + appInfo.flags = ApplicationInfo.FLAG_INSTALLED; + when(mPackageManager.getApplicationInfoAsUser( + packageName, PackageManager.GET_META_DATA, userID1)) + .thenReturn(appInfo); + when(mPackageManager.getApplicationInfoAsUser( + packageName, PackageManager.GET_META_DATA, userID2)) + .thenReturn(appInfo); + ReflectionHelpers.setField(mFragment, "mPm", mPackageManager); + + assertThat(mFragment.getNumberOfUserWithPackageInstalled(packageName)).isEqualTo(2); + } + + @Test + public void getNumberOfUserWithPackageInstalled_oneUserInstalled_shouldReturnOne() + throws PackageManager.NameNotFoundException{ + final String packageName = "Package1"; + final int userID1 = 1; + final int userID2 = 2; + final List userInfos = new ArrayList<>(); + userInfos.add(new UserInfo(userID1, "User1", UserInfo.FLAG_PRIMARY)); + userInfos.add(new UserInfo(userID2, "yue", UserInfo.FLAG_GUEST)); + when(mUserManager.getUsers(true)).thenReturn(userInfos); + ReflectionHelpers.setField(mFragment, "mUserManager", mUserManager); + final ApplicationInfo appInfo = new ApplicationInfo(); + appInfo.flags = ApplicationInfo.FLAG_INSTALLED; + when(mPackageManager.getApplicationInfoAsUser( + packageName, PackageManager.GET_META_DATA, userID1)) + .thenReturn(appInfo); + when(mPackageManager.getApplicationInfoAsUser( + packageName, PackageManager.GET_META_DATA, userID2)) + .thenThrow(new PackageManager.NameNotFoundException()); + ReflectionHelpers.setField(mFragment, "mPm", mPackageManager); + + assertThat(mFragment.getNumberOfUserWithPackageInstalled(packageName)).isEqualTo(1); - verify(mAppDetail.mActionButtons).setButton1Positive(false); } @Implements(Utils.class) diff --git a/tests/robotests/src/com/android/settings/applications/appinfo/AppInfoPreferenceControllerBaseTest.java b/tests/robotests/src/com/android/settings/applications/appinfo/AppInfoPreferenceControllerBaseTest.java index 25dcab31ca5..51b6ddf06d6 100644 --- a/tests/robotests/src/com/android/settings/applications/appinfo/AppInfoPreferenceControllerBaseTest.java +++ b/tests/robotests/src/com/android/settings/applications/appinfo/AppInfoPreferenceControllerBaseTest.java @@ -32,7 +32,6 @@ import android.support.v7.preference.PreferenceScreen; import com.android.settings.SettingsActivity; import com.android.settings.SettingsPreferenceFragment; import com.android.settings.TestConfig; -import com.android.settings.applications.AppInfoDashboardFragment; import com.android.settings.notification.AppNotificationSettings; import com.android.settings.testutils.SettingsRobolectricTestRunner; import com.android.settingslib.applications.ApplicationsState; diff --git a/tests/robotests/src/com/android/settings/applications/appinfo/AppInstallerInfoPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/applications/appinfo/AppInstallerInfoPreferenceControllerTest.java index ffbc8f55954..d8d11bc5c27 100644 --- a/tests/robotests/src/com/android/settings/applications/appinfo/AppInstallerInfoPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/applications/appinfo/AppInstallerInfoPreferenceControllerTest.java @@ -39,7 +39,6 @@ import android.os.UserManager; import android.support.v7.preference.Preference; import com.android.settings.TestConfig; -import com.android.settings.applications.AppInfoDashboardFragment; import com.android.settings.testutils.SettingsRobolectricTestRunner; import org.junit.Before; diff --git a/tests/robotests/src/com/android/settings/applications/appinfo/AppMemoryPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/applications/appinfo/AppMemoryPreferenceControllerTest.java index d74e301004c..47844c59b0a 100644 --- a/tests/robotests/src/com/android/settings/applications/appinfo/AppMemoryPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/applications/appinfo/AppMemoryPreferenceControllerTest.java @@ -34,7 +34,6 @@ import android.support.v7.preference.PreferenceScreen; import com.android.settings.R; import com.android.settings.SettingsActivity; import com.android.settings.TestConfig; -import com.android.settings.applications.AppInfoDashboardFragment; import com.android.settings.applications.ProcStatsData; import com.android.settings.applications.ProcessStatsDetail; import com.android.settings.testutils.SettingsRobolectricTestRunner; diff --git a/tests/robotests/src/com/android/settings/applications/appinfo/AppNotificationPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/applications/appinfo/AppNotificationPreferenceControllerTest.java index 482f33cf903..0b747a8f662 100644 --- a/tests/robotests/src/com/android/settings/applications/appinfo/AppNotificationPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/applications/appinfo/AppNotificationPreferenceControllerTest.java @@ -30,7 +30,6 @@ import android.support.v7.preference.Preference; import android.support.v7.preference.PreferenceScreen; import com.android.settings.TestConfig; -import com.android.settings.applications.AppInfoDashboardFragment; import com.android.settings.notification.AppNotificationSettings; import com.android.settings.notification.NotificationBackend; import com.android.settings.testutils.SettingsRobolectricTestRunner; diff --git a/tests/robotests/src/com/android/settings/applications/appinfo/AppOpenByDefaultPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/applications/appinfo/AppOpenByDefaultPreferenceControllerTest.java index b708232ed1d..c5003cc9290 100644 --- a/tests/robotests/src/com/android/settings/applications/appinfo/AppOpenByDefaultPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/applications/appinfo/AppOpenByDefaultPreferenceControllerTest.java @@ -32,7 +32,6 @@ import android.support.v7.preference.Preference; import android.support.v7.preference.PreferenceScreen; import com.android.settings.TestConfig; -import com.android.settings.applications.AppInfoDashboardFragment; import com.android.settings.applications.AppLaunchSettings; import com.android.settings.testutils.SettingsRobolectricTestRunner; import com.android.settingslib.applications.AppUtils; diff --git a/tests/robotests/src/com/android/settings/applications/appinfo/AppPermissionPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/applications/appinfo/AppPermissionPreferenceControllerTest.java index f9f8d98da81..f0b415cb9fc 100644 --- a/tests/robotests/src/com/android/settings/applications/appinfo/AppPermissionPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/applications/appinfo/AppPermissionPreferenceControllerTest.java @@ -34,7 +34,6 @@ import android.support.v7.preference.PreferenceScreen; import com.android.settings.R; import com.android.settings.SettingsActivity; import com.android.settings.TestConfig; -import com.android.settings.applications.AppInfoDashboardFragment; import com.android.settings.testutils.SettingsRobolectricTestRunner; import com.android.settingslib.applications.ApplicationsState; diff --git a/tests/robotests/src/com/android/settings/applications/appinfo/AppStoragePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/applications/appinfo/AppStoragePreferenceControllerTest.java index 729914acc9c..c0695178424 100644 --- a/tests/robotests/src/com/android/settings/applications/appinfo/AppStoragePreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/applications/appinfo/AppStoragePreferenceControllerTest.java @@ -32,7 +32,6 @@ import android.os.Bundle; import android.support.v7.preference.Preference; import com.android.settings.TestConfig; -import com.android.settings.applications.AppInfoDashboardFragment; import com.android.settings.applications.AppStorageSettings; import com.android.settings.testutils.SettingsRobolectricTestRunner; import com.android.settingslib.applications.ApplicationsState.AppEntry; diff --git a/tests/robotests/src/com/android/settings/applications/appinfo/AppVersionPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/applications/appinfo/AppVersionPreferenceControllerTest.java index 74184897f0d..d6ecf3e120c 100644 --- a/tests/robotests/src/com/android/settings/applications/appinfo/AppVersionPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/applications/appinfo/AppVersionPreferenceControllerTest.java @@ -25,7 +25,6 @@ import android.content.pm.PackageInfo; import android.support.v7.preference.Preference; import com.android.settings.TestConfig; -import com.android.settings.applications.AppInfoDashboardFragment; import com.android.settings.testutils.SettingsRobolectricTestRunner; import org.junit.Before; diff --git a/tests/robotests/src/com/android/settings/applications/appinfo/DefaultAppShortcutPreferenceControllerBaseTest.java b/tests/robotests/src/com/android/settings/applications/appinfo/DefaultAppShortcutPreferenceControllerBaseTest.java index 358e50d2ed9..e44fdfb2070 100644 --- a/tests/robotests/src/com/android/settings/applications/appinfo/DefaultAppShortcutPreferenceControllerBaseTest.java +++ b/tests/robotests/src/com/android/settings/applications/appinfo/DefaultAppShortcutPreferenceControllerBaseTest.java @@ -31,7 +31,6 @@ import android.support.v7.preference.PreferenceScreen; import com.android.settings.R; import com.android.settings.SettingsActivity; import com.android.settings.TestConfig; -import com.android.settings.applications.AppInfoDashboardFragment; import com.android.settings.applications.DefaultAppSettings; import com.android.settings.testutils.SettingsRobolectricTestRunner; diff --git a/tests/robotests/src/com/android/settings/applications/appinfo/DrawOverlayDetailPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/applications/appinfo/DrawOverlayDetailPreferenceControllerTest.java index a7468b5a69d..18a29e3cd3f 100644 --- a/tests/robotests/src/com/android/settings/applications/appinfo/DrawOverlayDetailPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/applications/appinfo/DrawOverlayDetailPreferenceControllerTest.java @@ -32,7 +32,6 @@ import android.os.UserManager; import android.support.v7.preference.Preference; import com.android.settings.TestConfig; -import com.android.settings.applications.AppInfoDashboardFragment; import com.android.settings.testutils.SettingsRobolectricTestRunner; import org.junit.Before; diff --git a/tests/robotests/src/com/android/settings/applications/appinfo/ExternalSourceDetailPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/applications/appinfo/ExternalSourceDetailPreferenceControllerTest.java index d500be901b2..7e542f70920 100644 --- a/tests/robotests/src/com/android/settings/applications/appinfo/ExternalSourceDetailPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/applications/appinfo/ExternalSourceDetailPreferenceControllerTest.java @@ -28,7 +28,6 @@ import android.os.UserManager; import android.support.v7.preference.Preference; import com.android.settings.TestConfig; -import com.android.settings.applications.AppInfoDashboardFragment; import com.android.settings.testutils.SettingsRobolectricTestRunner; import org.junit.Before; diff --git a/tests/robotests/src/com/android/settings/applications/appinfo/InstantAppButtonsPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/applications/appinfo/InstantAppButtonsPreferenceControllerTest.java index 121659538a4..eb8a082ce57 100644 --- a/tests/robotests/src/com/android/settings/applications/appinfo/InstantAppButtonsPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/applications/appinfo/InstantAppButtonsPreferenceControllerTest.java @@ -34,7 +34,6 @@ import android.support.v7.preference.PreferenceScreen; import android.view.View; import com.android.settings.TestConfig; -import com.android.settings.applications.AppInfoDashboardFragment; import com.android.settings.applications.LayoutPreference; import com.android.settings.applications.instantapps.InstantAppButtonsController; import com.android.settings.testutils.FakeFeatureFactory; diff --git a/tests/robotests/src/com/android/settings/applications/appinfo/InstantAppDomainsPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/applications/appinfo/InstantAppDomainsPreferenceControllerTest.java index f1776e88e7d..bb0b42a07a2 100644 --- a/tests/robotests/src/com/android/settings/applications/appinfo/InstantAppDomainsPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/applications/appinfo/InstantAppDomainsPreferenceControllerTest.java @@ -18,8 +18,6 @@ package com.android.settings.applications.appinfo; import static com.google.common.truth.Truth.assertThat; -import static org.mockito.ArgumentMatchers.anyInt; -import static org.mockito.Mockito.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; @@ -34,7 +32,6 @@ import android.util.ArraySet; import com.android.settings.TestConfig; import com.android.settings.applications.AppDomainsPreference; -import com.android.settings.applications.AppInfoDashboardFragment; import com.android.settings.testutils.SettingsRobolectricTestRunner; import com.android.settingslib.applications.AppUtils; import com.android.settingslib.applications.instantapps.InstantAppDataProvider; diff --git a/tests/robotests/src/com/android/settings/applications/appinfo/PictureInPictureDetailPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/applications/appinfo/PictureInPictureDetailPreferenceControllerTest.java index 7d8116899ca..cf37b362f2b 100644 --- a/tests/robotests/src/com/android/settings/applications/appinfo/PictureInPictureDetailPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/applications/appinfo/PictureInPictureDetailPreferenceControllerTest.java @@ -29,7 +29,6 @@ import android.support.v7.preference.Preference; import com.android.settings.R; import com.android.settings.TestConfig; -import com.android.settings.applications.AppInfoDashboardFragment; import com.android.settings.testutils.SettingsRobolectricTestRunner; import org.junit.Before; diff --git a/tests/robotests/src/com/android/settings/applications/appinfo/WriteSystemSettingsPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/applications/appinfo/WriteSystemSettingsPreferenceControllerTest.java index fabcbb20439..08133f01a26 100644 --- a/tests/robotests/src/com/android/settings/applications/appinfo/WriteSystemSettingsPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/applications/appinfo/WriteSystemSettingsPreferenceControllerTest.java @@ -32,7 +32,6 @@ import android.os.UserManager; import android.support.v7.preference.Preference; import com.android.settings.TestConfig; -import com.android.settings.applications.AppInfoDashboardFragment; import com.android.settings.testutils.SettingsRobolectricTestRunner; import org.junit.Before; diff --git a/tests/robotests/src/com/android/settings/location/RecentLocationRequestPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/location/RecentLocationRequestPreferenceControllerTest.java index 5d7cca4c894..a1268d01399 100644 --- a/tests/robotests/src/com/android/settings/location/RecentLocationRequestPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/location/RecentLocationRequestPreferenceControllerTest.java @@ -41,7 +41,7 @@ import com.android.settings.R; import com.android.settings.SettingsActivity; import com.android.settings.TestConfig; import com.android.settings.applications.InstalledAppDetails; -import com.android.settings.applications.AppInfoDashboardFragment; +import com.android.settings.applications.appinfo.AppInfoDashboardFragment; import com.android.settings.core.FeatureFlags; import com.android.settings.testutils.SettingsRobolectricTestRunner; import com.android.settings.widget.AppPreference; diff --git a/tests/unit/src/com/android/settings/applications/PackageUtilTest.java b/tests/unit/src/com/android/settings/applications/PackageUtilTest.java index 1c064ae8897..0e3c402c70e 100644 --- a/tests/unit/src/com/android/settings/applications/PackageUtilTest.java +++ b/tests/unit/src/com/android/settings/applications/PackageUtilTest.java @@ -35,6 +35,7 @@ import static org.mockito.Mockito.when; @RunWith(AndroidJUnit4.class) @SmallTest +@Deprecated public class PackageUtilTest { private static final String ALL_USERS_APP_NAME = "com.google.allusers.app"; private static final String ONE_USER_APP_NAME = "com.google.oneuser.app"; diff --git a/tests/unit/src/com/android/settings/applications/SpecialAppAccessSettingsTest.java b/tests/unit/src/com/android/settings/applications/SpecialAppAccessSettingsTest.java index 4d92cf98a06..4165d06df17 100644 --- a/tests/unit/src/com/android/settings/applications/SpecialAppAccessSettingsTest.java +++ b/tests/unit/src/com/android/settings/applications/SpecialAppAccessSettingsTest.java @@ -20,6 +20,7 @@ import android.content.Intent; import android.support.test.filters.SmallTest; import android.support.test.uiautomator.UiDevice; import android.support.test.uiautomator.UiObject; +import android.support.test.uiautomator.UiObjectNotFoundException; import android.support.test.uiautomator.UiScrollable; import android.support.test.uiautomator.UiSelector; import android.test.InstrumentationTestCase; @@ -79,9 +80,15 @@ public class SpecialAppAccessSettingsTest extends InstrumentationTestCase { final String titleSpecialApps = mTargetContext.getResources().getString( R.string.special_access); - final UiScrollable settings = new UiScrollable( - new UiSelector().packageName(mTargetContext.getPackageName()).scrollable(true)); - settings.scrollTextIntoView(titleSpecialApps); + try { + // scollbar may or may not be present, depending on how many recents app are there. If + // the page is scrollable, scroll to the bottom to show the special app access settings. + final UiScrollable settings = new UiScrollable( + new UiSelector().packageName(mTargetContext.getPackageName()).scrollable(true)); + settings.scrollTextIntoView(titleSpecialApps); + } catch (UiObjectNotFoundException e) { + // ignore + } mDevice.findObject(new UiSelector().text(titleSpecialApps)).click(); } From 9453999e6fe58c9f0d756d9eb5faf79025aeddee Mon Sep 17 00:00:00 2001 From: James Lemieux Date: Tue, 12 Dec 2017 17:31:47 -0800 Subject: [PATCH 08/11] Adopt robolectric 3.5.1 Bug: 70581603 Test: make RunSettingsRoboTests Change-Id: I21dba3381ae62ee12de1ce29bea473b3d0f069c0 --- tests/robotests/Android.mk | 4 ++-- .../src/com/android/settings/HelpTrampolineTest.java | 6 +++--- .../settings/password/ChooseLockSettingsHelperTest.java | 4 +--- .../settings/testutils/SettingsRobolectricTestRunner.java | 8 ++------ 4 files changed, 8 insertions(+), 14 deletions(-) diff --git a/tests/robotests/Android.mk b/tests/robotests/Android.mk index 97e5e04f875..727188488a1 100644 --- a/tests/robotests/Android.mk +++ b/tests/robotests/Android.mk @@ -14,7 +14,7 @@ LOCAL_STATIC_JAVA_LIBRARIES := \ LOCAL_JAVA_LIBRARIES := \ junit \ - platform-robolectric-3.4.2-prebuilt \ + platform-robolectric-3.5.1-prebuilt \ telephony-common LOCAL_INSTRUMENTATION_FOR := Settings @@ -42,4 +42,4 @@ LOCAL_INSTRUMENT_SOURCE_DIRS := $(dir $(LOCAL_PATH))../src LOCAL_ROBOTEST_TIMEOUT := 36000 -include prebuilts/misc/common/robolectric/3.4.2/run_robotests.mk +include prebuilts/misc/common/robolectric/3.5.1/run_robotests.mk diff --git a/tests/robotests/src/com/android/settings/HelpTrampolineTest.java b/tests/robotests/src/com/android/settings/HelpTrampolineTest.java index e10b878d31a..a6bcf03c7fc 100644 --- a/tests/robotests/src/com/android/settings/HelpTrampolineTest.java +++ b/tests/robotests/src/com/android/settings/HelpTrampolineTest.java @@ -50,7 +50,7 @@ public class HelpTrampolineTest { final Intent intent = new Intent().setClassName( RuntimeEnvironment.application.getPackageName(), HelpTrampoline.class.getName()); - Robolectric.buildActivity(HelpTrampoline.class).withIntent(intent).create().get(); + Robolectric.buildActivity(HelpTrampoline.class, intent).create().get(); assertThat(ShadowHelpUtils.isGetHelpIntentCalled()).isFalse(); } @@ -60,8 +60,8 @@ public class HelpTrampolineTest { final Intent intent = new Intent().setClassName( RuntimeEnvironment.application.getPackageName(), HelpTrampoline.class.getName()) .putExtra(Intent.EXTRA_TEXT, "help_url_upgrading"); - final ShadowActivity shadow = shadowOf(Robolectric.buildActivity(HelpTrampoline.class) - .withIntent(intent).create().get()); + final ShadowActivity shadow = + shadowOf(Robolectric.buildActivity(HelpTrampoline.class, intent).create().get()); final Intent launchedIntent = shadow.getNextStartedActivity(); assertThat(ShadowHelpUtils.isGetHelpIntentCalled()).isTrue(); diff --git a/tests/robotests/src/com/android/settings/password/ChooseLockSettingsHelperTest.java b/tests/robotests/src/com/android/settings/password/ChooseLockSettingsHelperTest.java index 20a05e3b2dc..8628678930c 100644 --- a/tests/robotests/src/com/android/settings/password/ChooseLockSettingsHelperTest.java +++ b/tests/robotests/src/com/android/settings/password/ChooseLockSettingsHelperTest.java @@ -131,9 +131,7 @@ public class ChooseLockSettingsHelperTest { public void testLaunchConfirmationActivity_internal_shouldPropagateTheme() { Intent intent = new Intent() .putExtra(WizardManagerHelper.EXTRA_THEME, WizardManagerHelper.THEME_GLIF_V2); - Activity activity = Robolectric.buildActivity(Activity.class) - .withIntent(intent) - .get(); + Activity activity = Robolectric.buildActivity(Activity.class, intent).get(); ChooseLockSettingsHelper helper = getChooseLockSettingsHelper(activity); helper.launchConfirmationActivity(123, "test title", true, 0 /* userId */); diff --git a/tests/robotests/src/com/android/settings/testutils/SettingsRobolectricTestRunner.java b/tests/robotests/src/com/android/settings/testutils/SettingsRobolectricTestRunner.java index 2e8bac0f36c..7c374e9e92d 100644 --- a/tests/robotests/src/com/android/settings/testutils/SettingsRobolectricTestRunner.java +++ b/tests/robotests/src/com/android/settings/testutils/SettingsRobolectricTestRunner.java @@ -62,8 +62,8 @@ public class SettingsRobolectricTestRunner extends RobolectricTestRunner { // By adding any resources from libraries we need the AndroidManifest, we can access // them from within the parallel universe's resource loader. - final AndroidManifest manifest = new AndroidManifest(Fs.fileFromPath(manifestPath), - Fs.fileFromPath(resDir), Fs.fileFromPath(assetsDir)) { + return new AndroidManifest(Fs.fileFromPath(manifestPath), Fs.fileFromPath(resDir), + Fs.fileFromPath(assetsDir), "com.android.settings") { @Override public List getIncludedResourcePaths() { List paths = super.getIncludedResourcePaths(); @@ -71,10 +71,6 @@ public class SettingsRobolectricTestRunner extends RobolectricTestRunner { return paths; } }; - - // Set the package name to the renamed one - manifest.setPackageName("com.android.settings"); - return manifest; } public static void getIncludedResourcePaths(String packageName, List paths) { From 7fddfebf6ceb7bdf2fd0c63e878594f9b98122ae Mon Sep 17 00:00:00 2001 From: Matthew Fritze Date: Mon, 11 Dec 2017 15:01:11 -0800 Subject: [PATCH 09/11] Add Slices Data object and DB Contract Add in a Data object used to represent one row in a new SQLite database used for building Slices. The database has the following schema: - Key - Title - Subtitle - Screentitle - Icon - Fragment - Controller The key is the preference key. Title, subtitle and Icon are for UI info. Screentitle and fragment are for the intent. Controller is used to get dynamic ui info (like summary), and to take actions on the slice (like a toggle). The actual indexing and a Slice will be handled in a subsquent CL, but a prototype can be found here: ag/3324435 Test: robotests Bug: 67996923 Change-Id: Id91deb58a3ab89ce1dab5a3f34cdb9ade6263aa8 --- AndroidManifest.xml | 4 +- .../search/DatabaseIndexingUtils.java | 2 +- .../{ => slices}/SettingsSliceProvider.java | 59 ++-- .../{ => slices}/SliceBroadcastReceiver.java | 8 +- .../android/settings/slices/SliceData.java | 188 ++++++++++++ .../settings/slices/SlicesDatabaseHelper.java | 122 ++++++++ .../SearchIndexProviderCodeInspector.java | 6 +- .../settings/slices/SliceDataTest.java | 269 ++++++++++++++++++ .../slices/SlicesDatabaseHelperTest.java | 87 ++++++ 9 files changed, 701 insertions(+), 44 deletions(-) rename src/com/android/settings/{ => slices}/SettingsSliceProvider.java (67%) rename src/com/android/settings/{ => slices}/SliceBroadcastReceiver.java (85%) create mode 100644 src/com/android/settings/slices/SliceData.java create mode 100644 src/com/android/settings/slices/SlicesDatabaseHelper.java create mode 100644 tests/robotests/src/com/android/settings/slices/SliceDataTest.java create mode 100644 tests/robotests/src/com/android/settings/slices/SlicesDatabaseHelperTest.java diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 6ccb8d1b08d..0418d51dfc0 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -3312,13 +3312,13 @@ - + android:name=".slices.SliceBroadcastReceiver" > diff --git a/src/com/android/settings/search/DatabaseIndexingUtils.java b/src/com/android/settings/search/DatabaseIndexingUtils.java index 207d09fdb37..94ec65096e3 100644 --- a/src/com/android/settings/search/DatabaseIndexingUtils.java +++ b/src/com/android/settings/search/DatabaseIndexingUtils.java @@ -43,7 +43,7 @@ public class DatabaseIndexingUtils { private static final String TAG = "IndexingUtil"; - private static final String FIELD_NAME_SEARCH_INDEX_DATA_PROVIDER = + public static final String FIELD_NAME_SEARCH_INDEX_DATA_PROVIDER = "SEARCH_INDEX_DATA_PROVIDER"; /** diff --git a/src/com/android/settings/SettingsSliceProvider.java b/src/com/android/settings/slices/SettingsSliceProvider.java similarity index 67% rename from src/com/android/settings/SettingsSliceProvider.java rename to src/com/android/settings/slices/SettingsSliceProvider.java index 845dacddca3..22035d2195b 100644 --- a/src/com/android/settings/SettingsSliceProvider.java +++ b/src/com/android/settings/slices/SettingsSliceProvider.java @@ -14,28 +14,31 @@ * limitations under the License */ -package com.android.settings; +package com.android.settings.slices; import android.app.PendingIntent; -import android.app.slice.Slice; -import android.app.slice.SliceProvider; + import android.content.ContentResolver; import android.content.Context; import android.content.Intent; import android.graphics.drawable.Icon; import android.net.Uri; -import android.net.wifi.WifiInfo; import android.net.wifi.WifiManager; +import com.android.settings.R; + +import androidx.app.slice.Slice; +import androidx.app.slice.SliceProvider; +import androidx.app.slice.builders.ListBuilder; + public class SettingsSliceProvider extends SliceProvider { public static final String SLICE_AUTHORITY = "com.android.settings.slices"; public static final String PATH_WIFI = "wifi"; public static final String ACTION_WIFI_CHANGED = "com.android.settings.slice.action.WIFI_CHANGED"; - // TODO -- Associate slice URI with search result instead of separate hardcoded thing - public static final String[] WIFI_SEARCH_TERMS = {"wi-fi", "wifi", "internet"}; + // TODO -- Associate slice URI with search result instead of separate hardcoded thing public static Uri getUri(String path) { return new Uri.Builder() .scheme(ContentResolver.SCHEME_CONTENT) @@ -44,7 +47,7 @@ public class SettingsSliceProvider extends SliceProvider { } @Override - public boolean onCreate() { + public boolean onCreateSliceProvider() { return true; } @@ -53,15 +56,15 @@ public class SettingsSliceProvider extends SliceProvider { String path = sliceUri.getPath(); switch (path) { case "/" + PATH_WIFI: - return createWifi(sliceUri); - + return createWifiSlice(sliceUri); } throw new IllegalArgumentException("Unrecognized slice uri: " + sliceUri); } - private Slice createWifi(Uri uri) { + + // TODO (b/70622039) remove this when the proper wifi slice is enabled. + private Slice createWifiSlice(Uri sliceUri) { // Get wifi state - String[] toggleHints; WifiManager wifiManager = (WifiManager) getContext().getSystemService(Context.WIFI_SERVICE); int wifiState = wifiManager.getWifiState(); boolean wifiEnabled = false; @@ -74,7 +77,6 @@ public class SettingsSliceProvider extends SliceProvider { case WifiManager.WIFI_STATE_ENABLED: case WifiManager.WIFI_STATE_ENABLING: state = wifiManager.getConnectionInfo().getSSID(); - WifiInfo.removeDoubleQuotes(state); wifiEnabled = true; break; case WifiManager.WIFI_STATE_UNKNOWN: @@ -82,28 +84,17 @@ public class SettingsSliceProvider extends SliceProvider { state = ""; // just don't show anything? break; } - if (wifiEnabled) { - toggleHints = new String[] {Slice.HINT_TOGGLE, Slice.HINT_SELECTED}; - } else { - toggleHints = new String[] {Slice.HINT_TOGGLE}; - } - // Construct the slice - Slice.Builder b = new Slice.Builder(uri); - b.addSubSlice(new Slice.Builder(b) - .addAction(getIntent("android.settings.WIFI_SETTINGS"), - new Slice.Builder(b) - .addText(getContext().getString(R.string.wifi_settings), null) - .addText(state, null) - .addIcon(Icon.createWithResource(getContext(), - R.drawable.ic_settings_wireless), null, Slice.HINT_HIDDEN) - .addHints(Slice.HINT_TITLE) - .build()) - .addAction(getBroadcastIntent(ACTION_WIFI_CHANGED), - new Slice.Builder(b) - .addHints(toggleHints) - .build()) - .build()); - return b.build(); + + boolean finalWifiEnabled = wifiEnabled; + return new ListBuilder(sliceUri) + .setColor(R.color.material_blue_500) + .add(b -> b + .setTitle(getContext().getString(R.string.wifi_settings)) + .setTitleItem(Icon.createWithResource(getContext(), R.drawable.wifi_signal)) + .setSubtitle(state) + .addToggle(getBroadcastIntent(ACTION_WIFI_CHANGED), finalWifiEnabled) + .setContentIntent(getIntent(Intent.ACTION_MAIN))) + .build(); } private PendingIntent getIntent(String action) { diff --git a/src/com/android/settings/SliceBroadcastReceiver.java b/src/com/android/settings/slices/SliceBroadcastReceiver.java similarity index 85% rename from src/com/android/settings/SliceBroadcastReceiver.java rename to src/com/android/settings/slices/SliceBroadcastReceiver.java index f43e3a39206..b6f2ab945ca 100644 --- a/src/com/android/settings/SliceBroadcastReceiver.java +++ b/src/com/android/settings/slices/SliceBroadcastReceiver.java @@ -14,9 +14,9 @@ * limitations under the License */ -package com.android.settings; +package com.android.settings.slices; -import static com.android.settings.SettingsSliceProvider.ACTION_WIFI_CHANGED; +import static com.android.settings.slices.SettingsSliceProvider.ACTION_WIFI_CHANGED; import android.app.slice.Slice; import android.content.BroadcastReceiver; @@ -42,8 +42,8 @@ public class SliceBroadcastReceiver extends BroadcastReceiver { // Wait a bit for wifi to update (TODO: is there a better way to do this?) Handler h = new Handler(); h.postDelayed(() -> { - Uri uri = SettingsSliceProvider.getUri(SettingsSliceProvider.PATH_WIFI); - context.getContentResolver().notifyChange(uri, null); + Uri uri = SettingsSliceProvider.getUri(SettingsSliceProvider.PATH_WIFI); + context.getContentResolver().notifyChange(uri, null); }, 1000); break; } diff --git a/src/com/android/settings/slices/SliceData.java b/src/com/android/settings/slices/SliceData.java new file mode 100644 index 00000000000..528f23c9133 --- /dev/null +++ b/src/com/android/settings/slices/SliceData.java @@ -0,0 +1,188 @@ +/* + * Copyright (C) 2017 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License + */ + +package com.android.settings.slices; + +import android.net.Uri; +import android.text.TextUtils; + +/** + * TODO (b/67996923) Add SlicesIndexingManager + * Data class representing a slice stored by {@link SlicesIndexingManager}. + * Note that {@link #key} is treated as a primary key for this class and determines equality. + */ +public class SliceData { + + private final String key; + + private final String title; + + private final String summary; + + private final String screenTitle; + + private final int iconResource; + + private final String fragmentClassName; + + private final Uri uri; + + private final String preferenceController; + + public String getKey() { + return key; + } + + public String getTitle() { + return title; + } + + public String getSummary() { + return summary; + } + + public String getScreenTitle() { + return screenTitle; + } + + public int getIconResource() { + return iconResource; + } + + public String getFragmentClassName() { + return fragmentClassName; + } + + public Uri getUri() { + return uri; + } + + public String getPreferenceController() { + return preferenceController; + } + + private SliceData(Builder builder) { + key = builder.mKey; + title = builder.mTitle; + summary = builder.mSummary; + screenTitle = builder.mScreenTitle; + iconResource = builder.mIconResource; + fragmentClassName = builder.mFragmentClassName; + uri = builder.mUri; + preferenceController = builder.mPrefControllerClassName; + } + + @Override + public int hashCode() { + return key.hashCode(); + } + + @Override + public boolean equals(Object obj) { + if (!(obj instanceof SliceData)) { + return false; + } + SliceData newObject = (SliceData) obj; + return TextUtils.equals(key, newObject.key); + } + + static class Builder { + private String mKey; + + private String mTitle; + + private String mSummary; + + private String mScreenTitle; + + private int mIconResource; + + private String mFragmentClassName; + + private Uri mUri; + + private String mPrefControllerClassName; + + public Builder setKey(String key) { + mKey = key; + return this; + } + + public Builder setTitle(String title) { + mTitle = title; + return this; + } + + public Builder setSummary(String summary) { + mSummary = summary; + return this; + } + + public Builder setScreenTitle(String screenTitle) { + mScreenTitle = screenTitle; + return this; + } + + public Builder setIcon(int iconResource) { + mIconResource = iconResource; + return this; + } + + public Builder setPreferenceControllerClassName(String controllerClassName) { + mPrefControllerClassName = controllerClassName; + return this; + } + + public Builder setFragmentName(String fragmentClassName) { + mFragmentClassName = fragmentClassName; + return this; + } + + public Builder setUri(Uri uri) { + mUri = uri; + return this; + } + + public SliceData build() { + if (TextUtils.isEmpty(mKey)) { + throw new IllegalStateException("Key cannot be empty"); + } + + if (TextUtils.isEmpty(mTitle)) { + throw new IllegalStateException("Title cannot be empty"); + } + + if (TextUtils.isEmpty(mFragmentClassName)) { + throw new IllegalStateException("Fragment Name cannot be empty"); + } + + if (TextUtils.isEmpty(mPrefControllerClassName)) { + throw new IllegalStateException("Preference Controller cannot be empty"); + } + + if (mUri == null) { + throw new IllegalStateException("Uri cannot be null"); + } + + return new SliceData(this); + } + + public String getKey() { + return mKey; + } + } + +} \ No newline at end of file diff --git a/src/com/android/settings/slices/SlicesDatabaseHelper.java b/src/com/android/settings/slices/SlicesDatabaseHelper.java new file mode 100644 index 00000000000..a74fc812d61 --- /dev/null +++ b/src/com/android/settings/slices/SlicesDatabaseHelper.java @@ -0,0 +1,122 @@ +package com.android.settings.slices; + +import android.content.Context; + +import android.database.sqlite.SQLiteDatabase; +import android.database.sqlite.SQLiteOpenHelper; +import android.util.Log; + +import com.android.internal.annotations.VisibleForTesting; + +/** + * Defines the schema for the Slices database. + */ +public class SlicesDatabaseHelper extends SQLiteOpenHelper { + + private static final String TAG = "SlicesDatabaseHelper"; + + private static final String DATABASE_NAME = "slices_index.db"; + private static final String SHARED_PREFS_TAG = "slices_shared_prefs"; + + private static final int DATABASE_VERSION = 1; + + public interface Tables { + String TABLE_SLICES_INDEX = "slices_index"; + } + + public interface IndexColumns { + /** + * Primary key of the DB. Preference key from preference controllers. + */ + String KEY = "key"; + + /** + * Title of the Setting. + */ + String TITLE = "title"; + + /** + * Summary / Subtitle for the setting. + */ + String SUBTITLE = "subtitle"; + + /** + * Title of the Setting screen on which the Setting lives. + */ + String SCREENTITLE = "screentitle"; + + /** + * Resource ID for the icon of the setting. Should be 0 for no icon. + */ + String ICON_RESOURCE = "icon"; + + /** + * Classname of the fragment name of the page that hosts the setting. + */ + String FRAGMENT = "fragment"; + + /** + * Class name of the controller backing the setting. Must be a + * {@link com.android.settings.core.BasePreferenceController}. + */ + String CONTROLLER = "controller"; + } + + private static final String CREATE_SLICES_TABLE = + "CREATE VIRTUAL TABLE " + Tables.TABLE_SLICES_INDEX + " USING fts4" + + "(" + + IndexColumns.KEY + + ", " + + IndexColumns.TITLE + + ", " + + IndexColumns.SUBTITLE + + ", " + + IndexColumns.SCREENTITLE + + ", " + + IndexColumns.ICON_RESOURCE + + ", " + + IndexColumns.FRAGMENT + + ", " + + IndexColumns.CONTROLLER + + ");"; + + private final Context mContext; + + public SlicesDatabaseHelper(Context context) { + super(context, DATABASE_NAME, null /* CursorFactor */, DATABASE_VERSION); + mContext = context; + } + + @Override + public void onCreate(SQLiteDatabase db) { + createDatabases(db); + } + + @Override + public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { + if (oldVersion < DATABASE_VERSION) { + Log.d(TAG, "Reconstructing DB from " + oldVersion + "to " + newVersion); + reconstruct(db); + } + } + + @VisibleForTesting + void reconstruct(SQLiteDatabase db) { + mContext.getSharedPreferences(SHARED_PREFS_TAG, Context.MODE_PRIVATE) + .edit() + .clear() + .commit(); + dropTables(db); + createDatabases(db); + } + + private void createDatabases(SQLiteDatabase db) { + db.execSQL(CREATE_SLICES_TABLE); + Log.d(TAG, "Created databases"); + } + + + private void dropTables(SQLiteDatabase db) { + db.execSQL("DROP TABLE IF EXISTS " + Tables.TABLE_SLICES_INDEX); + } +} \ No newline at end of file diff --git a/tests/robotests/src/com/android/settings/search/SearchIndexProviderCodeInspector.java b/tests/robotests/src/com/android/settings/search/SearchIndexProviderCodeInspector.java index a8372d93d26..f84f9a2240d 100644 --- a/tests/robotests/src/com/android/settings/search/SearchIndexProviderCodeInspector.java +++ b/tests/robotests/src/com/android/settings/search/SearchIndexProviderCodeInspector.java @@ -43,13 +43,13 @@ public class SearchIndexProviderCodeInspector extends CodeInspector { "SettingsPreferenceFragment should implement Indexable, but these do not:\n"; private static final String NOT_CONTAINING_PROVIDER_OBJECT_ERROR = "Indexable should have public field " - + DatabaseIndexingManager.FIELD_NAME_SEARCH_INDEX_DATA_PROVIDER + + DatabaseIndexingUtils.FIELD_NAME_SEARCH_INDEX_DATA_PROVIDER + " but these are not:\n"; private static final String NOT_SHARING_PREF_CONTROLLERS_BETWEEN_FRAG_AND_PROVIDER = "DashboardFragment should share pref controllers with its SearchIndexProvider, but " + " these are not: \n"; private static final String NOT_IN_INDEXABLE_PROVIDER_REGISTRY = - "Class containing " + DatabaseIndexingManager.FIELD_NAME_SEARCH_INDEX_DATA_PROVIDER + "Class containing " + DatabaseIndexingUtils.FIELD_NAME_SEARCH_INDEX_DATA_PROVIDER + " must be added to " + SearchIndexableResources.class.getName() + " but these are not: \n"; private static final String NOT_PROVIDING_VALID_RESOURCE_ERROR = @@ -173,7 +173,7 @@ public class SearchIndexProviderCodeInspector extends CodeInspector { private boolean hasSearchIndexProvider(Class clazz) { try { final Field f = clazz.getField( - DatabaseIndexingManager.FIELD_NAME_SEARCH_INDEX_DATA_PROVIDER); + DatabaseIndexingUtils.FIELD_NAME_SEARCH_INDEX_DATA_PROVIDER); return f != null; } catch (NoClassDefFoundError e) { // Cannot find class def, ignore diff --git a/tests/robotests/src/com/android/settings/slices/SliceDataTest.java b/tests/robotests/src/com/android/settings/slices/SliceDataTest.java new file mode 100644 index 00000000000..0e4accabe5e --- /dev/null +++ b/tests/robotests/src/com/android/settings/slices/SliceDataTest.java @@ -0,0 +1,269 @@ +/* + * Copyright (C) 2017 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settings.slices; + + +import static com.google.common.truth.Truth.assertThat; + +import android.net.Uri; + +import com.android.settings.TestConfig; +import com.android.settings.testutils.SettingsRobolectricTestRunner; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.robolectric.annotation.Config; + +@RunWith(SettingsRobolectricTestRunner.class) +@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) +public class SliceDataTest { + + private final String KEY = "KEY"; + private final String TITLE = "title"; + private final String SUMMARY = "summary"; + private final String SCREEN_TITLE = "screen title"; + private final String FRAGMENT_NAME = "fragment name"; + private final int ICON = 1234; // I declare a thumb war + private final Uri URI = Uri.parse("content://com.android.settings.slices/test"); + private final String PREF_CONTROLLER = "com.android.settings.slices.tester"; + + @Test + public void testBuilder_buildsMatchingObject() { + SliceData.Builder builder = new SliceData.Builder() + .setKey(KEY) + .setTitle(TITLE) + .setSummary(SUMMARY) + .setScreenTitle(SCREEN_TITLE) + .setIcon(ICON) + .setFragmentName(FRAGMENT_NAME) + .setUri(URI) + .setPreferenceControllerClassName(PREF_CONTROLLER); + + SliceData data = builder.build(); + + assertThat(data.getKey()).isEqualTo(KEY); + assertThat(data.getTitle()).isEqualTo(TITLE); + assertThat(data.getSummary()).isEqualTo(SUMMARY); + assertThat(data.getScreenTitle()).isEqualTo(SCREEN_TITLE); + assertThat(data.getIconResource()).isEqualTo(ICON); + assertThat(data.getFragmentClassName()).isEqualTo(FRAGMENT_NAME); + assertThat(data.getUri()).isEqualTo(URI); + assertThat(data.getPreferenceController()).isEqualTo(PREF_CONTROLLER); + } + + @Test(expected = IllegalStateException.class) + public void testBuilder_noKey_throwsIllegalStateException() { + new SliceData.Builder() + .setTitle(TITLE) + .setSummary(SUMMARY) + .setScreenTitle(SCREEN_TITLE) + .setIcon(ICON) + .setFragmentName(FRAGMENT_NAME) + .setUri(URI) + .setPreferenceControllerClassName(PREF_CONTROLLER) + .build(); + } + + @Test(expected = IllegalStateException.class) + public void testBuilder_noTitle_throwsIllegalStateException() { + new SliceData.Builder() + .setKey(KEY) + .setSummary(SUMMARY) + .setScreenTitle(SCREEN_TITLE) + .setIcon(ICON) + .setFragmentName(FRAGMENT_NAME) + .setUri(URI) + .setPreferenceControllerClassName(PREF_CONTROLLER) + .build(); + } + + @Test(expected = IllegalStateException.class) + public void testBuilder_noFragment_throwsIllegalStateException() { + new SliceData.Builder() + .setKey(KEY) + .setFragmentName(FRAGMENT_NAME) + .setSummary(SUMMARY) + .setScreenTitle(SCREEN_TITLE) + .setIcon(ICON) + .setUri(URI) + .setPreferenceControllerClassName(PREF_CONTROLLER) + .build(); + } + + @Test(expected = IllegalStateException.class) + public void testBuilder_noUri_throwsIllegalStateException() { + new SliceData.Builder() + .setKey(KEY) + .setTitle(TITLE) + .setSummary(SUMMARY) + .setScreenTitle(SCREEN_TITLE) + .setIcon(ICON) + .setFragmentName(FRAGMENT_NAME) + .setPreferenceControllerClassName(PREF_CONTROLLER) + .build(); + } + + @Test(expected = IllegalStateException.class) + public void testBuilder_noPrefController_throwsIllegalStateException() { + new SliceData.Builder() + .setKey(KEY) + .setTitle(TITLE) + .setSummary(SUMMARY) + .setScreenTitle(SCREEN_TITLE) + .setIcon(ICON) + .setUri(URI) + .setFragmentName(FRAGMENT_NAME) + .build(); + } + + @Test + public void testBuilder_noSubtitle_buildsMatchingObject() { + SliceData.Builder builder = new SliceData.Builder() + .setKey(KEY) + .setTitle(TITLE) + .setScreenTitle(SCREEN_TITLE) + .setIcon(ICON) + .setFragmentName(FRAGMENT_NAME) + .setUri(URI) + .setPreferenceControllerClassName(PREF_CONTROLLER); + + SliceData data = builder.build(); + + assertThat(data.getKey()).isEqualTo(KEY); + assertThat(data.getTitle()).isEqualTo(TITLE); + assertThat(data.getSummary()).isNull(); + assertThat(data.getScreenTitle()).isEqualTo(SCREEN_TITLE); + assertThat(data.getIconResource()).isEqualTo(ICON); + assertThat(data.getFragmentClassName()).isEqualTo(FRAGMENT_NAME); + assertThat(data.getUri()).isEqualTo(URI); + assertThat(data.getPreferenceController()).isEqualTo(PREF_CONTROLLER); + } + + @Test + public void testBuilder_noScreenTitle_buildsMatchingObject() { + SliceData.Builder builder = new SliceData.Builder() + .setKey(KEY) + .setTitle(TITLE) + .setSummary(SUMMARY) + .setIcon(ICON) + .setFragmentName(FRAGMENT_NAME) + .setUri(URI) + .setPreferenceControllerClassName(PREF_CONTROLLER); + + SliceData data = builder.build(); + + assertThat(data.getKey()).isEqualTo(KEY); + assertThat(data.getTitle()).isEqualTo(TITLE); + assertThat(data.getSummary()).isEqualTo(SUMMARY); + assertThat(data.getScreenTitle()).isNull(); + assertThat(data.getIconResource()).isEqualTo(ICON); + assertThat(data.getFragmentClassName()).isEqualTo(FRAGMENT_NAME); + assertThat(data.getUri()).isEqualTo(URI); + assertThat(data.getPreferenceController()).isEqualTo(PREF_CONTROLLER); + } + + @Test + public void testBuilder_noIcon_buildsMatchingObject() { + SliceData.Builder builder = new SliceData.Builder() + .setKey(KEY) + .setTitle(TITLE) + .setSummary(SUMMARY) + .setScreenTitle(SCREEN_TITLE) + .setFragmentName(FRAGMENT_NAME) + .setUri(URI) + .setPreferenceControllerClassName(PREF_CONTROLLER); + + SliceData data = builder.build(); + + assertThat(data.getKey()).isEqualTo(KEY); + assertThat(data.getTitle()).isEqualTo(TITLE); + assertThat(data.getSummary()).isEqualTo(SUMMARY); + assertThat(data.getScreenTitle()).isEqualTo(SCREEN_TITLE); + assertThat(data.getIconResource()).isEqualTo(0); + assertThat(data.getFragmentClassName()).isEqualTo(FRAGMENT_NAME); + assertThat(data.getUri()).isEqualTo(URI); + assertThat(data.getPreferenceController()).isEqualTo(PREF_CONTROLLER); + } + + @Test + public void testEquality_identicalObjects() { + SliceData.Builder builder = new SliceData.Builder() + .setKey(KEY) + .setTitle(TITLE) + .setSummary(SUMMARY) + .setScreenTitle(SCREEN_TITLE) + .setIcon(ICON) + .setFragmentName(FRAGMENT_NAME) + .setUri(URI) + .setPreferenceControllerClassName(PREF_CONTROLLER); + + SliceData dataOne = builder.build(); + SliceData dataTwo = builder.build(); + + assertThat(dataOne.hashCode()).isEqualTo(dataTwo.hashCode()); + assertThat(dataOne).isEqualTo(dataTwo); + } + + @Test + public void testEquality_matchingKey_EqualObjects() { + SliceData.Builder builder = new SliceData.Builder() + .setKey(KEY) + .setTitle(TITLE) + .setSummary(SUMMARY) + .setScreenTitle(SCREEN_TITLE) + .setIcon(ICON) + .setFragmentName(FRAGMENT_NAME) + .setUri(URI) + .setPreferenceControllerClassName(PREF_CONTROLLER); + + SliceData dataOne = builder.build(); + + builder.setTitle(TITLE + " diff") + .setSummary(SUMMARY + " diff") + .setScreenTitle(SCREEN_TITLE + " diff") + .setIcon(ICON + 1) + .setFragmentName(FRAGMENT_NAME + " diff") + .setUri(URI) + .setPreferenceControllerClassName(PREF_CONTROLLER + " diff"); + + SliceData dataTwo = builder.build(); + + assertThat(dataOne.hashCode()).isEqualTo(dataTwo.hashCode()); + assertThat(dataOne).isEqualTo(dataTwo); + } + + @Test + public void testEquality_differentKey_differentObjects() { + SliceData.Builder builder = new SliceData.Builder() + .setKey(KEY) + .setTitle(TITLE) + .setSummary(SUMMARY) + .setScreenTitle(SCREEN_TITLE) + .setIcon(ICON) + .setFragmentName(FRAGMENT_NAME) + .setUri(URI) + .setPreferenceControllerClassName(PREF_CONTROLLER); + + SliceData dataOne = builder.build(); + + builder.setKey("not key"); + SliceData dataTwo = builder.build(); + + assertThat(dataOne.hashCode()).isNotEqualTo(dataTwo.hashCode()); + assertThat(dataOne).isNotEqualTo(dataTwo); + } +} diff --git a/tests/robotests/src/com/android/settings/slices/SlicesDatabaseHelperTest.java b/tests/robotests/src/com/android/settings/slices/SlicesDatabaseHelperTest.java new file mode 100644 index 00000000000..a4020dd3d31 --- /dev/null +++ b/tests/robotests/src/com/android/settings/slices/SlicesDatabaseHelperTest.java @@ -0,0 +1,87 @@ +package com.android.settings.slices; + +import static com.google.common.truth.Truth.assertThat; + +import android.content.ContentValues; +import android.content.Context; +import android.database.Cursor; +import android.database.sqlite.SQLiteDatabase; + +import com.android.settings.TestConfig; +import com.android.settings.slices.SlicesDatabaseHelper.IndexColumns; +import com.android.settings.testutils.DatabaseTestUtils; +import com.android.settings.testutils.SettingsRobolectricTestRunner; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.robolectric.RuntimeEnvironment; +import org.robolectric.annotation.Config; + +@RunWith(SettingsRobolectricTestRunner.class) +@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) +public class SlicesDatabaseHelperTest { + + private Context mContext; + private SlicesDatabaseHelper mSlicesDatabaseHelper; + private SQLiteDatabase mDatabase; + + @Before + public void setUp() { + mContext = RuntimeEnvironment.application; + mSlicesDatabaseHelper = new SlicesDatabaseHelper(mContext); + mDatabase = mSlicesDatabaseHelper.getWritableDatabase(); + } + + @After + public void cleanUp() { + DatabaseTestUtils.clearDb(mContext); + } + + @Test + public void testDatabaseSchema() { + Cursor cursor = mDatabase.rawQuery("SELECT * FROM slices_index", null); + String[] columnNames = cursor.getColumnNames(); + + String[] expectedNames = new String[]{ + IndexColumns.KEY, + IndexColumns.TITLE, + IndexColumns.SUBTITLE, + IndexColumns.SCREENTITLE, + IndexColumns.ICON_RESOURCE, + IndexColumns.FRAGMENT, + IndexColumns.CONTROLLER + }; + + assertThat(columnNames).isEqualTo(expectedNames); + } + + @Test + public void testUpgrade_dropsOldData() { + ContentValues dummyValues = getDummyRow(); + + mDatabase.replaceOrThrow(SlicesDatabaseHelper.Tables.TABLE_SLICES_INDEX, null, dummyValues); + Cursor baseline = mDatabase.rawQuery("SELECT * FROM slices_index", null); + assertThat(baseline.getCount()).isEqualTo(1); + + mSlicesDatabaseHelper.onUpgrade(mDatabase, 0, 1); + + Cursor newCursor = mDatabase.rawQuery("SELECT * FROM slices_index", null); + assertThat(newCursor.getCount()).isEqualTo(0); + } + + private ContentValues getDummyRow() { + ContentValues values; + + values = new ContentValues(); + values.put(IndexColumns.KEY, "key"); + values.put(IndexColumns.TITLE, "title"); + values.put(IndexColumns.SUBTITLE, "subtitle"); + values.put(IndexColumns.ICON_RESOURCE, 99); + values.put(IndexColumns.FRAGMENT, "fragmentClassName"); + values.put(IndexColumns.CONTROLLER, "preferenceController"); + + return values; + } +} From 69294a5d5ce2dd4f7552daa13e6d9f42e58451d3 Mon Sep 17 00:00:00 2001 From: Beverly Date: Wed, 13 Dec 2017 15:08:30 -0500 Subject: [PATCH 10/11] Simplify DND Behavior secondary text Bug: 63077372 Change-Id: I0ac305ff429de27a65667441703b938305d8a03f Fixes: 70627215 Test: make ROBOTEST_FILTER=ZenModeSettingsTest RunSettingsRoboTests -j40 --- res/values/strings.xml | 18 ++++++--- res/xml/zen_mode_behavior_settings.xml | 3 +- .../notification/ZenModeSettings.java | 20 +++++----- .../notification/ZenModeSettingsTest.java | 38 +++++++++++++------ 4 files changed, 49 insertions(+), 30 deletions(-) diff --git a/res/values/strings.xml b/res/values/strings.xml index 7331d7265f7..35962796d3a 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -6726,14 +6726,14 @@ No sound - - No sound (Total Silence) + + Total Silence No sound except %1$s - - No sound except alarms, media and system feedback (Alarms only) + + No sound except alarms and media Turn on automatically @@ -7313,8 +7313,11 @@ Alarms - - Media and system feedback + + Media + + + Includes system feedback Reminders @@ -7334,6 +7337,9 @@ If the same person calls a second time within a %d minute period + + Custom + Automatically turn on diff --git a/res/xml/zen_mode_behavior_settings.xml b/res/xml/zen_mode_behavior_settings.xml index c0849daaf48..6aeebe69a9b 100644 --- a/res/xml/zen_mode_behavior_settings.xml +++ b/res/xml/zen_mode_behavior_settings.xml @@ -34,7 +34,8 @@ + android:title="@string/zen_mode_media_system_other" + android:summary="@string/zen_mode_media_system_other_secondary_text"/> Date: Wed, 13 Dec 2017 14:12:27 -0800 Subject: [PATCH 11/11] Add preference controller for app action buttons. - move code related to initializing/refreshing the action buttons from AppInfoDashboardFragment into a new controller. Bug: 69384089 Test: make RunSettingsRoboTests Change-Id: I8eb5f42a1b6d3c35f5a9e1356a9e5e31f643d5d3 --- .../AppActionButtonPreferenceController.java | 318 +++++++++++++++++ .../appinfo/AppInfoDashboardFragment.java | 232 +------------ ...pActionButtonPreferenceControllerTest.java | 320 ++++++++++++++++++ .../appinfo/AppInfoDashboardFragmentTest.java | 169 +-------- 4 files changed, 647 insertions(+), 392 deletions(-) create mode 100644 src/com/android/settings/applications/appinfo/AppActionButtonPreferenceController.java create mode 100644 tests/robotests/src/com/android/settings/applications/appinfo/AppActionButtonPreferenceControllerTest.java diff --git a/src/com/android/settings/applications/appinfo/AppActionButtonPreferenceController.java b/src/com/android/settings/applications/appinfo/AppActionButtonPreferenceController.java new file mode 100644 index 00000000000..b10d06c9b55 --- /dev/null +++ b/src/com/android/settings/applications/appinfo/AppActionButtonPreferenceController.java @@ -0,0 +1,318 @@ +/* + * Copyright (C) 2017 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settings.applications.appinfo; + +import android.app.Activity; +import android.app.ActivityManager; +import android.app.admin.DevicePolicyManager; +import android.content.BroadcastReceiver; +import android.content.ComponentName; +import android.content.Context; +import android.content.Intent; +import android.content.pm.ApplicationInfo; +import android.content.pm.PackageInfo; +import android.content.pm.PackageManager; +import android.content.pm.ResolveInfo; +import android.net.Uri; +import android.os.Bundle; +import android.os.RemoteException; +import android.os.ServiceManager; +import android.os.UserHandle; +import android.os.UserManager; +import android.support.annotation.VisibleForTesting; +import android.support.v7.preference.PreferenceScreen; +import android.util.Log; +import android.webkit.IWebViewUpdateService; + +import com.android.settings.R; +import com.android.settings.Utils; +import com.android.settings.applications.ApplicationFeatureProvider; +import com.android.settings.core.BasePreferenceController; +import com.android.settings.overlay.FeatureFactory; +import com.android.settings.widget.ActionButtonPreference; +import com.android.settings.wrapper.DevicePolicyManagerWrapper; +import com.android.settingslib.RestrictedLockUtils; +import com.android.settingslib.applications.AppUtils; +import com.android.settingslib.applications.ApplicationsState.AppEntry; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; + +public class AppActionButtonPreferenceController extends BasePreferenceController + implements AppInfoDashboardFragment.Callback { + + private static final String TAG = "AppActionButtonControl"; + private static final String KEY_ACTION_BUTTONS = "action_buttons"; + + @VisibleForTesting + ActionButtonPreference mActionButtons; + private final AppInfoDashboardFragment mParent; + private final String mPackageName; + private final HashSet mHomePackages = new HashSet<>(); + private final ApplicationFeatureProvider mApplicationFeatureProvider; + + private int mUserId; + private DevicePolicyManagerWrapper mDpm; + private UserManager mUserManager; + private PackageManager mPm; + + private final BroadcastReceiver mCheckKillProcessesReceiver = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + final boolean enabled = getResultCode() != Activity.RESULT_CANCELED; + Log.d(TAG, "Got broadcast response: Restart status for " + + mParent.getAppEntry().info.packageName + " " + enabled); + updateForceStopButton(enabled); + } + }; + + public AppActionButtonPreferenceController(Context context, AppInfoDashboardFragment parent, + String packageName) { + super(context, KEY_ACTION_BUTTONS); + mParent = parent; + mPackageName = packageName; + mUserId = UserHandle.myUserId(); + mApplicationFeatureProvider = FeatureFactory.getFactory(context) + .getApplicationFeatureProvider(context); + } + + @Override + public int getAvailabilityStatus() { + return AVAILABLE; + } + + @Override + public void displayPreference(PreferenceScreen screen) { + super.displayPreference(screen); + mActionButtons = ((ActionButtonPreference) screen.findPreference(KEY_ACTION_BUTTONS)) + .setButton2Text(R.string.force_stop) + .setButton2Positive(false) + .setButton2Enabled(false); + } + + @Override + public void refreshUi() { + if (mPm == null) { + mPm = mContext.getPackageManager(); + } + if (mDpm == null) { + mDpm = new DevicePolicyManagerWrapper( + (DevicePolicyManager) mContext.getSystemService(Context.DEVICE_POLICY_SERVICE)); + } + if (mUserManager == null) { + mUserManager = (UserManager) mContext.getSystemService(Context.USER_SERVICE); + } + final AppEntry appEntry = mParent.getAppEntry(); + final PackageInfo packageInfo = mParent.getPackageInfo(); + + // Get list of "home" apps and trace through any meta-data references + final List homeActivities = new ArrayList(); + mPm.getHomeActivities(homeActivities); + mHomePackages.clear(); + for (int i = 0; i< homeActivities.size(); i++) { + final ResolveInfo ri = homeActivities.get(i); + final String activityPkg = ri.activityInfo.packageName; + mHomePackages.add(activityPkg); + + // Also make sure to include anything proxying for the home app + final Bundle metadata = ri.activityInfo.metaData; + if (metadata != null) { + final String metaPkg = metadata.getString(ActivityManager.META_HOME_ALTERNATE); + if (signaturesMatch(metaPkg, activityPkg)) { + mHomePackages.add(metaPkg); + } + } + } + + checkForceStop(appEntry, packageInfo); + initUninstallButtons(appEntry, packageInfo); + } + + @VisibleForTesting + void initUninstallButtons(AppEntry appEntry, PackageInfo packageInfo) { + final boolean isBundled = (appEntry.info.flags & ApplicationInfo.FLAG_SYSTEM) != 0; + boolean enabled; + if (isBundled) { + enabled = handleDisableable(appEntry, packageInfo); + } else { + enabled = initUninstallButtonForUserApp(); + } + // If this is a device admin, it can't be uninstalled or disabled. + // We do this here so the text of the button is still set correctly. + if (isBundled && mDpm.packageHasActiveAdmins(packageInfo.packageName)) { + enabled = false; + } + + // We don't allow uninstalling DO/PO on *any* users, because if it's a system app, + // "uninstall" is actually "downgrade to the system version + disable", and "downgrade" + // will clear data on all users. + if (Utils.isProfileOrDeviceOwner(mUserManager, mDpm, packageInfo.packageName)) { + enabled = false; + } + + // Don't allow uninstalling the device provisioning package. + if (Utils.isDeviceProvisioningPackage(mContext.getResources(), appEntry.info.packageName)) { + enabled = false; + } + + // If the uninstall intent is already queued, disable the uninstall button + if (mDpm.isUninstallInQueue(mPackageName)) { + enabled = false; + } + + // Home apps need special handling. Bundled ones we don't risk downgrading + // because that can interfere with home-key resolution. Furthermore, we + // can't allow uninstallation of the only home app, and we don't want to + // allow uninstallation of an explicitly preferred one -- the user can go + // to Home settings and pick a different one, after which we'll permit + // uninstallation of the now-not-default one. + if (enabled && mHomePackages.contains(packageInfo.packageName)) { + if (isBundled) { + enabled = false; + } else { + ArrayList homeActivities = new ArrayList(); + ComponentName currentDefaultHome = mPm.getHomeActivities(homeActivities); + if (currentDefaultHome == null) { + // No preferred default, so permit uninstall only when + // there is more than one candidate + enabled = (mHomePackages.size() > 1); + } else { + // There is an explicit default home app -- forbid uninstall of + // that one, but permit it for installed-but-inactive ones. + enabled = !packageInfo.packageName.equals(currentDefaultHome.getPackageName()); + } + } + } + + if (RestrictedLockUtils.hasBaseUserRestriction( + mContext, UserManager.DISALLOW_APPS_CONTROL, mUserId)) { + enabled = false; + } + + try { + final IWebViewUpdateService webviewUpdateService = + IWebViewUpdateService.Stub.asInterface( + ServiceManager.getService("webviewupdate")); + if (webviewUpdateService.isFallbackPackage(appEntry.info.packageName)) { + enabled = false; + } + } catch (RemoteException e) { + throw new RuntimeException(e); + } + + mActionButtons.setButton1Enabled(enabled); + if (enabled) { + // Register listener + mActionButtons.setButton1OnClickListener(v -> mParent.handleUninstallButtonClick()); + } + } + + @VisibleForTesting + boolean initUninstallButtonForUserApp() { + boolean enabled = true; + final PackageInfo packageInfo = mParent.getPackageInfo(); + if ((packageInfo.applicationInfo.flags & ApplicationInfo.FLAG_INSTALLED) == 0 + && mUserManager.getUsers().size() >= 2) { + // When we have multiple users, there is a separate menu + // to uninstall for all users. + enabled = false; + } else if (AppUtils.isInstant(packageInfo.applicationInfo)) { + enabled = false; + mActionButtons.setButton1Visible(false); + } + mActionButtons.setButton1Text(R.string.uninstall_text).setButton1Positive(false); + return enabled; + } + + @VisibleForTesting + boolean handleDisableable(AppEntry appEntry, PackageInfo packageInfo) { + boolean disableable = false; + // Try to prevent the user from bricking their phone + // by not allowing disabling of apps signed with the + // system cert and any launcher app in the system. + if (mHomePackages.contains(appEntry.info.packageName) + || Utils.isSystemPackage(mContext.getResources(), mPm, packageInfo)) { + // Disable button for core system applications. + mActionButtons + .setButton1Text(R.string.disable_text) + .setButton1Positive(false); + } else if (appEntry.info.enabled && appEntry.info.enabledSetting + != PackageManager.COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED) { + mActionButtons + .setButton1Text(R.string.disable_text) + .setButton1Positive(false); + disableable = !mApplicationFeatureProvider.getKeepEnabledPackages() + .contains(appEntry.info.packageName); + } else { + mActionButtons + .setButton1Text(R.string.enable_text) + .setButton1Positive(true); + disableable = true; + } + + return disableable; + } + + private void updateForceStopButton(boolean enabled) { + final boolean disallowedBySystem = RestrictedLockUtils.hasBaseUserRestriction( + mContext, UserManager.DISALLOW_APPS_CONTROL, mUserId); + mActionButtons + .setButton2Enabled(disallowedBySystem ? false : enabled) + .setButton2OnClickListener( + disallowedBySystem ? null : v -> mParent.handleForceStopButtonClick()); + } + + void checkForceStop(AppEntry appEntry, PackageInfo packageInfo) { + if (mDpm.packageHasActiveAdmins(packageInfo.packageName)) { + // User can't force stop device admin. + Log.w(TAG, "User can't force stop device admin"); + updateForceStopButton(false); + } else if (AppUtils.isInstant(packageInfo.applicationInfo)) { + updateForceStopButton(false); + mActionButtons.setButton2Visible(false); + } else if ((appEntry.info.flags & ApplicationInfo.FLAG_STOPPED) == 0) { + // If the app isn't explicitly stopped, then always show the + // force stop button. + Log.w(TAG, "App is not explicitly stopped"); + updateForceStopButton(true); + } else { + final Intent intent = new Intent(Intent.ACTION_QUERY_PACKAGE_RESTART, + Uri.fromParts("package", appEntry.info.packageName, null)); + intent.putExtra(Intent.EXTRA_PACKAGES, new String[] { appEntry.info.packageName }); + intent.putExtra(Intent.EXTRA_UID, appEntry.info.uid); + intent.putExtra(Intent.EXTRA_USER_HANDLE, UserHandle.getUserId(appEntry.info.uid)); + Log.d(TAG, "Sending broadcast to query restart status for " + + appEntry.info.packageName); + mContext.sendOrderedBroadcastAsUser(intent, UserHandle.CURRENT, null, + mCheckKillProcessesReceiver, null, Activity.RESULT_CANCELED, null, null); + } + } + + private boolean signaturesMatch(String pkg1, String pkg2) { + if (pkg1 != null && pkg2 != null) { + try { + return mPm.checkSignatures(pkg1, pkg2) >= PackageManager.SIGNATURE_MATCH; + } catch (Exception e) { + // e.g. named alternate package not found during lookup; + // this is an expected case sometimes + } + } + return false; + } + +} diff --git a/src/com/android/settings/applications/appinfo/AppInfoDashboardFragment.java b/src/com/android/settings/applications/appinfo/AppInfoDashboardFragment.java index 0929dad3809..57e2b0c1f84 100755 --- a/src/com/android/settings/applications/appinfo/AppInfoDashboardFragment.java +++ b/src/com/android/settings/applications/appinfo/AppInfoDashboardFragment.java @@ -25,7 +25,6 @@ import android.app.Dialog; import android.app.DialogFragment; import android.app.admin.DevicePolicyManager; import android.content.BroadcastReceiver; -import android.content.ComponentName; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; @@ -34,13 +33,10 @@ import android.content.pm.ApplicationInfo; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; -import android.content.pm.ResolveInfo; import android.content.pm.UserInfo; import android.net.Uri; import android.os.AsyncTask; import android.os.Bundle; -import android.os.RemoteException; -import android.os.ServiceManager; import android.os.UserHandle; import android.os.UserManager; import android.support.annotation.VisibleForTesting; @@ -50,7 +46,6 @@ import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; -import android.webkit.IWebViewUpdateService; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.settings.DeviceAdminAdd; @@ -58,13 +53,10 @@ import com.android.settings.R; import com.android.settings.SettingsActivity; import com.android.settings.SettingsPreferenceFragment; import com.android.settings.Utils; -import com.android.settings.applications.ApplicationFeatureProvider; import com.android.settings.applications.LayoutPreference; import com.android.settings.applications.manageapplications.ManageApplications; import com.android.settings.core.instrumentation.InstrumentedDialogFragment; import com.android.settings.dashboard.DashboardFragment; -import com.android.settings.overlay.FeatureFactory; -import com.android.settings.widget.ActionButtonPreference; import com.android.settings.widget.EntityHeaderController; import com.android.settings.widget.PreferenceCategoryController; import com.android.settings.wrapper.DevicePolicyManagerWrapper; @@ -78,7 +70,6 @@ import com.android.settingslib.core.lifecycle.Lifecycle; import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.Arrays; -import java.util.HashSet; import java.util.List; /** @@ -115,8 +106,8 @@ public class AppInfoDashboardFragment extends DashboardFragment private static final int DLG_FORCE_STOP = DLG_BASE + 1; private static final int DLG_DISABLE = DLG_BASE + 2; private static final int DLG_SPECIAL_DISABLE = DLG_BASE + 3; + private static final String KEY_HEADER = "header_view"; - private static final String KEY_ACTION_BUTTONS = "action_buttons"; private static final String KEY_ADVANCED_APP_INFO_CATEGORY = "advanced_app_info"; public static final String ARG_PACKAGE_NAME = "package"; @@ -127,7 +118,6 @@ public class AppInfoDashboardFragment extends DashboardFragment private EnforcedAdmin mAppsControlDisallowedAdmin; private boolean mAppsControlDisallowedBySystem; - private ApplicationFeatureProvider mApplicationFeatureProvider; private ApplicationsState mState; private ApplicationsState.Session mSession; private ApplicationsState.AppEntry mAppEntry; @@ -143,8 +133,6 @@ public class AppInfoDashboardFragment extends DashboardFragment private boolean mListeningToPackageRemove; - private final HashSet mHomePackages = new HashSet<>(); - private boolean mInitialized; private boolean mShowUninstalled; private LayoutPreference mHeader; @@ -153,10 +141,8 @@ public class AppInfoDashboardFragment extends DashboardFragment private List mCallbacks = new ArrayList<>(); - @VisibleForTesting - ActionButtonPreference mActionButtons; - private InstantAppButtonsPreferenceController mInstantAppButtonPreferenceController; + private AppActionButtonPreferenceController mAppActionButtonPreferenceController; /** * Callback to invoke when app info has been changed. @@ -165,139 +151,17 @@ public class AppInfoDashboardFragment extends DashboardFragment void refreshUi(); } - @VisibleForTesting - boolean handleDisableable() { - boolean disableable = false; - // Try to prevent the user from bricking their phone - // by not allowing disabling of apps signed with the - // system cert and any launcher app in the system. - if (mHomePackages.contains(mAppEntry.info.packageName) - || Utils.isSystemPackage(getContext().getResources(), mPm, mPackageInfo)) { - // Disable button for core system applications. - mActionButtons - .setButton1Text(R.string.disable_text) - .setButton1Positive(false); - } else if (mAppEntry.info.enabled && !isDisabledUntilUsed()) { - mActionButtons - .setButton1Text(R.string.disable_text) - .setButton1Positive(false); - disableable = !mApplicationFeatureProvider.getKeepEnabledPackages() - .contains(mAppEntry.info.packageName); - } else { - mActionButtons - .setButton1Text(R.string.enable_text) - .setButton1Positive(true); - disableable = true; - } - - return disableable; - } - private boolean isDisabledUntilUsed() { return mAppEntry.info.enabledSetting == PackageManager.COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED; } - private void initUninstallButtons() { - final boolean isBundled = (mAppEntry.info.flags & ApplicationInfo.FLAG_SYSTEM) != 0; - boolean enabled; - if (isBundled) { - enabled = handleDisableable(); - } else { - enabled = initUninstallButtonForUserApp(); - } - // If this is a device admin, it can't be uninstalled or disabled. - // We do this here so the text of the button is still set correctly. - if (isBundled && mDpm.packageHasActiveAdmins(mPackageInfo.packageName)) { - enabled = false; - } - - // We don't allow uninstalling DO/PO on *any* users, because if it's a system app, - // "uninstall" is actually "downgrade to the system version + disable", and "downgrade" - // will clear data on all users. - if (Utils.isProfileOrDeviceOwner(mUserManager, mDpm, mPackageInfo.packageName)) { - enabled = false; - } - - // Don't allow uninstalling the device provisioning package. - if (Utils.isDeviceProvisioningPackage(getResources(), mAppEntry.info.packageName)) { - enabled = false; - } - - // If the uninstall intent is already queued, disable the uninstall button - if (mDpm.isUninstallInQueue(mPackageName)) { - enabled = false; - } - - // Home apps need special handling. Bundled ones we don't risk downgrading - // because that can interfere with home-key resolution. Furthermore, we - // can't allow uninstallation of the only home app, and we don't want to - // allow uninstallation of an explicitly preferred one -- the user can go - // to Home settings and pick a different one, after which we'll permit - // uninstallation of the now-not-default one. - if (enabled && mHomePackages.contains(mPackageInfo.packageName)) { - if (isBundled) { - enabled = false; - } else { - ArrayList homeActivities = new ArrayList(); - ComponentName currentDefaultHome = mPm.getHomeActivities(homeActivities); - if (currentDefaultHome == null) { - // No preferred default, so permit uninstall only when - // there is more than one candidate - enabled = (mHomePackages.size() > 1); - } else { - // There is an explicit default home app -- forbid uninstall of - // that one, but permit it for installed-but-inactive ones. - enabled = !mPackageInfo.packageName.equals(currentDefaultHome.getPackageName()); - } - } - } - - if (mAppsControlDisallowedBySystem) { - enabled = false; - } - - try { - final IWebViewUpdateService webviewUpdateService = - IWebViewUpdateService.Stub.asInterface(ServiceManager.getService("webviewupdate")); - if (webviewUpdateService.isFallbackPackage(mAppEntry.info.packageName)) { - enabled = false; - } - } catch (RemoteException e) { - throw new RuntimeException(e); - } - - mActionButtons.setButton1Enabled(enabled); - if (enabled) { - // Register listener - mActionButtons.setButton1OnClickListener(v -> handleUninstallButtonClick()); - } - } - - @VisibleForTesting - boolean initUninstallButtonForUserApp() { - boolean enabled = true; - if ((mPackageInfo.applicationInfo.flags & ApplicationInfo.FLAG_INSTALLED) == 0 - && mUserManager.getUsers().size() >= 2) { - // When we have multiple users, there is a separate menu - // to uninstall for all users. - enabled = false; - } else if (AppUtils.isInstant(mPackageInfo.applicationInfo)) { - enabled = false; - mActionButtons.setButton1Visible(false); - } - mActionButtons.setButton1Text(R.string.uninstall_text).setButton1Positive(false); - return enabled; - } - /** Called when the activity is first created. */ @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); mFinishing = false; final Activity activity = getActivity(); - mApplicationFeatureProvider = FeatureFactory.getFactory(activity) - .getApplicationFeatureProvider(activity); mDpm = new DevicePolicyManagerWrapper( (DevicePolicyManager) activity.getSystemService(Context.DEVICE_POLICY_SERVICE)); mUserManager = (UserManager) activity.getSystemService(Context.USER_SERVICE); @@ -359,6 +223,9 @@ public class AppInfoDashboardFragment extends DashboardFragment final AppInstallerInfoPreferenceController appInstallerInfoPreferenceController = new AppInstallerInfoPreferenceController(context, this, packageName); controllers.add(appInstallerInfoPreferenceController); + mAppActionButtonPreferenceController = + new AppActionButtonPreferenceController(context, this, packageName); + controllers.add(mAppActionButtonPreferenceController); for (AbstractPreferenceController controller : controllers) { mCallbacks.add((Callback) controller); @@ -416,10 +283,6 @@ public class AppInfoDashboardFragment extends DashboardFragment } final Activity activity = getActivity(); mHeader = (LayoutPreference) findPreference(KEY_HEADER); - mActionButtons = ((ActionButtonPreference) findPreference(KEY_ACTION_BUTTONS)) - .setButton2Text(R.string.force_stop) - .setButton2Positive(false) - .setButton2Enabled(false); EntityHeaderController.newInstance(activity, this, mHeader.findViewById(R.id.entity_header)) .setRecyclerView(getListView(), getLifecycle()) .setPackageName(mPackageName) @@ -559,21 +422,6 @@ public class AppInfoDashboardFragment extends DashboardFragment return showIt; } - private boolean signaturesMatch(String pkg1, String pkg2) { - if (pkg1 != null && pkg2 != null) { - try { - final int match = mPm.checkSignatures(pkg1, pkg2); - if (match >= PackageManager.SIGNATURE_MATCH) { - return true; - } - } catch (Exception e) { - // e.g. named alternate package not found during lookup; - // this is an expected case sometimes - } - } - return false; - } - @VisibleForTesting boolean refreshUi() { retrieveAppEntry(); @@ -585,28 +433,8 @@ public class AppInfoDashboardFragment extends DashboardFragment return false; // onCreate must have failed, make sure to exit } - // Get list of "home" apps and trace through any meta-data references - final List homeActivities = new ArrayList(); - mPm.getHomeActivities(homeActivities); - mHomePackages.clear(); - for (int i = 0; i< homeActivities.size(); i++) { - final ResolveInfo ri = homeActivities.get(i); - final String activityPkg = ri.activityInfo.packageName; - mHomePackages.add(activityPkg); - // Also make sure to include anything proxying for the home app - final Bundle metadata = ri.activityInfo.metaData; - if (metadata != null) { - final String metaPkg = metadata.getString(ActivityManager.META_HOME_ALTERNATE); - if (signaturesMatch(metaPkg, activityPkg)) { - mHomePackages.add(metaPkg); - } - } - } - - checkForceStop(); setAppLabelAndIcon(mPackageInfo); - initUninstallButtons(); // Update the preference summaries. final Activity context = getActivity(); @@ -714,41 +542,7 @@ public class AppInfoDashboardFragment extends DashboardFragment if (newEnt != null) { mAppEntry = newEnt; } - checkForceStop(); - } - - private void updateForceStopButton(boolean enabled) { - mActionButtons - .setButton2Enabled(mAppsControlDisallowedBySystem ? false : enabled) - .setButton2OnClickListener(mAppsControlDisallowedBySystem - ? null : v -> handleForceStopButtonClick()); - } - - @VisibleForTesting - void checkForceStop() { - if (mDpm.packageHasActiveAdmins(mPackageInfo.packageName)) { - // User can't force stop device admin. - Log.w(TAG, "User can't force stop device admin"); - updateForceStopButton(false); - } else if (AppUtils.isInstant(mPackageInfo.applicationInfo)) { - updateForceStopButton(false); - mActionButtons.setButton2Visible(false); - } else if ((mAppEntry.info.flags & ApplicationInfo.FLAG_STOPPED) == 0) { - // If the app isn't explicitly stopped, then always show the - // force stop button. - Log.w(TAG, "App is not explicitly stopped"); - updateForceStopButton(true); - } else { - final Intent intent = new Intent(Intent.ACTION_QUERY_PACKAGE_RESTART, - Uri.fromParts("package", mAppEntry.info.packageName, null)); - intent.putExtra(Intent.EXTRA_PACKAGES, new String[] { mAppEntry.info.packageName }); - intent.putExtra(Intent.EXTRA_UID, mAppEntry.info.uid); - intent.putExtra(Intent.EXTRA_USER_HANDLE, UserHandle.getUserId(mAppEntry.info.uid)); - Log.d(TAG, "Sending broadcast to query restart status for " - + mAppEntry.info.packageName); - getActivity().sendOrderedBroadcastAsUser(intent, UserHandle.CURRENT, null, - mCheckKillProcessesReceiver, null, Activity.RESULT_CANCELED, null, null); - } + mAppActionButtonPreferenceController.checkForceStop(mAppEntry, mPackageInfo); } public static void startAppInfoFragment(Class fragment, int title, @@ -763,7 +557,7 @@ public class AppInfoDashboardFragment extends DashboardFragment SUB_INFO_FRAGMENT); } - private void handleUninstallButtonClick() { + void handleUninstallButtonClick() { if (mAppEntry == null) { setIntentAndFinish(true, true); return; @@ -811,7 +605,7 @@ public class AppInfoDashboardFragment extends DashboardFragment } } - private void handleForceStopButtonClick() { + void handleForceStopButtonClick() { if (mAppEntry == null) { setIntentAndFinish(true, true); return; @@ -877,16 +671,6 @@ public class AppInfoDashboardFragment extends DashboardFragment } } - private final BroadcastReceiver mCheckKillProcessesReceiver = new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - final boolean enabled = getResultCode() != Activity.RESULT_CANCELED; - Log.d(TAG, "Got broadcast response: Restart status for " - + mAppEntry.info.packageName + " " + enabled); - updateForceStopButton(enabled); - } - }; - private String getPackageName() { if (mPackageName != null) { return mPackageName; diff --git a/tests/robotests/src/com/android/settings/applications/appinfo/AppActionButtonPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/applications/appinfo/AppActionButtonPreferenceControllerTest.java new file mode 100644 index 00000000000..17b7a2299af --- /dev/null +++ b/tests/robotests/src/com/android/settings/applications/appinfo/AppActionButtonPreferenceControllerTest.java @@ -0,0 +1,320 @@ +/* + * Copyright (C) 2017 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settings.applications.appinfo; + +import static com.google.common.truth.Truth.assertThat; + +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyInt; +import static org.mockito.ArgumentMatchers.argThat; +import static org.mockito.ArgumentMatchers.nullable; +import static org.mockito.Mockito.doNothing; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.pm.ApplicationInfo; +import android.content.pm.PackageInfo; +import android.content.pm.PackageManager; +import android.content.pm.UserInfo; +import android.content.res.Resources; +import android.os.Bundle; +import android.os.Handler; +import android.os.UserHandle; +import android.os.UserManager; +import android.support.v7.preference.PreferenceScreen; + +import com.android.settings.R; +import com.android.settings.TestConfig; +import com.android.settings.testutils.FakeFeatureFactory; +import com.android.settings.testutils.SettingsRobolectricTestRunner; +import com.android.settings.widget.ActionButtonPreference; +import com.android.settings.widget.ActionButtonPreferenceTest; +import com.android.settings.wrapper.DevicePolicyManagerWrapper; +import com.android.settingslib.Utils; +import com.android.settingslib.applications.AppUtils; +import com.android.settingslib.applications.ApplicationsState; +import com.android.settingslib.applications.instantapps.InstantAppDataProvider; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.robolectric.RuntimeEnvironment; +import org.robolectric.annotation.Config; +import org.robolectric.annotation.Implementation; +import org.robolectric.annotation.Implements; +import org.robolectric.util.ReflectionHelpers; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; + +@RunWith(SettingsRobolectricTestRunner.class) +@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) +public class AppActionButtonPreferenceControllerTest { + + @Mock + private UserManager mUserManager; + @Mock + private DevicePolicyManagerWrapper mDevicePolicyManager; + @Mock + private AppInfoDashboardFragment mFragment; + + private Context mContext; + private AppActionButtonPreferenceController mController; + private FakeFeatureFactory mFeatureFactory; + + @Before + public void setUp() { + MockitoAnnotations.initMocks(this); + mFeatureFactory = FakeFeatureFactory.setupForTest(); + mContext = spy(RuntimeEnvironment.application); + mController = spy(new AppActionButtonPreferenceController(mContext, mFragment, "Package1")); + mController.mActionButtons = ActionButtonPreferenceTest.createMock(); + ReflectionHelpers.setField(mController, "mUserManager", mUserManager); + ReflectionHelpers.setField(mController, "mDpm", mDevicePolicyManager); + ReflectionHelpers.setField(mController, "mApplicationFeatureProvider", + mFeatureFactory.applicationFeatureProvider); + when(mContext.getSystemService(Context.USER_SERVICE)).thenReturn(mUserManager); + } + + @Test + public void displayPreference_shouldInitializeForceStopButton() { + final PreferenceScreen screen = mock(PreferenceScreen.class); + final ActionButtonPreference preference = spy(new ActionButtonPreference(mContext)); + when(screen.findPreference(mController.getPreferenceKey())).thenReturn(preference); + + mController.displayPreference(screen); + + verify(preference).setButton2Positive(false); + verify(preference).setButton2Text(R.string.force_stop); + verify(preference).setButton2Enabled(false); + } + + @Test + public void refreshUi_shouldRefreshButton() { + final PackageInfo packageInfo = mock(PackageInfo.class); + final ApplicationsState.AppEntry appEntry = mock(ApplicationsState.AppEntry.class); + final ApplicationInfo info = new ApplicationInfo(); + appEntry.info = info; + doNothing().when(mController).checkForceStop(appEntry, packageInfo); + doNothing().when(mController).initUninstallButtons(appEntry, packageInfo); + when(mFragment.getAppEntry()).thenReturn(appEntry); + when(mFragment.getPackageInfo()).thenReturn(packageInfo); + + mController.refreshUi(); + + verify(mController).checkForceStop(appEntry, packageInfo); + verify(mController).initUninstallButtons(appEntry, packageInfo); + } + + @Test + public void initUninstallButtonForUserApp_shouldSetNegativeButton() { + final ApplicationInfo info = new ApplicationInfo(); + info.flags = ApplicationInfo.FLAG_INSTALLED; + info.enabled = true; + final PackageInfo packageInfo = mock(PackageInfo.class); + packageInfo.applicationInfo = info; + when(mFragment.getPackageInfo()).thenReturn(packageInfo); + + assertThat(mController.initUninstallButtonForUserApp()).isTrue(); + verify(mController.mActionButtons).setButton1Positive(false); + } + + // Tests that we don't show the uninstall button for instant apps" + @Test + public void initUninstallButtonForUserApp_instantApps_noUninstallButton() { + // Make this app appear to be instant. + ReflectionHelpers.setStaticField(AppUtils.class, "sInstantAppDataProvider", + (InstantAppDataProvider) (i -> true)); + final ApplicationInfo info = new ApplicationInfo(); + info.flags = ApplicationInfo.FLAG_INSTALLED; + info.enabled = true; + final ApplicationsState.AppEntry appEntry = mock(ApplicationsState.AppEntry.class); + appEntry.info = info; + final PackageInfo packageInfo = mock(PackageInfo.class); + packageInfo.applicationInfo = info; + when(mFragment.getPackageInfo()).thenReturn(packageInfo); + + assertThat(mController.initUninstallButtonForUserApp()).isFalse(); + verify(mController.mActionButtons).setButton1Visible(false); + } + + @Test + public void initUninstallButtonForUserApp_notInstalledForCurrentUser_shouldDisableButton() { + final ApplicationInfo info = new ApplicationInfo(); + info.enabled = true; + final PackageInfo packageInfo = mock(PackageInfo.class); + packageInfo.applicationInfo = info; + when(mFragment.getPackageInfo()).thenReturn(packageInfo); + final int userID1 = 1; + final int userID2 = 2; + final List userInfos = new ArrayList<>(); + userInfos.add(new UserInfo(userID1, "User1", UserInfo.FLAG_PRIMARY)); + userInfos.add(new UserInfo(userID2, "User2", UserInfo.FLAG_GUEST)); + when(mUserManager.getUsers(true)).thenReturn(userInfos); + + assertThat(mController.initUninstallButtonForUserApp()).isFalse(); + } + + // Tests that we don't show the force stop button for instant apps (they aren't allowed to run + // when they aren't in the foreground). + @Test + public void checkForceStop_instantApps_shouldNotShowForceStop() { + // Make this app appear to be instant. + ReflectionHelpers.setStaticField(AppUtils.class, "sInstantAppDataProvider", + (InstantAppDataProvider) (i -> true)); + final PackageInfo packageInfo = mock(PackageInfo.class); + final ApplicationsState.AppEntry appEntry = mock(ApplicationsState.AppEntry.class); + final ApplicationInfo info = new ApplicationInfo(); + appEntry.info = info; + + mController.checkForceStop(appEntry, packageInfo); + + verify(mController.mActionButtons).setButton2Visible(false); + } + + @Test + public void checkForceStop_hasActiveAdmin_shouldDisableForceStop() { + ReflectionHelpers.setStaticField(AppUtils.class, "sInstantAppDataProvider", + (InstantAppDataProvider) (i -> false)); + final String packageName = "Package1"; + final PackageInfo packageInfo = new PackageInfo(); + packageInfo.packageName = packageName; + final ApplicationsState.AppEntry appEntry = mock(ApplicationsState.AppEntry.class); + when(mDevicePolicyManager.packageHasActiveAdmins(packageName)).thenReturn(true); + + mController.checkForceStop(appEntry, packageInfo); + + verify(mController.mActionButtons).setButton2Enabled(false); + } + + @Test + public void checkForceStop_appRunning_shouldEnableForceStop() { + ReflectionHelpers.setStaticField(AppUtils.class, "sInstantAppDataProvider", + (InstantAppDataProvider) (i -> false)); + final PackageInfo packageInfo = mock(PackageInfo.class); + final ApplicationsState.AppEntry appEntry = mock(ApplicationsState.AppEntry.class); + final ApplicationInfo info = new ApplicationInfo(); + appEntry.info = info; + + mController.checkForceStop(appEntry, packageInfo); + + verify(mController.mActionButtons).setButton2Enabled(true); + } + + @Test + public void checkForceStop_appStopped_shouldQueryPackageRestart() { + ReflectionHelpers.setStaticField(AppUtils.class, "sInstantAppDataProvider", + (InstantAppDataProvider) (i -> false)); + final PackageInfo packageInfo = mock(PackageInfo.class); + final ApplicationsState.AppEntry appEntry = mock(ApplicationsState.AppEntry.class); + final ApplicationInfo info = new ApplicationInfo(); + appEntry.info = info; + info.flags = ApplicationInfo.FLAG_STOPPED; + info.packageName = "com.android.setting"; + + mController.checkForceStop(appEntry, packageInfo); + + verify(mContext).sendOrderedBroadcastAsUser(argThat(intent-> intent != null + && intent.getAction().equals(Intent.ACTION_QUERY_PACKAGE_RESTART)), + any(UserHandle.class), nullable(String.class), any(BroadcastReceiver.class), + nullable(Handler.class), anyInt(), nullable(String.class), nullable(Bundle.class)); + } + + @Test + public void handleDisableable_appIsHomeApp_buttonShouldNotWork() { + final ApplicationInfo info = new ApplicationInfo(); + info.packageName = "pkg"; + info.enabled = true; + final ApplicationsState.AppEntry appEntry = mock(ApplicationsState.AppEntry.class); + appEntry.info = info; + final HashSet homePackages = new HashSet<>(); + homePackages.add(info.packageName); + ReflectionHelpers.setField(mController, "mHomePackages", homePackages); + + assertThat(mController.handleDisableable(appEntry, mock(PackageInfo.class))).isFalse(); + verify(mController.mActionButtons).setButton1Text(R.string.disable_text); + } + + @Test + @Config(shadows = ShadowUtils.class) + public void handleDisableable_appIsEnabled_buttonShouldWork() { + final ApplicationInfo info = new ApplicationInfo(); + info.packageName = "pkg"; + info.enabled = true; + info.enabledSetting = PackageManager.COMPONENT_ENABLED_STATE_ENABLED; + final ApplicationsState.AppEntry appEntry = mock(ApplicationsState.AppEntry.class); + appEntry.info = info; + when(mFeatureFactory.applicationFeatureProvider.getKeepEnabledPackages()) + .thenReturn(new HashSet<>()); + + assertThat(mController.handleDisableable(appEntry, mock(PackageInfo.class))).isTrue(); + verify(mController.mActionButtons).setButton1Text(R.string.disable_text); + } + + @Test + @Config(shadows = ShadowUtils.class) + public void handleDisableable_appIsDisabled_buttonShouldShowEnable() { + final ApplicationInfo info = new ApplicationInfo(); + info.packageName = "pkg"; + info.enabled = false; + info.enabledSetting = PackageManager.COMPONENT_ENABLED_STATE_ENABLED; + final ApplicationsState.AppEntry appEntry = mock(ApplicationsState.AppEntry.class); + appEntry.info = info; + when(mFeatureFactory.applicationFeatureProvider.getKeepEnabledPackages()) + .thenReturn(new HashSet<>()); + + assertThat(mController.handleDisableable(appEntry, mock(PackageInfo.class))).isTrue(); + verify(mController.mActionButtons).setButton1Text(R.string.enable_text); + verify(mController.mActionButtons).setButton1Positive(true); + } + + @Test + @Config(shadows = ShadowUtils.class) + public void handleDisableable_appIsEnabledAndInKeepEnabledWhitelist_buttonShouldNotWork() { + final ApplicationInfo info = new ApplicationInfo(); + info.packageName = "pkg"; + info.enabled = true; + info.enabledSetting = PackageManager.COMPONENT_ENABLED_STATE_ENABLED; + final ApplicationsState.AppEntry appEntry = mock(ApplicationsState.AppEntry.class); + appEntry.info = info; + final HashSet packages = new HashSet<>(); + packages.add(info.packageName); + when(mFeatureFactory.applicationFeatureProvider.getKeepEnabledPackages()) + .thenReturn(packages); + + assertThat(mController.handleDisableable(appEntry, mock(PackageInfo.class))).isFalse(); + verify(mController.mActionButtons).setButton1Text(R.string.disable_text); + } + + @Implements(Utils.class) + public static class ShadowUtils { + @Implementation + public static boolean isSystemPackage(Resources resources, PackageManager pm, + PackageInfo pkg) { + return false; + } + } + +} diff --git a/tests/robotests/src/com/android/settings/applications/appinfo/AppInfoDashboardFragmentTest.java b/tests/robotests/src/com/android/settings/applications/appinfo/AppInfoDashboardFragmentTest.java index b208253b3cd..87b82ad4d88 100644 --- a/tests/robotests/src/com/android/settings/applications/appinfo/AppInfoDashboardFragmentTest.java +++ b/tests/robotests/src/com/android/settings/applications/appinfo/AppInfoDashboardFragmentTest.java @@ -26,24 +26,18 @@ import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; -import android.app.AppOpsManager; import android.content.Context; import android.content.Intent; import android.content.pm.ApplicationInfo; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.UserInfo; -import android.content.res.Resources; import android.os.UserManager; -import com.android.settings.R; import com.android.settings.SettingsActivity; import com.android.settings.TestConfig; -import com.android.settings.testutils.FakeFeatureFactory; import com.android.settings.testutils.SettingsRobolectricTestRunner; -import com.android.settings.widget.ActionButtonPreferenceTest; import com.android.settings.wrapper.DevicePolicyManagerWrapper; -import com.android.settingslib.Utils; import com.android.settingslib.applications.AppUtils; import com.android.settingslib.applications.ApplicationsState.AppEntry; import com.android.settingslib.applications.instantapps.InstantAppDataProvider; @@ -56,12 +50,9 @@ import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.robolectric.RuntimeEnvironment; import org.robolectric.annotation.Config; -import org.robolectric.annotation.Implementation; -import org.robolectric.annotation.Implements; import org.robolectric.util.ReflectionHelpers; import java.util.ArrayList; -import java.util.HashSet; import java.util.List; @RunWith(SettingsRobolectricTestRunner.class) @@ -73,20 +64,15 @@ public final class AppInfoDashboardFragmentTest { private static final String PACKAGE_NAME = "test_package_name"; - @Mock(answer = Answers.RETURNS_DEEP_STUBS) - private Context mContext; @Mock(answer = Answers.RETURNS_DEEP_STUBS) private UserManager mUserManager; - @Mock(answer = Answers.RETURNS_DEEP_STUBS) + @Mock private SettingsActivity mActivity; @Mock private DevicePolicyManagerWrapper mDevicePolicyManager; @Mock private PackageManager mPackageManager; - @Mock - private AppOpsManager mAppOpsManager; - private FakeFeatureFactory mFeatureFactory; private AppInfoDashboardFragment mFragment; private Context mShadowContext; @@ -94,14 +80,11 @@ public final class AppInfoDashboardFragmentTest { @Before public void setUp() { MockitoAnnotations.initMocks(this); - mFeatureFactory = FakeFeatureFactory.setupForTest(); mShadowContext = RuntimeEnvironment.application; mFragment = spy(new AppInfoDashboardFragment()); doReturn(mActivity).when(mFragment).getActivity(); doReturn(mShadowContext).when(mFragment).getContext(); doReturn(mPackageManager).when(mActivity).getPackageManager(); - doReturn(mAppOpsManager).when(mActivity).getSystemService(Context.APP_OPS_SERVICE); - mFragment.mActionButtons = ActionButtonPreferenceTest.createMock(); // Default to not considering any apps to be instant (individual tests can override this). ReflectionHelpers.setStaticField(AppUtils.class, "sInstantAppDataProvider", @@ -198,48 +181,6 @@ public final class AppInfoDashboardFragmentTest { assertThat(mFragment.shouldShowUninstallForAll(appEntry)).isFalse(); } - // Tests that we don't show the uninstall button for instant apps" - @Test - public void instantApps_noUninstallButton() { - // Make this app appear to be instant. - ReflectionHelpers.setStaticField(AppUtils.class, "sInstantAppDataProvider", - (InstantAppDataProvider) (i -> true)); - final ApplicationInfo info = new ApplicationInfo(); - info.flags = ApplicationInfo.FLAG_INSTALLED; - info.enabled = true; - final AppEntry appEntry = mock(AppEntry.class); - appEntry.info = info; - final PackageInfo packageInfo = mock(PackageInfo.class); - packageInfo.applicationInfo = info; - - ReflectionHelpers.setField(mFragment, "mUserManager", mUserManager); - ReflectionHelpers.setField(mFragment, "mAppEntry", appEntry); - ReflectionHelpers.setField(mFragment, "mPackageInfo", packageInfo); - - mFragment.initUninstallButtonForUserApp(); - verify(mFragment.mActionButtons).setButton1Visible(false); - } - - // Tests that we don't show the force stop button for instant apps (they aren't allowed to run - // when they aren't in the foreground). - @Test - public void instantApps_noForceStop() { - // Make this app appear to be instant. - ReflectionHelpers.setStaticField(AppUtils.class, "sInstantAppDataProvider", - (InstantAppDataProvider) (i -> true)); - final PackageInfo packageInfo = mock(PackageInfo.class); - final AppEntry appEntry = mock(AppEntry.class); - final ApplicationInfo info = new ApplicationInfo(); - appEntry.info = info; - - ReflectionHelpers.setField(mFragment, "mDpm", mDevicePolicyManager); - ReflectionHelpers.setField(mFragment, "mPackageInfo", packageInfo); - ReflectionHelpers.setField(mFragment, "mAppEntry", appEntry); - - mFragment.checkForceStop(); - verify(mFragment.mActionButtons).setButton2Visible(false); - } - @Test public void onActivityResult_uninstalledUpdates_shouldInvalidateOptionsMenu() { doReturn(true).when(mFragment).refreshUi(); @@ -249,105 +190,6 @@ public final class AppInfoDashboardFragmentTest { verify(mActivity).invalidateOptionsMenu(); } - @Test - public void handleDisableable_appIsHomeApp_buttonShouldNotWork() { - final ApplicationInfo info = new ApplicationInfo(); - info.packageName = "pkg"; - info.enabled = true; - final AppEntry appEntry = mock(AppEntry.class); - appEntry.info = info; - final HashSet homePackages = new HashSet<>(); - homePackages.add(info.packageName); - - ReflectionHelpers.setField(mFragment, "mHomePackages", homePackages); - ReflectionHelpers.setField(mFragment, "mAppEntry", appEntry); - - assertThat(mFragment.handleDisableable()).isFalse(); - verify(mFragment.mActionButtons).setButton1Text(R.string.disable_text); - } - - @Test - @Config(shadows = ShadowUtils.class) - public void handleDisableable_appIsEnabled_buttonShouldWork() { - final ApplicationInfo info = new ApplicationInfo(); - info.packageName = "pkg"; - info.enabled = true; - info.enabledSetting = PackageManager.COMPONENT_ENABLED_STATE_ENABLED; - - final AppEntry appEntry = mock(AppEntry.class); - appEntry.info = info; - when(mFeatureFactory.applicationFeatureProvider.getKeepEnabledPackages()).thenReturn( - new HashSet<>()); - - ReflectionHelpers.setField(mFragment, "mApplicationFeatureProvider", - mFeatureFactory.applicationFeatureProvider); - ReflectionHelpers.setField(mFragment, "mAppEntry", appEntry); - - assertThat(mFragment.handleDisableable()).isTrue(); - verify(mFragment.mActionButtons).setButton1Text(R.string.disable_text); - } - - @Test - @Config(shadows = ShadowUtils.class) - public void handleDisableable_appIsDisabled_buttonShouldShowEnable() { - final ApplicationInfo info = new ApplicationInfo(); - info.packageName = "pkg"; - info.enabled = false; - info.enabledSetting = PackageManager.COMPONENT_ENABLED_STATE_ENABLED; - - final AppEntry appEntry = mock(AppEntry.class); - appEntry.info = info; - when(mFeatureFactory.applicationFeatureProvider.getKeepEnabledPackages()).thenReturn( - new HashSet<>()); - - ReflectionHelpers.setField(mFragment, "mApplicationFeatureProvider", - mFeatureFactory.applicationFeatureProvider); - ReflectionHelpers.setField(mFragment, "mAppEntry", appEntry); - - assertThat(mFragment.handleDisableable()).isTrue(); - verify(mFragment.mActionButtons).setButton1Text(R.string.enable_text); - verify(mFragment.mActionButtons).setButton1Positive(true); - } - - @Test - @Config(shadows = ShadowUtils.class) - public void handleDisableable_appIsEnabledAndInKeepEnabledWhitelist_buttonShouldNotWork() { - final ApplicationInfo info = new ApplicationInfo(); - info.packageName = "pkg"; - info.enabled = true; - info.enabledSetting = PackageManager.COMPONENT_ENABLED_STATE_ENABLED; - - final AppEntry appEntry = mock(AppEntry.class); - appEntry.info = info; - - final HashSet packages = new HashSet<>(); - packages.add(info.packageName); - when(mFeatureFactory.applicationFeatureProvider.getKeepEnabledPackages()).thenReturn( - packages); - - ReflectionHelpers.setField(mFragment, "mApplicationFeatureProvider", - mFeatureFactory.applicationFeatureProvider); - ReflectionHelpers.setField(mFragment, "mAppEntry", appEntry); - - assertThat(mFragment.handleDisableable()).isFalse(); - verify(mFragment.mActionButtons).setButton1Text(R.string.disable_text); - } - - @Test - public void initUninstallButtonForUserApp_shouldSetNegativeButton() { - final ApplicationInfo info = new ApplicationInfo(); - info.flags = ApplicationInfo.FLAG_INSTALLED; - info.enabled = true; - final PackageInfo packageInfo = mock(PackageInfo.class); - packageInfo.applicationInfo = info; - ReflectionHelpers.setField(mFragment, "mUserManager", mUserManager); - ReflectionHelpers.setField(mFragment, "mPackageInfo", packageInfo); - - mFragment.initUninstallButtonForUserApp(); - - verify(mFragment.mActionButtons).setButton1Positive(false); - } - @Test public void getNumberOfUserWithPackageInstalled_twoUsersInstalled_shouldReturnTwo() throws PackageManager.NameNotFoundException{ @@ -396,13 +238,4 @@ public final class AppInfoDashboardFragmentTest { assertThat(mFragment.getNumberOfUserWithPackageInstalled(packageName)).isEqualTo(1); } - - @Implements(Utils.class) - public static class ShadowUtils { - @Implementation - public static boolean isSystemPackage(Resources resources, PackageManager pm, - PackageInfo pkg) { - return false; - } - } }