Merge "Bar chart preserves data before rotating device"
This commit is contained in:
committed by
Android (Google) Code Review
commit
5d0d664ae2
@@ -24,6 +24,7 @@ import android.content.Context;
|
|||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.pm.PackageManager;
|
import android.content.pm.PackageManager;
|
||||||
import android.graphics.drawable.Drawable;
|
import android.graphics.drawable.Drawable;
|
||||||
|
import android.os.Bundle;
|
||||||
import android.permission.PermissionControllerManager;
|
import android.permission.PermissionControllerManager;
|
||||||
import android.permission.RuntimePermissionUsageInfo;
|
import android.permission.RuntimePermissionUsageInfo;
|
||||||
import android.provider.DeviceConfig;
|
import android.provider.DeviceConfig;
|
||||||
@@ -31,12 +32,15 @@ import android.util.Log;
|
|||||||
import android.view.View;
|
import android.view.View;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.annotation.VisibleForTesting;
|
||||||
import androidx.preference.PreferenceScreen;
|
import androidx.preference.PreferenceScreen;
|
||||||
|
|
||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
import com.android.settings.core.BasePreferenceController;
|
import com.android.settings.core.BasePreferenceController;
|
||||||
import com.android.settingslib.Utils;
|
import com.android.settingslib.Utils;
|
||||||
import com.android.settingslib.core.lifecycle.LifecycleObserver;
|
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.core.lifecycle.events.OnStart;
|
||||||
import com.android.settingslib.widget.BarChartInfo;
|
import com.android.settingslib.widget.BarChartInfo;
|
||||||
import com.android.settingslib.widget.BarChartPreference;
|
import com.android.settingslib.widget.BarChartPreference;
|
||||||
@@ -48,14 +52,17 @@ import java.util.List;
|
|||||||
|
|
||||||
|
|
||||||
public class PermissionBarChartPreferenceController extends BasePreferenceController implements
|
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 TAG = "BarChartPreferenceCtl";
|
||||||
|
private static final String KEY_PERMISSION_USAGE = "usage_infos";
|
||||||
|
|
||||||
|
@VisibleForTesting
|
||||||
|
List<RuntimePermissionUsageInfo> mOldUsageInfos;
|
||||||
private PackageManager mPackageManager;
|
private PackageManager mPackageManager;
|
||||||
private PrivacyDashboardFragment mParent;
|
private PrivacyDashboardFragment mParent;
|
||||||
private BarChartPreference mBarChartPreference;
|
private BarChartPreference mBarChartPreference;
|
||||||
private List<RuntimePermissionUsageInfo> mOldUsageInfos;
|
|
||||||
|
|
||||||
public PermissionBarChartPreferenceController(Context context, String preferenceKey) {
|
public PermissionBarChartPreferenceController(Context context, String preferenceKey) {
|
||||||
super(context, preferenceKey);
|
super(context, preferenceKey);
|
||||||
@@ -67,6 +74,18 @@ public class PermissionBarChartPreferenceController extends BasePreferenceContro
|
|||||||
mParent = fragment;
|
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
|
@Override
|
||||||
public int getAvailabilityStatus() {
|
public int getAvailabilityStatus() {
|
||||||
return Boolean.parseBoolean(
|
return Boolean.parseBoolean(
|
||||||
@@ -92,6 +111,9 @@ public class PermissionBarChartPreferenceController extends BasePreferenceContro
|
|||||||
.build();
|
.build();
|
||||||
|
|
||||||
mBarChartPreference.initializeBarChart(info);
|
mBarChartPreference.initializeBarChart(info);
|
||||||
|
if (!mOldUsageInfos.isEmpty()) {
|
||||||
|
mBarChartPreference.setBarViewInfos(createBarViews(mOldUsageInfos));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -100,7 +122,9 @@ public class PermissionBarChartPreferenceController extends BasePreferenceContro
|
|||||||
return;
|
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 */);
|
mParent.setLoadingEnabled(true /* enabled */);
|
||||||
retrievePermissionUsageData();
|
retrievePermissionUsageData();
|
||||||
}
|
}
|
||||||
|
@@ -124,6 +124,18 @@ public class PermissionBarChartPreferenceControllerTest {
|
|||||||
verify(mPreference).initializeBarChart(any(BarChartInfo.class));
|
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
|
@Test
|
||||||
public void onPermissionUsageResult_differentPermissionResultSet_shouldSetBarViewInfos() {
|
public void onPermissionUsageResult_differentPermissionResultSet_shouldSetBarViewInfos() {
|
||||||
final List<RuntimePermissionUsageInfo> infos1 = new ArrayList<>();
|
final List<RuntimePermissionUsageInfo> infos1 = new ArrayList<>();
|
||||||
@@ -159,7 +171,7 @@ public class PermissionBarChartPreferenceControllerTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void onStart_permissionHubEnabled_shouldShowProgressBar() {
|
public void onStart_usageInfosNotSetAndPermissionHubEnabled_shouldShowProgressBar() {
|
||||||
DeviceConfig.setProperty(DeviceConfig.Privacy.NAMESPACE,
|
DeviceConfig.setProperty(DeviceConfig.Privacy.NAMESPACE,
|
||||||
DeviceConfig.Privacy.PROPERTY_PERMISSIONS_HUB_ENABLED, "true", true);
|
DeviceConfig.Privacy.PROPERTY_PERMISSIONS_HUB_ENABLED, "true", true);
|
||||||
mController.displayPreference(mScreen);
|
mController.displayPreference(mScreen);
|
||||||
@@ -170,6 +182,21 @@ public class PermissionBarChartPreferenceControllerTest {
|
|||||||
verify(mPreference).updateLoadingState(true /* isLoading */);
|
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
|
@Test
|
||||||
public void onStart_permissionHubDisabled_shouldNotShowProgressBar() {
|
public void onStart_permissionHubDisabled_shouldNotShowProgressBar() {
|
||||||
DeviceConfig.setProperty(DeviceConfig.Privacy.NAMESPACE,
|
DeviceConfig.setProperty(DeviceConfig.Privacy.NAMESPACE,
|
||||||
|
Reference in New Issue
Block a user