Merge "Add missed "optional_uses_libs" to avoid testing failed" into sc-v2-dev
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 43af6df..7199dd5 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -107,8 +107,8 @@
     <uses-permission android:name="android.permission.READ_DREAM_STATE" />
     <uses-permission android:name="android.permission.READ_DREAM_SUPPRESSION" />
     <uses-permission android:name="android.permission.MANAGE_APP_HIBERNATION" />
-    <uses-permission android:name="android.permission.LAUNCH_TWO_PANE_SETTINGS_DEEP_LINK" />
-    <uses-permission android:name="android.permission.ALLOW_PLACE_IN_TWO_PANE_SETTINGS" />
+    <uses-permission android:name="android.permission.LAUNCH_MULTI_PANE_SETTINGS_DEEP_LINK" />
+    <uses-permission android:name="android.permission.ALLOW_PLACE_IN_MULTI_PANE_SETTINGS" />
 
     <application
             android:name=".SettingsApplication"
@@ -178,10 +178,10 @@
         <activity-alias android:name="DeepLinkHomepageActivity"
                 android:label="@string/settings_label_launcher"
                 android:exported="true"
-                android:permission="android.permission.LAUNCH_TWO_PANE_SETTINGS_DEEP_LINK"
+                android:permission="android.permission.LAUNCH_MULTI_PANE_SETTINGS_DEEP_LINK"
                 android:targetActivity=".homepage.SettingsHomepageActivity">
             <intent-filter>
-                <action android:name="android.settings.SETTINGS_LARGE_SCREEN_DEEP_LINK" />
+                <action android:name="android.settings.SETTINGS_EMBED_DEEP_LINK_ACTIVITY" />
                 <category android:name="android.intent.category.DEFAULT" />
             </intent-filter>
         </activity-alias>
diff --git a/res/xml/wifi_configure_settings.xml b/res/xml/wifi_configure_settings.xml
index 623f326..2ab7b6a 100644
--- a/res/xml/wifi_configure_settings.xml
+++ b/res/xml/wifi_configure_settings.xml
@@ -42,15 +42,7 @@
 
     <Preference
         android:key="install_credentials"
-        android:title="@string/wifi_install_credentials">
-        <intent
-            android:action="android.credentials.INSTALL"
-            android:targetPackage="com.android.certinstaller"
-            android:targetClass="com.android.certinstaller.CertInstallerMain">
-            <!-- Same value as CERTIFICATE_USAGE_WIFI in keystore/java/android/security/Credentials.java -->
-            <extra android:name="certificate_install_usage" android:value="wifi"/>
-        </intent>
-    </Preference>
+        android:title="@string/wifi_install_credentials"/>
 
     <Preference
         android:key="wifi_direct"
diff --git a/src/com/android/settings/SettingsActivity.java b/src/com/android/settings/SettingsActivity.java
index 352f0ff..a9999fa 100644
--- a/src/com/android/settings/SettingsActivity.java
+++ b/src/com/android/settings/SettingsActivity.java
@@ -364,13 +364,13 @@
 
         // It's a deep link intent, SettingsHomepageActivity will set SplitPairRule and start it.
         final Intent trampolineIntent =
-                new Intent(android.provider.Settings.ACTION_SETTINGS_LARGE_SCREEN_DEEP_LINK);
+                new Intent(android.provider.Settings.ACTION_SETTINGS_EMBED_DEEP_LINK_ACTIVITY);
         trampolineIntent.replaceExtras(intent);
         trampolineIntent.putExtra(
-                android.provider.Settings.EXTRA_SETTINGS_LARGE_SCREEN_DEEP_LINK_INTENT_URI,
+                android.provider.Settings.EXTRA_SETTINGS_EMBEDDED_DEEP_LINK_INTENT_URI,
                 intent.toUri(Intent.URI_INTENT_SCHEME));
         trampolineIntent.putExtra(
-                android.provider.Settings.EXTRA_SETTINGS_LARGE_SCREEN_HIGHLIGHT_MENU_KEY,
+                android.provider.Settings.EXTRA_SETTINGS_EMBEDDED_DEEP_LINK_HIGHLIGHT_MENU_KEY,
                 mHighlightMenuKey);
         trampolineIntent.addFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT);
         startActivity(trampolineIntent);
