Snap for 12673321 from c4dd7a8288 to 25Q1-release

Change-Id: Ice50ea6e5d422b56c0ba8df391d5e84045d40b30
This commit is contained in:
Android Build Coastguard Worker
2024-11-19 00:21:25 +00:00
18 changed files with 145 additions and 87 deletions

View File

@@ -15,6 +15,13 @@ flag {
bug: "253296253" bug: "253296253"
} }
flag {
name: "display_topology_pane_in_display_list"
namespace: "display_manager"
description: "Shows the connected display setting and shows the topology pane in the display list, even with only one display connected."
bug: "352648432"
}
flag { flag {
name: "enable_auth_challenge_for_usb_preferences" name: "enable_auth_challenge_for_usb_preferences"
namespace: "safety_center" namespace: "safety_center"

View File

@@ -17,3 +17,14 @@ flag {
purpose: PURPOSE_BUGFIX purpose: PURPOSE_BUGFIX
} }
} }
flag {
name: "satellite_oem_settings_ux_migration"
namespace: "settings_experience"
description: "Migrate satellite UX to Android Settings"
bug: "378781925"
metadata {
purpose: PURPOSE_BUGFIX
}
}

View File

@@ -59,16 +59,15 @@
<com.android.settingslib.widget.SettingsSpinnerPreference <com.android.settingslib.widget.SettingsSpinnerPreference
android:key="battery_usage_spinner" android:key="battery_usage_spinner"
android:order="0"
settings:isPreferenceVisible="false" /> settings:isPreferenceVisible="false" />
<PreferenceCategory <!-- App usage preference list will be added here with the order in range [100, 1000). -->
android:key="app_list"
android:layout="@layout/preference_category_no_label"
settings:isPreferenceVisible="false" />
<com.android.settingslib.widget.FooterPreference <com.android.settingslib.widget.FooterPreference
android:key="battery_usage_footer" android:key="battery_usage_footer"
android:selectable="false" android:selectable="false"
android:order="1000"
settings:isPreferenceVisible="false" settings:isPreferenceVisible="false"
settings:searchable="false" /> settings:searchable="false" />

View File

@@ -17,6 +17,7 @@
package com.android.settings; package com.android.settings;
import static com.android.settings.SettingsActivity.EXTRA_FRAGMENT_ARG_KEY; import static com.android.settings.SettingsActivity.EXTRA_FRAGMENT_ARG_KEY;
import static com.android.settingslib.media.PhoneMediaDevice.isDesktop;
import android.app.Activity; import android.app.Activity;
import android.app.Dialog; import android.app.Dialog;
@@ -186,6 +187,13 @@ public abstract class SettingsPreferenceFragment extends InstrumentedPreferenceF
/** Returns if catalyst is enabled on current screen. */ /** Returns if catalyst is enabled on current screen. */
protected final boolean isCatalystEnabled() { protected final boolean isCatalystEnabled() {
// TODO(b/379130874): make Catalyst compatible with desktop device, such as user restriction
// check.
Context context = getContext();
if (context != null && isDesktop(context)) {
return false;
}
return getPreferenceScreenCreator() != null; return getPreferenceScreenCreator() != null;
} }

View File

