Files
app_Settings/src/com/android/settings/applications/AppDashboardFragment.java
Kevin Han 8df22e7cd9 Move unused apps count calculation to bg thread
Move the somewhat expensive calculation of the "Unused apps" count to
the background thread

Initially, the "Unused apps" preference is unavailable. When the bg work
finishes and we see we have a non-zero number of unused apps, we display
the preference and update the summary text.

Bug: 187996287
Test: atest HibernatedAppsPreferenceControllerTest
Test: measure latency of displaying preferences w/ custom trace points

Change-Id: Idb0d836fd8f4bcdd2605a7d59703a7ed53bcd6d4
2021-06-03 19:14:25 -07:00

100 lines
3.4 KiB
Java

/*
* Copyright (C) 2021 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.settings.SettingsEnums;
import android.content.Context;
import android.provider.SearchIndexableResource;
import com.android.settings.R;
import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.search.SearchIndexable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/** Settings page for apps. */
@SearchIndexable
public class AppDashboardFragment extends DashboardFragment {
private static final String TAG = "AppDashboardFragment";
private AppsPreferenceController mAppsPreferenceController;
private static List<AbstractPreferenceController> buildPreferenceControllers(Context context) {
final List<AbstractPreferenceController> controllers = new ArrayList<>();
controllers.add(new AppsPreferenceController(context));
return controllers;
}
@Override
public int getMetricsCategory() {
return SettingsEnums.MANAGE_APPLICATIONS;
}
@Override
protected String getLogTag() {
return TAG;
}
@Override
public int getHelpResource() {
return R.string.help_url_apps_and_notifications;
}
@Override
protected int getPreferenceScreenResId() {
return R.xml.apps;
}
@Override
public void onAttach(Context context) {
super.onAttach(context);
use(SpecialAppAccessPreferenceController.class).setSession(getSettingsLifecycle());
mAppsPreferenceController = use(AppsPreferenceController.class);
mAppsPreferenceController.setFragment(this /* fragment */);
final HibernatedAppsPreferenceController hibernatedAppsPreferenceController =
use(HibernatedAppsPreferenceController.class);
getSettingsLifecycle().addObserver(hibernatedAppsPreferenceController);
}
@Override
protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
return buildPreferenceControllers(context);
}
public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
new BaseSearchIndexProvider() {
@Override
public List<SearchIndexableResource> getXmlResourcesToIndex(
Context context, boolean enabled) {
final SearchIndexableResource sir = new SearchIndexableResource(context);
sir.xmlResId = R.xml.apps;
return Arrays.asList(sir);
}
@Override
public List<AbstractPreferenceController> createPreferenceControllers(
Context context) {
return buildPreferenceControllers(context);
}
};
}