diff --git a/res/drawable/ia_settings_communal.xml b/res/drawable/ia_settings_communal.xml new file mode 100644 index 00000000000..14642c9a168 --- /dev/null +++ b/res/drawable/ia_settings_communal.xml @@ -0,0 +1,24 @@ + + + + + diff --git a/res/values/config.xml b/res/values/config.xml index e3b8618f482..4aa41425ce6 100755 --- a/res/values/config.xml +++ b/res/values/config.xml @@ -622,6 +622,9 @@ false + + false + false diff --git a/res/values/menu_keys.xml b/res/values/menu_keys.xml index 2841b699c97..27e9639122a 100755 --- a/res/values/menu_keys.xml +++ b/res/values/menu_keys.xml @@ -17,6 +17,7 @@ top_level_network + top_level_communal top_level_connected_devices top_level_apps top_level_notifications diff --git a/res/values/strings.xml b/res/values/strings.xml index b7f4cbdc8b4..1b0dd36f4be 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -4019,6 +4019,12 @@ Battery level + + + Communal + + Communal settings + APNs diff --git a/res/xml/communal_settings.xml b/res/xml/communal_settings.xml new file mode 100644 index 00000000000..1a7938f855e --- /dev/null +++ b/res/xml/communal_settings.xml @@ -0,0 +1,20 @@ + + + + diff --git a/res/xml/display_settings.xml b/res/xml/display_settings.xml index 1b5e6c01cc4..ad5236ecbd3 100644 --- a/res/xml/display_settings.xml +++ b/res/xml/display_settings.xml @@ -146,7 +146,8 @@ android:key="screensaver" android:title="@string/screensaver_settings_title" android:fragment="com.android.settings.dream.DreamSettings" - settings:keywords="@string/keywords_screensaver"/> + settings:keywords="@string/keywords_screensaver" + settings:controller="com.android.settings.display.ScreenSaverPreferenceController"/> + + controllers = new ArrayList<>(); controllers.add(new CameraGesturePreferenceController(context)); controllers.add(new LiftToWakePreferenceController(context)); - controllers.add(new ScreenSaverPreferenceController(context)); controllers.add(new TapToWakePreferenceController(context)); controllers.add(new VrDisplayPreferenceController(context)); controllers.add(new ShowOperatorNamePreferenceController(context)); diff --git a/src/com/android/settings/communal/CommunalDashboardFragment.java b/src/com/android/settings/communal/CommunalDashboardFragment.java new file mode 100644 index 00000000000..64f87b5fa8c --- /dev/null +++ b/src/com/android/settings/communal/CommunalDashboardFragment.java @@ -0,0 +1,44 @@ +/* + * Copyright (C) 2022 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.communal; + +import android.app.settings.SettingsEnums; + +import com.android.settings.R; +import com.android.settings.dashboard.DashboardFragment; + +/** + * Dashboard fragment for the top-level Communal settings. + */ +public class CommunalDashboardFragment extends DashboardFragment { + private static final String TAG = "CommunalFragment"; + + @Override + public int getMetricsCategory() { + return SettingsEnums.COMMUNAL_MODE_SETTINGS; + } + + @Override + protected int getPreferenceScreenResId() { + return R.xml.communal_settings; + } + + @Override + protected String getLogTag() { + return TAG; + } +} diff --git a/src/com/android/settings/communal/CommunalPreferenceController.java b/src/com/android/settings/communal/CommunalPreferenceController.java new file mode 100644 index 00000000000..e16dcc3435a --- /dev/null +++ b/src/com/android/settings/communal/CommunalPreferenceController.java @@ -0,0 +1,37 @@ +/* + * Copyright (C) 2022 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.communal; + +import android.content.Context; + +import com.android.settings.R; +import com.android.settings.core.BasePreferenceController; + +/** + * Controls the top-level Communal settings preference. + */ +public class CommunalPreferenceController extends BasePreferenceController { + public CommunalPreferenceController(Context context, String preferenceKey) { + super(context, preferenceKey); + } + + @Override + public int getAvailabilityStatus() { + return mContext.getResources().getBoolean(R.bool.config_show_communal_settings) + ? AVAILABLE : UNSUPPORTED_ON_DEVICE; + } +} diff --git a/src/com/android/settings/dashboard/DashboardFragmentRegistry.java b/src/com/android/settings/dashboard/DashboardFragmentRegistry.java index c2b51987adf..3c750b144b5 100644 --- a/src/com/android/settings/dashboard/DashboardFragmentRegistry.java +++ b/src/com/android/settings/dashboard/DashboardFragmentRegistry.java @@ -23,6 +23,7 @@ import com.android.settings.LegalSettings; import com.android.settings.accounts.AccountDashboardFragment; import com.android.settings.accounts.AccountDetailDashboardFragment; import com.android.settings.applications.AppDashboardFragment; +import com.android.settings.communal.CommunalDashboardFragment; import com.android.settings.connecteddevice.AdvancedConnectedDeviceDashboardFragment; import com.android.settings.connecteddevice.ConnectedDeviceDashboardFragment; import com.android.settings.development.DevelopmentSettingsDashboardFragment; @@ -125,6 +126,8 @@ public class DashboardFragmentRegistry { CategoryKey.CATEGORY_BATTERY_SAVER_SETTINGS); PARENT_TO_CATEGORY_KEY_MAP.put(SmartBatterySettings.class.getName(), CategoryKey.CATEGORY_SMART_BATTERY_SETTINGS); + PARENT_TO_CATEGORY_KEY_MAP.put(CommunalDashboardFragment.class.getName(), + CategoryKey.CATEGORY_COMMUNAL_SETTINGS); CATEGORY_KEY_TO_PARENT_MAP = new ArrayMap<>(PARENT_TO_CATEGORY_KEY_MAP.size()); diff --git a/src/com/android/settings/display/ScreenSaverPreferenceController.java b/src/com/android/settings/display/ScreenSaverPreferenceController.java index d6fef11b220..db4bc37054a 100644 --- a/src/com/android/settings/display/ScreenSaverPreferenceController.java +++ b/src/com/android/settings/display/ScreenSaverPreferenceController.java @@ -16,47 +16,41 @@ package com.android.settings.display; import android.content.Context; import android.os.UserManager; -import androidx.preference.Preference; - import com.android.settings.R; +import com.android.settings.core.BasePreferenceController; import com.android.settings.core.PreferenceControllerMixin; import com.android.settings.dream.DreamSettings; -import com.android.settingslib.core.AbstractPreferenceController; -public class ScreenSaverPreferenceController extends AbstractPreferenceController implements +public class ScreenSaverPreferenceController extends BasePreferenceController implements PreferenceControllerMixin { - private static final String KEY_SCREEN_SAVER = "screensaver"; private final boolean mDreamsDisabledByAmbientModeSuppression; - public ScreenSaverPreferenceController(Context context) { - super(context); + public ScreenSaverPreferenceController(Context context, String preferenceKey) { + super(context, preferenceKey); + mDreamsDisabledByAmbientModeSuppression = context.getResources().getBoolean( com.android.internal.R.bool.config_dreamsDisabledByAmbientModeSuppressionConfig); } @Override - public boolean isAvailable() { + public int getAvailabilityStatus() { final boolean dreamsSupported = mContext.getResources().getBoolean( com.android.internal.R.bool.config_dreamsSupported); final boolean dreamsOnlyEnabledForDockUser = mContext.getResources().getBoolean( com.android.internal.R.bool.config_dreamsOnlyEnabledForDockUser); // TODO(b/257333623): Allow the Dock User to be non-SystemUser user in HSUM. - return dreamsSupported && (!dreamsOnlyEnabledForDockUser || isSystemUser()); + return (dreamsSupported && (!dreamsOnlyEnabledForDockUser || isSystemUser())) + ? AVAILABLE : UNSUPPORTED_ON_DEVICE; } @Override - public String getPreferenceKey() { - return KEY_SCREEN_SAVER; - } - - @Override - public void updateState(Preference preference) { + public CharSequence getSummary() { if (mDreamsDisabledByAmbientModeSuppression && AmbientDisplayAlwaysOnPreferenceController.isAodSuppressedByBedtime(mContext)) { - preference.setSummary(R.string.screensaver_settings_when_to_dream_bedtime); + return mContext.getString(R.string.screensaver_settings_when_to_dream_bedtime); } else { - preference.setSummary(DreamSettings.getSummaryTextWithDreamName(mContext)); + return DreamSettings.getSummaryTextWithDreamName(mContext); } } diff --git a/tests/unit/src/com/android/settings/display/ScreenSaverPreferenceControllerTest.java b/tests/unit/src/com/android/settings/display/ScreenSaverPreferenceControllerTest.java index 484138e78bf..180ea90925f 100644 --- a/tests/unit/src/com/android/settings/display/ScreenSaverPreferenceControllerTest.java +++ b/tests/unit/src/com/android/settings/display/ScreenSaverPreferenceControllerTest.java @@ -45,11 +45,13 @@ public class ScreenSaverPreferenceControllerTest { private ScreenSaverPreferenceController mController; + private final String mPrefKey = "test_screensaver"; + @Before public void setup() { MockitoAnnotations.initMocks(this); - mController = new ScreenSaverPreferenceController(mContext); + mController = new ScreenSaverPreferenceController(mContext, mPrefKey); when(mContext.getResources()).thenReturn(mResources); when(mContext.getSystemService(UserManager.class)).thenReturn(mUserManager);