Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit bd18ca11 authored by Carbo Kuo's avatar Carbo Kuo Committed by Android (Google) Code Review
Browse files

Merge "Migrate the About page in Settings."

parents 5b2a3a2d 107d7fc5
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -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 −0
Original line number Diff line number Diff line
/*
 * 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)
                    }
                })
            }
    }
}
 No newline at end of file
+31 −0
Original line number Diff line number Diff line
/*
 * 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()
        }
    }
}
 No newline at end of file
+67 −0
Original line number Diff line number Diff line
/*
 * 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()
}
+2 −0
Original line number Diff line number Diff line
@@ -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(),
        )
    }