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

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

Merge "Correct the data usage warning" into main

parents edb0ff11 00c21da3
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -10142,6 +10142,9 @@
    <!-- Format for a summary describing the amount of data before the user is warned or limited [CHAR LIMIT=NONE] -->
    <string name="cell_data_warning_and_limit"><xliff:g name="amount" example="1 GB">^1</xliff:g> data warning / <xliff:g name="amount" example="2 GB">^2</xliff:g> data limit</string>
    <!-- A summary shown on data usage screens to indicate inaccuracy of data tracking [CHAR LIMIT=NONE] -->
    <string name="operator_warning">Carrier data accounting may differ from device accounting</string>
    <!-- A summary shown on data usage screens to indicate data tracking excluded from carrier networks [CHAR LIMIT=NONE] -->
    <string name="non_carrier_data_usage_warning">Excludes data used by carrier networks</string>
+1 −2
Original line number Diff line number Diff line
@@ -27,8 +27,7 @@
            />

        <Preference
            android:key="non_carrier_data_usage_warning"
            android:summary="@string/non_carrier_data_usage_warning"
            android:key="warning"
            android:selectable="false" />

    </PreferenceCategory>
+16 −0
Original line number Diff line number Diff line
@@ -34,6 +34,7 @@ import com.android.settings.dashboard.DashboardFragment
import com.android.settings.datausage.lib.BillingCycleRepository
import com.android.settings.datausage.lib.NetworkUsageData
import com.android.settings.network.MobileNetworkRepository
import com.android.settings.network.SubscriptionUtil
import com.android.settings.network.mobileDataEnabledFlow
import com.android.settingslib.mobile.dataservice.SubscriptionInfoEntity
import com.android.settingslib.spa.framework.util.collectLatestWithLifecycle
@@ -95,6 +96,18 @@ open class DataUsageList : DashboardFragment() {
        }
        chartDataUsagePreferenceController = use(ChartDataUsagePreferenceController::class.java)
            .apply { init(template) }

        updateWarning()
    }

    private fun updateWarning() {
        val template = template ?: return
        val warningPreference = findPreference<Preference>(KEY_WARNING)!!
        if (template.matchRule != NetworkTemplate.MATCH_WIFI) {
            warningPreference.setSummary(R.string.operator_warning)
        } else if (SubscriptionUtil.isSimHardwareVisible(context)) {
            warningPreference.setSummary(R.string.non_carrier_data_usage_warning)
        }
    }

    override fun onViewCreated(v: View, savedInstanceState: Bundle?) {
@@ -188,5 +201,8 @@ open class DataUsageList : DashboardFragment() {

        private const val TAG = "DataUsageList"
        private const val KEY_USAGE_AMOUNT = "usage_amount"

        @VisibleForTesting
        const val KEY_WARNING = "warning"
    }
}
+61 −3
Original line number Diff line number Diff line
@@ -26,8 +26,11 @@ import androidx.core.os.bundleOf
import androidx.fragment.app.testing.launchFragment
import androidx.fragment.app.testing.withFragment
import androidx.lifecycle.Lifecycle
import androidx.preference.Preference
import androidx.test.core.app.ApplicationProvider
import androidx.test.ext.junit.runners.AndroidJUnit4
import com.android.settings.R
import com.android.settings.datausage.DataUsageList.Companion.KEY_WARNING
import com.android.settingslib.spaprivileged.framework.common.userManager
import com.google.common.truth.Truth.assertThat
import org.junit.Before
@@ -38,12 +41,14 @@ import org.mockito.kotlin.mock
import org.mockito.kotlin.spy
import org.mockito.kotlin.stub

private val mockUserManager: UserManager = mock<UserManager>()
private val mockUserManager = mock<UserManager>()

private val mockContext: Context = spy(ApplicationProvider.getApplicationContext()) {
private val spyContext: Context = spy(ApplicationProvider.getApplicationContext()) {
    on { userManager } doReturn mockUserManager
}

private val spyResources = spy(spyContext.resources)

private var fakeIntent = Intent()

@RunWith(AndroidJUnit4::class)
@@ -51,6 +56,9 @@ class DataUsageListTest {

    @Before
    fun setUp() {
        spyContext.stub {
            on { resources } doReturn spyResources
        }
        mockUserManager.stub {
            on { isGuestUser } doReturn false
        }
@@ -122,10 +130,60 @@ class DataUsageListTest {
            assertThat(activity!!.isFinishing).isFalse()
        }
    }

    @Test
    fun warning_wifiAndHasSim_displayNonCarrierWarning() {
        val template = NetworkTemplate.Builder(NetworkTemplate.MATCH_WIFI).build()
        spyResources.stub {
            on { getBoolean(R.bool.config_show_sim_info) } doReturn true
        }
        fakeIntent = Intent().apply {
            putExtra(Settings.EXTRA_NETWORK_TEMPLATE, template)
        }

        val scenario = launchFragment<TestDataUsageList>(initialState = Lifecycle.State.CREATED)

        scenario.withFragment {
            assertThat(findPreference<Preference>(KEY_WARNING)!!.summary)
                .isEqualTo(context.getString(R.string.non_carrier_data_usage_warning))
        }
    }

    @Test
    fun warning_wifiAndNoSim_noWarning() {
        val template = NetworkTemplate.Builder(NetworkTemplate.MATCH_WIFI).build()
        spyResources.stub {
            on { getBoolean(R.bool.config_show_sim_info) } doReturn false
        }
        fakeIntent = Intent().apply {
            putExtra(Settings.EXTRA_NETWORK_TEMPLATE, template)
        }

        val scenario = launchFragment<TestDataUsageList>(initialState = Lifecycle.State.CREATED)

        scenario.withFragment {
            assertThat(findPreference<Preference>(KEY_WARNING)!!.summary).isNull()
        }
    }

    @Test
    fun warning_mobile_operatorWarning() {
        val template = NetworkTemplate.Builder(NetworkTemplate.MATCH_MOBILE).build()
        fakeIntent = Intent().apply {
            putExtra(Settings.EXTRA_NETWORK_TEMPLATE, template)
        }

        val scenario = launchFragment<TestDataUsageList>(initialState = Lifecycle.State.CREATED)

        scenario.withFragment {
            assertThat(findPreference<Preference>(KEY_WARNING)!!.summary)
                .isEqualTo(context.getString(R.string.operator_warning))
        }
    }
}

class TestDataUsageList : DataUsageList() {
    override fun getContext() = mockContext
    override fun getContext() = spyContext

    override fun getIntent() = fakeIntent
}