From 54dc9d52d0f35843510dbd7dbc8951389bb85039 Mon Sep 17 00:00:00 2001 From: Sudheer Shanka Date: Fri, 4 Mar 2016 13:53:24 -0800 Subject: [PATCH] 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 --- .../settings/RestrictedListPreference.java | 31 ++++++++++++++++++- .../NotificationLockscreenPreference.java | 6 +++- 2 files changed, 35 insertions(+), 2 deletions(-) diff --git a/src/com/android/settings/RestrictedListPreference.java b/src/com/android/settings/RestrictedListPreference.java index fca0071c494..521b698cf23 100644 --- a/src/com/android/settings/RestrictedListPreference.java +++ b/src/com/android/settings/RestrictedListPreference.java @@ -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 { diff --git a/src/com/android/settings/notification/NotificationLockscreenPreference.java b/src/com/android/settings/notification/NotificationLockscreenPreference.java index 60f451f3767..cbf31ad914c 100644 --- a/src/com/android/settings/notification/NotificationLockscreenPreference.java +++ b/src/com/android/settings/notification/NotificationLockscreenPreference.java @@ -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)); } }