blob: 70aa9518e1fa53d87cbdc33705db602ad86f12a0 [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 Lision059da9d2013-10-22 11:17:25 -040019
Alexandre Lisionafd40e42013-10-15 13:48:37 -040020 private boolean isDifferent = false;
Alexandre Lision059da9d2013-10-22 11:17:25 -040021
Alexandre Lisionafd40e42013-10-15 13:48:37 -040022 private Callbacks mCallbacks = sDummyCallbacks;
23 private static Callbacks sDummyCallbacks = new Callbacks() {
24
25 @Override
Alexandre Lision059da9d2013-10-22 11:17:25 -040026 public Account getAccount() {
Alexandre Lisionafd40e42013-10-15 13:48:37 -040027 return null;
28 }
29
Alexandre Lisionafd40e42013-10-15 13:48:37 -040030 };
31
32 public interface Callbacks {
33
Alexandre Lision059da9d2013-10-22 11:17:25 -040034 public Account getAccount();
Alexandre Lisionafd40e42013-10-15 13:48:37 -040035
36 }
37
38 @Override
39 public void onAttach(Activity activity) {
40 super.onAttach(activity);
41 if (!(activity instanceof Callbacks)) {
42 throw new IllegalStateException("Activity must implement fragment's callbacks.");
43 }
44
45 mCallbacks = (Callbacks) activity;
46 }
Alexandre Lision059da9d2013-10-22 11:17:25 -040047
Alexandre Lisionafd40e42013-10-15 13:48:37 -040048 @Override
49 public void onDetach() {
50 super.onDetach();
51 mCallbacks = sDummyCallbacks;
52 }
53
54 @Override
55 public void onCreate(Bundle savedInstanceState) {
56 super.onCreate(savedInstanceState);
57
58 // Load the preferences from an XML resource
Alexandre Lisionc48c36a2013-11-12 16:26:10 -050059 addPreferencesFromResource(R.xml.account_general_prefs);
Alexandre Lision059da9d2013-10-22 11:17:25 -040060 setPreferenceDetails(mCallbacks.getAccount().getBasicDetails());
Alexandre Lision059da9d2013-10-22 11:17:25 -040061 addPreferenceListener(mCallbacks.getAccount().getBasicDetails(), changeBasicPreferenceListener);
Alexandre Lision451f2a82013-11-12 12:55:55 -050062
Alexandre Lisionafd40e42013-10-15 13:48:37 -040063 }
64
65 private void setPreferenceDetails(AccountDetail details) {
66 for (AccountDetail.PreferenceEntry p : details.getDetailValues()) {
67 Log.i(TAG, "setPreferenceDetails: pref " + p.mKey + " value " + p.mValue);
68 Preference pref = findPreference(p.mKey);
69 if (pref != null) {
Alexandre Lisionafd40e42013-10-15 13:48:37 -040070 if (!p.isTwoState) {
71 ((EditTextPreference) pref).setText(p.mValue);
72 pref.setSummary(p.mValue);
Alexandre Lision451f2a82013-11-12 12:55:55 -050073 } else {
74 ((CheckBoxPreference) pref).setChecked(p.isChecked());
Alexandre Lisionafd40e42013-10-15 13:48:37 -040075 }
76 } else {
77 Log.w(TAG, "pref not found");
78 }
79 }
80 }
81
82 private void addPreferenceListener(AccountDetail details, OnPreferenceChangeListener listener) {
83 for (AccountDetail.PreferenceEntry p : details.getDetailValues()) {
84 Log.i(TAG, "addPreferenceListener: pref " + p.mKey + p.mValue);
85 Preference pref = findPreference(p.mKey);
86 if (pref != null) {
Alexandre Lisionafd40e42013-10-15 13:48:37 -040087 pref.setOnPreferenceChangeListener(listener);
Alexandre Lisionafd40e42013-10-15 13:48:37 -040088 } else {
89 Log.w(TAG, "addPreferenceListener: pref not found");
90 }
91 }
92 }
93
94 Preference.OnPreferenceChangeListener changeBasicPreferenceListener = new Preference.OnPreferenceChangeListener() {
95 @Override
96 public boolean onPreferenceChange(Preference preference, Object newValue) {
97
98 setDifferent(true);
99 if (preference instanceof CheckBoxPreference) {
Alexandre Lision451f2a82013-11-12 12:55:55 -0500100
101 Log.i(TAG, "Changing preference value:" + newValue);
102 mCallbacks.getAccount().getBasicDetails().setDetailString(preference.getKey(), ((Boolean) newValue).toString());
103
Alexandre Lisionafd40e42013-10-15 13:48:37 -0400104 } else {
105 preference.setSummary((CharSequence) newValue);
106 Log.i(TAG, "Changing preference value:" + newValue);
Alexandre Lision059da9d2013-10-22 11:17:25 -0400107 mCallbacks.getAccount().getBasicDetails().setDetailString(preference.getKey(), ((CharSequence) newValue).toString());
Alexandre Lisionafd40e42013-10-15 13:48:37 -0400108 }
109 return true;
110 }
111 };
112
113 Preference.OnPreferenceChangeListener changeAdvancedPreferenceListener = new Preference.OnPreferenceChangeListener() {
114 @Override
115 public boolean onPreferenceChange(Preference preference, Object newValue) {
116 preference.setSummary((CharSequence) newValue);
Alexandre Lision059da9d2013-10-22 11:17:25 -0400117 mCallbacks.getAccount().getAdvancedDetails().setDetailString(preference.getKey(), ((CharSequence) newValue).toString());
Alexandre Lisionafd40e42013-10-15 13:48:37 -0400118 return true;
119 }
120 };
121
122 Preference.OnPreferenceChangeListener changeTlsPreferenceListener = new Preference.OnPreferenceChangeListener() {
123 @Override
124 public boolean onPreferenceChange(Preference preference, Object newValue) {
125 preference.setSummary((CharSequence) newValue);
Alexandre Lision059da9d2013-10-22 11:17:25 -0400126 mCallbacks.getAccount().getTlsDetails().setDetailString(preference.getKey(), ((CharSequence) newValue).toString());
Alexandre Lisionafd40e42013-10-15 13:48:37 -0400127 return true;
128 }
129 };
130
131 Preference.OnPreferenceChangeListener changeSrtpPreferenceListener = new Preference.OnPreferenceChangeListener() {
132 @Override
133 public boolean onPreferenceChange(Preference preference, Object newValue) {
134 preference.setSummary((CharSequence) newValue);
Alexandre Lision059da9d2013-10-22 11:17:25 -0400135 mCallbacks.getAccount().getSrtpDetails().setDetailString(preference.getKey(), ((CharSequence) newValue).toString());
Alexandre Lisionafd40e42013-10-15 13:48:37 -0400136 return true;
137 }
138 };
139
Alexandre Lisionafd40e42013-10-15 13:48:37 -0400140 public boolean isDifferent() {
141 return isDifferent;
142 }
143
144 public void setDifferent(boolean isDifferent) {
145 this.isDifferent = isDifferent;
146 }
147
Alexandre Lisionafd40e42013-10-15 13:48:37 -0400148}