[automerger skipped] Merge "Import translations. DO NOT MERGE" into rvc-d1-dev am: 42a6154347 -s ours am: 8ebbe4db5c -s ours

am skip reason: subject contains skip directive

Change-Id: I726fa5c772a31d7b45b93554d0499b819629e686
diff --git a/MODULE_LICENSE_APACHE2 b/MODULE_LICENSE_APACHE2
deleted file mode 100644
index e69de29..0000000
--- a/MODULE_LICENSE_APACHE2
+++ /dev/null
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 9faceac..381b70c 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -11577,6 +11577,9 @@
     <string name="mobile_data_settings_summary_auto_switch">
         Phone will automatically switch to this carrier when in range
     </string>
+    <!-- Mobile network setting screen, summary of Mobile data switch preference when the network
+         is unavailable, the preference selection will be disabled. [CHAR LIMIT=NONE] -->
+    <string name="mobile_data_settings_summary_unavailable">No SIM card available</string>
 
     <!-- Mobile network settings screen, title of item showing the name of the default subscription
      that will be used for calls. This only appears in multi-SIM mode. [CHAR LIMIT=NONE] -->
diff --git a/src/com/android/settings/applications/AppStorageSettings.java b/src/com/android/settings/applications/AppStorageSettings.java
index f07c66c..3cded6a 100644
--- a/src/com/android/settings/applications/AppStorageSettings.java
+++ b/src/com/android/settings/applications/AppStorageSettings.java
@@ -311,13 +311,9 @@
             if (appHasSpaceManagementUI) {
                 mButtonsPref.setButton1Text(R.string.manage_space_text);
             } else {
-                mButtonsPref
-                        .setButton1Text(R.string.clear_user_data_text)
-                        .setButton1Icon(R.drawable.ic_settings_delete);
+                mButtonsPref.setButton1Text(R.string.clear_user_data_text);
             }
-            mButtonsPref
-                    .setButton1Text(R.string.clear_user_data_text)
-                    .setButton1Icon(R.drawable.ic_settings_delete)
+            mButtonsPref.setButton1Icon(R.drawable.ic_settings_delete)
                     .setButton1OnClickListener(v -> handleClearDataClick());
         }
 
diff --git a/src/com/android/settings/connecteddevice/usb/ConnectedUsbDeviceUpdater.java b/src/com/android/settings/connecteddevice/usb/ConnectedUsbDeviceUpdater.java
index 1078a21..6a13a96 100644
--- a/src/com/android/settings/connecteddevice/usb/ConnectedUsbDeviceUpdater.java
+++ b/src/com/android/settings/connecteddevice/usb/ConnectedUsbDeviceUpdater.java
@@ -97,7 +97,7 @@
             // New version - uses a separate screen.
             new SubSettingLauncher(mFragment.getContext())
                     .setDestination(UsbDetailsFragment.class.getName())
-                    .setTitleRes(R.string.device_details_title)
+                    .setTitleRes(R.string.usb_preference)
                     .setSourceMetricsCategory(mFragment.getMetricsCategory())
                     .launch();
             return true;
diff --git a/src/com/android/settings/datetime/timezone/OWNERS b/src/com/android/settings/datetime/timezone/OWNERS
index 02cf23c..7ad770a 100644
--- a/src/com/android/settings/datetime/timezone/OWNERS
+++ b/src/com/android/settings/datetime/timezone/OWNERS
@@ -1,6 +1,5 @@
 # Default reviewers for this and subdirectories.
 vichang@google.com
-tobiast@google.com
 nfuller@google.com
 
 # Emergency approvers in case the above are not available
diff --git a/src/com/android/settings/network/telephony/CarrierSettingsVersionPreferenceController.java b/src/com/android/settings/network/telephony/CarrierSettingsVersionPreferenceController.java
index a6db773..aec3648 100644
--- a/src/com/android/settings/network/telephony/CarrierSettingsVersionPreferenceController.java
+++ b/src/com/android/settings/network/telephony/CarrierSettingsVersionPreferenceController.java
@@ -20,6 +20,7 @@
 import android.os.PersistableBundle;
 import android.telephony.CarrierConfigManager;
 import android.telephony.SubscriptionManager;
