Avoid checking the restricted items in the list.

Since we are not auto-closing the dialog any more, need to
make sure the restricted item in not checked when selected by user.

Change-Id: I7c02844d3071ae62222cdbdbda96780bd5d922de
This commit is contained in:
Sudheer Shanka
2016-03-04 13:53:24 -08:00
parent 9566ceb122
commit 54dc9d52d0
2 changed files with 35 additions and 2 deletions

View File

@@ -25,10 +25,12 @@ import android.support.v7.preference.PreferenceViewHolder;
import android.util.AttributeSet;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.CheckedTextView;
import android.widget.ImageView;
import android.widget.ListAdapter;
import android.widget.ListView;
import com.android.settingslib.RestrictedLockUtils;
import com.android.settingslib.RestrictedPreferenceHelper;
@@ -118,10 +120,15 @@ public class RestrictedListPreference extends CustomListPreference {
}
protected ListAdapter createListAdapter() {
return new RestrictedArrayAdapter(getContext(), getEntries(),
getSelectedValuePos());
}
public int getSelectedValuePos() {
final String selectedValue = getValue();
final int selectedIndex =
(selectedValue == null) ? -1 : findIndexOfValue(selectedValue);
return new RestrictedArrayAdapter(getContext(), getEntries(), selectedIndex);
return selectedIndex;
}
@Override
@@ -173,6 +180,8 @@ public class RestrictedListPreference extends CustomListPreference {
public static class RestrictedListPreferenceDialogFragment extends
CustomListPreference.CustomListPreferenceDialogFragment {
private int mLastCheckedPosition = AdapterView.INVALID_POSITION;
public static ListPreferenceDialogFragment newInstance(String key) {
final ListPreferenceDialogFragment fragment
= new RestrictedListPreferenceDialogFragment();
@@ -197,6 +206,8 @@ public class RestrictedListPreference extends CustomListPreference {
String entryValue = preference.getEntryValues()[which].toString();
RestrictedItem item = preference.getRestrictedItemForEntryValue(entryValue);
if (item != null) {
ListView listView = ((AlertDialog) dialog).getListView();
listView.setItemChecked(getLastCheckedPosition(), true);
RestrictedLockUtils.sendShowAdminSupportDetailsIntent(getContext(),
item.enforcedAdmin);
} else {
@@ -215,6 +226,24 @@ public class RestrictedListPreference extends CustomListPreference {
}
};
}
private int getLastCheckedPosition() {
if (mLastCheckedPosition == AdapterView.INVALID_POSITION) {
mLastCheckedPosition = ((RestrictedListPreference) getCustomizablePreference())
.getSelectedValuePos();
}
return mLastCheckedPosition;
}
private void setCheckedPosition(int checkedPosition) {
mLastCheckedPosition = checkedPosition;
}
@Override
protected void setClickedDialogEntryIndex(int which) {
super.setClickedDialogEntryIndex(which);
mLastCheckedPosition = which;
}
}
public static class RestrictedItem {

View File

@@ -29,6 +29,7 @@ import android.view.View;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.ListAdapter;
import android.widget.ListView;
public class NotificationLockscreenPreference extends RestrictedListPreference {
@@ -101,8 +102,11 @@ public class NotificationLockscreenPreference extends RestrictedListPreference {
@Override
public void onClick(DialogInterface dialog, int which) {
mInner.onClick(dialog, which);
ListView listView = ((AlertDialog) dialog).getListView();
int selectedPosition = listView.getCheckedItemPosition();
if (mView != null) {
mView.setVisibility(checkboxVisibilityForSelectedIndex(which, mShowRemoteInput));
mView.setVisibility(
checkboxVisibilityForSelectedIndex(selectedPosition, mShowRemoteInput));
}
}