improved refresh & notifications settings ui

This commit is contained in:
Mariotaku Lee 2016-12-14 19:03:44 +08:00
parent f56df676d0
commit e311e9e5a4
6 changed files with 54 additions and 32 deletions

View File

@ -33,6 +33,7 @@ import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceCategory; import android.support.v7.preference.PreferenceCategory;
import android.support.v7.preference.PreferenceManager; import android.support.v7.preference.PreferenceManager;
import android.support.v7.preference.PreferenceViewHolder; import android.support.v7.preference.PreferenceViewHolder;
import android.support.v7.widget.SwitchCompat;
import android.util.AttributeSet; import android.util.AttributeSet;
import android.view.Gravity; import android.view.Gravity;
import android.view.View; import android.view.View;
@ -100,22 +101,28 @@ public abstract class AccountsListPreference extends PreferenceCategory implemen
OnSharedPreferenceChangeListener { OnSharedPreferenceChangeListener {
private final AccountDetails mAccount; private final AccountDetails mAccount;
@Nullable
private final String mSwitchKey;
private final boolean mSwitchDefault;
private final SharedPreferences mSwitchPreference; private final SharedPreferences mSwitchPreference;
@Inject @Inject
MediaLoaderWrapper mImageLoader; MediaLoaderWrapper mImageLoader;
public AccountItemPreference(final Context context, final AccountDetails account, final String switchKey, public AccountItemPreference(final Context context, final AccountDetails account,
final boolean switchDefault) { @Nullable final String switchKey, final boolean switchDefault) {
super(context); super(context);
GeneralComponentHelper.build(context).inject(this); GeneralComponentHelper.build(context).inject(this);
final String switchPreferenceName = ACCOUNT_PREFERENCES_NAME_PREFIX + account.key; final String switchPreferenceName = ACCOUNT_PREFERENCES_NAME_PREFIX + account.key;
mAccount = account; mAccount = account;
mSwitchKey = switchKey;
mSwitchDefault = switchDefault;
mSwitchPreference = context.getSharedPreferences(switchPreferenceName, Context.MODE_PRIVATE); mSwitchPreference = context.getSharedPreferences(switchPreferenceName, Context.MODE_PRIVATE);
mSwitchPreference.registerOnSharedPreferenceChangeListener(this); mSwitchPreference.registerOnSharedPreferenceChangeListener(this);
setTitle(mAccount.user.name); setTitle(mAccount.user.name);
setSummary(String.format("@%s", mAccount.user.screen_name)); setSummary(String.format("@%s", mAccount.user.screen_name));
mImageLoader.loadProfileImage(mAccount, this); mImageLoader.loadProfileImage(mAccount, this);
setWidgetLayoutResource(R.layout.layout_preference_switch_indicator);
} }
@Override @Override
@ -168,6 +175,13 @@ public abstract class AccountsListPreference extends PreferenceCategory implemen
if (summaryView instanceof TextView) { if (summaryView instanceof TextView) {
((TextView) summaryView).setSingleLine(true); ((TextView) summaryView).setSingleLine(true);
} }
final SwitchCompat switchView = (SwitchCompat) holder.findViewById(android.R.id.toggle);
if (mSwitchKey != null) {
switchView.setChecked(mSwitchPreference.getBoolean(mSwitchKey, mSwitchDefault));
switchView.setVisibility(View.VISIBLE);
} else {
switchView.setVisibility(View.GONE);
}
} }
} }

View File

@ -25,15 +25,6 @@ import org.mariotaku.twidere.constant.SharedPreferenceConstants.*
class AccountNotificationSettingsFragment : BaseAccountPreferenceFragment() { class AccountNotificationSettingsFragment : BaseAccountPreferenceFragment() {
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
val preference = findPreference(KEY_NOTIFICATION_LIGHT_COLOR)
val account = account
if (preference != null && account != null) {
preference.setDefaultValue(account.color)
}
}
override val preferencesResource: Int override val preferencesResource: Int
get() = R.xml.preferences_account_notifications get() = R.xml.preferences_account_notifications
@ -43,4 +34,13 @@ class AccountNotificationSettingsFragment : BaseAccountPreferenceFragment() {
override val switchPreferenceKey: String? override val switchPreferenceKey: String?
get() = KEY_NOTIFICATION get() = KEY_NOTIFICATION
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
val preference = findPreference(KEY_NOTIFICATION_LIGHT_COLOR)
val account = account
if (preference != null && account != null) {
preference.setDefaultValue(account.color)
}
}
} }

View File