+import android.text.TextUtils;
 
 import com.android.settings.core.BasePreferenceController;
 
@@ -49,6 +50,6 @@
 
     @Override
     public int getAvailabilityStatus() {
-        return AVAILABLE;
+        return TextUtils.isEmpty(getSummary()) ? UNSUPPORTED_ON_DEVICE : AVAILABLE;
     }
 }
diff --git a/src/com/android/settings/network/telephony/MobileDataPreferenceController.java b/src/com/android/settings/network/telephony/MobileDataPreferenceController.java
index c35eef6..91c46df 100644
--- a/src/com/android/settings/network/telephony/MobileDataPreferenceController.java
+++ b/src/com/android/settings/network/telephony/MobileDataPreferenceController.java
@@ -128,6 +128,13 @@
             preference.setEnabled(true);
             preference.setSummary(R.string.mobile_data_settings_summary);
         }
+
+        if (mSubId == SubscriptionManager.INVALID_SUBSCRIPTION_ID) {
+            preference.setSelectable(false);
+            preference.setSummary(R.string.mobile_data_settings_summary_unavailable);
+        } else {
+            preference.setSelectable(true);
+        }
     }
 
     private boolean isOpportunistic() {
diff --git a/src/com/android/settings/panel/PanelFragment.java b/src/com/android/settings/panel/PanelFragment.java
index 9de4139..9129963 100644
--- a/src/com/android/settings/panel/PanelFragment.java
+++ b/src/com/android/settings/panel/PanelFragment.java
@@ -156,8 +156,13 @@
 
     private void createPanelContent() {
         final FragmentActivity activity = getActivity();
+        if (activity == null) {
+            return;
+        }
+
         if (mLayoutView == null) {
             activity.finish();
+            return;
         }
 
         mPanelSlices = mLayoutView.findViewById(R.id.panel_parent_layout);
@@ -183,6 +188,7 @@
 
         if (mPanel == null) {
             activity.finish();
+            return;
         }
 
         mPanel.registerCallback(new LocalPanelCallback());
diff --git a/src/com/android/settings/users/EditUserInfoController.java b/src/com/android/settings/users/EditUserInfoController.java
index 373d6a9..afa7cdd 100644
--- a/src/com/android/settings/users/EditUserInfoController.java
+++ b/src/com/android/settings/users/EditUserInfoController.java
@@ -95,8 +95,7 @@
     }
 
     public void onSaveInstanceState(Bundle outState) {
-        if (mEditUserInfoDialog != null && mEditUserInfoDialog.isShowing()
-                && mEditUserPhotoController != null) {
+        if (mEditUserInfoDialog != null && mEditUserPhotoController != null) {
             // Bitmap cannot be stored into bundle because it may exceed parcel limit
             // Store it in a temporary file instead
             File file = mEditUserPhotoController.saveNewUserPhotoBitmap();
diff --git a/src/com/android/settings/vpn2/ConfigDialog.java b/src/com/android/settings/vpn2/ConfigDialog.java
index 4e6cc89..26c1565 100644
--- a/src/com/android/settings/vpn2/ConfigDialog.java
+++ b/src/com/android/settings/vpn2/ConfigDialog.java
@@ -20,6 +20,7 @@
 
 import android.content.Context;
 import android.content.DialogInterface;
+import android.content.pm.PackageManager;
 import android.net.Proxy;
 import android.net.ProxyInfo;
 import android.os.Bundle;
@@ -43,6 +44,9 @@
 import com.android.settings.R;
 
 import java.net.InetAddress;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
 
 /**
  * Dialog showing information about a VPN configuration. The dialog
@@ -129,6 +133,7 @@
 
         // Second, copy values from the profile.
         mName.setText(mProfile.name);
+        setTypesByFeature(mType);
         mType.setSelection(mProfile.type);
         mServer.setText(mProfile.server);
         if (mProfile.saveLogin) {
@@ -343,14 +348,14 @@
         mView.findViewById(R.id.vpn_proxy_fields).setVisibility(visible);
     }
 
-    private boolean hasAdvancedOptionsEnabled() {
+    private boolean isAdvancedOptionsEnabled() {
         return mSearchDomains.getText().length() > 0 || mDnsServers.getText().length() > 0 ||
                     mRoutes.getText().length() > 0 || mProxyHost.getText().length() > 0
                     || mProxyPort.getText().length() > 0;
     }
 
     private void configureAdvancedOptionsVisibility() {
-        if (mShowOptions.isChecked() || hasAdvancedOptionsEnabled()) {
+        if (mShowOptions.isChecked() || isAdvancedOptionsEnabled()) {
             mView.findViewById(R.id.options).setVisibility(View.VISIBLE);
             mShowOptions.setVisibility(View.GONE);
 
@@ -487,6 +492,25 @@
         return true;
     }
 
+    private void setTypesByFeature(Spinner typeSpinner) {
+        String[] types = getContext().getResources().getStringArray(R.array.vpn_types);
+        if (!getContext().getPackageManager().hasSystemFeature(
+                PackageManager.FEATURE_IPSEC_TUNNELS)) {
+            final List<String> typesList = new ArrayList<>(Arrays.asList(types));
+
+            // This must be removed from back to front in order to ensure index consistency
+            typesList.remove(VpnProfile.TYPE_IKEV2_IPSEC_RSA);
+            typesList.remove(VpnProfile.TYPE_IKEV2_IPSEC_PSK);
+            typesList.remove(VpnProfile.TYPE_IKEV2_IPSEC_USER_PASS);
+
+            types = typesList.toArray(new String[0]);
+        }
+        final ArrayAdapter<String> adapter = new ArrayAdapter<String>(
+                getContext(), android.R.layout.simple_spinner_item, types);
+        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
+        typeSpinner.setAdapter(adapter);
+    }
+
     private void loadCertificates(Spinner spinner, String prefix, int firstId, String selected) {
         Context context = getContext();
         String first = (firstId == 0) ? "" : context.getString(firstId);
diff --git a/tests/perftests/Android.bp b/tests/perftests/Android.bp
index 7708bbe..1ba5d9c 100644
--- a/tests/perftests/Android.bp
+++ b/tests/perftests/Android.bp
@@ -19,4 +19,4 @@
     test_suites: ["device-tests"],
 
     instrumentation_for: "Settings",
-}
\ No newline at end of file
+}
diff --git a/tests/perftests/AndroidManifest.xml b/tests/perftests/AndroidManifest.xml
index 972467f..8aae24a 100644
--- a/tests/perftests/AndroidManifest.xml
+++ b/tests/perftests/AndroidManifest.xml
@@ -15,15 +15,15 @@
 -->
 
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
-          package="com.android.settings.tests.perf">
+    package="com.android.settings.tests.perf">
 
     <application>
-        <uses-library android:name="android.test.runner"/>
+        <uses-library android:name="android.test.runner" />
     </application>
 
     <instrumentation android:name="androidx.test.runner.AndroidJUnitRunner"
-                     android:targetPackage="com.android.settings.tests.perf"
-                     android:label="Settings Performance Test Cases">
+        android:targetPackage="com.android.settings.tests.perf"
+        android:label="Settings Performance Test Cases">
     </instrumentation>
 
 </manifest>
diff --git a/tests/perftests/src/com/android/settings/tests/perf/LaunchSettingsTest.java b/tests/perftests/src/com/android/settings/tests/perf/LaunchSettingsTest.java
index f55598c..f6eac3a 100644
--- a/tests/perftests/src/com/android/settings/tests/perf/LaunchSettingsTest.java
+++ b/tests/perftests/src/com/android/settings/tests/perf/LaunchSettingsTest.java
@@ -21,8 +21,10 @@
 
 import android.app.Instrumentation;
 import android.os.Bundle;
+import android.util.Log;
 import android.support.test.uiautomator.By;
 import android.support.test.uiautomator.UiDevice;
+import android.support.test.uiautomator.UiSelector;
 import android.support.test.uiautomator.Until;
 
 import androidx.test.InstrumentationRegistry;
@@ -34,9 +36,9 @@
 import org.junit.runner.RunWith;
 
 import java.util.ArrayList;
-import java.util.Collections;
 import java.util.LinkedHashMap;
 import java.util.Map;
+import java.util.Collections;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
@@ -54,6 +56,8 @@
         }
     }
 
+    private static final String SCREEN_TIME_OUT = "7200000";
+    private static final String DEFAULT_SCREEN_TIMEOUT = "15000";
     private static final int TIME_OUT = 5000;
     private static final int TEST_TIME = 10;
     private static final Pattern PATTERN = Pattern.compile("TotalTime:\\s[0-9]*");
@@ -65,7 +69,8 @@
                 new Page("android.settings.WIFI_SETTINGS", "Use Wi‑Fi", "Wi-Fi"),
                 new Page("android.settings.BLUETOOTH_SETTINGS", "Connected devices", "BlueTooth"),
                 new Page("android.settings.APPLICATION_SETTINGS", "App info", "Application"),
-                new Page("android.intent.action.POWER_USAGE_SUMMARY", "Battery", "Battery")
+                new Page("android.intent.action.POWER_USAGE_SUMMARY", "Battery", "Battery"),
+                new Page("android.settings.INTERNAL_STORAGE_SETTINGS", "Storage", "Storage")
         };
     }
 
@@ -73,6 +78,7 @@
     private UiDevice mDevice;
     private Instrumentation mInstrumentation;
     private Map<String, ArrayList<Integer>> mResult;
+    private String mDefaultScreenTimeout;
 
     @Before
     public void setUp() throws Exception {
@@ -80,6 +86,9 @@
         mDevice = UiDevice.getInstance(getInstrumentation());
         mInstrumentation = InstrumentationRegistry.getInstrumentation();
         mResult = new LinkedHashMap<>();
+        mDefaultScreenTimeout = mDevice.executeShellCommand(
+                "settings get system screen_off_timeout");
+        setScreenTimeOut(SCREEN_TIME_OUT);
         mDevice.pressHome();
         mDevice.waitForIdle(TIME_OUT);
 
@@ -92,6 +101,8 @@
     public void tearDown() throws Exception {
         putResultToBundle();
         mInstrumentation.sendStatus(0, mBundle);
+        resetScreenTimeout();
+        closeApp();
     }
 
     @Test
@@ -105,11 +116,11 @@
 
     private void executePreformanceTest(String action, String displayName, String title)
             throws Exception {
+        closeApp();
+        mDevice.waitForIdle(TIME_OUT);
         final String mString = mDevice.executeShellCommand("am start -W -a" + action);
         mDevice.wait(Until.findObject(By.text(displayName)), TIME_OUT);
         handleLaunchResult(title, mString);
-        closeApp();
-        mDevice.waitForIdle(TIME_OUT);
     }
 
     private void handleLaunchResult(String title, String s) {
@@ -148,4 +159,16 @@
     private String getAvg(ArrayList<Integer> launchResult) {
         return String.valueOf((int) launchResult.stream().mapToInt(i -> i).average().orElse(0));
     }
+
+    private void setScreenTimeOut(String timeout) throws Exception {
+        mDevice.executeShellCommand("settings put system screen_off_timeout " + timeout);
+    }
+
+    private void resetScreenTimeout() throws Exception {
+        String timeout = DEFAULT_SCREEN_TIMEOUT;
+        if (!mDefaultScreenTimeout.isEmpty()) {
+            timeout = mDefaultScreenTimeout;
+        }
+        setScreenTimeOut(timeout);
+    }
 }
\ No newline at end of file