diff --git a/res/layout/apn_preference_layout.xml b/res/layout/apn_preference_layout.xml index a958da1c233..d5362341b8b 100644 --- a/res/layout/apn_preference_layout.xml +++ b/res/layout/apn_preference_layout.xml @@ -57,14 +57,19 @@ - + + + + diff --git a/src/com/android/settings/network/apn/ApnPreference.java b/src/com/android/settings/network/apn/ApnPreference.java old mode 100755 new mode 100644 index dcc50cd18f7..7cc4823afed --- a/src/com/android/settings/network/apn/ApnPreference.java +++ b/src/com/android/settings/network/apn/ApnPreference.java @@ -49,7 +49,7 @@ public class ApnPreference extends Preference private static CompoundButton sCurrentChecked = null; private int mSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID; private boolean mProtectFromCheckedChange = false; - private boolean mSelectable = true; + private boolean mDefaultSelectable = true; private boolean mHideDetails = false; /** @@ -57,6 +57,9 @@ public class ApnPreference extends Preference */ public ApnPreference(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); + // Primary target and radio button could be selectable, but entire preference itself is not + // selectable. + setSelectable(false); } /** @@ -80,25 +83,25 @@ public class ApnPreference extends Preference final RelativeLayout textArea = (RelativeLayout) view.findViewById(R.id.text_layout); textArea.setOnClickListener(this); - final View widget = view.findViewById(R.id.apn_radiobutton); - if ((widget != null) && widget instanceof RadioButton) { - final RadioButton rb = (RadioButton) widget; - if (mSelectable) { - rb.setOnCheckedChangeListener(this); + final RadioButton rb = view.itemView.requireViewById(R.id.apn_radiobutton); + if (mDefaultSelectable) { + view.itemView.requireViewById(R.id.apn_radio_button_frame).setOnClickListener((v) -> { + rb.performClick(); + }); + rb.setOnCheckedChangeListener(this); - final boolean isChecked = getKey().equals(sSelectedKey); - if (isChecked) { - sCurrentChecked = rb; - sSelectedKey = getKey(); - } - - mProtectFromCheckedChange = true; - rb.setChecked(isChecked); - mProtectFromCheckedChange = false; - rb.setVisibility(View.VISIBLE); - } else { - rb.setVisibility(View.GONE); + final boolean isChecked = getKey().equals(sSelectedKey); + if (isChecked) { + sCurrentChecked = rb; + sSelectedKey = getKey(); } + + mProtectFromCheckedChange = true; + rb.setChecked(isChecked); + mProtectFromCheckedChange = false; + rb.setVisibility(View.VISIBLE); + } else { + rb.setVisibility(View.GONE); } } @@ -167,12 +170,8 @@ public class ApnPreference extends Preference } } - public boolean getSelectable() { - return mSelectable; - } - - public void setSelectable(boolean selectable) { - mSelectable = selectable; + public void setDefaultSelectable(boolean defaultSelectable) { + mDefaultSelectable = defaultSelectable; } public void setSubId(int subId) { diff --git a/src/com/android/settings/network/apn/ApnSettings.java b/src/com/android/settings/network/apn/ApnSettings.java old mode 100755 new mode 100644 index c3feae82359..be906536dd6 --- a/src/com/android/settings/network/apn/ApnSettings.java +++ b/src/com/android/settings/network/apn/ApnSettings.java @@ -369,10 +369,10 @@ public class ApnSettings extends RestrictedSettingsFragment pref.setSummary(apn); } - final boolean selectable = + final boolean defaultSelectable = ((type == null) || type.contains(ApnSetting.TYPE_DEFAULT_STRING)); - pref.setSelectable(selectable); - if (selectable) { + pref.setDefaultSelectable(defaultSelectable); + if (defaultSelectable) { if ((mSelectedKey != null) && mSelectedKey.equals(key)) { pref.setChecked(); }