diff --git a/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java b/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java
index c067094..8019d0a 100644
--- a/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java
+++ b/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java
@@ -361,8 +361,7 @@
         final String stateString;
         final String footerString;
 
-        if (!mBatteryOptimizeUtils.isValidPackageName()
-                || mBatteryOptimizeUtils.isAllowlistedExceptIdleApp()) {
+        if (!mBatteryOptimizeUtils.isValidPackageName()) {
             // Present optimized only string when the package name is invalid or
             // it's in allow list not idle app.
             stateString = context.getString(R.string.manager_battery_usage_optimized_only);
diff --git a/src/com/android/settings/fuelgauge/BatteryOptimizeUtils.java b/src/com/android/settings/fuelgauge/BatteryOptimizeUtils.java
index 11528a6..3d95395 100644
--- a/src/com/android/settings/fuelgauge/BatteryOptimizeUtils.java
+++ b/src/com/android/settings/fuelgauge/BatteryOptimizeUtils.java
@@ -89,8 +89,16 @@
         return getAppOptimizationMode(mMode, mAllowListed);
     }
 
-    /** Sets the {@link OptimizationMode} for associated app. */
     public void setAppOptimizationMode(@OptimizationMode int mode) {
+        try {
+            setAppUsageStateInternal(mode);
+        } catch (Exception e) {
+            Log.e(TAG, "setAppUsageState() is failed for " + mPackageName, e);
+        }
+    }
+
+    /** Sets the {@link OptimizationMode} for associated app. */
+    public void setAppUsageStateInternal(@OptimizationMode int mode) {
         if (getAppOptimizationMode(mMode, mAllowListed) == mode) {
             Log.w(TAG, "set the same optimization mode for: " + mPackageName);
             return;
@@ -130,13 +138,6 @@
                 || mPowerAllowListBackend.isDefaultActiveApp(mPackageName);
     }
 
-    /**
-     * Return {@code true} if this package is in allow list except idle app.
-     */
-    public boolean isAllowlistedExceptIdleApp() {
-        return mPowerAllowListBackend.isAllowlistedExceptIdle(mPackageName);
-    }
-
     String getPackageName() {
         return mPackageName == null ? UNKNOWN_PACKAGE : mPackageName;
     }
diff --git a/src/com/android/settings/fuelgauge/OptimizedPreferenceController.java b/src/com/android/settings/fuelgauge/OptimizedPreferenceController.java
index ef23397..ffec50d 100644
--- a/src/com/android/settings/fuelgauge/OptimizedPreferenceController.java
+++ b/src/com/android/settings/fuelgauge/OptimizedPreferenceController.java
@@ -57,10 +57,6 @@
             Log.d(TAG, "is system or default app, disable pref");
             ((RadioButtonPreference) preference).setChecked(false);
             preference.setEnabled(false);
-        } else if (mBatteryOptimizeUtils.isAllowlistedExceptIdleApp()) {
-            Log.d(TAG, "in allow list not idle app, optimized states only");
-            preference.setEnabled(true);
-            ((RadioButtonPreference) preference).setChecked(true);
         } else if (mBatteryOptimizeUtils.getAppOptimizationMode()
                 == BatteryOptimizeUtils.MODE_OPTIMIZED) {
             Log.d(TAG, "is optimized states");
diff --git a/src/com/android/settings/fuelgauge/RestrictedPreferenceController.java b/src/com/android/settings/fuelgauge/RestrictedPreferenceController.java
index 230b1fc..d50926e 100644
--- a/src/com/android/settings/fuelgauge/RestrictedPreferenceController.java
+++ b/src/com/android/settings/fuelgauge/RestrictedPreferenceController.java
@@ -55,9 +55,6 @@
             Log.d(TAG, "is system or default app, disable pref");
             ((RadioButtonPreference) preference).setChecked(false);
             preference.setEnabled(false);
-        } else if (mBatteryOptimizeUtils.isAllowlistedExceptIdleApp()) {
-            Log.d(TAG, "in allow list not idle app, disable perf");
-            preference.setEnabled(false);
         } else if (mBatteryOptimizeUtils.getAppOptimizationMode()
                 == BatteryOptimizeUtils.MODE_RESTRICTED) {
             Log.d(TAG, "is restricted states");
diff --git a/src/com/android/settings/fuelgauge/UnrestrictedPreferenceController.java b/src/com/android/settings/fuelgauge/UnrestrictedPreferenceController.java
index f8ee651..1d66c6c 100644
--- a/src/com/android/settings/fuelgauge/UnrestrictedPreferenceController.java
+++ b/src/com/android/settings/fuelgauge/UnrestrictedPreferenceController.java
@@ -53,9 +53,6 @@
         if (mBatteryOptimizeUtils.isSystemOrDefaultApp()) {
             Log.d(TAG, "is system or default app, unrestricted states only");
             ((RadioButtonPreference) preference).setChecked(true);
-        } else if (mBatteryOptimizeUtils.isAllowlistedExceptIdleApp()) {
-            Log.d(TAG, "in allow list not idle app, disable perf");
-            preference.setEnabled(false);
         } else if (mBatteryOptimizeUtils.getAppOptimizationMode()
                 == BatteryOptimizeUtils.MODE_UNRESTRICTED) {
             Log.d(TAG, "is unrestricted states");
diff --git a/src/com/android/settings/homepage/SettingsHomepageActivity.java b/src/com/android/settings/homepage/SettingsHomepageActivity.java
index 471b1a4..ec3589c 100644
--- a/src/com/android/settings/homepage/SettingsHomepageActivity.java
+++ b/src/com/android/settings/homepage/SettingsHomepageActivity.java
@@ -16,9 +16,9 @@
 
 package com.android.settings.homepage;
 
-import static android.provider.Settings.ACTION_SETTINGS_LARGE_SCREEN_DEEP_LINK;
-import static android.provider.Settings.EXTRA_SETTINGS_LARGE_SCREEN_DEEP_LINK_INTENT_URI;
-import static android.provider.Settings.EXTRA_SETTINGS_LARGE_SCREEN_HIGHLIGHT_MENU_KEY;
+import static android.provider.Settings.ACTION_SETTINGS_EMBED_DEEP_LINK_ACTIVITY;
+import static android.provider.Settings.EXTRA_SETTINGS_EMBEDDED_DEEP_LINK_HIGHLIGHT_MENU_KEY;
+import static android.provider.Settings.EXTRA_SETTINGS_EMBEDDED_DEEP_LINK_INTENT_URI;
 
 import android.animation.LayoutTransition;
 import android.app.ActivityManager;
@@ -191,14 +191,14 @@
 
         final Intent intent = getIntent();
         if (intent == null || !TextUtils.equals(intent.getAction(),
-                ACTION_SETTINGS_LARGE_SCREEN_DEEP_LINK)) {
+                ACTION_SETTINGS_EMBED_DEEP_LINK_ACTIVITY)) {
             return;
         }
 
         final String intentUriString = intent.getStringExtra(
-                EXTRA_SETTINGS_LARGE_SCREEN_DEEP_LINK_INTENT_URI);
+                EXTRA_SETTINGS_EMBEDDED_DEEP_LINK_INTENT_URI);
         if (TextUtils.isEmpty(intentUriString)) {
-            Log.e(TAG, "No EXTRA_SETTINGS_LARGE_SCREEN_DEEP_LINK_INTENT_URI to deep link");
+            Log.e(TAG, "No EXTRA_SETTINGS_EMBEDDED_DEEP_LINK_INTENT_URI to deep link");
             finish();
             return;
         }
@@ -250,9 +250,9 @@
     private String getHighlightMenuKey() {
         final Intent intent = getIntent();
         if (intent != null && TextUtils.equals(intent.getAction(),
-                ACTION_SETTINGS_LARGE_SCREEN_DEEP_LINK)) {
+                ACTION_SETTINGS_EMBED_DEEP_LINK_ACTIVITY)) {
             final String menuKey = intent.getStringExtra(
-                    EXTRA_SETTINGS_LARGE_SCREEN_HIGHLIGHT_MENU_KEY);
+                    EXTRA_SETTINGS_EMBEDDED_DEEP_LINK_HIGHLIGHT_MENU_KEY);
             if (!TextUtils.isEmpty(menuKey)) {
                 return menuKey;
             }
diff --git a/src/com/android/settings/notification/history/NotificationStation.java b/src/com/android/settings/notification/history/NotificationStation.java
index fe8b168..fa3a7b2 100644
--- a/src/com/android/settings/notification/history/NotificationStation.java
+++ b/src/com/android/settings/notification/history/NotificationStation.java
@@ -436,7 +436,7 @@
         }
         mRanking.getRanking(info.key, rank);
         info.alerted = rank.getLastAudiblyAlertedMillis() > 0;
