Twidere-App-Android-Twitter.../twidere/src/main/java/org/mariotaku/twidere/fragment/BaseAccountPreferenceFragme...

130 lines
5.4 KiB
Java

/*
* Twidere - Twitter client for Android
*
* Copyright (C) 2012-2014 Mariotaku Lee <mariotaku.lee@gmail.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.mariotaku.twidere.fragment;
import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
import android.os.Bundle;
import android.preference.PreferenceActivity;
import android.support.annotation.Nullable;
import android.support.v7.preference.PreferenceManager;
import android.support.v7.preference.PreferenceScreen;
import android.text.TextUtils;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.View;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import org.mariotaku.twidere.R;
import org.mariotaku.twidere.model.ParcelableAccount;
public abstract class BaseAccountPreferenceFragment extends BasePreferenceFragment implements
OnCheckedChangeListener, OnSharedPreferenceChangeListener {
@Override
public void onActivityCreated(final Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
setHasOptionsMenu(true);
}
@Override
public void onCreatePreferences(Bundle bundle, String s) {
final PreferenceManager pm = getPreferenceManager();
final ParcelableAccount account = getArguments().getParcelable(EXTRA_ACCOUNT);
final String preferenceName = ACCOUNT_PREFERENCES_NAME_PREFIX
+ (account != null ? account.account_key : "unknown");
pm.setSharedPreferencesName(preferenceName);
addPreferencesFromResource(getPreferencesResource());
final SharedPreferences prefs = pm.getSharedPreferences();
prefs.registerOnSharedPreferenceChangeListener(this);
final Activity activity = getActivity();
final Intent intent = activity.getIntent();
if (account != null && intent.hasExtra(PreferenceActivity.EXTRA_SHOW_FRAGMENT)) {
final boolean nameFirst = prefs.getBoolean(KEY_NAME_FIRST, true);
final String name = mUserColorNameManager.getDisplayName(account.account_key,
account.name, account.screen_name, nameFirst);
activity.setTitle(name);
}
updatePreferenceScreen();
}
@Override
public void onDestroy() {
final PreferenceManager pm = getPreferenceManager();
final SharedPreferences prefs = pm.getSharedPreferences();
prefs.unregisterOnSharedPreferenceChangeListener(this);
super.onDestroy();
}
@Override
public void onCheckedChanged(final CompoundButton buttonView, final boolean isChecked) {
final SharedPreferences prefs = getPreferenceManager().getSharedPreferences();
final SharedPreferences.Editor editor = prefs.edit();
if (prefs.getBoolean(getSwitchPreferenceKey(), getSwitchPreferenceDefault()) != isChecked) {
editor.putBoolean(getSwitchPreferenceKey(), isChecked);
editor.apply();
}
}
@Override
public void onCreateOptionsMenu(final Menu menu, final MenuInflater inflater) {
final String switchKey = getSwitchPreferenceKey();
if (!TextUtils.isEmpty(switchKey)) {
inflater.inflate(R.menu.menu_switch_preference, menu);
final View actionView = menu.findItem(R.id.toggle).getActionView();
final CompoundButton toggle = (CompoundButton) actionView.findViewById(android.R.id.toggle);
final SharedPreferences prefs = getPreferenceManager().getSharedPreferences();
toggle.setOnCheckedChangeListener(this);
toggle.setChecked(prefs.getBoolean(switchKey, getSwitchPreferenceDefault()));
}
super.onCreateOptionsMenu(menu, inflater);
}
@Override
public void onSharedPreferenceChanged(final SharedPreferences sharedPreferences, final String key) {
if (key.equals(getSwitchPreferenceKey())) {
updatePreferenceScreen();
}
}
protected ParcelableAccount getAccount() {
final Bundle args = getArguments();
if (args == null) return null;
return args.getParcelable(EXTRA_ACCOUNT);
}
protected abstract int getPreferencesResource();
protected abstract boolean getSwitchPreferenceDefault();
@Nullable
protected abstract String getSwitchPreferenceKey();
private void updatePreferenceScreen() {
final PreferenceScreen screen = getPreferenceScreen();
final SharedPreferences sharedPreferences = getPreferenceManager().getSharedPreferences();
if (screen == null || sharedPreferences == null) return;
screen.setEnabled(sharedPreferences.getBoolean(getSwitchPreferenceKey(), getSwitchPreferenceDefault()));
}
}