Add progress bar for Privacy screen

We show up top linear progress bar
when Settings is querying permission usage data.

Test: visual, robotest
Fixes: 123539793
Change-Id: I350068856d1708eb054d2a205d9ca857214891ce
This commit is contained in:
tmfang
2019-02-12 18:23:20 +08:00
parent 57b076fa76
commit 64f5b796c2
5 changed files with 206 additions and 26 deletions

View File

@@ -31,28 +31,29 @@ import android.util.Log;
import android.view.View;
import androidx.annotation.NonNull;
import androidx.preference.Preference;
import androidx.preference.PreferenceScreen;
import com.android.settings.R;
import com.android.settings.core.BasePreferenceController;
import com.android.settingslib.Utils;
import com.android.settingslib.core.lifecycle.LifecycleObserver;
import com.android.settingslib.core.lifecycle.events.OnStart;
import com.android.settingslib.widget.BarChartInfo;
import com.android.settingslib.widget.BarChartPreference;
import com.android.settingslib.widget.BarViewInfo;
import com.android.settingslib.Utils;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.concurrent.Executors;
public class PermissionBarChartPreferenceController extends BasePreferenceController implements
PermissionControllerManager.OnPermissionUsageResultCallback {
PermissionControllerManager.OnPermissionUsageResultCallback, LifecycleObserver, OnStart {
private static final String TAG = "BarChartPreferenceCtl";
private PackageManager mPackageManager;
private PrivacyDashboardFragment mParent;
private BarChartPreference mBarChartPreference;
private List<RuntimePermissionUsageInfo> mOldUsageInfos;
@@ -62,6 +63,10 @@ public class PermissionBarChartPreferenceController extends BasePreferenceContro
mPackageManager = context.getPackageManager();
}
public void setFragment(PrivacyDashboardFragment fragment) {
mParent = fragment;
}
@Override
public int getAvailabilityStatus() {
return Boolean.parseBoolean(
@@ -90,7 +95,13 @@ public class PermissionBarChartPreferenceController extends BasePreferenceContro
}
@Override
public void updateState(Preference preference) {
public void onStart() {
if (!isAvailable()) {
return;
}
mBarChartPreference.updateLoadingState(true /* isLoading */);
mParent.setLoadingEnabled(true /* enabled */);
retrievePermissionUsageData();
}
@@ -104,6 +115,9 @@ public class PermissionBarChartPreferenceController extends BasePreferenceContro
mBarChartPreference.setBarViewInfos(createBarViews(usageInfos));
mOldUsageInfos = usageInfos;
}
mBarChartPreference.updateLoadingState(false /* isLoading */);
mParent.setLoadingEnabled(false /* enabled */);
}
private void retrievePermissionUsageData() {

View File

@@ -48,6 +48,11 @@ public class PrivacyDashboardFragment extends DashboardFragment {
private static final String KEY_NOTIFICATION_WORK_PROFILE_NOTIFICATIONS =
"privacy_lock_screen_work_profile_notifications";
@VisibleForTesting
View mProgressHeader;
@VisibleForTesting
View mProgressAnimation;
@Override
public int getMetricsCategory() {
return SettingsEnums.TOP_LEVEL_PRIVACY;
@@ -73,10 +78,17 @@ public class PrivacyDashboardFragment extends DashboardFragment {
return buildPreferenceControllers(context, getSettingsLifecycle());
}
@Override
public void onAttach(Context context) {
super.onAttach(context);
use(PermissionBarChartPreferenceController.class).setFragment(this /* fragment */);
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
styleActionBar();
initLoadingBar();
}
@VisibleForTesting
@@ -97,6 +109,21 @@ public class PrivacyDashboardFragment extends DashboardFragment {
}
}
@VisibleForTesting
void initLoadingBar() {
mProgressHeader = setPinnedHeaderView(R.layout.progress_header);
mProgressAnimation = mProgressHeader.findViewById(R.id.progress_bar_animation);
setLoadingEnabled(false);
}
@VisibleForTesting
void setLoadingEnabled(boolean enabled) {
if (mProgressHeader != null && mProgressAnimation != null) {
mProgressHeader.setVisibility(enabled ? View.VISIBLE : View.INVISIBLE);
mProgressAnimation.setVisibility(enabled ? View.VISIBLE : View.INVISIBLE);
}
}
private static List<AbstractPreferenceController> buildPreferenceControllers(
Context context, Lifecycle lifecycle) {
final List<AbstractPreferenceController> controllers = new ArrayList<>();