-        info.visuallyInterruptive = rank.visuallyInterruptive();
+        info.visuallyInterruptive = rank.isTextChanged();
         info.channel = rank.getChannel();
         info.rankingExtra = generateRankingExtraText(info);
     }
diff --git a/src/com/android/settings/wifi/ConfigureWifiSettings.java b/src/com/android/settings/wifi/ConfigureWifiSettings.java
index 4ac2cfc..68d47b5 100644
--- a/src/com/android/settings/wifi/ConfigureWifiSettings.java
+++ b/src/com/android/settings/wifi/ConfigureWifiSettings.java
@@ -18,11 +18,16 @@
 import static android.content.Context.WIFI_SERVICE;
 
 import android.app.settings.SettingsEnums;
+import android.content.ComponentName;
 import android.content.Context;
 import android.content.Intent;
 import android.net.wifi.WifiManager;
 import android.os.Bundle;
 import android.util.FeatureFlagUtils;
+import android.util.Log;
+
+import androidx.preference.Preference;
+import androidx.preference.PreferenceScreen;
 
 import com.android.settings.R;
 import com.android.settings.dashboard.DashboardFragment;
@@ -38,10 +43,17 @@
 public class ConfigureWifiSettings extends DashboardFragment {
 
     private static final String TAG = "ConfigureWifiSettings";
+    private static final String KEY_INSTALL_CREDENTIALS = "install_credentials";
+    private static final String ACTION_INSTALL_CERTS = "android.credentials.INSTALL";
+    private static final String PACKAGE_INSTALL_CERTS = "com.android.certinstaller";
+    private static final String CLASS_INSTALL_CERTS = "com.android.certinstaller.CertInstallerMain";
+    private static final String KEY_INSTALL_CERTIFICATE = "certificate_install_usage";
+    private static final String INSTALL_CERTIFICATE_VALUE = "wifi";
 
     public static final int WIFI_WAKEUP_REQUEST_CODE = 600;
 
     private WifiWakeupPreferenceController mWifiWakeupPreferenceController;
+    private Preference mCertinstallerPreference;
 
     @Override
     public void onCreate(Bundle icicle) {
@@ -49,6 +61,22 @@
         if (FeatureFlagUtils.isEnabled(getContext(), FeatureFlagUtils.SETTINGS_PROVIDER_MODEL)) {
             getActivity().setTitle(R.string.network_and_internet_preferences_title);
         }
+
+        mCertinstallerPreference = findPreference(KEY_INSTALL_CREDENTIALS);
+        if (mCertinstallerPreference != null) {
+            mCertinstallerPreference.setOnPreferenceClickListener(preference -> {
+                Intent intent = new Intent(ACTION_INSTALL_CERTS);
+                intent.setFlags(
+                        Intent.FLAG_ACTIVITY_NEW_TASK);
+                intent.setComponent(
+                        new ComponentName(PACKAGE_INSTALL_CERTS, CLASS_INSTALL_CERTS));
+                intent.putExtra(KEY_INSTALL_CERTIFICATE, INSTALL_CERTIFICATE_VALUE);
+                getContext().startActivity(intent);
+                return true;
+            });
+        } else {
+            Log.d(TAG, "Can not find the preference.");
+        }
     }
 
     @Override
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java b/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java
index ac85d97..a2e78c3 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java
@@ -746,16 +746,6 @@
     }
 
     @Test
