Fix Battery optimization page broken

- mCompositeFilter is not changed after toggling filter, so the
list items are not changing. Fixed by changing mCompositeFilter
after toggle is changed.
- Because mSession.rebuild returns null, removes some dead code.

Fixes: 149362024
Test: 1. Settings > App & notifications > Special app access >
         Battery optimization
      2. Toggle Not optimized and All apps
      3. App list should change after step 2

Change-Id: Ifd5c7b0f1d809ae7a49d62b39e34fa899700326c
This commit is contained in:
Raff Tsai
2020-02-14 00:35:58 +08:00
parent 1e7ecc1ad5
commit 50a0aafdfe

View File

@@ -43,6 +43,7 @@ import android.content.Intent;
import android.content.pm.ApplicationInfo; import android.content.pm.ApplicationInfo;
import android.content.pm.PackageItemInfo; import android.content.pm.PackageItemInfo;
import android.net.Uri; import android.net.Uri;
import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.os.Environment; import android.os.Environment;
import android.os.IBinder; import android.os.IBinder;
@@ -143,7 +144,7 @@ public class ManageApplications extends InstrumentedFragment
implements View.OnClickListener, OnItemSelectedListener, SearchView.OnQueryTextListener { implements View.OnClickListener, OnItemSelectedListener, SearchView.OnQueryTextListener {
static final String TAG = "ManageApplications"; static final String TAG = "ManageApplications";
static final boolean DEBUG = false; static final boolean DEBUG = Build.IS_DEBUGGABLE;
// Intent extras. // Intent extras.
public static final String EXTRA_CLASSNAME = "classname"; public static final String EXTRA_CLASSNAME = "classname";
@@ -178,8 +179,6 @@ public class ManageApplications extends InstrumentedFragment
public static final int STORAGE_TYPE_LEGACY = 2; // Show apps even if they can be categorized. public static final int STORAGE_TYPE_LEGACY = 2; // Show apps even if they can be categorized.
public static final int STORAGE_TYPE_PHOTOS_VIDEOS = 3; public static final int STORAGE_TYPE_PHOTOS_VIDEOS = 3;
private static final int NO_USER_SPECIFIED = -1;
/** /**
* Intents with action {@code android.settings.MANAGE_APP_OVERLAY_PERMISSION} * Intents with action {@code android.settings.MANAGE_APP_OVERLAY_PERMISSION}
* and data URI scheme {@code package} don't go to the app-specific screen for managing the * and data URI scheme {@code package} don't go to the app-specific screen for managing the
@@ -461,19 +460,8 @@ public class ManageApplications extends InstrumentedFragment
pinnedHeader.addView(mSpinnerHeader, 0); pinnedHeader.addView(mSpinnerHeader, 0);
final AppFilterRegistry appFilterRegistry = AppFilterRegistry.getInstance(); final AppFilterRegistry appFilterRegistry = AppFilterRegistry.getInstance();
mFilterAdapter.enableFilter(appFilterRegistry.getDefaultFilterType(mListType)); final int filterType = appFilterRegistry.getDefaultFilterType(mListType);
mFilterAdapter.enableFilter(filterType);
AppFilter compositeFilter = getCompositeFilter(mListType, mStorageType, mVolumeUuid);
if (mIsWorkOnly) {
compositeFilter = new CompoundFilter(compositeFilter, ApplicationsState.FILTER_WORK);
}
if (mIsPersonalOnly) {
compositeFilter = new CompoundFilter(compositeFilter,
ApplicationsState.FILTER_PERSONAL);
}
if (compositeFilter != null) {
mApplications.setCompositeFilter(compositeFilter);
}
if (mListType == LIST_TYPE_MAIN) { if (mListType == LIST_TYPE_MAIN) {
if (UserManager.get(getActivity()).getUserProfiles().size() > 1 && !mIsWorkOnly if (UserManager.get(getActivity()).getUserProfiles().size() > 1 && !mIsWorkOnly
@@ -491,6 +479,8 @@ public class ManageApplications extends InstrumentedFragment
if (mListType == LIST_TYPE_HIGH_POWER) { if (mListType == LIST_TYPE_HIGH_POWER) {
mFilterAdapter.enableFilter(FILTER_APPS_POWER_WHITELIST_ALL); mFilterAdapter.enableFilter(FILTER_APPS_POWER_WHITELIST_ALL);
} }
setCompositeFilter();
} }
@VisibleForTesting @VisibleForTesting
@@ -511,11 +501,8 @@ public class ManageApplications extends InstrumentedFragment
return new CompoundFilter(ApplicationsState.FILTER_MOVIES, filter); return new CompoundFilter(ApplicationsState.FILTER_MOVIES, filter);
} else if (listType == LIST_TYPE_PHOTOGRAPHY) { } else if (listType == LIST_TYPE_PHOTOGRAPHY) {
return new CompoundFilter(ApplicationsState.FILTER_PHOTOS, filter); return new CompoundFilter(ApplicationsState.FILTER_PHOTOS, filter);
} else {
final AppFilterRegistry appFilterRegistry = AppFilterRegistry.getInstance();
return appFilterRegistry.get(
appFilterRegistry.getDefaultFilterType(listType)).getFilter();
} }
return null;
} }
@Override @Override
@@ -615,6 +602,21 @@ public class ManageApplications extends InstrumentedFragment
} }
} }
private void setCompositeFilter() {
AppFilter compositeFilter = getCompositeFilter(mListType, mStorageType, mVolumeUuid);
if (compositeFilter == null) {
compositeFilter = mFilter.getFilter();
}
if (mIsWorkOnly) {
compositeFilter = new CompoundFilter(compositeFilter, ApplicationsState.FILTER_WORK);
}
if (mIsPersonalOnly) {
compositeFilter = new CompoundFilter(compositeFilter,
ApplicationsState.FILTER_PERSONAL);
}
mApplications.setCompositeFilter(compositeFilter);
}
// utility method used to start sub activity // utility method used to start sub activity
private void startApplicationDetailsActivity() { private void startApplicationDetailsActivity() {
switch (mListType) { switch (mListType) {
@@ -823,6 +825,7 @@ public class ManageApplications extends InstrumentedFragment
@Override @Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
mFilter = mFilterAdapter.getFilter(position); mFilter = mFilterAdapter.getFilter(position);
setCompositeFilter();
mApplications.setFilter(mFilter); mApplications.setFilter(mFilter);
if (DEBUG) { if (DEBUG) {
@@ -1227,14 +1230,10 @@ public class ManageApplications extends InstrumentedFragment
comparatorObj = ApplicationsState.ALPHA_COMPARATOR; comparatorObj = ApplicationsState.ALPHA_COMPARATOR;
} }
filterObj = new CompoundFilter(filterObj, ApplicationsState.FILTER_NOT_HIDE); final AppFilter finalFilterObj = new CompoundFilter(filterObj,
AppFilter finalFilterObj = filterObj; ApplicationsState.FILTER_NOT_HIDE);
ThreadUtils.postOnBackgroundThread(() -> { ThreadUtils.postOnBackgroundThread(() -> {
final ArrayList<AppEntry> entries = mSession.rebuild(finalFilterObj, mSession.rebuild(finalFilterObj, comparatorObj, false);
comparatorObj, false);
if (entries != null) {
ThreadUtils.postOnMainThread(() -> onRebuildComplete(entries));
}
}); });
} }
@@ -1284,7 +1283,7 @@ public class ManageApplications extends InstrumentedFragment
@Override @Override
public void onRebuildComplete(ArrayList<AppEntry> entries) { public void onRebuildComplete(ArrayList<AppEntry> entries) {
if (DEBUG) { if (DEBUG) {
Log.d(TAG, "onRebuildComplete"); Log.d(TAG, "onRebuildComplete size=" + entries.size());
} }
final int filterType = mAppFilter.getFilterType(); final int filterType = mAppFilter.getFilterType();
if (filterType == FILTER_APPS_POWER_WHITELIST || if (filterType == FILTER_APPS_POWER_WHITELIST ||