package com.xabber.android.ui.preferences; import android.os.Bundle; import android.preference.ListPreference; import android.preference.Preference; import android.support.annotation.Nullable; import com.xabber.android.R; import com.xabber.android.data.Application; import com.xabber.android.data.account.AccountItem; import com.xabber.android.data.account.AccountManager; import com.xabber.android.data.account.listeners.OnAccountChangedListener; import com.xabber.android.data.entity.AccountJid; import com.xabber.android.data.extension.mam.LoadHistorySettings; import com.xabber.android.data.extension.mam.MamManager; import org.jivesoftware.smackx.mam.element.MamPrefsIQ; import java.util.Collection; import java.util.HashMap; import java.util.Map; public class AccountHistorySettingsFragment extends BaseSettingsFragment implements OnAccountChangedListener { private static final String ARGUMENT_ACCOUNT = AccountHistorySettingsFragment.class.getName() + "ARGUMENT_ACCOUNT"; private AccountJid account; public static AccountHistorySettingsFragment newInstance(AccountJid account) { AccountHistorySettingsFragment fragment = new AccountHistorySettingsFragment(); Bundle arguments = new Bundle(); arguments.putParcelable(ARGUMENT_ACCOUNT, account); fragment.setArguments(arguments); return fragment; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (getArguments() != null) { account = getArguments().getParcelable(ARGUMENT_ACCOUNT); } } @Override protected void onInflate(Bundle savedInstanceState) { addPreferencesFromResource(R.xml.account_history_settings); Preference mamPreference = findPreference(getString(R.string.account_mam_default_behavior_key)); setUpMamPreference(mamPreference, null); } private void setUpMamPreference(Preference mamPreference, @Nullable String newSummary) { Boolean supported = MamManager.getInstance().isSupported(account); if (supported == null) { mamPreference.setEnabled(false); mamPreference.setSummary(getString(R.string.account_chat_history_unknown)); } else if (!supported) { mamPreference.setEnabled(true); mamPreference.setSummary(getString(R.string.account_chat_history_not_supported)); } else { mamPreference.setEnabled(true); if (newSummary != null) { mamPreference.setSummary(newSummary); } else { ListPreference mamListPreference = (ListPreference) mamPreference; mamPreference.setSummary(mamListPreference.getValue()); } } } @Override public void onResume() { super.onResume(); Application.getInstance().addUIListener(OnAccountChangedListener.class, this); } @Override public void onPause() { super.onPause(); saveChanges(); Application.getInstance().removeUIListener(OnAccountChangedListener.class, this); } @Override public boolean onPreferenceChange(Preference preference, Object newValue) { String key = preference.getKey(); if (getString(R.string.account_mam_default_behavior_key).equals(key)) { setUpMamPreference(preference, (String) newValue); } if (getString(R.string.account_mam_sync_key).equals(key)) { preference.setSummary((String)newValue); } return true; } @Override protected Map<String, Object> getValues() { Map<String, Object> source = new HashMap<>(); AccountItem accountItem = AccountManager.getInstance().getAccount(this.account); if (accountItem != null) { putValue(source, R.string.account_clear_history_on_exit_key, accountItem.isClearHistoryOnExit()); // order of enum fields is very important! putValue(source, R.string.account_mam_default_behavior_key, accountItem.getMamDefaultBehaviour().ordinal()); putValue(source, R.string.account_mam_sync_key, accountItem.getLoadHistorySettings().ordinal()); } return source; } @Override protected boolean setValues(Map<String, Object> source, Map<String, Object> result) { AccountManager.getInstance().setClearHistoryOnExit(account, getBoolean(result, R.string.account_clear_history_on_exit_key)); // order of enum fields and value array is very important int mamBehaviorIndex = getInt(result, R.string.account_mam_default_behavior_key); AccountManager.getInstance() .setMamDefaultBehaviour(account, MamPrefsIQ.DefaultBehavior.values()[mamBehaviorIndex]); int loadHistoryIndex = getInt(result, R.string.account_mam_sync_key); AccountManager.getInstance() .setLoadHistorySettings(account, LoadHistorySettings.values()[loadHistoryIndex]); return true; } @Override public void onAccountsChanged(Collection<AccountJid> accounts) { Preference mamPreference = findPreference(getString(R.string.account_mam_default_behavior_key)); setUpMamPreference(mamPreference, null); } }