-    public void testInitPreferenceForTriState_isAllowlistedExceptIdleApp_hasCorrectString() {
-        when(mBatteryOptimizeUtils.isAllowlistedExceptIdleApp()).thenReturn(true);
-
-        mFragment.initPreferenceForTriState(mContext);
-
-        assertThat(mFooterPreference.getTitle().toString())
-                .isEqualTo("This app requires optimized battery usage.");
-    }
-
-    @Test
     public void testInitPreferenceForTriState_isSystemOrDefaultApp_hasCorrectString() {
         when(mBatteryOptimizeUtils.isValidPackageName()).thenReturn(true);
         when(mBatteryOptimizeUtils.isSystemOrDefaultApp()).thenReturn(true);
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/BatteryOptimizeUtilsTest.java b/tests/robotests/src/com/android/settings/fuelgauge/BatteryOptimizeUtilsTest.java
index c32be18..53101c0 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/BatteryOptimizeUtilsTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/BatteryOptimizeUtilsTest.java
@@ -125,18 +125,6 @@
     }
 
     @Test
-    public void testIsAllowlistedExpectIdle_isAllowlistedExceptIdle_returnTrue() {
-        when(mMockBackend.isAllowlistedExceptIdle(anyString())).thenReturn(true);
-
-        assertThat(mBatteryOptimizeUtils.isAllowlistedExceptIdleApp()).isTrue();
-    }
-
-    @Test
-    public void testIsAllowlistedExpectIdle_notAllowlistedExpectIdle_returnFalse() {
-        assertThat(mBatteryOptimizeUtils.isAllowlistedExceptIdleApp()).isFalse();
-    }
-
-    @Test
     public void testSetAppOptimizationMode_Restricted_verifyAction() {
         // Sets the current mode as MODE_UNRESTRICTED.
         mBatteryOptimizeUtils.mAllowListed = false;
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/OptimizedPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/OptimizedPreferenceControllerTest.java
index 923855d..9df3ac9 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/OptimizedPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/OptimizedPreferenceControllerTest.java
@@ -94,16 +94,6 @@
     }
 
     @Test
