Merge "Bar chart preserves data before rotating device"

This commit is contained in:
TreeHugger Robot
2019-02-27 06:39:07 +00:00
committed by Android (Google) Code Review
2 changed files with 55 additions and 4 deletions

View File

@@ -24,6 +24,7 @@ import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.permission.PermissionControllerManager;
import android.permission.RuntimePermissionUsageInfo;
import android.provider.DeviceConfig;
@@ -31,12 +32,15 @@ import android.util.Log;
import android.view.View;
import androidx.annotation.NonNull;
import androidx.annotation.VisibleForTesting;
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.OnCreate;
import com.android.settingslib.core.lifecycle.events.OnSaveInstanceState;
import com.android.settingslib.core.lifecycle.events.OnStart;
import com.android.settingslib.widget.BarChartInfo;
import com.android.settingslib.widget.BarChartPreference;
@@ -48,14 +52,17 @@ import java.util.List;
public class PermissionBarChartPreferenceController extends BasePreferenceController implements
PermissionControllerManager.OnPermissionUsageResultCallback, LifecycleObserver, OnStart {
PermissionControllerManager.OnPermissionUsageResultCallback, LifecycleObserver, OnCreate,
OnStart, OnSaveInstanceState {
private static final String TAG = "BarChartPreferenceCtl";
private static final String KEY_PERMISSION_USAGE = "usage_infos";
@VisibleForTesting
List<RuntimePermissionUsageInfo> mOldUsageInfos;
private PackageManager mPackageManager;
private PrivacyDashboardFragment mParent;
private BarChartPreference mBarChartPreference;
private List<RuntimePermissionUsageInfo> mOldUsageInfos;
public PermissionBarChartPreferenceController(Context context, String preferenceKey) {
super(context, preferenceKey);
@@ -67,6 +74,18 @@ public class PermissionBarChartPreferenceController extends BasePreferenceContro
mParent = fragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
if (savedInstanceState != null) {
mOldUsageInfos = savedInstanceState.getParcelableArrayList(KEY_PERMISSION_USAGE);
}
}
@Override
public void onSaveInstanceState(Bundle outState) {
outState.putParcelableList(KEY_PERMISSION_USAGE, mOldUsageInfos);
}
@Override
public int getAvailabilityStatus() {
return Boolean.parseBoolean(
@@ -92,6 +111,9 @@ public class PermissionBarChartPreferenceController extends BasePreferenceContro
.build();
mBarChartPreference.initializeBarChart(info);
if (!mOldUsageInfos.isEmpty()) {
mBarChartPreference.setBarViewInfos(createBarViews(mOldUsageInfos));
}
}
@Override
@@ -100,7 +122,9 @@ public class PermissionBarChartPreferenceController extends BasePreferenceContro
return;
}
mBarChartPreference.updateLoadingState(true /* isLoading */);
// We don't hide chart when we have existing data.
mBarChartPreference.updateLoadingState(mOldUsageInfos.isEmpty() /* isLoading */);
// But we still need to hint user with progress bar that we are updating new usage data.
mParent.setLoadingEnabled(true /* enabled */);
retrievePermissionUsageData();
}

View File

@@ -124,6 +124,18 @@ public class PermissionBarChartPreferenceControllerTest {
verify(mPreference).initializeBarChart(any(BarChartInfo.class));
}
@Test
public void displayPreference_usageInfosSet_shouldSetBarViewInfos() {
final RuntimePermissionUsageInfo info1 =
new RuntimePermissionUsageInfo("permission 1", 10);
mController.mOldUsageInfos.add(info1);
mController.displayPreference(mScreen);
verify(mPreference).setBarViewInfos(any(BarViewInfo[].class));
verify(mPreference).initializeBarChart(any(BarChartInfo.class));
}
@Test
public void onPermissionUsageResult_differentPermissionResultSet_shouldSetBarViewInfos() {
final List<RuntimePermissionUsageInfo> infos1 = new ArrayList<>();
@@ -159,7 +171,7 @@ public class PermissionBarChartPreferenceControllerTest {
}
@Test
public void onStart_permissionHubEnabled_shouldShowProgressBar() {
public void onStart_usageInfosNotSetAndPermissionHubEnabled_shouldShowProgressBar() {
DeviceConfig.setProperty(DeviceConfig.Privacy.NAMESPACE,
DeviceConfig.Privacy.PROPERTY_PERMISSIONS_HUB_ENABLED, "true", true);
mController.displayPreference(mScreen);
@@ -170,6 +182,21 @@ public class PermissionBarChartPreferenceControllerTest {
verify(mPreference).updateLoadingState(true /* isLoading */);
}
@Test
public void onStart_usageInfosSetAndPermissionHubEnabled_shouldNotUpdatePrefLoadingState() {
DeviceConfig.setProperty(DeviceConfig.Privacy.NAMESPACE,
DeviceConfig.Privacy.PROPERTY_PERMISSIONS_HUB_ENABLED, "true", true);
final RuntimePermissionUsageInfo info1 =
new RuntimePermissionUsageInfo("permission 1", 10);
mController.mOldUsageInfos.add(info1);
mController.displayPreference(mScreen);
mController.onStart();
verify(mFragment).setLoadingEnabled(true /* enabled */);
verify(mPreference).updateLoadingState(false /* isLoading */);
}
@Test
public void onStart_permissionHubDisabled_shouldNotShowProgressBar() {
DeviceConfig.setProperty(DeviceConfig.Privacy.NAMESPACE,