@ -34,10 +34,9 @@ class AccountRefreshSettingsFragment : BaseAccountPreferenceFragment() {
get() = DEFAULT_AUTO_REFRESH get() = DEFAULT_AUTO_REFRESH
override val switchPreferenceKey: String? override val switchPreferenceKey: String?
get() = null get() = KEY_AUTO_REFRESH
override fun onSharedPreferenceChanged(preferences: SharedPreferences, key: String) { override fun onSharedPreferenceChanged(preferences: SharedPreferences, key: String) {
val activity = activity ?: return
if (KEY_AUTO_REFRESH == key) { if (KEY_AUTO_REFRESH == key) {
Utils.startRefreshServiceIfNeeded(activity) Utils.startRefreshServiceIfNeeded(activity)
} }

View File

@ -30,7 +30,7 @@ import android.widget.CompoundButton
import android.widget.CompoundButton.OnCheckedChangeListener import android.widget.CompoundButton.OnCheckedChangeListener
import org.mariotaku.twidere.R import org.mariotaku.twidere.R
import org.mariotaku.twidere.TwidereConstants.ACCOUNT_PREFERENCES_NAME_PREFIX import org.mariotaku.twidere.TwidereConstants.ACCOUNT_PREFERENCES_NAME_PREFIX
import org.mariotaku.twidere.constant.IntentConstants import org.mariotaku.twidere.constant.IntentConstants.EXTRA_ACCOUNT
import org.mariotaku.twidere.constant.SharedPreferenceConstants.KEY_NAME_FIRST import org.mariotaku.twidere.constant.SharedPreferenceConstants.KEY_NAME_FIRST
import org.mariotaku.twidere.model.AccountDetails import org.mariotaku.twidere.model.AccountDetails
@ -43,7 +43,7 @@ abstract class BaseAccountPreferenceFragment : BasePreferenceFragment(), OnCheck
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
val pm = preferenceManager val pm = preferenceManager
val account: AccountDetails = arguments.getParcelable(IntentConstants.EXTRA_ACCOUNT) ?: return val account: AccountDetails = arguments.getParcelable(EXTRA_ACCOUNT) ?: return
val preferenceName = "$ACCOUNT_PREFERENCES_NAME_PREFIX${account.key}" val preferenceName = "$ACCOUNT_PREFERENCES_NAME_PREFIX${account.key}"
pm.sharedPreferencesName = preferenceName pm.sharedPreferencesName = preferenceName
addPreferencesFromResource(preferencesResource) addPreferencesFromResource(preferencesResource)
@ -73,14 +73,15 @@ abstract class BaseAccountPreferenceFragment : BasePreferenceFragment(), OnCheck
if (prefs.getBoolean(switchPreferenceKey, switchPreferenceDefault) != isChecked) { if (prefs.getBoolean(switchPreferenceKey, switchPreferenceDefault) != isChecked) {
editor.putBoolean(switchPreferenceKey, isChecked) editor.putBoolean(switchPreferenceKey, isChecked)
editor.apply() editor.apply()
updatePreferenceScreen()
} }
} }
override fun onCreateOptionsMenu(menu: Menu?, inflater: MenuInflater?) { override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
val switchKey = switchPreferenceKey val switchKey = switchPreferenceKey
if (!TextUtils.isEmpty(switchKey)) { if (!TextUtils.isEmpty(switchKey)) {
inflater!!.inflate(R.menu.menu_switch_preference, menu) inflater.inflate(R.menu.menu_switch_preference, menu)
val actionView = menu!!.findItem(R.id.toggle).actionView val actionView = menu.findItem(R.id.toggle).actionView
val toggle = actionView.findViewById(android.R.id.toggle) as CompoundButton val toggle = actionView.findViewById(android.R.id.toggle) as CompoundButton
val prefs = preferenceManager.sharedPreferences val prefs = preferenceManager.sharedPreferences
toggle.setOnCheckedChangeListener(this) toggle.setOnCheckedChangeListener(this)
@ -97,8 +98,7 @@ abstract class BaseAccountPreferenceFragment : BasePreferenceFragment(), OnCheck
protected val account: AccountDetails? protected val account: AccountDetails?
get() { get() {
val args = arguments ?: return null return arguments?.getParcelable(EXTRA_ACCOUNT)
return args.getParcelable<AccountDetails>(IntentConstants.EXTRA_ACCOUNT)
} }
protected abstract val preferencesResource: Int protected abstract val preferencesResource: Int

View File

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center">
<android.support.v7.widget.SwitchCompat
android:id="@android:id/toggle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:clickable="false"
android:focusable="false"/>
</FrameLayout>

View File

@ -4,13 +4,7 @@
xmlns:android="http://schemas.android.com/apk/res/android" xmlns:android="http://schemas.android.com/apk/res/android"
android:title="@string/auto_refresh"> android:title="@string/auto_refresh">
<SwitchPreferenceCompat
android:disableDependentsState="false"
android:key="auto_refresh"
android:title="@string/auto_refresh"/>
<PreferenceCategory <PreferenceCategory
android:dependency="auto_refresh"
android:key="cat_refresh_content" android:key="cat_refresh_content"
android:title="@string/content_to_refresh"> android:title="@string/content_to_refresh">
<SwitchPreferenceCompat <SwitchPreferenceCompat
@ -32,13 +26,13 @@
</PreferenceCategory> </PreferenceCategory>
<!--<PreferenceCategory--> <!--<PreferenceCategory-->
<!--android:enabled="false"--> <!--android:enabled="false"-->
<!--android:key="cat_streaming"--> <!--android:key="cat_streaming"-->
<!--android:title="@string/streaming">--> <!--android:title="@string/streaming">-->
<!--<SwitchPreference--> <!--<SwitchPreference-->
<!--android:key="enable_streaming"--> <!--android:key="enable_streaming"-->
<!--android:title="@string/enable_streaming"/>--> <!--android:title="@string/enable_streaming"/>-->
<!--</PreferenceCategory>--> <!--</PreferenceCategory>-->