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:
@@ -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() {
|
||||
|
@@ -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<>();
|
||||
|
Reference in New Issue
Block a user