Fix flicker for AppDataUsagePreference

AppDataUsagePreference's title is sometime async loading, which cause
preference height change, which lead to page flicker.

Set a title placeholder before async loading to reduce flicker.

Fix: 187019210
Test: manual visual test
Change-Id: I26df832ab03a04641fd3d6eb678903ff3fe8820a
This commit is contained in:
Chaohui Wang
2022-05-26 17:36:45 +08:00
parent b91e43c526
commit 3a99f7c370

View File

@@ -20,6 +20,7 @@ import android.widget.ProgressBar;
import androidx.preference.PreferenceViewHolder; import androidx.preference.PreferenceViewHolder;
import com.android.settings.R;
import com.android.settingslib.AppItem; import com.android.settingslib.AppItem;
import com.android.settingslib.net.UidDetail; import com.android.settingslib.net.UidDetail;
import com.android.settingslib.net.UidDetailProvider; import com.android.settingslib.net.UidDetailProvider;
@@ -49,6 +50,9 @@ public class AppDataUsagePreference extends AppPreference {
if (mDetail != null) { if (mDetail != null) {
setAppInfo(); setAppInfo();
} else { } else {
// Set a placeholder title before starting to fetch real title, this is necessary
// to avoid preference height change.
setTitle(R.string.summary_placeholder);
ThreadUtils.postOnBackgroundThread(() -> { ThreadUtils.postOnBackgroundThread(() -> {
mDetail = provider.getUidDetail(mItem.key, true /* blocking */); mDetail = provider.getUidDetail(mItem.key, true /* blocking */);
ThreadUtils.postOnMainThread(() -> setAppInfo()); ThreadUtils.postOnMainThread(() -> setAppInfo());