diff --git a/twidere/src/main/java/org/mariotaku/twidere/Constants.java b/twidere/src/main/java/org/mariotaku/twidere/Constants.java index 867628d10..f3ea9b715 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/Constants.java +++ b/twidere/src/main/java/org/mariotaku/twidere/Constants.java @@ -108,6 +108,7 @@ public interface Constants extends TwidereConstants { public static final int MENU_PROGRESS = R.id.progress; public static final int MENU_OPEN_WITH_ACCOUNT = R.id.open_with_account; public static final int MENU_ACCOUNTS = R.id.accounts; + public static final int MENU_INVERSE_SELECTION = R.id.inverse_selection; public static final int LINK_ID_STATUS = 1; public static final int LINK_ID_USER = 2; diff --git a/twidere/src/main/java/org/mariotaku/twidere/activity/support/MenuDialogFragment.java b/twidere/src/main/java/org/mariotaku/twidere/activity/support/MenuDialogFragment.java index e5fac17cf..61874413d 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/activity/support/MenuDialogFragment.java +++ b/twidere/src/main/java/org/mariotaku/twidere/activity/support/MenuDialogFragment.java @@ -5,6 +5,7 @@ import android.app.Dialog; import android.content.Context; import android.graphics.PorterDuff.Mode; import android.os.Bundle; +import android.support.annotation.NonNull; import android.support.v4.app.Fragment; import android.view.Menu; import android.view.MenuItem; @@ -22,13 +23,16 @@ import org.mariotaku.twidere.util.ThemeUtils; public abstract class MenuDialogFragment extends BaseSupportDialogFragment implements OnItemClickListener { + private MenuAdapter mAdapter; + + @NonNull @Override public Dialog onCreateDialog(final Bundle savedInstanceState) { final Context context = getThemedContext(); final AlertDialog.Builder builder = new AlertDialog.Builder(context); - final MenuAdapter adapter = new MenuAdapter(context); + mAdapter = new MenuAdapter(context); final ListView listView = new ListView(context); - listView.setAdapter(adapter); + listView.setAdapter(mAdapter); listView.setOnItemClickListener(this); builder.setView(listView); final Menu menu = MenuUtils.createMenu(context); @@ -36,7 +40,7 @@ public abstract class MenuDialogFragment extends BaseSupportDialogFragment imple final int itemColor = ThemeUtils.getThemeForegroundColor(context); final int highlightColor = ThemeUtils.getUserAccentColor(context); ThemeUtils.applyColorFilterToMenuIcon(menu, itemColor, highlightColor, Mode.SRC_ATOP); - adapter.setMenu(menu); + mAdapter.setMenu(menu); return builder.create(); } @@ -49,7 +53,7 @@ public abstract class MenuDialogFragment extends BaseSupportDialogFragment imple final Fragment parentFragment = getParentFragment(); final MenuItem item = (MenuItem) parent.getItemAtPosition(position); if (item.hasSubMenu()) { - + mAdapter.setMenu(item.getSubMenu()); } else if (parentFragment instanceof OnMenuItemClickListener) { ((OnMenuItemClickListener) parentFragment).onMenuItemClick(item); dismiss(); diff --git a/twidere/src/main/java/org/mariotaku/twidere/adapter/AccountsAdapter.java b/twidere/src/main/java/org/mariotaku/twidere/adapter/AccountsAdapter.java index bd041615b..7f532d970 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/adapter/AccountsAdapter.java +++ b/twidere/src/main/java/org/mariotaku/twidere/adapter/AccountsAdapter.java @@ -30,12 +30,13 @@ import com.mobeta.android.dslv.SimpleDragSortCursorAdapter; import org.mariotaku.twidere.Constants; import org.mariotaku.twidere.R; +import org.mariotaku.twidere.adapter.iface.IBaseAdapter; import org.mariotaku.twidere.app.TwidereApplication; import org.mariotaku.twidere.provider.TweetStore.Accounts; import org.mariotaku.twidere.util.ImageLoaderWrapper; import org.mariotaku.twidere.view.holder.AccountViewHolder; -public class AccountsAdapter extends SimpleDragSortCursorAdapter implements Constants { +public class AccountsAdapter extends SimpleDragSortCursorAdapter implements Constants, IBaseAdapter { private final ImageLoaderWrapper mImageLoader; private final SharedPreferences mPreferences; @@ -94,23 +95,94 @@ public class AccountsAdapter extends SimpleDragSortCursorAdapter implements Cons return view; } + @Override + public ImageLoaderWrapper getImageLoader() { + return mImageLoader; + } + + @Override + public int getLinkHighlightColor() { + return 0; + } + + @Override + public int getLinkHighlightOption() { + return 0; + } + + @Override + public float getTextSize() { + return 0; + } + + @Override + public boolean isDisplayNameFirst() { + return false; + } + + @Override + public boolean isDisplayProfileImage() { + return mDisplayProfileImage; + } + + @Override + public boolean isNicknameOnly() { + return false; + } + + @Override + public boolean isShowAccountColor() { + return false; + } + @Override public void notifyDataSetChanged() { mDefaultAccountId = mPreferences.getLong(KEY_DEFAULT_ACCOUNT_ID, -1); super.notifyDataSetChanged(); } + @Override + public void setDisplayNameFirst(boolean nameFirst) { + + } + public void setChoiceMode(final int mode) { if (mChoiceMode == mode) return; mChoiceMode = mode; notifyDataSetChanged(); } + @Override public void setDisplayProfileImage(final boolean display) { mDisplayProfileImage = display; notifyDataSetChanged(); } + @Override + public void setLinkHighlightColor(int color) { + + } + + @Override + public void setLinkHighlightOption(String option) { + + } + + @Override + public void setNicknameOnly(boolean nicknameOnly) { + + } + + @Override + public void setShowAccountColor(boolean show) { + + } + + @Override + public void setTextSize(float textSize) { + + } + @Override public Cursor swapCursor(final Cursor cursor) { if (cursor != null) { diff --git a/twidere/src/main/java/org/mariotaku/twidere/adapter/BaseArrayAdapter.java b/twidere/src/main/java/org/mariotaku/twidere/adapter/BaseArrayAdapter.java index a6b48f425..a5a9a2a7d 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/adapter/BaseArrayAdapter.java +++ b/twidere/src/main/java/org/mariotaku/twidere/adapter/BaseArrayAdapter.java @@ -19,8 +19,6 @@ package org.mariotaku.twidere.adapter; -import static org.mariotaku.twidere.util.Utils.getLinkHighlightOptionInt; - import android.content.Context; import android.content.SharedPreferences; import android.content.SharedPreferences.OnSharedPreferenceChangeListener; @@ -33,119 +31,124 @@ import org.mariotaku.twidere.util.TwidereLinkify; import java.util.Collection; +import static org.mariotaku.twidere.util.Utils.getLinkHighlightOptionInt; + public class BaseArrayAdapter extends ArrayAdapter implements IBaseAdapter, OnSharedPreferenceChangeListener { - private final TwidereLinkify mLinkify; + private final TwidereLinkify mLinkify; - private float mTextSize; - private int mLinkHighlightOption, mLinkHighlightColor; + private float mTextSize; + private int mLinkHighlightOption, mLinkHighlightColor; - private boolean mDisplayProfileImage, mNicknameOnly, mDisplayNameFirst, mShowAccountColor; + private boolean mDisplayProfileImage, mNicknameOnly, mDisplayNameFirst, mShowAccountColor; - private final SharedPreferences mNicknamePrefs, mColorPrefs; - private final ImageLoaderWrapper mImageLoader; + private final SharedPreferences mNicknamePrefs, mColorPrefs; + private final ImageLoaderWrapper mImageLoader; - public BaseArrayAdapter(final Context context, final int layoutRes) { - this(context, layoutRes, null); - } + public BaseArrayAdapter(final Context context, final int layoutRes) { + this(context, layoutRes, null); + } - public BaseArrayAdapter(final Context context, final int layoutRes, final Collection collection) { - super(context, layoutRes, collection); - final TwidereApplication app = TwidereApplication.getInstance(context); - mLinkify = new TwidereLinkify(new OnLinkClickHandler(context, app.getMultiSelectManager())); - mImageLoader = app.getImageLoaderWrapper(); - mNicknamePrefs = context.getSharedPreferences(USER_NICKNAME_PREFERENCES_NAME, Context.MODE_PRIVATE); - mColorPrefs = context.getSharedPreferences(USER_COLOR_PREFERENCES_NAME, Context.MODE_PRIVATE); - mNicknamePrefs.registerOnSharedPreferenceChangeListener(this); - mColorPrefs.registerOnSharedPreferenceChangeListener(this); - } + public BaseArrayAdapter(final Context context, final int layoutRes, final Collection collection) { + super(context, layoutRes, collection); + final TwidereApplication app = TwidereApplication.getInstance(context); + mLinkify = new TwidereLinkify(new OnLinkClickHandler(context, app.getMultiSelectManager())); + mImageLoader = app.getImageLoaderWrapper(); + mNicknamePrefs = context.getSharedPreferences(USER_NICKNAME_PREFERENCES_NAME, Context.MODE_PRIVATE); + mColorPrefs = context.getSharedPreferences(USER_COLOR_PREFERENCES_NAME, Context.MODE_PRIVATE); + mNicknamePrefs.registerOnSharedPreferenceChangeListener(this); + mColorPrefs.registerOnSharedPreferenceChangeListener(this); + } - @Override - public ImageLoaderWrapper getImageLoader() { - return mImageLoader; - } + @Override + public ImageLoaderWrapper getImageLoader() { + return mImageLoader; + } - @Override - public final int getLinkHighlightColor() { - return mLinkHighlightColor; - } + @Override + public final int getLinkHighlightColor() { + return mLinkHighlightColor; + } - @Override - public final int getLinkHighlightOption() { - return mLinkHighlightOption; - } + @Override + public final int getLinkHighlightOption() { + return mLinkHighlightOption; + } - public final TwidereLinkify getLinkify() { - return mLinkify; - } + public final TwidereLinkify getLinkify() { + return mLinkify; + } - @Override - public final float getTextSize() { - return mTextSize; - } + @Override + public final float getTextSize() { + return mTextSize; + } - @Override - public final boolean isDisplayNameFirst() { - return mDisplayNameFirst; - } + @Override + public final boolean isDisplayNameFirst() { + return mDisplayNameFirst; + } - @Override - public final boolean isDisplayProfileImage() { - return mDisplayProfileImage; - } + @Override + public final boolean isDisplayProfileImage() { + return mDisplayProfileImage; + } - @Override - public final boolean isNicknameOnly() { - return mNicknameOnly; - } + @Override + public final boolean isNicknameOnly() { + return mNicknameOnly; + } - @Override - public final boolean isShowAccountColor() { - return mShowAccountColor; - } + @Override + public final boolean isShowAccountColor() { + return mShowAccountColor; + } - @Override - public void onSharedPreferenceChanged(final SharedPreferences sharedPreferences, final String key) { - notifyDataSetChanged(); - } + @Override + public void onSharedPreferenceChanged(final SharedPreferences preferences, final String key) { + if (KEY_NICKNAME_ONLY.equals(key) || KEY_DISPLAY_PROFILE_IMAGE.equals(key) + || KEY_DISPLAY_IMAGE_PREVIEW.equals(key) || KEY_DISPLAY_SENSITIVE_CONTENTS.equals(key)) { + notifyDataSetChanged(); + } + } - @Override - public final void setDisplayNameFirst(final boolean nameFirst) { - mDisplayNameFirst = nameFirst; - } + @Override + public final void setDisplayNameFirst(final boolean nameFirst) { + mDisplayNameFirst = nameFirst; + } - @Override - public final void setDisplayProfileImage(final boolean display) { - mDisplayProfileImage = display; - } + @Override + public final void setDisplayProfileImage(final boolean display) { + mDisplayProfileImage = display; + } - @Override - public final void setLinkHighlightColor(final int color) { - mLinkify.setLinkTextColor(color); - mLinkHighlightColor = color; - } + @Override + public final void setLinkHighlightColor(final int color) { + mLinkify.setLinkTextColor(color); + mLinkHighlightColor = color; + } - @Override - public final void setLinkHighlightOption(final String option) { - final int optionInt = getLinkHighlightOptionInt(option); - mLinkify.setHighlightOption(optionInt); - if (optionInt == mLinkHighlightOption) return; - mLinkHighlightOption = optionInt; - } + @Override + public final void setLinkHighlightOption(final String option) { + final int optionInt = getLinkHighlightOptionInt(option); + mLinkify.setHighlightOption(optionInt); + if (optionInt == mLinkHighlightOption) return; + mLinkHighlightOption = optionInt; + } - @Override - public final void setNicknameOnly(final boolean nickname_only) { - mNicknameOnly = nickname_only; - } + @Override + public final void setNicknameOnly(final boolean nicknameOnly) { + mNicknameOnly = nicknameOnly; + } - @Override - public final void setShowAccountColor(final boolean show) { - mShowAccountColor = show; - } + @Override + public final void setShowAccountColor(final boolean show) { + mShowAccountColor = show; + } - @Override - public final void setTextSize(final float textSize) { - mTextSize = textSize; - } + @Override + public final void setTextSize(final float textSize) { + mTextSize = textSize; + } } diff --git a/twidere/src/main/java/org/mariotaku/twidere/adapter/BaseCursorAdapter.java b/twidere/src/main/java/org/mariotaku/twidere/adapter/BaseCursorAdapter.java index 2092186a6..8ad13a995 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/adapter/BaseCursorAdapter.java +++ b/twidere/src/main/java/org/mariotaku/twidere/adapter/BaseCursorAdapter.java @@ -144,9 +144,9 @@ public class BaseCursorAdapter extends SimpleCursorAdapter implements IBaseAdapt } @Override - public final void setNicknameOnly(final boolean nickname_only) { - if (mNicknameOnly == nickname_only) return; - mNicknameOnly = nickname_only; + public final void setNicknameOnly(final boolean nicknameOnly) { + if (mNicknameOnly == nicknameOnly) return; + mNicknameOnly = nicknameOnly; notifyDataSetChanged(); } @@ -158,9 +158,9 @@ public class BaseCursorAdapter extends SimpleCursorAdapter implements IBaseAdapt } @Override - public final void setTextSize(final float text_size) { - if (text_size == mTextSize) return; - mTextSize = text_size; + public final void setTextSize(final float textSize) { + if (textSize == mTextSize) return; + mTextSize = textSize; notifyDataSetChanged(); } diff --git a/twidere/src/main/java/org/mariotaku/twidere/adapter/iface/IBaseAdapter.java b/twidere/src/main/java/org/mariotaku/twidere/adapter/iface/IBaseAdapter.java index a89654723..6dc3af0ef 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/adapter/iface/IBaseAdapter.java +++ b/twidere/src/main/java/org/mariotaku/twidere/adapter/iface/IBaseAdapter.java @@ -52,9 +52,9 @@ public interface IBaseAdapter extends Constants, ListAdapter { public void setLinkHighlightOption(String option); - public void setNicknameOnly(boolean nickname_only); + public void setNicknameOnly(boolean nicknameOnly); public void setShowAccountColor(boolean show); - public void setTextSize(float text_size); + public void setTextSize(float textSize); } diff --git a/twidere/src/main/java/org/mariotaku/twidere/fragment/BaseFiltersFragment.java b/twidere/src/main/java/org/mariotaku/twidere/fragment/BaseFiltersFragment.java index fdfeb4c24..9c2db588e 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/fragment/BaseFiltersFragment.java +++ b/twidere/src/main/java/org/mariotaku/twidere/fragment/BaseFiltersFragment.java @@ -19,8 +19,6 @@ package org.mariotaku.twidere.fragment; -import static org.mariotaku.twidere.util.Utils.getDisplayName; - import android.content.BroadcastReceiver; import android.content.ContentResolver; import android.content.Context; @@ -34,6 +32,7 @@ import android.os.Bundle; import android.support.v4.app.LoaderManager; import android.support.v4.content.CursorLoader; import android.support.v4.content.Loader; +import android.util.SparseBooleanArray; import android.view.ActionMode; import android.view.LayoutInflater; import android.view.Menu; @@ -52,255 +51,264 @@ import org.mariotaku.twidere.R; import org.mariotaku.twidere.fragment.support.BaseSupportListFragment; import org.mariotaku.twidere.provider.TweetStore.Filters; +import static org.mariotaku.twidere.util.Utils.getDisplayName; + public abstract class BaseFiltersFragment extends BaseSupportListFragment implements LoaderManager.LoaderCallbacks, - MultiChoiceModeListener { + MultiChoiceModeListener { - private ListView mListView; + private ListView mListView; - private SimpleCursorAdapter mAdapter; + private SimpleCursorAdapter mAdapter; - private ContentResolver mResolver; + private ContentResolver mResolver; - private ActionMode mActionMode; + private ActionMode mActionMode; - private final BroadcastReceiver mStateReceiver = new BroadcastReceiver() { + private final BroadcastReceiver mStateReceiver = new BroadcastReceiver() { - @Override - public void onReceive(final Context context, final Intent intent) { - if (getActivity() == null || !isAdded() || isDetached()) return; - final String action = intent.getAction(); - if (BROADCAST_FILTERS_UPDATED.equals(action)) { - getLoaderManager().restartLoader(0, null, BaseFiltersFragment.this); - } - } + @Override + public void onReceive(final Context context, final Intent intent) { + if (getActivity() == null || !isAdded() || isDetached()) return; + final String action = intent.getAction(); + if (BROADCAST_FILTERS_UPDATED.equals(action)) { + getLoaderManager().restartLoader(0, null, BaseFiltersFragment.this); + } + } - }; + }; - public abstract Uri getContentUri(); + public abstract Uri getContentUri(); - @Override - public boolean onActionItemClicked(final ActionMode mode, final MenuItem item) { - switch (item.getItemId()) { - case MENU_DELETE: { - final Where where = Where.in(new Column(Filters._ID), new RawItemArray(mListView.getCheckedItemIds())); - mResolver.delete(getContentUri(), where.getSQL(), null); - break; - } - default: { - return false; - } - } - mode.finish(); - return true; - } + @Override + public boolean onActionItemClicked(final ActionMode mode, final MenuItem item) { + switch (item.getItemId()) { + case MENU_DELETE: { + final Where where = Where.in(new Column(Filters._ID), new RawItemArray(mListView.getCheckedItemIds())); + mResolver.delete(getContentUri(), where.getSQL(), null); + break; + } + case MENU_INVERSE_SELECTION: { + final SparseBooleanArray positions = mListView.getCheckedItemPositions(); + for (int i = 0, j = mListView.getCount(); i < j; i++) { + mListView.setItemChecked(i, !positions.get(i)); + } + return true; + } + default: { + return false; + } + } + mode.finish(); + return true; + } - @Override - public void onActivityCreated(final Bundle savedInstanceState) { - mResolver = getContentResolver(); - super.onActivityCreated(savedInstanceState); - mAdapter = createListAdapter(); - setListAdapter(mAdapter); - mListView = getListView(); - mListView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL); - mListView.setMultiChoiceModeListener(this); - setEmptyText(getString(R.string.no_rule)); - getLoaderManager().initLoader(0, null, this); - setListShown(false); - } + @Override + public void onActivityCreated(final Bundle savedInstanceState) { + mResolver = getContentResolver(); + super.onActivityCreated(savedInstanceState); + mAdapter = createListAdapter(); + setListAdapter(mAdapter); + mListView = getListView(); + mListView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL); + mListView.setMultiChoiceModeListener(this); + setEmptyText(getString(R.string.no_rule)); + getLoaderManager().initLoader(0, null, this); + setListShown(false); + } - @Override - public boolean onCreateActionMode(final ActionMode mode, final Menu menu) { - mActionMode = mode; - getActivity().getMenuInflater().inflate(R.menu.action_multi_select_items, menu); - return true; - } + @Override + public boolean onCreateActionMode(final ActionMode mode, final Menu menu) { + mActionMode = mode; + getActivity().getMenuInflater().inflate(R.menu.action_multi_select_items, menu); + return true; + } - @Override - public Loader onCreateLoader(final int id, final Bundle args) { - return new CursorLoader(getActivity(), getContentUri(), getContentColumns(), null, null, null); - } + @Override + public Loader onCreateLoader(final int id, final Bundle args) { + return new CursorLoader(getActivity(), getContentUri(), getContentColumns(), null, null, null); + } - @Override - public View onCreateView(final LayoutInflater inflater, final ViewGroup container, final Bundle savedInstanceState) { - final View view = super.onCreateView(inflater, container, savedInstanceState); - final View lv = view.findViewById(android.R.id.list); - final Resources res = getResources(); - final float density = res.getDisplayMetrics().density; - final int padding = (int) density * 16; - lv.setId(android.R.id.list); - lv.setPadding(padding, 0, padding, 0); - return view; - } + @Override + public View onCreateView(final LayoutInflater inflater, final ViewGroup container, final Bundle savedInstanceState) { + final View view = super.onCreateView(inflater, container, savedInstanceState); + final View lv = view.findViewById(android.R.id.list); + final Resources res = getResources(); + final float density = res.getDisplayMetrics().density; + final int padding = (int) density * 16; + lv.setId(android.R.id.list); + lv.setPadding(padding, 0, padding, 0); + return view; + } - @Override - public void onDestroyActionMode(final ActionMode mode) { + @Override + public void onDestroyActionMode(final ActionMode mode) { - } + } - @Override - public void onItemCheckedStateChanged(final ActionMode mode, final int position, final long id, - final boolean checked) { - updateTitle(mode); - } + @Override + public void onItemCheckedStateChanged(final ActionMode mode, final int position, final long id, + final boolean checked) { + updateTitle(mode); + } - @Override - public void onLoaderReset(final Loader loader) { - mAdapter.swapCursor(null); - } + @Override + public void onLoaderReset(final Loader loader) { + mAdapter.swapCursor(null); + } - @Override - public void onLoadFinished(final Loader loader, final Cursor data) { - mAdapter.swapCursor(data); - setListShown(true); - } + @Override + public void onLoadFinished(final Loader loader, final Cursor data) { + mAdapter.swapCursor(data); + setListShown(true); + } - @Override - public boolean onPrepareActionMode(final ActionMode mode, final Menu menu) { - updateTitle(mode); - return true; - } + @Override + public boolean onPrepareActionMode(final ActionMode mode, final Menu menu) { + updateTitle(mode); + return true; + } - @Override - public void onStart() { - super.onStart(); - final IntentFilter filter = new IntentFilter(BROADCAST_FILTERS_UPDATED); - registerReceiver(mStateReceiver, filter); - } + @Override + public void onStart() { + super.onStart(); + final IntentFilter filter = new IntentFilter(BROADCAST_FILTERS_UPDATED); + registerReceiver(mStateReceiver, filter); + } - @Override - public void onStop() { - unregisterReceiver(mStateReceiver); - super.onStop(); - } + @Override + public void onStop() { + unregisterReceiver(mStateReceiver); + super.onStop(); + } - @Override - public void setUserVisibleHint(final boolean isVisibleToUser) { - super.setUserVisibleHint(isVisibleToUser); - if (!isVisibleToUser && mActionMode != null) { - mActionMode.finish(); - } - } + @Override + public void setUserVisibleHint(final boolean isVisibleToUser) { + super.setUserVisibleHint(isVisibleToUser); + if (!isVisibleToUser && mActionMode != null) { + mActionMode.finish(); + } + } - protected SimpleCursorAdapter createListAdapter() { - return new FilterListAdapter(getActivity()); - } + protected SimpleCursorAdapter createListAdapter() { + return new FilterListAdapter(getActivity()); + } - protected abstract String[] getContentColumns(); + protected abstract String[] getContentColumns(); - private void updateTitle(final ActionMode mode) { - if (mListView == null || mode == null || getActivity() == null) return; - final int count = mListView.getCheckedItemCount(); - mode.setTitle(getResources().getQuantityString(R.plurals.Nitems_selected, count, count)); - } + private void updateTitle(final ActionMode mode) { + if (mListView == null || mode == null || getActivity() == null) return; + final int count = mListView.getCheckedItemCount(); + mode.setTitle(getResources().getQuantityString(R.plurals.Nitems_selected, count, count)); + } - public static final class FilteredKeywordsFragment extends BaseFiltersFragment { + public static final class FilteredKeywordsFragment extends BaseFiltersFragment { - @Override - public String[] getContentColumns() { - return Filters.Keywords.COLUMNS; - } + @Override + public String[] getContentColumns() { + return Filters.Keywords.COLUMNS; + } - @Override - public Uri getContentUri() { - return Filters.Keywords.CONTENT_URI; - } + @Override + public Uri getContentUri() { + return Filters.Keywords.CONTENT_URI; + } - } + } - public static final class FilteredLinksFragment extends BaseFiltersFragment { + public static final class FilteredLinksFragment extends BaseFiltersFragment { - @Override - public String[] getContentColumns() { - return Filters.Links.COLUMNS; - } + @Override + public String[] getContentColumns() { + return Filters.Links.COLUMNS; + } - @Override - public Uri getContentUri() { - return Filters.Links.CONTENT_URI; - } + @Override + public Uri getContentUri() { + return Filters.Links.CONTENT_URI; + } - } + } - public static final class FilteredSourcesFragment extends BaseFiltersFragment { + public static final class FilteredSourcesFragment extends BaseFiltersFragment { - @Override - public String[] getContentColumns() { - return Filters.Sources.COLUMNS; - } + @Override + public String[] getContentColumns() { + return Filters.Sources.COLUMNS; + } - @Override - public Uri getContentUri() { - return Filters.Sources.CONTENT_URI; - } + @Override + public Uri getContentUri() { + return Filters.Sources.CONTENT_URI; + } - } + } - public static final class FilteredUsersFragment extends BaseFiltersFragment { + public static final class FilteredUsersFragment extends BaseFiltersFragment { - @Override - public String[] getContentColumns() { - return Filters.Users.COLUMNS; - } + @Override + public String[] getContentColumns() { + return Filters.Users.COLUMNS; + } - @Override - public Uri getContentUri() { - return Filters.Users.CONTENT_URI; - } + @Override + public Uri getContentUri() { + return Filters.Users.CONTENT_URI; + } - @Override - protected SimpleCursorAdapter createListAdapter() { - return new FilterUsersListAdapter(getActivity()); - } + @Override + protected SimpleCursorAdapter createListAdapter() { + return new FilterUsersListAdapter(getActivity()); + } - private static final class FilterUsersListAdapter extends SimpleCursorAdapter { + private static final class FilterUsersListAdapter extends SimpleCursorAdapter { - private int mUserIdIdx, mNameIdx, mScreenNameIdx; + private int mUserIdIdx, mNameIdx, mScreenNameIdx; - private final boolean mNameFirst, mNicknameOnly; + private final boolean mNameFirst, mNicknameOnly; - public FilterUsersListAdapter(final Context context) { - super(context, android.R.layout.simple_list_item_activated_1, null, new String[0], new int[0], 0); - final SharedPreferences prefs = context.getSharedPreferences(SHARED_PREFERENCES_NAME, - Context.MODE_PRIVATE); - mNameFirst = prefs.getBoolean(KEY_NAME_FIRST, true); - mNicknameOnly = prefs.getBoolean(KEY_NICKNAME_ONLY, false); - } + public FilterUsersListAdapter(final Context context) { + super(context, android.R.layout.simple_list_item_activated_1, null, new String[0], new int[0], 0); + final SharedPreferences prefs = context.getSharedPreferences(SHARED_PREFERENCES_NAME, + Context.MODE_PRIVATE); + mNameFirst = prefs.getBoolean(KEY_NAME_FIRST, true); + mNicknameOnly = prefs.getBoolean(KEY_NICKNAME_ONLY, false); + } - @Override - public void bindView(final View view, final Context context, final Cursor cursor) { - super.bindView(view, context, cursor); - final TextView text1 = (TextView) view.findViewById(android.R.id.text1); - final long user_id = cursor.getLong(mUserIdIdx); - final String name = cursor.getString(mNameIdx); - final String screen_name = cursor.getString(mScreenNameIdx); - final String display_name = getDisplayName(context, user_id, name, screen_name, mNameFirst, - mNicknameOnly); - text1.setText(display_name); - } + @Override + public void bindView(final View view, final Context context, final Cursor cursor) { + super.bindView(view, context, cursor); + final TextView text1 = (TextView) view.findViewById(android.R.id.text1); + final long user_id = cursor.getLong(mUserIdIdx); + final String name = cursor.getString(mNameIdx); + final String screen_name = cursor.getString(mScreenNameIdx); + final String display_name = getDisplayName(context, user_id, name, screen_name, mNameFirst, + mNicknameOnly); + text1.setText(display_name); + } - @Override - public Cursor swapCursor(final Cursor c) { - final Cursor old = super.swapCursor(c); - if (c != null) { - mUserIdIdx = c.getColumnIndex(Filters.Users.USER_ID); - mNameIdx = c.getColumnIndex(Filters.Users.NAME); - mScreenNameIdx = c.getColumnIndex(Filters.Users.SCREEN_NAME); - } - return old; - } + @Override + public Cursor swapCursor(final Cursor c) { + final Cursor old = super.swapCursor(c); + if (c != null) { + mUserIdIdx = c.getColumnIndex(Filters.Users.USER_ID); + mNameIdx = c.getColumnIndex(Filters.Users.NAME); + mScreenNameIdx = c.getColumnIndex(Filters.Users.SCREEN_NAME); + } + return old; + } - } - } + } + } - private static final class FilterListAdapter extends SimpleCursorAdapter { + private static final class FilterListAdapter extends SimpleCursorAdapter { - private static final String[] from = new String[] { Filters.VALUE }; + private static final String[] from = new String[]{Filters.VALUE}; - private static final int[] to = new int[] { android.R.id.text1 }; + private static final int[] to = new int[]{android.R.id.text1}; - public FilterListAdapter(final Context context) { - super(context, android.R.layout.simple_list_item_activated_1, null, from, to, 0); - } + public FilterListAdapter(final Context context) { + super(context, android.R.layout.simple_list_item_activated_1, null, from, to, 0); + } - } + } } diff --git a/twidere/src/main/java/org/mariotaku/twidere/fragment/support/AccountsManagerFragment.java b/twidere/src/main/java/org/mariotaku/twidere/fragment/support/AccountsManagerFragment.java index d081d8e56..91808bdd2 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/fragment/support/AccountsManagerFragment.java +++ b/twidere/src/main/java/org/mariotaku/twidere/fragment/support/AccountsManagerFragment.java @@ -4,6 +4,7 @@ import android.content.Intent; import android.database.Cursor; import android.net.Uri; import android.os.Bundle; +import android.support.v4.app.FragmentActivity; import android.support.v4.app.LoaderManager.LoaderCallbacks; import android.support.v4.content.CursorLoader; import android.support.v4.content.Loader; @@ -14,16 +15,20 @@ import android.view.View; import android.view.ViewGroup; import android.widget.ListView; +import com.mobeta.android.dslv.DragSortListView; +import com.mobeta.android.dslv.DragSortListView.DropListener; + import org.mariotaku.twidere.R; import org.mariotaku.twidere.activity.support.SignInActivity; import org.mariotaku.twidere.adapter.AccountsAdapter; import org.mariotaku.twidere.menu.TwidereMenuInflater; import org.mariotaku.twidere.provider.TweetStore.Accounts; +import org.mariotaku.twidere.util.Utils; /** * Created by mariotaku on 14/10/26. */ -public class AccountsManagerFragment extends BaseSupportListFragment implements LoaderCallbacks { +public class AccountsManagerFragment extends BaseSupportListFragment implements LoaderCallbacks, DropListener { private AccountsAdapter mAdapter; @@ -49,8 +54,12 @@ public class AccountsManagerFragment extends BaseSupportListFragment implements public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); setHasOptionsMenu(true); - mAdapter = new AccountsAdapter(getActivity()); + final FragmentActivity activity = getActivity(); + mAdapter = new AccountsAdapter(activity); + Utils.configBaseAdapter(activity, mAdapter); setListAdapter(mAdapter); + final DragSortListView listView = (DragSortListView) getListView(); + listView.setDropListener(this); getLoaderManager().initLoader(0, null, this); } @@ -79,4 +88,10 @@ public class AccountsManagerFragment extends BaseSupportListFragment implements public void onLoaderReset(Loader loader) { mAdapter.changeCursor(null); } + + @Override + public void drop(int from, int to) { + + } + } diff --git a/twidere/src/main/java/org/mariotaku/twidere/fragment/support/UserListMenuDialogFragment.java b/twidere/src/main/java/org/mariotaku/twidere/fragment/support/UserListMenuDialogFragment.java index 5fa8eb648..fde313a0a 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/fragment/support/UserListMenuDialogFragment.java +++ b/twidere/src/main/java/org/mariotaku/twidere/fragment/support/UserListMenuDialogFragment.java @@ -28,8 +28,8 @@ public class UserListMenuDialogFragment extends MenuDialogFragment { extensionsExtras.putParcelable(EXTRA_USER_LIST, user); extensionsIntent.putExtras(extensionsExtras); addIntentToMenu(getThemedContext(), menu, extensionsIntent); - final boolean longclickToOpenMenu = prefs.getBoolean(KEY_LONG_CLICK_TO_OPEN_MENU, false); - Utils.setMenuItemAvailability(menu, MENU_MULTI_SELECT, longclickToOpenMenu); + final boolean longClickToOpenMenu = prefs.getBoolean(KEY_LONG_CLICK_TO_OPEN_MENU, false); + Utils.setMenuItemAvailability(menu, MENU_MULTI_SELECT, longClickToOpenMenu); } protected void onPrepareItemMenu(final Menu menu, final ParcelableUserList userList) { diff --git a/twidere/src/main/res/drawable-hdpi/ic_action_inverse_selection.png b/twidere/src/main/res/drawable-hdpi/ic_action_inverse_selection.png new file mode 100644 index 000000000..993502769 Binary files /dev/null and b/twidere/src/main/res/drawable-hdpi/ic_action_inverse_selection.png differ diff --git a/twidere/src/main/res/drawable-mdpi/ic_action_inverse_selection.png b/twidere/src/main/res/drawable-mdpi/ic_action_inverse_selection.png new file mode 100644 index 000000000..2d7703491 Binary files /dev/null and b/twidere/src/main/res/drawable-mdpi/ic_action_inverse_selection.png differ diff --git a/twidere/src/main/res/drawable-xhdpi/ic_action_inverse_selection.png b/twidere/src/main/res/drawable-xhdpi/ic_action_inverse_selection.png new file mode 100644 index 000000000..6ccacc020 Binary files /dev/null and b/twidere/src/main/res/drawable-xhdpi/ic_action_inverse_selection.png differ diff --git a/twidere/src/main/res/drawable-xxhdpi/ic_action_inverse_selection.png b/twidere/src/main/res/drawable-xxhdpi/ic_action_inverse_selection.png new file mode 100644 index 000000000..f1f25dd7f Binary files /dev/null and b/twidere/src/main/res/drawable-xxhdpi/ic_action_inverse_selection.png differ diff --git a/twidere/src/main/res/layout/activity_filters.xml b/twidere/src/main/res/layout/activity_filters.xml index b13dd35fc..14c3fd6a1 100644 --- a/twidere/src/main/res/layout/activity_filters.xml +++ b/twidere/src/main/res/layout/activity_filters.xml @@ -1,6 +1,9 @@ - - \ No newline at end of file + \ No newline at end of file diff --git a/twidere/src/main/res/layout/list_item_account.xml b/twidere/src/main/res/layout/list_item_account.xml index e2aa997b4..b4540b204 100644 --- a/twidere/src/main/res/layout/list_item_account.xml +++ b/twidere/src/main/res/layout/list_item_account.xml @@ -31,10 +31,9 @@ android:id="@+id/drag_handle" android:layout_width="24dp" android:layout_height="match_parent" - android:layout_weight="0" - android:layout_centerVertical="true" android:layout_alignParentLeft="true" - + android:layout_centerVertical="true" + android:layout_weight="0" android:background="@drawable/list_drag_handle"/> - + android:orientation="horizontal"> + + + + + + - - \ No newline at end of file diff --git a/twidere/src/main/res/menu/action_multi_select_items.xml b/twidere/src/main/res/menu/action_multi_select_items.xml index 22dd7d80c..fbb323c8e 100644 --- a/twidere/src/main/res/menu/action_multi_select_items.xml +++ b/twidere/src/main/res/menu/action_multi_select_items.xml @@ -1,10 +1,15 @@ - + + \ No newline at end of file diff --git a/twidere/src/main/res/menu/menu_compose.xml b/twidere/src/main/res/menu/menu_compose.xml index 1b9c52807..2e255a760 100644 --- a/twidere/src/main/res/menu/menu_compose.xml +++ b/twidere/src/main/res/menu/menu_compose.xml @@ -1,37 +1,37 @@ - - - - - - + + + + + + \ No newline at end of file diff --git a/twidere/src/main/res/values/arrays.xml b/twidere/src/main/res/values/arrays.xml index ff5b85e80..fcc33564b 100644 --- a/twidere/src/main/res/values/arrays.xml +++ b/twidere/src/main/res/values/arrays.xml @@ -1,160 +1,158 @@ - - @string/item_3_minutes - @string/item_5_minutes - @string/item_10_minutes - @string/item_15_minutes - @string/item_30_minutes - @string/item_1_hour - @string/item_2_hours - @string/item_4_hours - - - 3 - 5 - 10 - 15 - 30 - 60 - 120 - 240 - - - @string/home - @string/mentions - @string/inbox - @string/trends - - - @string/home - @string/mentions - @string/inbox - - - @string/mentions - @string/inbox - @string/trends - - - @string/profile_images - @string/preview_images - - - @string/ask - @string/save - @string/discard - - - ask - save - discard - - - Twitter for Android - Twitter for iPhone - Twitter for iPad - Twitter for Mac - Twitter for Windows Phone - Twitter for Google TV - - - 3nVuSoBZnx6U4vzUxf5w;Bcs59EFbbsdF6Sl9Ng71smgStWEGwXXKSjYvPVt7qys - IQKbtAYlXLripLGPWd0HUA;GgDYlkSvaPxGxC4X8liwpUoqKwwr3lCADbz8A7ADU - CjulERsDeqhhjSme66ECg;IQWdVyqFxghAtURHGeGiWAsmCAGmdW3WmbEx6Hck - 3rJOl1ODzm9yZy63FACdg;5jPoQ5kQvMJFDYRNE8bQ4rHuds4xJqhvgNJM4awaE8 - yN3DUNVO0Me63IAQdhTfCA;c768oTKdzAjIYCmpSNIdZbGaG0t6rOhSFQP0S5uC79g - iAtYJ4HpUVfIUoNnif1DA;172fOpzuZoYzNYaU3mMYvE8m8MEyLbztOdbrUolU - - - @string/theme_twidere - @string/theme_light - @string/theme_dark - - - twidere - light - dark - - - default - solid - transparent - - - @string/theme_background_default - @string/theme_background_solid - @string/theme_background_transparent - - - twidere - light - - - transparent - - - true - - - false - - - icon - label - both - - - @string/tab_display_option_icon - @string/tab_display_option_label - @string/tab_display_option_icon_and_label - - - @string/accounts - @string/drafts - @string/settings - @string/tabs - @string/filters - @string/nicknames - @string/user_colors - @string/custom_host_mapping - - - compose - take_photo - pick_image - - - @string/compose - @string/take_photo - @string/add_image - - - background - line - none - - - @string/card_highlight_option_highlight - @string/card_highlight_option_line - @string/none - - - CENTER_CROP - FIT_CENTER - - - @string/image_preview_scale_type_crop - @string/image_preview_scale_type_fit_center - - - @string/from_camera - @string/from_gallery - - - camera - gallery - + + @string/item_3_minutes + @string/item_5_minutes + @string/item_10_minutes + @string/item_15_minutes + @string/item_30_minutes + @string/item_1_hour + @string/item_2_hours + @string/item_4_hours + + + 3 + 5 + 10 + 15 + 30 + 60 + 120 + 240 + + + @string/home + @string/mentions + @string/inbox + @string/trends + + + @string/home + @string/mentions + @string/inbox + + + @string/mentions + @string/inbox + @string/trends + + + @string/profile_images + @string/preview_images + + + @string/ask + @string/save + @string/discard + + + ask + save + discard + + + Twitter for Android + Twitter for iPhone + Twitter for iPad + Twitter for Mac + Twitter for Windows Phone + Twitter for Google TV + + + 3nVuSoBZnx6U4vzUxf5w;Bcs59EFbbsdF6Sl9Ng71smgStWEGwXXKSjYvPVt7qys + IQKbtAYlXLripLGPWd0HUA;GgDYlkSvaPxGxC4X8liwpUoqKwwr3lCADbz8A7ADU + CjulERsDeqhhjSme66ECg;IQWdVyqFxghAtURHGeGiWAsmCAGmdW3WmbEx6Hck + 3rJOl1ODzm9yZy63FACdg;5jPoQ5kQvMJFDYRNE8bQ4rHuds4xJqhvgNJM4awaE8 + yN3DUNVO0Me63IAQdhTfCA;c768oTKdzAjIYCmpSNIdZbGaG0t6rOhSFQP0S5uC79g + iAtYJ4HpUVfIUoNnif1DA;172fOpzuZoYzNYaU3mMYvE8m8MEyLbztOdbrUolU + + + @string/theme_light + @string/theme_dark + + + light + dark + + + default + solid + transparent + + + @string/theme_background_default + @string/theme_background_solid + @string/theme_background_transparent + + + twidere + light + + + transparent + + + true + + + false + + + icon + label + both + + + @string/tab_display_option_icon + @string/tab_display_option_label + @string/tab_display_option_icon_and_label + + + @string/accounts + @string/drafts + @string/settings + @string/tabs + @string/filters + @string/nicknames + @string/user_colors + @string/custom_host_mapping + + + compose + take_photo + pick_image + + + @string/compose + @string/take_photo + @string/add_image + + + background + line + none + + + @string/card_highlight_option_highlight + @string/card_highlight_option_line + @string/none + + + CENTER_CROP + FIT_CENTER + + + @string/image_preview_scale_type_crop + @string/image_preview_scale_type_fit_center + + + @string/from_camera + @string/from_gallery + + + camera + gallery + \ No newline at end of file diff --git a/twidere/src/main/res/values/ids.xml b/twidere/src/main/res/values/ids.xml index cfacab8f6..11ab239b3 100644 --- a/twidere/src/main/res/values/ids.xml +++ b/twidere/src/main/res/values/ids.xml @@ -75,4 +75,5 @@ + \ No newline at end of file diff --git a/twidere/src/main/res/values/strings.xml b/twidere/src/main/res/values/strings.xml index 5ac4634c9..d2aa7b32b 100644 --- a/twidere/src/main/res/values/strings.xml +++ b/twidere/src/main/res/values/strings.xml @@ -646,5 +646,6 @@ Exclude this host [DOMAIN]: Twitter API domain.\nExample: https://[DOMAIN].twitter.com/ will be replaced to https://api.twitter.com/. No version suffix + Inverse selection \ No newline at end of file diff --git a/twidere/src/main/res/xml/settings_theme.xml b/twidere/src/main/res/xml/settings_theme.xml index 93d876f5c..499b153c3 100644 --- a/twidere/src/main/res/xml/settings_theme.xml +++ b/twidere/src/main/res/xml/settings_theme.xml @@ -1,69 +1,59 @@ - + - - - + + + - - + + - + - + - + - - - + \ No newline at end of file