blob: b1075d0113cef411d01fa29c928f063ca98c1fb6 [file] [log] [blame]
Alexandre Lisionafd40e42013-10-15 13:48:37 -04001package org.sflphone.fragments;
2
Alexandre Lisionafd40e42013-10-15 13:48:37 -04003import org.sflphone.R;
4import org.sflphone.account.AccountDetail;
Alexandre Lision059da9d2013-10-22 11:17:25 -04005import org.sflphone.model.Account;
Alexandre Lisionafd40e42013-10-15 13:48:37 -04006
7import android.app.Activity;
8import android.os.Bundle;
9import android.preference.CheckBoxPreference;
10import android.preference.EditTextPreference;
Alexandre Lisionafd40e42013-10-15 13:48:37 -040011import android.preference.Preference;
12import android.preference.Preference.OnPreferenceChangeListener;
13import android.preference.PreferenceFragment;
14import android.util.Log;
15
Alexandre Lision8907c1c2013-11-12 11:40:14 -050016public class GeneralAccountFragment extends PreferenceFragment {
Alexandre Lisionafd40e42013-10-15 13:48:37 -040017
Alexandre Lision8907c1c2013-11-12 11:40:14 -050018 private static final String TAG = GeneralAccountFragment.class.getSimpleName();
Alexandre Lisionafd40e42013-10-15 13:48:37 -040019 private Callbacks mCallbacks = sDummyCallbacks;
20 private static Callbacks sDummyCallbacks = new Callbacks() {
21
22 @Override
Alexandre Lision059da9d2013-10-22 11:17:25 -040023 public Account getAccount() {
Alexandre Lisionafd40e42013-10-15 13:48:37 -040024 return null;
25 }
26
Alexandre Lisionafd40e42013-10-15 13:48:37 -040027 };
28
29 public interface Callbacks {
30
Alexandre Lision059da9d2013-10-22 11:17:25 -040031 public Account getAccount();
Alexandre Lisionafd40e42013-10-15 13:48:37 -040032
33 }
34
35 @Override
36 public void onAttach(Activity activity) {
37 super.onAttach(activity);
38 if (!(activity instanceof Callbacks)) {
39 throw new IllegalStateException("Activity must implement fragment's callbacks.");
40 }
41
42 mCallbacks = (Callbacks) activity;
43 }
Alexandre Lision059da9d2013-10-22 11:17:25 -040044
Alexandre Lisionafd40e42013-10-15 13:48:37 -040045 @Override
46 public void onDetach() {
47 super.onDetach();
48 mCallbacks = sDummyCallbacks;
49 }
50
51 @Override
52 public void onCreate(Bundle savedInstanceState) {
53 super.onCreate(savedInstanceState);
54
55 // Load the preferences from an XML resource
Alexandre Lisionc48c36a2013-11-12 16:26:10 -050056 addPreferencesFromResource(R.xml.account_general_prefs);
Alexandre Lision059da9d2013-10-22 11:17:25 -040057 setPreferenceDetails(mCallbacks.getAccount().getBasicDetails());
Alexandre Lision059da9d2013-10-22 11:17:25 -040058 addPreferenceListener(mCallbacks.getAccount().getBasicDetails(), changeBasicPreferenceListener);
Alexandre Lision451f2a82013-11-12 12:55:55 -050059
Alexandre Lisionafd40e42013-10-15 13:48:37 -040060 }
61
62 private void setPreferenceDetails(AccountDetail details) {
63 for (AccountDetail.PreferenceEntry p : details.getDetailValues()) {
64 Log.i(TAG, "setPreferenceDetails: pref " + p.mKey + " value " + p.mValue);
65 Preference pref = findPreference(p.mKey);
66 if (pref != null) {
Alexandre Lisionafd40e42013-10-15 13:48:37 -040067 if (!p.isTwoState) {
68 ((EditTextPreference) pref).setText(p.mValue);
69 pref.setSummary(p.mValue);
Alexandre Lision451f2a82013-11-12 12:55:55 -050070 } else {
71 ((CheckBoxPreference) pref).setChecked(p.isChecked());
Alexandre Lisionafd40e42013-10-15 13:48:37 -040072 }
73 } else {
74 Log.w(TAG, "pref not found");
75 }
76 }
77 }
78
79 private void addPreferenceListener(AccountDetail details, OnPreferenceChangeListener listener) {
80 for (AccountDetail.PreferenceEntry p : details.getDetailValues()) {
81 Log.i(TAG, "addPreferenceListener: pref " + p.mKey + p.mValue);
82 Preference pref = findPreference(p.mKey);
83 if (pref != null) {
Alexandre Lisionafd40e42013-10-15 13:48:37 -040084 pref.setOnPreferenceChangeListener(listener);
Alexandre Lisionafd40e42013-10-15 13:48:37 -040085 } else {
86 Log.w(TAG, "addPreferenceListener: pref not found");
87 }
88 }
89 }
90
91 Preference.OnPreferenceChangeListener changeBasicPreferenceListener = new Preference.OnPreferenceChangeListener() {
92 @Override
93 public boolean onPreferenceChange(Preference preference, Object newValue) {
Alexandre Lisionafd40e42013-10-15 13:48:37 -040094 if (preference instanceof CheckBoxPreference) {
Alexandre Lision451f2a82013-11-12 12:55:55 -050095
96 Log.i(TAG, "Changing preference value:" + newValue);
97 mCallbacks.getAccount().getBasicDetails().setDetailString(preference.getKey(), ((Boolean) newValue).toString());
Alexandre Lision3cefec22013-11-14 17:26:35 -050098 mCallbacks.getAccount().notifyObservers();
Alexandre Lision451f2a82013-11-12 12:55:55 -050099
Alexandre Lisionafd40e42013-10-15 13:48:37 -0400100 } else {
101 preference.setSummary((CharSequence) newValue);
102 Log.i(TAG, "Changing preference value:" + newValue);
Alexandre Lision059da9d2013-10-22 11:17:25 -0400103 mCallbacks.getAccount().getBasicDetails().setDetailString(preference.getKey(), ((CharSequence) newValue).toString());
Alexandre Lision3cefec22013-11-14 17:26:35 -0500104 mCallbacks.getAccount().notifyObservers();
105
106 Log.i(TAG, "Observer count:" + mCallbacks.getAccount().countObservers());
Alexandre Lisionafd40e42013-10-15 13:48:37 -0400107 }
108 return true;
109 }
110 };
111
Alexandre Lisionafd40e42013-10-15 13:48:37 -0400112}