1 /*
2  * Copyright (C) 2022 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.settings.spa.app
18 
19 import android.os.Bundle
20 import androidx.compose.material.icons.Icons
21 import androidx.compose.material.icons.outlined.Apps
22 import androidx.compose.runtime.Composable
23 import androidx.compose.ui.res.stringResource
24 import com.android.settings.R
25 import com.android.settings.spa.app.backgroundinstall.BackgroundInstalledAppsPageProvider
26 import com.android.settings.spa.app.specialaccess.SpecialAppAccessPageProvider
27 import com.android.settingslib.spa.framework.common.SettingsEntry
28 import com.android.settingslib.spa.framework.common.SettingsEntryBuilder
29 import com.android.settingslib.spa.framework.common.SettingsPageProvider
30 import com.android.settingslib.spa.framework.common.SpaEnvironmentFactory
31 import com.android.settingslib.spa.framework.common.createSettingsPage
32 import com.android.settingslib.spa.framework.compose.navigator
33 import com.android.settingslib.spa.widget.preference.Preference
34 import com.android.settingslib.spa.widget.preference.PreferenceModel
35 import com.android.settingslib.spa.widget.scaffold.RegularScaffold
36 import com.android.settingslib.spa.widget.ui.SettingsIcon
37 
38 object AppsMainPageProvider : SettingsPageProvider {
39     override val name = "AppsMain"
40     private val owner = createSettingsPage()
41 
isEnablednull42     override fun isEnabled(arguments: Bundle?) = false
43 
44     @Composable
45     override fun Page(arguments: Bundle?) {
46         RegularScaffold(title = getTitle(arguments)) {
47             AllAppListPageProvider.buildInjectEntry().build().UiLayout()
48             SpecialAppAccessPageProvider.EntryItem()
49             BackgroundInstalledAppsPageProvider.EntryItem()
50         }
51     }
52 
buildInjectEntrynull53     fun buildInjectEntry() =
54         SettingsEntryBuilder.createInject(owner = owner)
55             .setUiLayoutFn {
56                 val summary = stringResource(R.string.app_and_notification_dashboard_summary)
57                 Preference(object : PreferenceModel {
58                     override val title = stringResource(R.string.apps_dashboard_title)
59                     override val summary = { summary }
60                     override val onClick = navigator(name)
61                     override val icon = @Composable {
62                         SettingsIcon(imageVector = Icons.Outlined.Apps)
63                     }
64                 })
65             }
66 
getTitlenull67     override fun getTitle(arguments: Bundle?): String {
68         return SpaEnvironmentFactory.instance.appContext.getString(R.string.apps_dashboard_title)
69     }
70 
buildEntrynull71     override fun buildEntry(arguments: Bundle?): List<SettingsEntry> {
72         return listOf(
73             AllAppListPageProvider.buildInjectEntry().setLink(fromPage = owner).build(),
74             SpecialAppAccessPageProvider.buildInjectEntry().setLink(fromPage = owner).build(),
75             BackgroundInstalledAppsPageProvider.buildInjectEntry().setLink(fromPage = owner).build(),
76         )
77     }
78 }
79