@@ -22,6 +22,7 @@ import static android.view.Display.INVALID_DISPLAY;
import static com.android.settings.connecteddevice.display.ExternalDisplaySettingsConfiguration.EXTERNAL_DISPLAY_HELP_URL; import static com.android.settings.connecteddevice.display.ExternalDisplaySettingsConfiguration.EXTERNAL_DISPLAY_HELP_URL;
import static com.android.settings.connecteddevice.display.ExternalDisplaySettingsConfiguration.DISPLAY_ID_ARG; import static com.android.settings.connecteddevice.display.ExternalDisplaySettingsConfiguration.DISPLAY_ID_ARG;
import static com.android.settings.connecteddevice.display.ExternalDisplaySettingsConfiguration.EXTERNAL_DISPLAY_NOT_FOUND_RESOURCE; import static com.android.settings.connecteddevice.display.ExternalDisplaySettingsConfiguration.EXTERNAL_DISPLAY_NOT_FOUND_RESOURCE;
import static com.android.settings.connecteddevice.display.ExternalDisplaySettingsConfiguration.forceShowDisplayList;
import static com.android.settings.connecteddevice.display.ExternalDisplaySettingsConfiguration.isDisplayAllowed; import static com.android.settings.connecteddevice.display.ExternalDisplaySettingsConfiguration.isDisplayAllowed;
import static com.android.settings.connecteddevice.display.ExternalDisplaySettingsConfiguration.isUseDisplaySettingEnabled; import static com.android.settings.connecteddevice.display.ExternalDisplaySettingsConfiguration.isUseDisplaySettingEnabled;
import static com.android.settings.connecteddevice.display.ExternalDisplaySettingsConfiguration.isResolutionSettingEnabled; import static com.android.settings.connecteddevice.display.ExternalDisplaySettingsConfiguration.isResolutionSettingEnabled;
@@ -295,13 +296,20 @@ public class ExternalDisplayPreferenceFragment extends SettingsPreferenceFragmen
updateScreenForDisplayId(getDisplayIdArg(), screen, mInjector.getContext()); updateScreenForDisplayId(getDisplayIdArg(), screen, mInjector.getContext());
} }
private boolean okayToBypassDisplayListSelection() {
if (mInjector != null && forceShowDisplayList(mInjector.getFlags())) {
return false;
}
return !mPreviouslyShownListOfDisplays;
}
private void updateScreenForDisplayId(final int displayId, private void updateScreenForDisplayId(final int displayId,
@NonNull final PreferenceScreen screen, @NonNull Context context) { @NonNull final PreferenceScreen screen, @NonNull Context context) {
final var displaysToShow = getDisplaysToShow(displayId); final var displaysToShow = getDisplaysToShow(displayId);
if (displaysToShow.isEmpty() && displayId == INVALID_DISPLAY) { if (displaysToShow.isEmpty() && displayId == INVALID_DISPLAY) {
showTextWhenNoDisplaysToShow(screen, context); showTextWhenNoDisplaysToShow(screen, context);
} else if (displaysToShow.size() == 1 } else if (displaysToShow.size() == 1
&& ((displayId == INVALID_DISPLAY && !mPreviouslyShownListOfDisplays) && ((displayId == INVALID_DISPLAY && okayToBypassDisplayListSelection())
|| displaysToShow.get(0).getDisplayId() == displayId)) { || displaysToShow.get(0).getDisplayId() == displayId)) {
showDisplaySettings(displaysToShow.get(0), screen, context); showDisplaySettings(displaysToShow.get(0), screen, context);
} else if (displayId == INVALID_DISPLAY) { } else if (displayId == INVALID_DISPLAY) {

View File

@@ -319,7 +319,16 @@ public class ExternalDisplaySettingsConfiguration {
*/ */
public static boolean isExternalDisplaySettingsPageEnabled(@NonNull FeatureFlags flags) { public static boolean isExternalDisplaySettingsPageEnabled(@NonNull FeatureFlags flags) {
return flags.rotationConnectedDisplaySetting() return flags.rotationConnectedDisplaySetting()
|| flags.resolutionAndEnableConnectedDisplaySetting(); || flags.resolutionAndEnableConnectedDisplaySetting()
|| flags.displayTopologyPaneInDisplayList();
}
/**
* If true, indicates the display list activity should be shown even if there is only one
* display.
*/
public static boolean forceShowDisplayList(@NonNull FeatureFlags flags) {
return flags.displayTopologyPaneInDisplayList();
} }
static boolean isDisplayAllowed(@NonNull Display display, static boolean isDisplayAllowed(@NonNull Display display,

View File

@@ -16,6 +16,7 @@
package com.android.settings.connecteddevice.display; package com.android.settings.connecteddevice.display;
import static com.android.settings.connecteddevice.display.ExternalDisplaySettingsConfiguration.forceShowDisplayList;
import static com.android.settings.connecteddevice.display.ExternalDisplaySettingsConfiguration.isDisplayAllowed; import static com.android.settings.connecteddevice.display.ExternalDisplaySettingsConfiguration.isDisplayAllowed;
import android.content.Context; import android.content.Context;
@@ -142,6 +143,10 @@ public class ExternalDisplayUpdater {
} }
} }
if (forceShowDisplayList(mInjector.getFlags())) {
return context.getString(R.string.external_display_off);
}
for (var display : mInjector.getAllDisplays()) { for (var display : mInjector.getAllDisplays()) {
if (display != null && isDisplayAllowed(display, mInjector)) { if (display != null && isDisplayAllowed(display, mInjector)) {
return context.getString(R.string.external_display_off); return context.getString(R.string.external_display_off);

View File

@@ -16,6 +16,7 @@
package com.android.settings.fuelgauge.batteryusage; package com.android.settings.fuelgauge.batteryusage;
import android.annotation.Nullable;
import android.content.Context; import android.content.Context;
import android.text.TextUtils; import android.text.TextUtils;
import android.view.View; import android.view.View;
@@ -37,7 +38,7 @@ class AnomalyAppItemPreference extends PowerGaugePreference {
setLayoutResource(R.layout.anomaly_app_item_preference); setLayoutResource(R.layout.anomaly_app_item_preference);
} }
void setAnomalyHint(CharSequence anomalyHintText) { void setAnomalyHint(@Nullable CharSequence anomalyHintText) {
if (!TextUtils.equals(mAnomalyHintText, anomalyHintText)) { if (!TextUtils.equals(mAnomalyHintText, anomalyHintText)) {
mAnomalyHintText = anomalyHintText; mAnomalyHintText = anomalyHintText;
notifyChanged(); notifyChanged();

View File

@@ -31,7 +31,6 @@ import android.view.View;
import android.widget.AdapterView; import android.widget.AdapterView;
import androidx.preference.Preference; import androidx.preference.Preference;
import androidx.preference.PreferenceCategory;
import androidx.preference.PreferenceGroup; import androidx.preference.PreferenceGroup;
import androidx.preference.PreferenceScreen; import androidx.preference.PreferenceScreen;
@@ -68,11 +67,11 @@ public class BatteryUsageBreakdownController extends BasePreferenceController
private static final String ROOT_PREFERENCE_KEY = "battery_usage_breakdown"; private static final String ROOT_PREFERENCE_KEY = "battery_usage_breakdown";
private static final String FOOTER_PREFERENCE_KEY = "battery_usage_footer"; private static final String FOOTER_PREFERENCE_KEY = "battery_usage_footer";
private static final String SPINNER_PREFERENCE_KEY = "battery_usage_spinner"; private static final String SPINNER_PREFERENCE_KEY = "battery_usage_spinner";
private static final String APP_LIST_PREFERENCE_KEY = "app_list";
private static final String PACKAGE_NAME_NONE = "none"; private static final String PACKAGE_NAME_NONE = "none";
private static final String SLOT_TIMESTAMP = "slot_timestamp"; private static final String SLOT_TIMESTAMP = "slot_timestamp";
private static final String ANOMALY_KEY = "anomaly_key"; private static final String ANOMALY_KEY = "anomaly_key";
private static final String KEY_SPINNER_POSITION = "spinner_position"; private static final String KEY_SPINNER_POSITION = "spinner_position";
private static final int ENTRY_PREF_ORDER_OFFSET = 100;
private static final List<BatteryDiffEntry> EMPTY_ENTRY_LIST = new ArrayList<>(); private static final List<BatteryDiffEntry> EMPTY_ENTRY_LIST = new ArrayList<>();
private static int sUiMode = Configuration.UI_MODE_NIGHT_UNDEFINED; private static int sUiMode = Configuration.UI_MODE_NIGHT_UNDEFINED;
@@ -89,8 +88,7 @@ public class BatteryUsageBreakdownController extends BasePreferenceController
private SettingsSpinnerAdapter<CharSequence> mSpinnerAdapter; private SettingsSpinnerAdapter<CharSequence> mSpinnerAdapter;
@VisibleForTesting Context mPrefContext; @VisibleForTesting Context mPrefContext;
@VisibleForTesting PreferenceCategory mRootPreference; @VisibleForTesting PreferenceGroup mRootPreferenceGroup;
@VisibleForTesting PreferenceGroup mAppListPreferenceGroup;
@VisibleForTesting FooterPreference mFooterPreference; @VisibleForTesting FooterPreference mFooterPreference;
@VisibleForTesting BatteryDiffData mBatteryDiffData; @VisibleForTesting BatteryDiffData mBatteryDiffData;
@VisibleForTesting String mBatteryUsageBreakdownTitleLastFullChargeText; @VisibleForTesting String mBatteryUsageBreakdownTitleLastFullChargeText;
@@ -143,7 +141,7 @@ public class BatteryUsageBreakdownController extends BasePreferenceController
public void onDestroy() { public void onDestroy() {
mHandler.removeCallbacksAndMessages(/* token= */ null); mHandler.removeCallbacksAndMessages(/* token= */ null);
mPreferenceCache.clear(); mPreferenceCache.clear();
mAppListPreferenceGroup.removeAll(); mRootPreferenceGroup.removeAll();
} }
@Override @Override
@@ -226,9 +224,8 @@ public class BatteryUsageBreakdownController extends BasePreferenceController
public void displayPreference(PreferenceScreen screen) { public void displayPreference(PreferenceScreen screen) {
super.displayPreference(screen); super.displayPreference(screen);
mPrefContext = screen.getContext(); mPrefContext = screen.getContext();
mRootPreference = screen.findPreference(ROOT_PREFERENCE_KEY); mRootPreferenceGroup = screen.findPreference(ROOT_PREFERENCE_KEY);
mSpinnerPreference = screen.findPreference(SPINNER_PREFERENCE_KEY); mSpinnerPreference = screen.findPreference(SPINNER_PREFERENCE_KEY);
mAppListPreferenceGroup = screen.findPreference(APP_LIST_PREFERENCE_KEY);
mFooterPreference = screen.findPreference(FOOTER_PREFERENCE_KEY); mFooterPreference = screen.findPreference(FOOTER_PREFERENCE_KEY);
mBatteryUsageBreakdownTitleLastFullChargeText = mBatteryUsageBreakdownTitleLastFullChargeText =
mPrefContext.getString( mPrefContext.getString(
@@ -242,7 +239,7 @@ public class BatteryUsageBreakdownController extends BasePreferenceController
R.string.battery_usage_less_than_percent_content_description, R.string.battery_usage_less_than_percent_content_description,
formatPercentage); formatPercentage);
mAppListPreferenceGroup.setOrderingAsAdded(false); mRootPreferenceGroup.setOrderingAsAdded(false);
mSpinnerAdapter = new SettingsSpinnerAdapter<>(mPrefContext); mSpinnerAdapter = new SettingsSpinnerAdapter<>(mPrefContext);
mSpinnerAdapter.addAll( mSpinnerAdapter.addAll(
new String[] { new String[] {
@@ -328,8 +325,9 @@ public class BatteryUsageBreakdownController extends BasePreferenceController
: mPrefContext.getString( : mPrefContext.getString(
R.string.battery_usage_breakdown_title_for_slot, R.string.battery_usage_breakdown_title_for_slot,
accessibilitySlotTimestamp); accessibilitySlotTimestamp);
mRootPreference.setTitle(Utils.createAccessibleSequence(displayTitle, accessibilityTitle)); mRootPreferenceGroup.setTitle(
mRootPreference.setVisible(true); Utils.createAccessibleSequence(displayTitle, accessibilityTitle));
mRootPreferenceGroup.setVisible(true);
} }
private void showFooterPreference(boolean isAllBatteryUsageEmpty) { private void showFooterPreference(boolean isAllBatteryUsageEmpty) {
@@ -350,7 +348,6 @@ public class BatteryUsageBreakdownController extends BasePreferenceController
return; return;
} }
mSpinnerPreference.setVisible(true); mSpinnerPreference.setVisible(true);
mAppListPreferenceGroup.setVisible(true);
mHandler.post( mHandler.post(
() -> { () -> {
removeAndCacheAllUnusedPreferences(); removeAndCacheAllUnusedPreferences();
@@ -374,7 +371,7 @@ public class BatteryUsageBreakdownController extends BasePreferenceController
} }
final long start = System.currentTimeMillis(); final long start = System.currentTimeMillis();
final List<BatteryDiffEntry> entries = getBatteryDiffEntries(); final List<BatteryDiffEntry> entries = getBatteryDiffEntries();
int prefIndex = mAppListPreferenceGroup.getPreferenceCount(); int preferenceOrder = ENTRY_PREF_ORDER_OFFSET;
for (BatteryDiffEntry entry : entries) { for (BatteryDiffEntry entry : entries) {
boolean isAdded = false; boolean isAdded = false;
final String appLabel = entry.getAppLabel(); final String appLabel = entry.getAppLabel();
@@ -384,33 +381,32 @@ public class BatteryUsageBreakdownController extends BasePreferenceController
continue; continue;
} }
final String prefKey = entry.getKey(); final String prefKey = entry.getKey();
AnomalyAppItemPreference pref = mAppListPreferenceGroup.findPreference(prefKey); AnomalyAppItemPreference preference = mRootPreferenceGroup.findPreference(prefKey);
if (pref != null) { if (preference != null) {
isAdded = true; isAdded = true;
} else { } else {
pref = (AnomalyAppItemPreference) mPreferenceCache.get(prefKey); preference = (AnomalyAppItemPreference) mPreferenceCache.get(prefKey);
} }
// Creates new instance if cached preference is not found. // Creates new instance if cached preference is not found.
if (pref == null) { if (preference == null) {
pref = new AnomalyAppItemPreference(mPrefContext); preference = new AnomalyAppItemPreference(mPrefContext);
pref.setKey(prefKey); preference.setKey(prefKey);
mPreferenceCache.put(prefKey, pref); mPreferenceCache.put(prefKey, preference);
} }
pref.setIcon(appIcon); preference.setIcon(appIcon);
pref.setTitle(appLabel); preference.setTitle(appLabel);
pref.setOrder(prefIndex); preference.setOrder(++preferenceOrder);
pref.setSingleLineTitle(true); preference.setSingleLineTitle(true);
// Updates App item preference style // Updates App item preference style
pref.setAnomalyHint(isAnomalyBatteryDiffEntry(entry) ? mAnomalyHintString : null); preference.setAnomalyHint(isAnomalyBatteryDiffEntry(entry) ? mAnomalyHintString : null);
// Sets the BatteryDiffEntry to preference for launching detailed page. // Sets the BatteryDiffEntry to preference for launching detailed page.
pref.setBatteryDiffEntry(entry); preference.setBatteryDiffEntry(entry);
pref.setSelectable(entry.validForRestriction()); preference.setSelectable(entry.validForRestriction());
setPreferencePercentage(pref, entry); setPreferencePercentage(preference, entry);
setPreferenceSummary(pref, entry); setPreferenceSummary(preference, entry);
if (!isAdded) { if (!isAdded) {
mAppListPreferenceGroup.addPreference(pref); mRootPreferenceGroup.addPreference(preference);
} }
prefIndex++;
} }
Log.d( Log.d(
TAG, TAG,
@@ -424,17 +420,22 @@ public class BatteryUsageBreakdownController extends BasePreferenceController
List<BatteryDiffEntry> entries = getBatteryDiffEntries(); List<BatteryDiffEntry> entries = getBatteryDiffEntries();
Set<String> entryKeySet = new ArraySet<>(entries.size()); Set<String> entryKeySet = new ArraySet<>(entries.size());
entries.forEach(entry -> entryKeySet.add(entry.getKey())); entries.forEach(entry -> entryKeySet.add(entry.getKey()));
final int prefsCount = mAppListPreferenceGroup.getPreferenceCount(); final int preferenceCount = mRootPreferenceGroup.getPreferenceCount();
for (int index = prefsCount - 1; index >= 0; index--) { for (int index = preferenceCount - 1; index >= 0; index--) {
final Preference pref = mAppListPreferenceGroup.getPreference(index); final Preference preference = mRootPreferenceGroup.getPreference(index);
if (entryKeySet.contains(pref.getKey())) { if ((preference instanceof SettingsSpinnerPreference)
// The pref is still used, don't remove. || (preference instanceof FooterPreference)) {
// Consider the app preference only and skip others
continue; continue;
} }
if (!TextUtils.isEmpty(pref.getKey())) { if (entryKeySet.contains(preference.getKey())) {
mPreferenceCache.put(pref.getKey(), pref); // Don't remove the preference if it is still in use
continue;
} }
mAppListPreferenceGroup.removePreference(pref); if (!TextUtils.isEmpty(preference.getKey())) {
mPreferenceCache.put(preference.getKey(), preference);
}
mRootPreferenceGroup.removePreference(preference);
} }
} }

View File

@@ -18,7 +18,7 @@ package com.android.settings.network
import android.content.Context import android.content.Context
import android.content.pm.PackageManager import android.content.pm.PackageManager
import android.provider.Settings.Global.AIRPLANE_MODE_ON import android.provider.Settings
import androidx.annotation.DrawableRes import androidx.annotation.DrawableRes
import com.android.settings.R import com.android.settings.R
import com.android.settingslib.datastore.SettingsGlobalStore import com.android.settingslib.datastore.SettingsGlobalStore
@@ -27,7 +27,7 @@ import com.android.settingslib.metadata.SwitchPreference
// LINT.IfChange // LINT.IfChange
class AirplaneModePreference : class AirplaneModePreference :
SwitchPreference(AIRPLANE_MODE_ON, R.string.airplane_mode), SwitchPreference(KEY, R.string.airplane_mode),
PreferenceAvailabilityProvider { PreferenceAvailabilityProvider {
override val icon: Int override val icon: Int
@@ -38,5 +38,9 @@ class AirplaneModePreference :
override fun isAvailable(context: Context) = override fun isAvailable(context: Context) =
(context.resources.getBoolean(R.bool.config_show_toggle_airplane) (context.resources.getBoolean(R.bool.config_show_toggle_airplane)
&& !context.packageManager.hasSystemFeature(PackageManager.FEATURE_LEANBACK)) && !context.packageManager.hasSystemFeature(PackageManager.FEATURE_LEANBACK))
companion object {
const val KEY = Settings.Global.AIRPLANE_MODE_ON
}
} }
// LINT.ThenChange(AirplaneModePreferenceController.java) // LINT.ThenChange(AirplaneModePreferenceController.java)

View File

@@ -15,8 +15,6 @@
*/ */
package com.android.settings.network; package com.android.settings.network;
import static android.provider.SettingsSlicesContract.KEY_AIRPLANE_MODE;
import static com.android.settings.network.SatelliteWarningDialogActivity.EXTRA_TYPE_OF_SATELLITE_WARNING_DIALOG; import static com.android.settings.network.SatelliteWarningDialogActivity.EXTRA_TYPE_OF_SATELLITE_WARNING_DIALOG;
import static com.android.settings.network.SatelliteWarningDialogActivity.TYPE_IS_AIRPLANE_MODE; import static com.android.settings.network.SatelliteWarningDialogActivity.TYPE_IS_AIRPLANE_MODE;
@@ -95,7 +93,7 @@ public class AirplaneModePreferenceController extends TogglePreferenceController
@Override @Override
public boolean handlePreferenceTreeClick(Preference preference) { public boolean handlePreferenceTreeClick(Preference preference) {
if (KEY_AIRPLANE_MODE.equals(preference.getKey()) && isAvailable()) { if (AirplaneModePreference.KEY.equals(preference.getKey()) && isAvailable()) {
// In ECM mode launch ECM app dialog // In ECM mode launch ECM app dialog
if (mAirplaneModeEnabler.isInEcmMode()) { if (mAirplaneModeEnabler.isInEcmMode()) {
if (mFragment != null) { if (mFragment != null) {

View File

@@ -21,7 +21,6 @@ import android.content.Intent
import android.os.UserManager import android.os.UserManager
import android.telephony.SubscriptionInfo import android.telephony.SubscriptionInfo
import android.telephony.euicc.EuiccManager import android.telephony.euicc.EuiccManager
import androidx.compose.foundation.layout.Column
import androidx.compose.material.icons.Icons import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.Add import androidx.compose.material.icons.outlined.Add
import androidx.compose.material.icons.outlined.SimCard import androidx.compose.material.icons.outlined.SimCard
@@ -44,6 +43,7 @@ import com.android.settings.network.telephony.euicc.EuiccRepository
import com.android.settings.network.telephony.phoneNumberFlow import com.android.settings.network.telephony.phoneNumberFlow
import com.android.settingslib.spa.widget.preference.PreferenceModel import com.android.settingslib.spa.widget.preference.PreferenceModel
import com.android.settingslib.spa.widget.preference.SwitchPreferenceModel import com.android.settingslib.spa.widget.preference.SwitchPreferenceModel
import com.android.settingslib.spa.widget.ui.Category
import com.android.settingslib.spa.widget.ui.SettingsIcon import com.android.settingslib.spa.widget.ui.SettingsIcon
import com.android.settingslib.spaprivileged.model.enterprise.Restrictions import com.android.settingslib.spaprivileged.model.enterprise.Restrictions
import com.android.settingslib.spaprivileged.template.preference.RestrictedPreference import com.android.settingslib.spaprivileged.template.preference.RestrictedPreference
@@ -53,7 +53,7 @@ import kotlinx.coroutines.launch
@Composable @Composable
fun SimsSection(subscriptionInfoList: List<SubscriptionInfo>) { fun SimsSection(subscriptionInfoList: List<SubscriptionInfo>) {
Column { Category {
for (subInfo in subscriptionInfoList) { for (subInfo in subscriptionInfoList) {
SimPreference(subInfo) SimPreference(subInfo)
} }

View File

@@ -21,6 +21,7 @@ import android.app.settings.SettingsEnums
import android.content.DialogInterface import android.content.DialogInterface
import android.os.Bundle import android.os.Bundle
import android.os.Looper import android.os.Looper
import android.telecom.TelecomManager
import android.telephony.SubscriptionManager import android.telephony.SubscriptionManager
import android.util.Log import android.util.Log
import android.view.LayoutInflater import android.view.LayoutInflater
@@ -89,7 +90,12 @@ class ResetNetworkConfirm : InstrumentedFragment() {
/** Configure the UI for the final confirmation interaction */ /** Configure the UI for the final confirmation interaction */
private fun View.establishFinalConfirmationState() { private fun View.establishFinalConfirmationState() {
requireViewById<View>(R.id.execute_reset_network).setOnClickListener { requireViewById<View>(R.id.execute_reset_network).setOnClickListener {
showResetInternetDialog(); val tm = context.getSystemService(TelecomManager::class.java)
if (tm != null && tm.isInCall) {
showResetInternetDialog();
} else {
onResetClicked()
}
} }
} }
@@ -138,9 +144,13 @@ class ResetNetworkConfirm : InstrumentedFragment() {
* settings to its factory-default state. * settings to its factory-default state.
*/ */
@VisibleForTesting @VisibleForTesting
suspend fun onResetClicked() { fun onResetClicked() {
showProgressDialog() if (!Utils.isMonkeyRunning() && !resetStarted) {
resetNetwork() resetStarted = true
viewLifecycleOwner.lifecycleScope.launch {
showProgressDialog()
resetNetwork() }
}
} }
private fun showProgressDialog() { private fun showProgressDialog() {
@@ -165,10 +175,7 @@ class ResetNetworkConfirm : InstrumentedFragment() {
val builder = AlertDialog.Builder(requireContext()) val builder = AlertDialog.Builder(requireContext())
val resetInternetClickListener = val resetInternetClickListener =
DialogInterface.OnClickListener { dialog, which -> DialogInterface.OnClickListener { dialog, which ->
if (!Utils.isMonkeyRunning() && !resetStarted) { onResetClicked()
resetStarted = true
viewLifecycleOwner.lifecycleScope.launch { onResetClicked() }
}
} }
builder.setTitle(R.string.reset_your_internet_title) builder.setTitle(R.string.reset_your_internet_title)

View File

@@ -20,7 +20,6 @@ import static com.google.common.truth.Truth.assertThat;
import android.app.Instrumentation; import android.app.Instrumentation;
import android.provider.Settings; import android.provider.Settings;
import android.provider.SettingsSlicesContract;
import android.util.Log; import android.util.Log;
import androidx.test.ext.junit.runners.AndroidJUnit4; import androidx.test.ext.junit.runners.AndroidJUnit4;
@@ -64,7 +63,7 @@ public class AirplaneModePreferenceControllerComponentTest {
public void test_on_off_airplane_mode_multiple_times() { public void test_on_off_airplane_mode_multiple_times() {
AirplaneModePreferenceController controller = AirplaneModePreferenceController controller =
new AirplaneModePreferenceController(mInstrumentation.getTargetContext(), new AirplaneModePreferenceController(mInstrumentation.getTargetContext(),
SettingsSlicesContract.KEY_AIRPLANE_MODE); AirplaneModePreference.KEY);
for (int i = 0; i < 10; ++i) { for (int i = 0; i < 10; ++i) {
Log.d(TAG, "Test #" + (i + 1)); Log.d(TAG, "Test #" + (i + 1));

View File

@@ -17,6 +17,7 @@ package com.android.settings.connecteddevice;
import static com.android.settings.core.BasePreferenceController.AVAILABLE_UNSEARCHABLE; import static com.android.settings.core.BasePreferenceController.AVAILABLE_UNSEARCHABLE;
import static com.android.settings.core.BasePreferenceController.UNSUPPORTED_ON_DEVICE; import static com.android.settings.core.BasePreferenceController.UNSUPPORTED_ON_DEVICE;
import static com.android.settings.flags.Flags.FLAG_DISPLAY_TOPOLOGY_PANE_IN_DISPLAY_LIST;
import static com.android.settings.flags.Flags.FLAG_RESOLUTION_AND_ENABLE_CONNECTED_DISPLAY_SETTING; import static com.android.settings.flags.Flags.FLAG_RESOLUTION_AND_ENABLE_CONNECTED_DISPLAY_SETTING;
import static com.android.settings.flags.Flags.FLAG_ROTATION_CONNECTED_DISPLAY_SETTING; import static com.android.settings.flags.Flags.FLAG_ROTATION_CONNECTED_DISPLAY_SETTING;
@@ -128,6 +129,7 @@ public class ConnectedDeviceGroupControllerTest {
@Before @Before
public void setUp() { public void setUp() {
MockitoAnnotations.initMocks(this); MockitoAnnotations.initMocks(this);
mFakeFeatureFlags.setFlag(FLAG_DISPLAY_TOPOLOGY_PANE_IN_DISPLAY_LIST, false);
mFakeFeatureFlags.setFlag(FLAG_ROTATION_CONNECTED_DISPLAY_SETTING, true); mFakeFeatureFlags.setFlag(FLAG_ROTATION_CONNECTED_DISPLAY_SETTING, true);
mFakeFeatureFlags.setFlag(FLAG_RESOLUTION_AND_ENABLE_CONNECTED_DISPLAY_SETTING, true); mFakeFeatureFlags.setFlag(FLAG_RESOLUTION_AND_ENABLE_CONNECTED_DISPLAY_SETTING, true);

View File

@@ -59,11 +59,12 @@ public final class BatteryUsageBreakdownControllerTest {
private static final String PREF_KEY2 = "pref_key2"; private static final String PREF_KEY2 = "pref_key2";
private static final String PREF_SUMMARY = "fake preference summary"; private static final String PREF_SUMMARY = "fake preference summary";
private static final String KEY_SPINNER_POSITION = "spinner_position"; private static final String KEY_SPINNER_POSITION = "spinner_position";
private static final long TIME_LESS_THAN_HALF_MINUTE = DateUtils.MINUTE_IN_MILLIS / 2 - 1; private static final int ENTRY_PREF_ORDER_OFFSET = 100;
private static final long TIME_LESS_THAN_HALF_MINUTE = DateUtils.MINUTE_IN_MILLIS / 2 - 1;
@Mock private InstrumentedPreferenceFragment mFragment; @Mock private InstrumentedPreferenceFragment mFragment;
@Mock private SettingsActivity mSettingsActivity; @Mock private SettingsActivity mSettingsActivity;
@Mock private PreferenceGroup mAppListPreferenceGroup; @Mock private PreferenceGroup mRootPreferenceGroup;
@Mock private Drawable mDrawable; @Mock private Drawable mDrawable;
@Mock private BatteryHistEntry mBatteryHistEntry; @Mock private BatteryHistEntry mBatteryHistEntry;
@Mock private AnomalyAppItemPreference mAnomalyAppItemPreference; @Mock private AnomalyAppItemPreference mAnomalyAppItemPreference;
@@ -90,7 +91,7 @@ public final class BatteryUsageBreakdownControllerTest {
.when(mFeatureFactory.powerUsageFeatureProvider) .when(mFeatureFactory.powerUsageFeatureProvider)
.getHideApplicationSet(); .getHideApplicationSet();
mBatteryUsageBreakdownController = createController(); mBatteryUsageBreakdownController = createController();
mBatteryUsageBreakdownController.mAppListPreferenceGroup = mAppListPreferenceGroup; mBatteryUsageBreakdownController.mRootPreferenceGroup = mRootPreferenceGroup;
mBatteryDiffEntry = mBatteryDiffEntry =
new BatteryDiffEntry( new BatteryDiffEntry(
mContext, mContext,
@@ -130,7 +131,7 @@ public final class BatteryUsageBreakdownControllerTest {
BatteryDiffEntry.sResourceCache.put( BatteryDiffEntry.sResourceCache.put(
"fakeBatteryDiffEntryKey", "fakeBatteryDiffEntryKey",
new BatteryEntry.NameAndIcon("fakeName", /* icon= */ null, /* iconId= */ 1)); new BatteryEntry.NameAndIcon("fakeName", /* icon= */ null, /* iconId= */ 1));
doReturn(mAnomalyAppItemPreference).when(mAppListPreferenceGroup).findPreference(PREF_KEY); doReturn(mAnomalyAppItemPreference).when(mRootPreferenceGroup).findPreference(PREF_KEY);
} }
@Test @Test
@@ -147,7 +148,7 @@ public final class BatteryUsageBreakdownControllerTest {
@Test @Test
public void onDestroy_removeAllPreferenceFromPreferenceGroup() { public void onDestroy_removeAllPreferenceFromPreferenceGroup() {
mBatteryUsageBreakdownController.onDestroy(); mBatteryUsageBreakdownController.onDestroy();
verify(mAppListPreferenceGroup).removeAll(); verify(mRootPreferenceGroup).removeAll();
} }
@Test @Test
@@ -162,11 +163,11 @@ public final class BatteryUsageBreakdownControllerTest {
@Test @Test
public void addAllPreferences_addAllPreferences() { public void addAllPreferences_addAllPreferences() {
final String appLabel = "fake app label"; final String appLabel = "fake app label";
doReturn(1).when(mAppListPreferenceGroup).getPreferenceCount(); doReturn(1).when(mRootPreferenceGroup).getPreferenceCount();
doReturn(mDrawable).when(mBatteryDiffEntry).getAppIcon(); doReturn(mDrawable).when(mBatteryDiffEntry).getAppIcon();
doReturn(appLabel).when(mBatteryDiffEntry).getAppLabel(); doReturn(appLabel).when(mBatteryDiffEntry).getAppLabel();
doReturn(PREF_KEY).when(mBatteryDiffEntry).getKey(); doReturn(PREF_KEY).when(mBatteryDiffEntry).getKey();
doReturn(null).when(mAppListPreferenceGroup).findPreference(PREF_KEY); doReturn(null).when(mRootPreferenceGroup).findPreference(PREF_KEY);
doReturn(false).when(mBatteryDiffEntry).validForRestriction(); doReturn(false).when(mBatteryDiffEntry).validForRestriction();
mBatteryUsageBreakdownController.addAllPreferences(); mBatteryUsageBreakdownController.addAllPreferences();
@@ -177,11 +178,11 @@ public final class BatteryUsageBreakdownControllerTest {
mBatteryUsageBreakdownController.mPreferenceCache.get(PREF_KEY); mBatteryUsageBreakdownController.mPreferenceCache.get(PREF_KEY);
assertThat(pref).isNotNull(); assertThat(pref).isNotNull();
// Verifies the added preference configuration. // Verifies the added preference configuration.
verify(mAppListPreferenceGroup).addPreference(pref); verify(mRootPreferenceGroup).addPreference(pref);
assertThat(pref.getKey()).isEqualTo(PREF_KEY); assertThat(pref.getKey()).isEqualTo(PREF_KEY);
assertThat(pref.getTitle().toString()).isEqualTo(appLabel); assertThat(pref.getTitle().toString()).isEqualTo(appLabel);
assertThat(pref.getIcon()).isEqualTo(mDrawable); assertThat(pref.getIcon()).isEqualTo(mDrawable);
assertThat(pref.getOrder()).isEqualTo(1); assertThat(pref.getOrder()).isEqualTo(ENTRY_PREF_ORDER_OFFSET + 1);
assertThat(pref.getBatteryDiffEntry()).isSameInstanceAs(mBatteryDiffEntry); assertThat(pref.getBatteryDiffEntry()).isSameInstanceAs(mBatteryDiffEntry);
assertThat(pref.isSingleLineTitle()).isTrue(); assertThat(pref.isSingleLineTitle()).isTrue();
assertThat(pref.isSelectable()).isFalse(); assertThat(pref.isSelectable()).isFalse();
@@ -190,20 +191,20 @@ public final class BatteryUsageBreakdownControllerTest {
@Test @Test
public void addPreferenceToScreen_alreadyInScreen_notAddPreferenceAgain() { public void addPreferenceToScreen_alreadyInScreen_notAddPreferenceAgain() {
final String appLabel = "fake app label"; final String appLabel = "fake app label";
doReturn(1).when(mAppListPreferenceGroup).getPreferenceCount(); doReturn(1).when(mRootPreferenceGroup).getPreferenceCount();
doReturn(mDrawable).when(mBatteryDiffEntry).getAppIcon(); doReturn(mDrawable).when(mBatteryDiffEntry).getAppIcon();
doReturn(appLabel).when(mBatteryDiffEntry).getAppLabel(); doReturn(appLabel).when(mBatteryDiffEntry).getAppLabel();
doReturn(PREF_KEY).when(mBatteryDiffEntry).getKey(); doReturn(PREF_KEY).when(mBatteryDiffEntry).getKey();
mBatteryUsageBreakdownController.addAllPreferences(); mBatteryUsageBreakdownController.addAllPreferences();
verify(mAppListPreferenceGroup, never()).addPreference(any()); verify(mRootPreferenceGroup, never()).addPreference(any());
} }
@Test @Test
public void removeAndCacheAllUnusedPreferences_removePref_buildCacheAndRemoveAllPreference() { public void removeAndCacheAllUnusedPreferences_removePref_buildCacheAndRemoveAllPreference() {
doReturn(1).when(mAppListPreferenceGroup).getPreferenceCount(); doReturn(1).when(mRootPreferenceGroup).getPreferenceCount();
doReturn(mAnomalyAppItemPreference).when(mAppListPreferenceGroup).getPreference(0); doReturn(mAnomalyAppItemPreference).when(mRootPreferenceGroup).getPreference(0);
doReturn(PREF_KEY2).when(mBatteryHistEntry).getKey(); doReturn(PREF_KEY2).when(mBatteryHistEntry).getKey();
doReturn(PREF_KEY).when(mAnomalyAppItemPreference).getKey(); doReturn(PREF_KEY).when(mAnomalyAppItemPreference).getKey();
// Ensures the testing data is correct. // Ensures the testing data is correct.
@@ -213,13 +214,13 @@ public final class BatteryUsageBreakdownControllerTest {
assertThat(mBatteryUsageBreakdownController.mPreferenceCache.get(PREF_KEY)) assertThat(mBatteryUsageBreakdownController.mPreferenceCache.get(PREF_KEY))
.isEqualTo(mAnomalyAppItemPreference); .isEqualTo(mAnomalyAppItemPreference);
verify(mAppListPreferenceGroup).removePreference(mAnomalyAppItemPreference); verify(mRootPreferenceGroup).removePreference(mAnomalyAppItemPreference);
} }
@Test @Test
public void removeAndCacheAllUnusedPreferences_keepPref_KeepAllPreference() { public void removeAndCacheAllUnusedPreferences_keepPref_KeepAllPreference() {
doReturn(1).when(mAppListPreferenceGroup).getPreferenceCount(); doReturn(1).when(mRootPreferenceGroup).getPreferenceCount();
doReturn(mAnomalyAppItemPreference).when(mAppListPreferenceGroup).getPreference(0); doReturn(mAnomalyAppItemPreference).when(mRootPreferenceGroup).getPreference(0);
doReturn(PREF_KEY).when(mBatteryDiffEntry).getKey(); doReturn(PREF_KEY).when(mBatteryDiffEntry).getKey();
doReturn(PREF_KEY).when(mAnomalyAppItemPreference).getKey(); doReturn(PREF_KEY).when(mAnomalyAppItemPreference).getKey();
// Ensures the testing data is correct. // Ensures the testing data is correct.
@@ -227,15 +228,13 @@ public final class BatteryUsageBreakdownControllerTest {
mBatteryUsageBreakdownController.removeAndCacheAllUnusedPreferences(); mBatteryUsageBreakdownController.removeAndCacheAllUnusedPreferences();
verify(mAppListPreferenceGroup, never()).removePreference(any()); verify(mRootPreferenceGroup, never()).removePreference(any());
assertThat(mBatteryUsageBreakdownController.mPreferenceCache).isEmpty(); assertThat(mBatteryUsageBreakdownController.mPreferenceCache).isEmpty();
} }
@Test @Test
public void handlePreferenceTreeClick_notPowerGaugePreference_returnFalse() { public void handlePreferenceTreeClick_notPowerGaugePreference_returnFalse() {
assertThat( assertThat(mBatteryUsageBreakdownController.handlePreferenceTreeClick(mRootPreferenceGroup))
mBatteryUsageBreakdownController.handlePreferenceTreeClick(
mAppListPreferenceGroup))
.isFalse(); .isFalse();
verify(mMetricsFeatureProvider, never()) verify(mMetricsFeatureProvider, never())

View File

@@ -16,8 +16,9 @@
package com.android.settings.connecteddevice.display; package com.android.settings.connecteddevice.display;
import static com.android.settings.connecteddevice.display.ExternalDisplaySettingsConfiguration.VIRTUAL_DISPLAY_PACKAGE_NAME_SYSTEM_PROPERTY; import static com.android.settings.connecteddevice.display.ExternalDisplaySettingsConfiguration.VIRTUAL_DISPLAY_PACKAGE_NAME_SYSTEM_PROPERTY;
import static com.android.settings.flags.Flags.FLAG_ROTATION_CONNECTED_DISPLAY_SETTING; import static com.android.settings.flags.Flags.FLAG_DISPLAY_TOPOLOGY_PANE_IN_DISPLAY_LIST;
import static com.android.settings.flags.Flags.FLAG_RESOLUTION_AND_ENABLE_CONNECTED_DISPLAY_SETTING; import static com.android.settings.flags.Flags.FLAG_RESOLUTION_AND_ENABLE_CONNECTED_DISPLAY_SETTING;
import static com.android.settings.flags.Flags.FLAG_ROTATION_CONNECTED_DISPLAY_SETTING;
import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.anyInt;
@@ -74,6 +75,7 @@ public class ExternalDisplayTestBase {
mPreferenceScreen = mPreferenceManager.createPreferenceScreen(mContext); mPreferenceScreen = mPreferenceManager.createPreferenceScreen(mContext);
doReturn(0).when(mMockedIDisplayManager).getPreferredWideGamutColorSpaceId(); doReturn(0).when(mMockedIDisplayManager).getPreferredWideGamutColorSpaceId();
mDisplayManagerGlobal = new DisplayManagerGlobal(mMockedIDisplayManager); mDisplayManagerGlobal = new DisplayManagerGlobal(mMockedIDisplayManager);
mFlags.setFlag(FLAG_DISPLAY_TOPOLOGY_PANE_IN_DISPLAY_LIST, false);
mFlags.setFlag(FLAG_ROTATION_CONNECTED_DISPLAY_SETTING, true); mFlags.setFlag(FLAG_ROTATION_CONNECTED_DISPLAY_SETTING, true);
mFlags.setFlag(FLAG_RESOLUTION_AND_ENABLE_CONNECTED_DISPLAY_SETTING, true); mFlags.setFlag(FLAG_RESOLUTION_AND_ENABLE_CONNECTED_DISPLAY_SETTING, true);
mDisplays = new Display[] { mDisplays = new Display[] {

View File

@@ -16,8 +16,6 @@
package com.android.settings.network; package com.android.settings.network;
import static android.provider.SettingsSlicesContract.KEY_AIRPLANE_MODE;
import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.any;
@@ -78,12 +76,12 @@ public class AirplaneModePreferenceControllerTest {
mResolver = mContext.getContentResolver(); mResolver = mContext.getContentResolver();
doReturn(mPackageManager).when(mContext).getPackageManager(); doReturn(mPackageManager).when(mContext).getPackageManager();
mController = new AirplaneModePreferenceController(mContext, mController = new AirplaneModePreferenceController(mContext,
KEY_AIRPLANE_MODE); AirplaneModePreference.KEY);
mPreferenceManager = new PreferenceManager(mContext); mPreferenceManager = new PreferenceManager(mContext);
mScreen = mPreferenceManager.createPreferenceScreen(mContext); mScreen = mPreferenceManager.createPreferenceScreen(mContext);
mPreference = new RestrictedSwitchPreference(mContext); mPreference = new RestrictedSwitchPreference(mContext);
mPreference.setKey(KEY_AIRPLANE_MODE); mPreference.setKey(AirplaneModePreference.KEY);
mScreen.addPreference(mPreference); mScreen.addPreference(mPreference);
mController.setFragment(null); mController.setFragment(null);
} }