Migrate the About page in Settings.
This change adds the "About" page and the "Device name" Preference. However, due to the lack of editable text support in the alert dialog (SPA widget), the device name can't be changed at the moment. Bug: 269486170 Test: manual, see screenshots. Change-Id: Ie6b034d82b1718c8f22366ef525fd6d36e4df9ad
This commit is contained in:
@@ -17,6 +17,7 @@
|
||||
package com.android.settings.spa
|
||||
|
||||
import android.content.Context
|
||||
import com.android.settings.spa.about.AboutPhonePageProvider
|
||||
import com.android.settings.spa.app.AllAppListPageProvider
|
||||
import com.android.settings.spa.app.AppsMainPageProvider
|
||||
import com.android.settings.spa.app.appinfo.AppInfoSettingsProvider
|
||||
@@ -81,6 +82,7 @@ open class SettingsSpaEnvironment(context: Context) : SpaEnvironment(context) {
|
||||
BackgroundInstalledAppsPageProvider,
|
||||
CloneAppInfoSettingsProvider,
|
||||
NetworkAndInternetPageProvider,
|
||||
AboutPhonePageProvider,
|
||||
) + togglePermissionAppListTemplate.createPageProviders(),
|
||||
rootPages = listOf(
|
||||
SettingsPage.create(HomePageProvider.name),
|
||||
|
67
src/com/android/settings/spa/about/AboutPhone.kt
Normal file
67
src/com/android/settings/spa/about/AboutPhone.kt
Normal file
@@ -0,0 +1,67 @@
|
||||
/*
|
||||
* Copyright (C) 2023 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.spa.about
|
||||
|
||||
import android.os.Bundle
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.outlined.PermDeviceInformation
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import com.android.settings.R
|
||||
import com.android.settingslib.spa.framework.common.SettingsEntryBuilder
|
||||
import com.android.settingslib.spa.framework.common.SettingsPageProvider
|
||||
import com.android.settingslib.spa.framework.common.SpaEnvironmentFactory
|
||||
import com.android.settingslib.spa.framework.common.createSettingsPage
|
||||
import com.android.settingslib.spa.framework.compose.navigator
|
||||
import com.android.settingslib.spa.framework.compose.toState
|
||||
import com.android.settingslib.spa.widget.preference.Preference
|
||||
import com.android.settingslib.spa.widget.preference.PreferenceModel
|
||||
import com.android.settingslib.spa.widget.scaffold.RegularScaffold
|
||||
import com.android.settingslib.spa.widget.ui.SettingsIcon
|
||||
|
||||
object AboutPhonePageProvider : SettingsPageProvider {
|
||||
override val name = "AboutPhone"
|
||||
private val owner = createSettingsPage()
|
||||
|
||||
@Composable
|
||||
override fun Page(arguments: Bundle?) {
|
||||
RegularScaffold(title = getTitle(arguments)) {
|
||||
BasicInfoCategory.CategoryItems()
|
||||
}
|
||||
}
|
||||
|
||||
override fun getTitle(arguments: Bundle?): String =
|
||||
SpaEnvironmentFactory.instance.appContext.getString(R.string.about_settings)
|
||||
|
||||
fun buildInjectEntry(): SettingsEntryBuilder {
|
||||
return SettingsEntryBuilder.createInject(owner = owner)
|
||||
.setUiLayoutFn {
|
||||
val context = LocalContext.current
|
||||
val deviceNamePresenter = remember { DeviceNamePresenter(context) }
|
||||
Preference(object : PreferenceModel {
|
||||
override val title = stringResource(R.string.about_settings)
|
||||
override val summary = deviceNamePresenter.deviceName.toState()
|
||||
override val onClick = navigator(name)
|
||||
override val icon = @Composable {
|
||||
SettingsIcon(imageVector = Icons.Outlined.PermDeviceInformation)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
31
src/com/android/settings/spa/about/BasicInfoCategory.kt
Normal file
31
src/com/android/settings/spa/about/BasicInfoCategory.kt
Normal file
@@ -0,0 +1,31 @@
|
||||
/*
|
||||
* Copyright (C) 2023 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.spa.about
|
||||
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import com.android.settings.R
|
||||
import com.android.settingslib.spa.widget.ui.Category
|
||||
|
||||
object BasicInfoCategory {
|
||||
@Composable
|
||||
fun CategoryItems() {
|
||||
Category(title = stringResource(R.string.my_device_info_basic_info_category_title)) {
|
||||
DeviceNamePreference.EntryItem()
|
||||
}
|
||||
}
|
||||
}
|
67
src/com/android/settings/spa/about/DeviceName.kt
Normal file
67
src/com/android/settings/spa/about/DeviceName.kt
Normal file
@@ -0,0 +1,67 @@
|
||||
/*
|
||||
* Copyright (C) 2023 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.spa.about
|
||||
|
||||
import android.content.Context
|
||||
import androidx.compose.material3.Text
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import com.android.settings.R
|
||||
import com.android.settings.deviceinfo.DeviceNamePreferenceController
|
||||
import com.android.settingslib.spa.framework.compose.toState
|
||||
import com.android.settingslib.spa.widget.dialog.AlertDialogButton
|
||||
import com.android.settingslib.spa.widget.dialog.rememberAlertDialogPresenter
|
||||
import com.android.settingslib.spa.widget.preference.Preference
|
||||
import com.android.settingslib.spa.widget.preference.PreferenceModel
|
||||
|
||||
object DeviceNamePreference {
|
||||
|
||||
@Composable
|
||||
fun EntryItem() {
|
||||
val context = LocalContext.current
|
||||
val deviceNamePresenter = remember { DeviceNamePresenter(context) }
|
||||
// TODO: Instead of a AlertDialog, it should be a dialog that accepts text input.
|
||||
val dialogPresenter = rememberAlertDialogPresenter(
|
||||
confirmButton = AlertDialogButton(
|
||||
stringResource(R.string.okay), onClick = DeviceNamePreference::confirmChange
|
||||
),
|
||||
dismissButton = AlertDialogButton(stringResource(R.string.cancel)),
|
||||
title = stringResource(R.string.my_device_info_device_name_preference_title),
|
||||
text = { Text(deviceNamePresenter.deviceName) },
|
||||
)
|
||||
Preference(object : PreferenceModel {
|
||||
override val title =
|
||||
stringResource(R.string.my_device_info_device_name_preference_title)
|
||||
override val summary = deviceNamePresenter.deviceName.toState()
|
||||
override val onClick = dialogPresenter::open
|
||||
})
|
||||
|
||||
}
|
||||
|
||||
private fun confirmChange() {
|
||||
// TODO: Save the change of the device name.
|
||||
}
|
||||
}
|
||||
|
||||
class DeviceNamePresenter(val context: Context) {
|
||||
private val deviceNamePreferenceController =
|
||||
DeviceNamePreferenceController(context, "unused_key")
|
||||
|
||||
val deviceName: String get() = deviceNamePreferenceController.summary.toString()
|
||||
}
|
@@ -18,6 +18,7 @@ package com.android.settings.spa.home
|
||||
|
||||
import android.os.Bundle
|
||||
import com.android.settings.R
|
||||
import com.android.settings.spa.about.AboutPhonePageProvider
|
||||
import com.android.settings.spa.app.AppsMainPageProvider
|
||||
import com.android.settings.spa.network.NetworkAndInternetPageProvider
|
||||
import com.android.settings.spa.notification.NotificationMainPageProvider
|
||||
@@ -38,6 +39,7 @@ object HomePageProvider : SettingsPageProvider {
|
||||
AppsMainPageProvider.buildInjectEntry().setLink(fromPage = owner).build(),
|
||||
NotificationMainPageProvider.buildInjectEntry().setLink(fromPage = owner).build(),
|
||||
SystemMainPageProvider.buildInjectEntry().setLink(fromPage = owner).build(),
|
||||
AboutPhonePageProvider.buildInjectEntry().setLink(fromPage = owner).build(),
|
||||
)
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user