Saturday, 19 July 2014

How to enable and disable PreferenceCategory depends on ListPreference?



i want to simply disable and enable PreferenceCategory depends on the selection of listpreference. Here is the simple code.



<PreferenceCategory android:title="General" android:key="general">
<EditTextPreference
android:title="Operator Code"
android:key="oCode"
android:inputType="number"
android:summary="Enter Your Operator Code"
></EditTextPreference>
<ListPreference
android:title="Routing Mode"
android:key="rMode"
android:summary="Select Routing Mode"
android:entries="@array/rMList"
android:entryValues="@array/rMLValues"
></ListPreference>
</PreferenceCategory>

<PreferenceCategory android:title="VoIP Routing" android:key="voipRouting">
<EditTextPreference
android:title="User Name"
android:key="uName"
android:summary="Enter Your User Name"
></EditTextPreference>

<EditTextPreference
android:title="Password"
android:key="password"
android:summary="Enter Your Password"
android:password="true"
></EditTextPreference>

<EditTextPreference
android:title="Phone Number"
android:key="phone"
android:inputType="phone"
android:summary="Enter Your Phone Number"
></EditTextPreference>
</PreferenceCategory>

<PreferenceCategory android:title="Call-Through Routing" android:key="callThrough">
<EditTextPreference
android:title="Locator"
android:key="locator"
android:summary="locator Name"
></EditTextPreference>

<EditTextPreference
android:title="Access Number"
android:key="accessNumber"
android:summary="Enter Your Access Number"
></EditTextPreference>

<EditTextPreference
android:title="Pin"
android:key="pin"
android:password="true"
android:summary="Enter Your Pin Number"
></EditTextPreference>

<ListPreference
android:title="DTMF Delay"
android:key="dtmfDelay"
android:summary="Select DTMF Delay"
android:entries="@array/dtmfList"
android:entryValues="@array/dtmfValues"
android:defaultValue="2"
></ListPreference>

</PreferenceCategory>


This is the prefs.xml file for my apps. now, to handle this xml i have a Prefs.java file and i want if the routing mode selected as VoIP then VoipRouting category is enable only but call-through is disable and vice-versa.



public class Prefs extends PreferenceActivity implements OnSharedPreferenceChangeListener {

@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.prefs);
PreferenceManager.setDefaultValues(Prefs.this, R.xml.prefs, false);
initSummary(getPreferenceScreen());

}

@Override
protected void onResume() {
super.onResume();
// Set up a listener whenever a key changes
getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
}

@Override
protected void onPause() {
super.onPause();
// Unregister the listener whenever a key changes
getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);
}

public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {

updatePrefSummary(findPreference(key));
}

private void initSummary(Preference p) {
if (p instanceof PreferenceGroup) {
PreferenceGroup pGrp = (PreferenceGroup) p;
for (int i = 0; i < pGrp.getPreferenceCount(); i++) {
initSummary(pGrp.getPreference(i));
}
} else {
updatePrefSummary(p);
}
}

private void updatePrefSummary(Preference p) {
if (p instanceof ListPreference) {
ListPreference listPref = (ListPreference) p;
System.out.println("---------- listPref -------------"+ listPref.getEntry());
if(listPref.getEntry() != null)
p.setSummary(listPref.getEntry());

}
if (p instanceof EditTextPreference) {
EditTextPreference editTextPref = (EditTextPreference) p;

if(editTextPref.getText() != null){
if (p.getTitle().toString().contains("assword") || p.getTitle().toString().contains("in")) {
p.setSummary("******");
} else {
p.setSummary(editTextPref.getText());
}
}
else
p.setSummary(editTextPref.getSummary());
}
if (p instanceof MultiSelectListPreference) {
EditTextPreference editTextPref = (EditTextPreference) p;

if(editTextPref.getText()!= null)
p.setSummary(editTextPref.getText());
}
}


}


Now, how can i disable the PreferenceCategory depends on the condition of selected Routing Mode. I have already catch the routing mode data in the updatePrefSummary() method by listPref.getEntry().


No comments:

Post a Comment