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);