diff --git a/twidere/src/main/java/org/mariotaku/twidere/preference/AccountsListPreference.java b/twidere/src/main/java/org/mariotaku/twidere/preference/AccountsListPreference.java index 02eac53dc..20a182367 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/preference/AccountsListPreference.java +++ b/twidere/src/main/java/org/mariotaku/twidere/preference/AccountsListPreference.java @@ -33,6 +33,7 @@ import android.support.v7.preference.Preference; import android.support.v7.preference.PreferenceCategory; import android.support.v7.preference.PreferenceManager; import android.support.v7.preference.PreferenceViewHolder; +import android.support.v7.widget.SwitchCompat; import android.util.AttributeSet; import android.view.Gravity; import android.view.View; @@ -100,22 +101,28 @@ public abstract class AccountsListPreference extends PreferenceCategory implemen OnSharedPreferenceChangeListener { private final AccountDetails mAccount; + @Nullable + private final String mSwitchKey; + private final boolean mSwitchDefault; private final SharedPreferences mSwitchPreference; @Inject MediaLoaderWrapper mImageLoader; - public AccountItemPreference(final Context context, final AccountDetails account, final String switchKey, - final boolean switchDefault) { + public AccountItemPreference(final Context context, final AccountDetails account, + @Nullable final String switchKey, final boolean switchDefault) { super(context); GeneralComponentHelper.build(context).inject(this); final String switchPreferenceName = ACCOUNT_PREFERENCES_NAME_PREFIX + account.key; mAccount = account; + mSwitchKey = switchKey; + mSwitchDefault = switchDefault; mSwitchPreference = context.getSharedPreferences(switchPreferenceName, Context.MODE_PRIVATE); mSwitchPreference.registerOnSharedPreferenceChangeListener(this); setTitle(mAccount.user.name); setSummary(String.format("@%s", mAccount.user.screen_name)); mImageLoader.loadProfileImage(mAccount, this); + setWidgetLayoutResource(R.layout.layout_preference_switch_indicator); } @Override @@ -168,6 +175,13 @@ public abstract class AccountsListPreference extends PreferenceCategory implemen if (summaryView instanceof TextView) { ((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); + } } } diff --git a/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/AccountNotificationSettingsFragment.kt b/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/AccountNotificationSettingsFragment.kt index 28dc0496d..0a9ac378e 100644 --- a/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/AccountNotificationSettingsFragment.kt +++ b/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/AccountNotificationSettingsFragment.kt @@ -25,15 +25,6 @@ import org.mariotaku.twidere.constant.SharedPreferenceConstants.* 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 get() = R.xml.preferences_account_notifications @@ -43,4 +34,13 @@ class AccountNotificationSettingsFragment : BaseAccountPreferenceFragment() { override val switchPreferenceKey: String? 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) + } + } + } diff --git a/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/AccountRefreshSettingsFragment.kt b/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/AccountRefreshSettingsFragment.kt index 5f0eeb8d0..5f9d2b2a7 100644 --- a/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/AccountRefreshSettingsFragment.kt +++ b/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/AccountRefreshSettingsFragment.kt @@ -34,10 +34,9 @@ class AccountRefreshSettingsFragment : BaseAccountPreferenceFragment() { get() = DEFAULT_AUTO_REFRESH override val switchPreferenceKey: String? - get() = null + get() = KEY_AUTO_REFRESH override fun onSharedPreferenceChanged(preferences: SharedPreferences, key: String) { - val activity = activity ?: return if (KEY_AUTO_REFRESH == key) { Utils.startRefreshServiceIfNeeded(activity) } diff --git a/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/BaseAccountPreferenceFragment.kt b/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/BaseAccountPreferenceFragment.kt index fc6b907bb..c1563c60d 100644 --- a/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/BaseAccountPreferenceFragment.kt +++ b/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/BaseAccountPreferenceFragment.kt @@ -30,7 +30,7 @@ import android.widget.CompoundButton import android.widget.CompoundButton.OnCheckedChangeListener import org.mariotaku.twidere.R 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.model.AccountDetails @@ -43,7 +43,7 @@ abstract class BaseAccountPreferenceFragment : BasePreferenceFragment(), OnCheck override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { 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}" pm.sharedPreferencesName = preferenceName addPreferencesFromResource(preferencesResource) @@ -73,14 +73,15 @@ abstract class BaseAccountPreferenceFragment : BasePreferenceFragment(), OnCheck if (prefs.getBoolean(switchPreferenceKey, switchPreferenceDefault) != isChecked) { editor.putBoolean(switchPreferenceKey, isChecked) editor.apply() + updatePreferenceScreen() } } - override fun onCreateOptionsMenu(menu: Menu?, inflater: MenuInflater?) { + override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) { val switchKey = switchPreferenceKey if (!TextUtils.isEmpty(switchKey)) { - inflater!!.inflate(R.menu.menu_switch_preference, menu) - val actionView = menu!!.findItem(R.id.toggle).actionView + inflater.inflate(R.menu.menu_switch_preference, menu) + val actionView = menu.findItem(R.id.toggle).actionView val toggle = actionView.findViewById(android.R.id.toggle) as CompoundButton val prefs = preferenceManager.sharedPreferences toggle.setOnCheckedChangeListener(this) @@ -97,8 +98,7 @@ abstract class BaseAccountPreferenceFragment : BasePreferenceFragment(), OnCheck protected val account: AccountDetails? get() { - val args = arguments ?: return null - return args.getParcelable(IntentConstants.EXTRA_ACCOUNT) + return arguments?.getParcelable(EXTRA_ACCOUNT) } protected abstract val preferencesResource: Int diff --git a/twidere/src/main/res/layout/layout_preference_switch_indicator.xml b/twidere/src/main/res/layout/layout_preference_switch_indicator.xml new file mode 100644 index 000000000..1f8063168 --- /dev/null +++ b/twidere/src/main/res/layout/layout_preference_switch_indicator.xml @@ -0,0 +1,15 @@ + + + + + \ No newline at end of file diff --git a/twidere/src/main/res/xml/preferences_account_refresh.xml b/twidere/src/main/res/xml/preferences_account_refresh.xml index 77f89340a..300a2916c 100644 --- a/twidere/src/main/res/xml/preferences_account_refresh.xml +++ b/twidere/src/main/res/xml/preferences_account_refresh.xml @@ -4,13 +4,7 @@ xmlns:android="http://schemas.android.com/apk/res/android" android:title="@string/auto_refresh"> - - - - - + + + - - - + + +