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

Commit 6f9f6cff authored by Chaohui Wang's avatar Chaohui Wang Committed by Android (Google) Code Review
Browse files

Merge "Settings search for app data usage" into main

parents 2c751d16 f2591b29
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -91,9 +91,11 @@
            settings:searchable="false"
            settings:controller="com.android.settings.network.telephony.RoamingPreferenceController"/>

        <!-- Settings search is handled by DataUsageSearchItem. -->
        <Preference
            android:key="data_usage_summary"
            android:title="@string/app_cellular_data_usage"
            settings:searchable="false"
            settings:controller="com.android.settings.network.telephony.DataUsagePreferenceController"/>

        <com.android.settings.datausage.BillingCyclePreference
+30 −23
Original line number Diff line number Diff line
@@ -29,35 +29,32 @@ import androidx.lifecycle.repeatOnLifecycle
import androidx.preference.Preference
import androidx.preference.PreferenceScreen
import com.android.settings.R
import com.android.settings.core.BasePreferenceController
import com.android.settings.datausage.DataUsageUtils
import com.android.settings.datausage.lib.DataUsageFormatter.FormattedDataUsage
import com.android.settings.datausage.lib.DataUsageLib
import com.android.settings.datausage.lib.NetworkCycleDataRepository
import com.android.settings.datausage.lib.NetworkStatsRepository.Companion.AllTimeRange
import com.android.settings.network.telephony.MobileNetworkSettingsSearchIndex.MobileNetworkSettingsSearchItem
import com.android.settings.network.telephony.MobileNetworkSettingsSearchIndex.MobileNetworkSettingsSearchResult
import com.android.settingslib.spaprivileged.framework.compose.getPlaceholder
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext

/**
 * Preference controller for "Data usage"
 */
/** Preference controller for "Data usage" */
class DataUsagePreferenceController(context: Context, key: String) :
    TelephonyBasePreferenceController(context, key) {
    BasePreferenceController(context, key) {

    private var subId = SubscriptionManager.INVALID_SUBSCRIPTION_ID
    private lateinit var preference: Preference
    private var networkTemplate: NetworkTemplate? = null

    fun init(subId: Int) {
        mSubId = subId
        this.subId = subId
    }

    override fun getAvailabilityStatus(subId: Int): Int = when {
        SubscriptionManager.isValidSubscriptionId(subId) &&
            DataUsageUtils.hasMobileData(mContext) -> AVAILABLE

        else -> AVAILABLE_UNSEARCHABLE
    }
    override fun getAvailabilityStatus() = AVAILABLE

    override fun displayPreference(screen: PreferenceScreen) {
        super.displayPreference(screen)
@@ -75,10 +72,11 @@ class DataUsagePreferenceController(context: Context, key: String) :

    override fun handlePreferenceTreeClick(preference: Preference): Boolean {
        if (preference.key != preferenceKey || networkTemplate == null) return false
        val intent = Intent(Settings.ACTION_MOBILE_DATA_USAGE).apply {
        val intent =
            Intent(Settings.ACTION_MOBILE_DATA_USAGE).apply {
                setPackage(mContext.packageName)
                putExtra(Settings.EXTRA_NETWORK_TEMPLATE, networkTemplate)
            putExtra(Settings.EXTRA_SUB_ID, mSubId)
                putExtra(Settings.EXTRA_SUB_ID, subId)
            }
        mContext.startActivity(intent)
        return true
@@ -93,13 +91,10 @@ class DataUsagePreferenceController(context: Context, key: String) :
        preference.summary = summary?.displayText
    }

    private fun getNetworkTemplate(): NetworkTemplate? = when {
        SubscriptionManager.isValidSubscriptionId(mSubId) -> {
            DataUsageLib.getMobileTemplate(mContext, mSubId)
        }

        else -> null
    }
    private fun getNetworkTemplate(): NetworkTemplate? =
        if (SubscriptionManager.isValidSubscriptionId(subId)) {
            DataUsageLib.getMobileTemplate(mContext, subId)
        } else null

    @VisibleForTesting
    fun createNetworkCycleDataRepository(): NetworkCycleDataRepository? =
@@ -118,4 +113,16 @@ class DataUsagePreferenceController(context: Context, key: String) :
        val allTimeUsage = repository.queryUsage(AllTimeRange)
        return allTimeUsage.getDataUsedString(mContext) to (allTimeUsage.usage > 0)
    }

    companion object {
        class DataUsageSearchItem(private val context: Context) : MobileNetworkSettingsSearchItem {
            override fun getSearchResult(subId: Int): MobileNetworkSettingsSearchResult? {
                if (!DataUsageUtils.hasMobileData(context)) return null
                return MobileNetworkSettingsSearchResult(
                    key = "data_usage_summary",
                    title = context.getString(R.string.app_cellular_data_usage),
                )
            }
        }
    }
}
+2 −0
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@ import android.provider.Settings
import android.telephony.SubscriptionInfo
import com.android.settings.R
import com.android.settings.network.SubscriptionUtil
import com.android.settings.network.telephony.DataUsagePreferenceController.Companion.DataUsageSearchItem
import com.android.settings.network.telephony.MmsMessagePreferenceController.Companion.MmsMessageSearchItem
import com.android.settings.network.telephony.NrAdvancedCallingPreferenceController.Companion.NrAdvancedCallingSearchItem
import com.android.settings.network.telephony.RoamingPreferenceController.Companion.RoamingSearchItem
@@ -114,6 +115,7 @@ class MobileNetworkSettingsSearchIndex(

        fun createSearchItems(context: Context): List<MobileNetworkSettingsSearchItem> =
            listOf(
                DataUsageSearchItem(context),
                MmsMessageSearchItem(context),
                NrAdvancedCallingSearchItem(context),
                PreferredNetworkModeSearchItem(context),
+1 −11
Original line number Diff line number Diff line
@@ -29,7 +29,6 @@ import androidx.test.core.app.ApplicationProvider
import androidx.test.ext.junit.runners.AndroidJUnit4
import com.android.dx.mockito.inline.extended.ExtendedMockito
import com.android.settings.core.BasePreferenceController.AVAILABLE
import com.android.settings.core.BasePreferenceController.AVAILABLE_UNSEARCHABLE
import com.android.settings.datausage.DataUsageUtils
import com.android.settings.datausage.lib.DataUsageLib
import com.android.settings.datausage.lib.NetworkCycleDataRepository
@@ -77,7 +76,6 @@ class DataUsagePreferenceControllerTest {
    @Before
    fun setUp() {
        mockSession = ExtendedMockito.mockitoSession()
            .initMocks(this)
            .spyStatic(DataUsageUtils::class.java)
            .spyStatic(DataUsageLib::class.java)
            .strictness(Strictness.LENIENT)
@@ -101,18 +99,10 @@ class DataUsagePreferenceControllerTest {
    }

    @Test
    fun getAvailabilityStatus_validSubId_returnAvailable() {
    fun getAvailabilityStatus_returnAvailable() {
        assertThat(controller.availabilityStatus).isEqualTo(AVAILABLE)
    }

    @Test
    fun getAvailabilityStatus_invalidSubId_returnUnsearchable() {
        val availabilityStatus =
            controller.getAvailabilityStatus(SubscriptionManager.INVALID_SUBSCRIPTION_ID)

        assertThat(availabilityStatus).isEqualTo(AVAILABLE_UNSEARCHABLE)
    }

    @Test
    fun handlePreferenceTreeClick_startActivity() = runBlocking {
        val usageData = NetworkUsageData(START_TIME, END_TIME, 1L)