Fix settings bug (pt 2)
Follow on from ag/20862879 to keep track of prefs so if the list of enabled providers is updated we update the UI. Bug: 253157366 Test: make & manual test Change-Id: Ibf3c83fd445ced51a8cbea0113f12fc04002c23a
This commit is contained in:
@@ -58,8 +58,10 @@ import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
|
|||||||
import com.android.settings.dashboard.DashboardFragment;
|
import com.android.settings.dashboard.DashboardFragment;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.concurrent.Executor;
|
import java.util.concurrent.Executor;
|
||||||
|
|
||||||
@@ -76,6 +78,7 @@ public class CredentialManagerPreferenceController extends BasePreferenceControl
|
|||||||
private final @Nullable CredentialManager mCredentialManager;
|
private final @Nullable CredentialManager mCredentialManager;
|
||||||
private final CancellationSignal mCancellationSignal = new CancellationSignal();
|
private final CancellationSignal mCancellationSignal = new CancellationSignal();
|
||||||
private final Executor mExecutor;
|
private final Executor mExecutor;
|
||||||
|
private final Map<String, SwitchPreference> mPrefs = new HashMap<>(); // key is package name
|
||||||
|
|
||||||
private @Nullable DashboardFragment mParentFragment = null;
|
private @Nullable DashboardFragment mParentFragment = null;
|
||||||
|
|
||||||
@@ -125,6 +128,13 @@ public class CredentialManagerPreferenceController extends BasePreferenceControl
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
List<ServiceInfo> services = new ArrayList<>();
|
||||||
|
for (CredentialProviderInfo cpi :
|
||||||
|
CredentialProviderInfo.getAvailableServices(mContext, getUser())) {
|
||||||
|
services.add(cpi.getServiceInfo());
|
||||||
|
}
|
||||||
|
init(lifecycleOwner, services);
|
||||||
|
|
||||||
mCredentialManager.listEnabledProviders(
|
mCredentialManager.listEnabledProviders(
|
||||||
mCancellationSignal,
|
mCancellationSignal,
|
||||||
mExecutor,
|
mExecutor,
|
||||||
@@ -140,13 +150,7 @@ public class CredentialManagerPreferenceController extends BasePreferenceControl
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
List<ServiceInfo> services = new ArrayList<>();
|
setEnabledPackageNames(enabledPackages);
|
||||||
for (CredentialProviderInfo cpi :
|
|
||||||
CredentialProviderInfo.getAvailableServices(mContext, getUser())) {
|
|
||||||
services.add(cpi.getServiceInfo());
|
|
||||||
}
|
|
||||||
|
|
||||||
init(lifecycleOwner, services, enabledPackages);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -157,15 +161,19 @@ public class CredentialManagerPreferenceController extends BasePreferenceControl
|
|||||||
}
|
}
|
||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
void init(
|
void init(LifecycleOwner lifecycleOwner, List<ServiceInfo> availableServices) {
|
||||||
LifecycleOwner lifecycleOwner,
|
|
||||||
List<ServiceInfo> availableServices,
|
|
||||||
Set<String> enabledPackages) {
|
|
||||||
mServices.clear();
|
mServices.clear();
|
||||||
mServices.addAll(availableServices);
|
mServices.addAll(availableServices);
|
||||||
|
}
|
||||||
|
|
||||||
|
@VisibleForTesting
|
||||||
|
void setEnabledPackageNames(Set<String> enabledPackages) {
|
||||||
mEnabledPackageNames.clear();
|
mEnabledPackageNames.clear();
|
||||||
mEnabledPackageNames.addAll(enabledPackages);
|
mEnabledPackageNames.addAll(enabledPackages);
|
||||||
|
|
||||||
|
for (String packageName : mPrefs.keySet()) {
|
||||||
|
mPrefs.get(packageName).setChecked(mEnabledPackageNames.contains(packageName));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -177,6 +185,9 @@ public class CredentialManagerPreferenceController extends BasePreferenceControl
|
|||||||
public void displayPreference(PreferenceScreen screen) {
|
public void displayPreference(PreferenceScreen screen) {
|
||||||
super.displayPreference(screen);
|
super.displayPreference(screen);
|
||||||
|
|
||||||
|
// Since the UI is being cleared, clear any refs.
|
||||||
|
mPrefs.clear();
|
||||||
|
|
||||||
PreferenceGroup group = screen.findPreference(getPreferenceKey());
|
PreferenceGroup group = screen.findPreference(getPreferenceKey());
|
||||||
Context context = screen.getContext();
|
Context context = screen.getContext();
|
||||||
|
|
||||||
@@ -254,6 +265,7 @@ public class CredentialManagerPreferenceController extends BasePreferenceControl
|
|||||||
final SwitchPreference pref = new SwitchPreference(prefContext);
|
final SwitchPreference pref = new SwitchPreference(prefContext);
|
||||||
pref.setTitle(title);
|
pref.setTitle(title);
|
||||||
pref.setChecked(mEnabledPackageNames.contains(packageName));
|
pref.setChecked(mEnabledPackageNames.contains(packageName));
|
||||||
|
mPrefs.put(packageName, pref);
|
||||||
|
|
||||||
if (icon != null) {
|
if (icon != null) {
|
||||||
pref.setIcon(Utils.getSafeIcon(icon));
|
pref.setIcon(Utils.getSafeIcon(icon));
|
||||||
|
@@ -43,7 +43,6 @@ import org.junit.Test;
|
|||||||
import org.junit.runner.RunWith;
|
import org.junit.runner.RunWith;
|
||||||
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
@@ -183,7 +182,7 @@ public class CredentialManagerPreferenceControllerTest {
|
|||||||
CredentialManagerPreferenceController controller =
|
CredentialManagerPreferenceController controller =
|
||||||
new CredentialManagerPreferenceController(
|
new CredentialManagerPreferenceController(
|
||||||
mContext, mCredentialsPreferenceCategory.getKey());
|
mContext, mCredentialsPreferenceCategory.getKey());
|
||||||
controller.init(() -> mock(Lifecycle.class), availableServices, new HashSet<>());
|
controller.init(() -> mock(Lifecycle.class), availableServices);
|
||||||
return controller;
|
return controller;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user