-    public void testUpdateState_isAllowlistedExceptIdleApp_prefEnabled() {
-        when(mockBatteryOptimizeUtils.isAllowlistedExceptIdleApp()).thenReturn(true);
-
-        mController.updateState(mPreference);
-
-        assertThat(mPreference.isEnabled()).isTrue();
-        assertThat(mPreference.isChecked()).isTrue();
-    }
-
-    @Test
     public void testHandlePreferenceTreeClick_samePrefKey_verifyAction() {
         mPreference.setKey(mController.KEY_OPTIMIZED_PREF);
         mController.handlePreferenceTreeClick(mPreference);
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/RestrictedPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/RestrictedPreferenceControllerTest.java
index 7b4271f..0986153 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/RestrictedPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/RestrictedPreferenceControllerTest.java
@@ -102,16 +102,6 @@
     }
 
     @Test
-    public void testUpdateState_isAllowlistedExceptIdleApp_prefDisabled() {
-        when(mockBatteryOptimizeUtils.isAllowlistedExceptIdleApp()).thenReturn(true);
-
-        mController.updateState(mPreference);
-
-        assertThat(mPreference.isChecked()).isFalse();
-        assertThat(mPreference.isEnabled()).isFalse();
-    }
-
-    @Test
     public void testHandlePreferenceTreeClick_samePrefKey_verifyAction() {
         mPreference.setKey(mController.KEY_RESTRICTED_PREF);
         mController.handlePreferenceTreeClick(mPreference);
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/UnrestrictedPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/UnrestrictedPreferenceControllerTest.java
index 5052784..004e97c 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/UnrestrictedPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/UnrestrictedPreferenceControllerTest.java
@@ -102,16 +102,6 @@
     }
 
     @Test
-    public void testUpdateState_isAllowlistedExceptIdleApp_prefDisabled() {
-        when(mockBatteryOptimizeUtils.isAllowlistedExceptIdleApp()).thenReturn(true);
-
-        mController.updateState(mPreference);
-
-        assertThat(mPreference.isChecked()).isFalse();
-        assertThat(mPreference.isEnabled()).isFalse();
-    }
-
-    @Test
     public void testHandlePreferenceTreeClick_samePrefKey_verifyAction() {
         mPreference.setKey(mController.KEY_UNRESTRICTED_PREF);
         mController.handlePreferenceTreeClick(mPreference);