Fix special access summary text
Use ApplicationState to count number of apps using unrestricted_data. Change-Id: I083ff50e3e516536c87afa71d786b22e83d9a498 Fixes: 69313992 Test: robotests
This commit is contained in:
@@ -13,43 +13,140 @@
|
||||
*/
|
||||
package com.android.settings.applications;
|
||||
|
||||
import android.app.Application;
|
||||
import android.content.Context;
|
||||
|
||||
import com.android.settings.R;
|
||||
import com.android.settings.core.PreferenceControllerMixin;
|
||||
import com.android.settings.datausage.DataSaverBackend;
|
||||
import com.android.settingslib.core.AbstractPreferenceController;
|
||||
|
||||
import androidx.annotation.VisibleForTesting;
|
||||
import androidx.preference.Preference;
|
||||
import androidx.preference.PreferenceScreen;
|
||||
|
||||
public class SpecialAppAccessPreferenceController extends AbstractPreferenceController
|
||||
implements PreferenceControllerMixin {
|
||||
import com.android.settings.R;
|
||||
import com.android.settings.core.BasePreferenceController;
|
||||
import com.android.settings.datausage.AppStateDataUsageBridge;
|
||||
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;
|
||||
|
||||
private static final String KEY_SPECIAL_ACCESS = "special_access";
|
||||
import java.util.ArrayList;
|
||||
|
||||
private DataSaverBackend mDataSaverBackend;
|
||||
public class SpecialAppAccessPreferenceController extends BasePreferenceController implements
|
||||
AppStateBaseBridge.Callback, ApplicationsState.Callbacks, LifecycleObserver, OnStart,
|
||||
OnStop, OnDestroy {
|
||||
|
||||
public SpecialAppAccessPreferenceController(Context context) {
|
||||
super(context);
|
||||
@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 boolean isAvailable() {
|
||||
return true;
|
||||
public int getAvailabilityStatus() {
|
||||
return AVAILABLE_UNSEARCHABLE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getPreferenceKey() {
|
||||
return KEY_SPECIAL_ACCESS;
|
||||
public void displayPreference(PreferenceScreen screen) {
|
||||
super.displayPreference(screen);
|
||||
mPreference = screen.findPreference(getPreferenceKey());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStart() {
|
||||
mDataUsageBridge.resume();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStop() {
|
||||
mDataUsageBridge.pause();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDestroy() {
|
||||
mDataUsageBridge.release();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateState(Preference preference) {
|
||||
if (mDataSaverBackend == null) {
|
||||
mDataSaverBackend = new DataSaverBackend(mContext);
|
||||
}
|
||||
final int count = mDataSaverBackend.getWhitelistedCount();
|
||||
preference.setSummary(mContext.getResources().getQuantityString(
|
||||
R.plurals.special_access_summary, count, count));
|
||||
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 != null && ((AppStateDataUsageBridge.DataUsageState)
|
||||
entry.extraInfo).isDataSaverWhitelisted) {
|
||||
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() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLoadEntriesCompleted() {
|
||||
}
|
||||
|
||||
}
|
||||
|
Reference in New Issue
Block a user