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.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);
}
}
}

View File

@ -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)
}
}
}

View File

@ -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)
}

View File

@ -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<AccountDetails>(IntentConstants.EXTRA_ACCOUNT)
return arguments?.getParcelable(EXTRA_ACCOUNT)
}
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"
android:title="@string/auto_refresh">
<SwitchPreferenceCompat
android:disableDependentsState="false"
android:key="auto_refresh"
android:title="@string/auto_refresh"/>
<PreferenceCategory
android:dependency="auto_refresh"
android:key="cat_refresh_content"
android:title="@string/content_to_refresh">
<SwitchPreferenceCompat
@ -32,13 +26,13 @@
</PreferenceCategory>
<!--<PreferenceCategory-->
<!--android:enabled="false"-->
<!--android:key="cat_streaming"-->
<!--android:title="@string/streaming">-->
<!--android:enabled="false"-->
<!--android:key="cat_streaming"-->
<!--android:title="@string/streaming">-->
<!--<SwitchPreference-->
<!--android:key="enable_streaming"-->
<!--android:title="@string/enable_streaming"/>-->
<!--<SwitchPreference-->
<!--android:key="enable_streaming"-->
<!--android:title="@string/enable_streaming"/>-->
<!--</PreferenceCategory>-->