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

Commit 3e35cff7 authored by Chaohui Wang's avatar Chaohui Wang
Browse files

Move unrestricted data summary to DataSaverController

DataSaverController currently used in 2 pages,
- Network & internet > Data Saver
- Apps > Special app access

This helps unify the logic, and instead of showing on "Special app
access", this summary shows on "Unrestricted data" is make more sense.

Bug: 280280596
Test: Manually on above pages
Test: Unit test
Change-Id: Ia151ed8179a250f8f20cc5041f9383fffebdab10
parent d8fbd089
Loading
Loading
Loading
Loading
+0 −6
Original line number Diff line number Diff line
@@ -9702,12 +9702,6 @@
    <!-- [CHAR_LIMIT=60] Label for special access screen -->
    <string name="special_access">Special app access</string>
    <!-- Summary for special access settings [CHAR_LIMIT=NONE] -->
    <plurals name="special_access_summary">
        <item quantity="one">1 app can use unrestricted data</item>
        <item quantity="other"><xliff:g id="count" example="10">%d</xliff:g> apps can use unrestricted data</item>
    </plurals>
    <!-- Title for the See more preference item in Special app access settings [CHAR LIMIT=30] -->
    <string name="special_access_more">See more</string>
+1 −2
Original line number Diff line number Diff line
@@ -105,7 +105,6 @@
        android:key="special_access"
        android:fragment="com.android.settings.applications.specialaccess.SpecialAccessSettings"
        android:title="@string/special_access"
        android:order="20"
        settings:controller="com.android.settings.applications.SpecialAppAccessPreferenceController"/>
        android:order="20"/>

</PreferenceScreen>
+0 −1
Original line number Diff line number Diff line
@@ -66,7 +66,6 @@ public class AppDashboardFragment extends DashboardFragment {
    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        use(SpecialAppAccessPreferenceController.class).setSession(getSettingsLifecycle());
        mAppsPreferenceController = use(AppsPreferenceController.class);
        mAppsPreferenceController.setFragment(this /* fragment */);
        getSettingsLifecycle().addObserver(mAppsPreferenceController);
+0 −154
Original line number Diff line number Diff line
/*
 * Copyright (C) 2017 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.applications;

import android.app.Application;
import android.content.Context;

import androidx.annotation.VisibleForTesting;
import androidx.preference.Preference;
import androidx.preference.PreferenceScreen;

import com.android.settings.R;
import com.android.settings.core.BasePreferenceController;
import com.android.settings.datausage.AppStateDataUsageBridge;
import com.android.settings.datausage.AppStateDataUsageBridge.DataUsageState;
import com.android.settings.datausage.DataSaverBackend;
import com.android.settingslib.applications.ApplicationsState;
import com.android.settingslib.core.lifecycle.Lifecycle;
import com.android.settingslib.core.lifecycle.LifecycleObserver;
import com.android.settingslib.core.lifecycle.events.OnDestroy;
import com.android.settingslib.core.lifecycle.events.OnStart;
import com.android.settingslib.core.lifecycle.events.OnStop;

import java.util.ArrayList;

public class SpecialAppAccessPreferenceController extends BasePreferenceController implements
        AppStateBaseBridge.Callback, ApplicationsState.Callbacks, LifecycleObserver, OnStart,
        OnStop, OnDestroy {

    @VisibleForTesting
    ApplicationsState.Session mSession;

    private final ApplicationsState mApplicationsState;
    private final AppStateDataUsageBridge mDataUsageBridge;
    private final DataSaverBackend mDataSaverBackend;

    private Preference mPreference;
    private boolean mExtraLoaded;


    public SpecialAppAccessPreferenceController(Context context, String key) {
        super(context, key);
        mApplicationsState = ApplicationsState.getInstance(
                (Application) context.getApplicationContext());
        mDataSaverBackend = new DataSaverBackend(context);
        mDataUsageBridge = new AppStateDataUsageBridge(mApplicationsState, this, mDataSaverBackend);
    }

    public void setSession(Lifecycle lifecycle) {
        mSession = mApplicationsState.newSession(this, lifecycle);
    }

    @Override
    public int getAvailabilityStatus() {
        return AVAILABLE;
    }

    @Override
    public void displayPreference(PreferenceScreen screen) {
        super.displayPreference(screen);
        mPreference = screen.findPreference(getPreferenceKey());
    }

    @Override
    public void onStart() {
        mDataUsageBridge.resume(true /* forceLoadAllApps */);
    }

    @Override
    public void onStop() {
        mDataUsageBridge.pause();
    }

    @Override
    public void onDestroy() {
        mDataUsageBridge.release();
    }

    @Override
    public void updateState(Preference preference) {
        updateSummary();
    }

    @Override
    public void onExtraInfoUpdated() {
        mExtraLoaded = true;
        updateSummary();
    }

    private void updateSummary() {
        if (!mExtraLoaded || mPreference == null) {
            return;
        }

        final ArrayList<ApplicationsState.AppEntry> allApps = mSession.getAllApps();
        int count = 0;
        for (ApplicationsState.AppEntry entry : allApps) {
            if (!ApplicationsState.FILTER_DOWNLOADED_AND_LAUNCHER.filterApp(entry)) {
                continue;
            }
            if (entry.extraInfo instanceof DataUsageState
                    && ((DataUsageState) entry.extraInfo).isDataSaverAllowlisted) {
                count++;
            }
        }
        mPreference.setSummary(mContext.getResources().getQuantityString(
                R.plurals.special_access_summary, count, count));
    }

    @Override
    public void onRunningStateChanged(boolean running) {
    }

    @Override
    public void onPackageListChanged() {
    }

    @Override
    public void onRebuildComplete(ArrayList<ApplicationsState.AppEntry> apps) {
    }

    @Override
    public void onPackageIconChanged() {
    }

    @Override
    public void onPackageSizeChanged(String packageName) {
    }

    @Override
    public void onAllSizesComputed() {
    }

    @Override
    public void onLauncherInfoChanged() {
        // when the value of the AppEntry.hasLauncherEntry was changed.
        updateSummary();
    }

    @Override
    public void onLoadEntriesCompleted() {
    }
}
+0 −36
Original line number Diff line number Diff line
/*
 * Copyright (C) 2017 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.applications.specialaccess;

import android.content.Context;

import com.android.settings.R;
import com.android.settings.core.BasePreferenceController;

public class DataSaverController extends BasePreferenceController {

    public DataSaverController(Context context, String key) {
        super(context, key);
    }

    @AvailabilityStatus
    public int getAvailabilityStatus() {
        return mContext.getResources().getBoolean(R.bool.config_show_data_saver)
                ? AVAILABLE : UNSUPPORTED_ON_DEVICE;
    }
}
Loading