Add intent for entering communal settings

This allows other apps to link to communal settings.

Fixes: 276742740
Test: adb shell am start -a android.settings.COMMUNAL_SETTINGS
Test: switched to secondary user, attempted to launch using command
above. Verified it didn't work

Change-Id: I5e845ecba58d8443d41aeea95bc6068a0041cac8
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 100a071..cebe7a2 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -3293,6 +3293,24 @@
         </activity>
 
         <activity
+            android:name="Settings$CommunalSettingsActivity"
+            android:label="@string/communal_settings_title"
+            android:exported="true"
+            android:icon="@drawable/ia_settings_communal">
+            <intent-filter android:priority="1">
+                <action android:name="android.settings.COMMUNAL_SETTINGS" />
+                <category android:name="android.intent.category.BROWSABLE" />
+                <category android:name="android.intent.category.DEFAULT" />
+            </intent-filter>
+            <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
+                       android:value="com.android.settings.communal.CommunalDashboardFragment" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_communal"/>
+            <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
+                       android:value="true" />
+        </activity>
+
+        <activity
             android:name="Settings$UserSettingsActivity"
             android:label="@string/user_settings_title"
             android:exported="true"
diff --git a/src/com/android/settings/Settings.java b/src/com/android/settings/Settings.java
index 50a52aa..990f18a 100644
--- a/src/com/android/settings/Settings.java
+++ b/src/com/android/settings/Settings.java
@@ -29,6 +29,7 @@
 
 import com.android.internal.annotations.VisibleForTesting;
 import com.android.settings.biometrics.face.FaceSettings;
+import com.android.settings.communal.CommunalPreferenceController;
 import com.android.settings.core.FeatureFlags;
 import com.android.settings.enterprise.EnterprisePrivacySettings;
 import com.android.settings.network.MobileNetworkIntentConverter;
@@ -314,6 +315,16 @@
     public static class AndroidBeamSettingsActivity extends SettingsActivity { /* empty */ }
     public static class WifiDisplaySettingsActivity extends SettingsActivity { /* empty */ }
     public static class DreamSettingsActivity extends SettingsActivity { /* empty */ }
+    /** Activity to manage communal settings */
+    public static class CommunalSettingsActivity extends SettingsActivity {
+        @Override
+        public void onCreate(Bundle savedInstanceState) {
+            super.onCreate(savedInstanceState);
+            if (!CommunalPreferenceController.isAvailable(this)) {
+                finish();
+            }
+        }
+    }
     public static class NotificationStationActivity extends SettingsActivity { /* empty */ }
     public static class UserSettingsActivity extends SettingsActivity { /* empty */ }
     public static class NotificationAccessSettingsActivity extends SettingsActivity { /* empty */ }
diff --git a/src/com/android/settings/communal/CommunalPreferenceController.java b/src/com/android/settings/communal/CommunalPreferenceController.java
index 67fd389..706e392 100644
--- a/src/com/android/settings/communal/CommunalPreferenceController.java
+++ b/src/com/android/settings/communal/CommunalPreferenceController.java
@@ -32,8 +32,14 @@
 
     @Override
     public int getAvailabilityStatus() {
-        return (mContext.getResources().getBoolean(R.bool.config_show_communal_settings)
-                && Utils.canCurrentUserDream(mContext))
-                ? AVAILABLE : UNSUPPORTED_ON_DEVICE;
+        return isAvailable(mContext) ? AVAILABLE : UNSUPPORTED_ON_DEVICE;
+    }
+
+    /**
+     * Returns whether communal preferences are available.
+     */
+    public static boolean isAvailable(Context context) {
+        return context.getResources().getBoolean(R.bool.config_show_communal_settings)
+                && Utils.canCurrentUserDream(context);
     }
 }
diff --git a/src/com/android/settings/core/gateway/SettingsGateway.java b/src/com/android/settings/core/gateway/SettingsGateway.java
index 708f317..87d0a7e 100644
--- a/src/com/android/settings/core/gateway/SettingsGateway.java
+++ b/src/com/android/settings/core/gateway/SettingsGateway.java
@@ -78,6 +78,7 @@
 import com.android.settings.bluetooth.BluetoothFindBroadcastsFragment;
 import com.android.settings.bluetooth.BluetoothPairingDetail;
 import com.android.settings.bugreporthandler.BugReportHandlerPicker;
+import com.android.settings.communal.CommunalDashboardFragment;
 import com.android.settings.connecteddevice.AdvancedConnectedDeviceDashboardFragment;
 import com.android.settings.connecteddevice.ConnectedDeviceDashboardFragment;
 import com.android.settings.connecteddevice.NfcAndPaymentFragment;
@@ -275,6 +276,7 @@
             SystemNavigationGestureSettings.class.getName(),
             DataUsageSummary.class.getName(),
             DreamSettings.class.getName(),
+            CommunalDashboardFragment.class.getName(),
             UserSettings.class.getName(),
             NotificationAccessSettings.class.getName(),
             NotificationAccessDetails.class.getName(),