From 170184144b4d8a1f1fd009e33302cd807105aec0 Mon Sep 17 00:00:00 2001 From: Mariotaku Lee Date: Wed, 2 Sep 2015 15:03:17 +0800 Subject: [PATCH] added account toggle --- twidere/build.gradle | 3 +- .../support/AccountSelectorActivity.java | 2 +- .../twidere/adapter/AccountsAdapter.java | 72 +++++++----- .../fragment/support/AbsStatusesFragment.java | 66 ++++++----- .../support/AccountsDashboardFragment.java | 41 ++++--- .../support/AccountsManagerFragment.java | 105 ++++++++++++------ .../SupportFragmentReloadCursorObserver.java | 51 ++++----- .../view/holder/AccountViewHolder.java | 20 ++-- .../drawable-hdpi/ic_action_search.png | Bin 0 -> 774 bytes .../drawable-hdpi/ic_info_search.png | Bin 1608 -> 1600 bytes .../drawable-mdpi/ic_action_search.png | Bin 0 -> 563 bytes .../drawable-xhdpi/ic_action_search.png | Bin 0 -> 912 bytes .../drawable-xxhdpi/ic_action_search.png | Bin 0 -> 1313 bytes .../drawable-xxhdpi/ic_info_search.png | Bin 3215 -> 3208 bytes .../drawable-xxxhdpi/ic_action_search.png | Bin 0 -> 1689 bytes .../drawable-xxxhdpi/ic_info_search.png | Bin 4430 -> 4429 bytes .../res/drawable-hdpi/ic_action_search.png | Bin 386 -> 0 bytes .../res/drawable-mdpi/ic_action_search.png | Bin 218 -> 0 bytes .../res/drawable-xhdpi/ic_action_search.png | Bin 478 -> 0 bytes .../res/drawable-xxhdpi/ic_action_search.png | Bin 558 -> 0 bytes .../src/main/res/layout/list_item_account.xml | 19 +++- .../svg/drawable/ic_action_search-mdpi.svg | 12 ++ 22 files changed, 236 insertions(+), 155 deletions(-) create mode 100644 twidere/src/main/res-svg2png/drawable-hdpi/ic_action_search.png create mode 100644 twidere/src/main/res-svg2png/drawable-mdpi/ic_action_search.png create mode 100644 twidere/src/main/res-svg2png/drawable-xhdpi/ic_action_search.png create mode 100644 twidere/src/main/res-svg2png/drawable-xxhdpi/ic_action_search.png create mode 100644 twidere/src/main/res-svg2png/drawable-xxxhdpi/ic_action_search.png delete mode 100644 twidere/src/main/res/drawable-hdpi/ic_action_search.png delete mode 100644 twidere/src/main/res/drawable-mdpi/ic_action_search.png delete mode 100644 twidere/src/main/res/drawable-xhdpi/ic_action_search.png delete mode 100644 twidere/src/main/res/drawable-xxhdpi/ic_action_search.png create mode 100644 twidere/src/main/svg/drawable/ic_action_search-mdpi.svg diff --git a/twidere/build.gradle b/twidere/build.gradle index 06a672e59..fa9aa1846 100644 --- a/twidere/build.gradle +++ b/twidere/build.gradle @@ -14,7 +14,7 @@ android { applicationId "org.mariotaku.twidere" minSdkVersion 14 targetSdkVersion 23 - versionCode 121 + versionCode 122 versionName "0.3.0" multiDexEnabled true } @@ -91,6 +91,7 @@ dependencies { compile 'com.hannesdorfmann.parcelableplease:annotation:1.0.1' compile 'com.github.mariotaku:PickNCrop:44b09cbc69' compile 'com.diogobernardino:williamchart:2.0.1' + compile 'com.lnikkila:extendedtouchview:0.1.0' googleCompile 'com.google.android.gms:play-services-maps:7.8.0' googleCompile 'com.google.maps.android:android-maps-utils:0.4' fdroidCompile 'org.osmdroid:osmdroid-android:4.3' diff --git a/twidere/src/main/java/org/mariotaku/twidere/activity/support/AccountSelectorActivity.java b/twidere/src/main/java/org/mariotaku/twidere/activity/support/AccountSelectorActivity.java index 6cacdb259..b6edfa619 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/activity/support/AccountSelectorActivity.java +++ b/twidere/src/main/java/org/mariotaku/twidere/activity/support/AccountSelectorActivity.java @@ -133,7 +133,7 @@ public class AccountSelectorActivity extends BaseSupportDialogActivity implement mAdapter = new AccountsAdapter(this); final boolean isSingleSelection = isSingleSelection(); mListView.setChoiceMode(isSingleSelection ? ListView.CHOICE_MODE_NONE : ListView.CHOICE_MODE_MULTIPLE); - mAdapter.setChoiceMode(mListView.getChoiceMode()); + mAdapter.setSwitchEnabled(!isSingleSelection); mAdapter.setSortEnabled(false); if (isSingleSelection) { mListView.setOnItemClickListener(this); 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 cf5e4f481..62681bb40 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/adapter/AccountsAdapter.java +++ b/twidere/src/main/java/org/mariotaku/twidere/adapter/AccountsAdapter.java @@ -24,7 +24,7 @@ import android.content.SharedPreferences; import android.database.Cursor; import android.view.View; import android.view.ViewGroup; -import android.widget.ListView; +import android.widget.CompoundButton; import com.mobeta.android.dslv.SimpleDragSortCursorAdapter; @@ -44,9 +44,20 @@ public class AccountsAdapter extends SimpleDragSortCursorAdapter implements Cons private final SharedPreferences mPreferences; private boolean mDisplayProfileImage; - private int mChoiceMode; private boolean mSortEnabled; private Indices mIndices; + private boolean mSwitchEnabled; + private OnAccountToggleListener mOnAccountToggleListener; + + private CompoundButton.OnCheckedChangeListener mCheckedChangeListener = new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + final Object tag = buttonView.getTag(); + if (!(tag instanceof Long) || mOnAccountToggleListener == null) return; + final long accountId = (Long) tag; + mOnAccountToggleListener.onAccountToggle(accountId, isChecked); + } + }; public AccountsAdapter(final Context context) { super(context, R.layout.list_item_account, null, new String[]{Accounts.NAME}, @@ -66,17 +77,17 @@ public class AccountsAdapter extends SimpleDragSortCursorAdapter implements Cons public void bindView(final View view, final Context context, final Cursor cursor) { final int color = cursor.getInt(mIndices.color); final AccountViewHolder holder = (AccountViewHolder) view.getTag(); - holder.screen_name.setText("@" + cursor.getString(mIndices.screen_name)); + holder.screenName.setText("@" + cursor.getString(mIndices.screen_name)); holder.setAccountColor(color); if (mDisplayProfileImage) { - mImageLoader.displayProfileImage(holder.profile_image, cursor.getString(mIndices.profile_image_url)); + mImageLoader.displayProfileImage(holder.profileImage, cursor.getString(mIndices.profile_image_url)); } else { - mImageLoader.cancelDisplayTask(holder.profile_image); -// holder.profile_image.setImageResource(R.drawable.ic_profile_image_default); + mImageLoader.cancelDisplayTask(holder.profileImage); } - final boolean isMultipleChoice = mChoiceMode == ListView.CHOICE_MODE_MULTIPLE - || mChoiceMode == ListView.CHOICE_MODE_MULTIPLE_MODAL; - holder.checkbox.setVisibility(isMultipleChoice ? View.VISIBLE : View.GONE); + holder.toggle.setChecked(cursor.getShort(mIndices.is_activated) == 1); + holder.toggle.setOnCheckedChangeListener(mCheckedChangeListener); + holder.toggle.setVisibility(mSwitchEnabled ? View.VISIBLE : View.GONE); + holder.toggle.setTag(cursor.getLong(mIndices.account_id)); holder.setSortEnabled(mSortEnabled); super.bindView(view, context, cursor); } @@ -99,35 +110,49 @@ public class AccountsAdapter extends SimpleDragSortCursorAdapter implements Cons return 0; } + @Override + public void setLinkHighlightOption(String option) { + + } + @Override public float getTextSize() { return 0; } + @Override + public void setTextSize(float textSize) { + + } + @Override public boolean isDisplayNameFirst() { return false; } + @Override + public void setDisplayNameFirst(boolean nameFirst) { + + } + @Override public boolean isProfileImageDisplayed() { return mDisplayProfileImage; } - @Override public boolean isShowAccountColor() { return false; } @Override - public void setDisplayNameFirst(boolean nameFirst) { + public void setShowAccountColor(boolean show) { } - public void setChoiceMode(final int mode) { - if (mChoiceMode == mode) return; - mChoiceMode = mode; + public void setSwitchEnabled(final boolean enabled) { + if (mSwitchEnabled == enabled) return; + mSwitchEnabled = enabled; notifyDataSetChanged(); } @@ -137,19 +162,8 @@ public class AccountsAdapter extends SimpleDragSortCursorAdapter implements Cons notifyDataSetChanged(); } - @Override - public void setLinkHighlightOption(String option) { - - } - - @Override - public void setShowAccountColor(boolean show) { - - } - - @Override - public void setTextSize(float textSize) { - + public void setOnAccountToggleListener(OnAccountToggleListener listener) { + mOnAccountToggleListener = listener; } @Override @@ -165,4 +179,8 @@ public class AccountsAdapter extends SimpleDragSortCursorAdapter implements Cons mSortEnabled = sortEnabled; notifyDataSetChanged(); } + + public interface OnAccountToggleListener { + void onAccountToggle(long accountId, boolean state); + } } diff --git a/twidere/src/main/java/org/mariotaku/twidere/fragment/support/AbsStatusesFragment.java b/twidere/src/main/java/org/mariotaku/twidere/fragment/support/AbsStatusesFragment.java index e230f49b1..d6ab663df 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/fragment/support/AbsStatusesFragment.java +++ b/twidere/src/main/java/org/mariotaku/twidere/fragment/support/AbsStatusesFragment.java @@ -64,38 +64,6 @@ public abstract class AbsStatusesFragment extends AbsContentRecyclerViewFr implements LoaderCallbacks, StatusAdapterListener, KeyboardShortcutCallback { private final Object mStatusesBusCallback; - private SharedPreferences mPreferences; - private PopupMenu mPopupMenu; - private ReadStateManager mReadStateManager; - private RecyclerViewNavigationHelper mNavigationHelper; - - private ParcelableStatus mSelectedStatus; - - private OnMenuItemClickListener mOnStatusMenuItemClickListener = new OnMenuItemClickListener() { - @Override - public boolean onMenuItemClick(MenuItem item) { - final ParcelableStatus status = mSelectedStatus; - if (status == null) return false; - if (item.getItemId() == R.id.share) { - final Intent shareIntent = Utils.createStatusShareIntent(getActivity(), status); - startActivity(Intent.createChooser(shareIntent, getString(R.string.share_status))); - return true; - } - return Utils.handleMenuItemClick(getActivity(), AbsStatusesFragment.this, - getFragmentManager(), getTwitterWrapper(), status, item); - } - }; - private final OnScrollListener mOnScrollListener = new OnScrollListener() { - @Override - public void onScrollStateChanged(RecyclerView recyclerView, int newState) { - if (newState == RecyclerView.SCROLL_STATE_IDLE) { - final LinearLayoutManager layoutManager = getLayoutManager(); - saveReadPosition(layoutManager.findFirstVisibleItemPosition()); - } - } - }; - private OnScrollListener mPauseOnScrollListener; - private final OnScrollListener mHotMobiScrollTracker = new OnScrollListener() { public List mRecords; @@ -107,7 +75,7 @@ public abstract class AbsStatusesFragment extends AbsContentRecyclerViewFr public void onScrolled(RecyclerView recyclerView, int dx, int dy) { final LinearLayoutManager layoutManager = (LinearLayoutManager) recyclerView.getLayoutManager(); final int firstVisiblePosition = layoutManager.findFirstVisibleItemPosition(); - if (firstVisiblePosition != mFirstVisiblePosition) { + if (firstVisiblePosition != mFirstVisiblePosition && firstVisiblePosition >= 0) { //noinspection unchecked final AbsStatusesAdapter adapter = (AbsStatusesAdapter) recyclerView.getAdapter(); final ParcelableStatus status = adapter.getStatus(firstVisiblePosition); @@ -137,7 +105,35 @@ public abstract class AbsStatusesFragment extends AbsContentRecyclerViewFr } } }; - + private SharedPreferences mPreferences; + private PopupMenu mPopupMenu; + private ReadStateManager mReadStateManager; + private final OnScrollListener mOnScrollListener = new OnScrollListener() { + @Override + public void onScrollStateChanged(RecyclerView recyclerView, int newState) { + if (newState == RecyclerView.SCROLL_STATE_IDLE) { + final LinearLayoutManager layoutManager = getLayoutManager(); + saveReadPosition(layoutManager.findFirstVisibleItemPosition()); + } + } + }; + private RecyclerViewNavigationHelper mNavigationHelper; + private ParcelableStatus mSelectedStatus; + private OnMenuItemClickListener mOnStatusMenuItemClickListener = new OnMenuItemClickListener() { + @Override + public boolean onMenuItemClick(MenuItem item) { + final ParcelableStatus status = mSelectedStatus; + if (status == null) return false; + if (item.getItemId() == R.id.share) { + final Intent shareIntent = Utils.createStatusShareIntent(getActivity(), status); + startActivity(Intent.createChooser(shareIntent, getString(R.string.share_status))); + return true; + } + return Utils.handleMenuItemClick(getActivity(), AbsStatusesFragment.this, + getFragmentManager(), getTwitterWrapper(), status, item); + } + }; + private OnScrollListener mPauseOnScrollListener; private OnScrollListener mActiveHotMobiScrollTracker; protected AbsStatusesFragment() { @@ -261,7 +257,7 @@ public abstract class AbsStatusesFragment extends AbsContentRecyclerViewFr } else { lastVisiblePos = layoutManager.findFirstVisibleItemPosition(); } - if (lastVisiblePos != RecyclerView.NO_POSITION) { + if (lastVisiblePos != RecyclerView.NO_POSITION && lastVisiblePos < adapter.getItemCount()) { lastReadId = adapter.getStatusId(lastVisiblePos); final View positionView = layoutManager.findViewByPosition(lastVisiblePos); lastVisibleTop = positionView != null ? positionView.getTop() : 0; diff --git a/twidere/src/main/java/org/mariotaku/twidere/fragment/support/AccountsDashboardFragment.java b/twidere/src/main/java/org/mariotaku/twidere/fragment/support/AccountsDashboardFragment.java index 7c6735d4d..66feb0c92 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/fragment/support/AccountsDashboardFragment.java +++ b/twidere/src/main/java/org/mariotaku/twidere/fragment/support/AccountsDashboardFragment.java @@ -39,6 +39,7 @@ import android.graphics.PorterDuff.Mode; import android.graphics.Rect; import android.graphics.RectF; import android.graphics.drawable.Drawable; +import android.net.Uri; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.annotation.Nullable; @@ -110,9 +111,7 @@ import java.util.List; public class AccountsDashboardFragment extends BaseSupportFragment implements LoaderCallbacks, OnSharedPreferenceChangeListener, ImageLoadingListener, OnClickListener, KeyboardShortcutCallback, AdapterView.OnItemClickListener { - private final SupportFragmentReloadCursorObserver mReloadContentObserver = new SupportFragmentReloadCursorObserver( - this, 0, this); - + private final Rect mSystemWindowsInsets = new Rect(); private ContentResolver mResolver; private SharedPreferences mPreferences; private MergeAdapter mAdapter; @@ -135,9 +134,18 @@ public class AccountsDashboardFragment extends BaseSupportFragment implements Lo private Context mThemedContext; private MediaLoaderWrapper mImageLoader; private AccountToggleProvider mAccountActionProvider; - + private final SupportFragmentReloadCursorObserver mReloadContentObserver = new SupportFragmentReloadCursorObserver( + this, 0, this) { + @Override + public void onChange(boolean selfChange, @Nullable Uri uri) { + final ContentResolver cr = getContentResolver(); + final Cursor c = cr.query(Accounts.CONTENT_URI, Accounts.COLUMNS, null, null, Accounts.SORT_POSITION); + updateAccountProviderData(c); + c.close(); + super.onChange(selfChange, uri); + } + }; private boolean mSwitchAccountAnimationPlaying; - private final Rect mSystemWindowsInsets = new Rect(); public long[] getActivatedAccountIds() { if (mAccountActionProvider != null) { @@ -244,9 +252,13 @@ public class AccountsDashboardFragment extends BaseSupportFragment implements Lo @Override public void onLoadFinished(final Loader loader, final Cursor data) { + updateAccountProviderData(data); + } + + private void updateAccountProviderData(final Cursor cursor) { final Menu menu = mAccountsToggleMenu.getMenu(); mAccountActionProvider = (AccountToggleProvider) MenuItemCompat.getActionProvider(menu.findItem(R.id.select_account)); - final ParcelableAccount[] accounts = ParcelableAccount.getAccounts(data); + final ParcelableAccount[] accounts = ParcelableAccount.getAccounts(cursor); if (accounts.length > 0) { mNoAccountContainer.setVisibility(View.GONE); mAccountProfileContainer.setVisibility(View.VISIBLE); @@ -719,6 +731,13 @@ public class AccountsDashboardFragment extends BaseSupportFragment implements Lo setHasStableIds(true); } + private static int indexOfAccount(List accounts, long accountId) { + for (int i = 0, j = accounts.size(); i < j; i++) { + if (accounts.get(i).account_id == accountId) return i; + } + return -1; + } + public ParcelableAccount getAdapterAccount(int adapterPosition) { if (mInternalAccounts == null || mInternalAccounts.length < 1) { return null; @@ -800,13 +819,6 @@ public class AccountsDashboardFragment extends BaseSupportFragment implements Lo mFragment.onAccountSelected(holder, getAdapterAccount(holder.getAdapterPosition())); } - private static int indexOfAccount(List accounts, long accountId) { - for (int i = 0, j = accounts.size(); i < j; i++) { - if (accounts.get(i).account_id == accountId) return i; - } - return -1; - } - private void swap(long fromId, long toId) { int fromIdx = -1, toIdx = -1; for (int i = 0, j = mInternalAccounts.length; i < j; i++) { @@ -856,8 +868,7 @@ public class AccountsDashboardFragment extends BaseSupportFragment implements Lo final OptionItem other = (OptionItem) obj; if (icon != other.icon) return false; if (id != other.id) return false; - if (name != other.name) return false; - return true; + return name == other.name; } @Override 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 1c926d48c..6821f0450 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 @@ -19,6 +19,7 @@ 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; +import android.support.v4.util.LongSparseArray; import android.view.ContextMenu; import android.view.ContextMenu.ContextMenuInfo; import android.view.LayoutInflater; @@ -36,7 +37,9 @@ import android.widget.TextView; import com.mobeta.android.dslv.DragSortListView; import com.mobeta.android.dslv.DragSortListView.DropListener; +import org.mariotaku.sqliteqb.library.Columns; import org.mariotaku.sqliteqb.library.Expression; +import org.mariotaku.sqliteqb.library.RawItemArray; import org.mariotaku.twidere.R; import org.mariotaku.twidere.activity.support.ColorPickerDialogActivity; import org.mariotaku.twidere.activity.support.SignInActivity; @@ -50,20 +53,23 @@ import org.mariotaku.twidere.provider.TwidereDataStore.Mentions; import org.mariotaku.twidere.provider.TwidereDataStore.Statuses; import org.mariotaku.twidere.util.ThemeUtils; import org.mariotaku.twidere.util.Utils; +import org.mariotaku.twidere.util.collection.CompactHashSet; import java.util.ArrayList; +import java.util.Set; /** * Created by mariotaku on 14/10/26. */ public class AccountsManagerFragment extends BaseSupportFragment implements LoaderCallbacks, - DropListener, OnSharedPreferenceChangeListener, AdapterView.OnItemClickListener { + DropListener, OnSharedPreferenceChangeListener, AdapterView.OnItemClickListener, AccountsAdapter.OnAccountToggleListener { private static final String FRAGMENT_TAG_ACCOUNT_DELETION = "account_deletion"; private AccountsAdapter mAdapter; private SharedPreferences mPreferences; private ParcelableAccount mSelectedAccount; + private LongSparseArray mActivatedState = new LongSparseArray<>(); private DragSortListView mListView; private View mEmptyView; @@ -146,42 +152,34 @@ public class AccountsManagerFragment extends BaseSupportFragment implements Load null); } + @Override + public void onStop() { + super.onStop(); + saveActivatedState(); + } - public static final class AccountDeletionDialogFragment extends BaseSupportDialogFragment implements - DialogInterface.OnClickListener { - - @Override - public void onClick(final DialogInterface dialog, final int which) { - final Bundle args = getArguments(); - final long accountId = args != null ? args.getLong(EXTRA_ACCOUNT_ID, -1) : -1; - if (accountId < 0) return; - final ContentResolver resolver = getContentResolver(); - switch (which) { - case DialogInterface.BUTTON_POSITIVE: { - resolver.delete(Accounts.CONTENT_URI, Expression.equals(Accounts.ACCOUNT_ID, accountId).getSQL(), null); - // Also delete tweets related to the account we previously - // deleted. - resolver.delete(Statuses.CONTENT_URI, Expression.equals(Statuses.ACCOUNT_ID, accountId).getSQL(), null); - resolver.delete(Mentions.CONTENT_URI, Expression.equals(Mentions.ACCOUNT_ID, accountId).getSQL(), null); - resolver.delete(Inbox.CONTENT_URI, Expression.equals(DirectMessages.ACCOUNT_ID, accountId).getSQL(), null); - resolver.delete(Outbox.CONTENT_URI, Expression.equals(DirectMessages.ACCOUNT_ID, accountId).getSQL(), null); - break; - } + private void saveActivatedState() { + final Set trueIds = new CompactHashSet<>(), falseIds = new CompactHashSet<>(); + for (int i = 0, j = mActivatedState.size(); i < j; i++) { + if (mActivatedState.valueAt(i)) { + trueIds.add(mActivatedState.keyAt(i)); + } else { + falseIds.add(mActivatedState.keyAt(i)); } } + final ContentResolver cr = getContentResolver(); + final ContentValues values = new ContentValues(); + values.put(Accounts.IS_ACTIVATED, true); + Expression where = Expression.in(new Columns.Column(Accounts.ACCOUNT_ID), new RawItemArray(trueIds.toArray())); + cr.update(Accounts.CONTENT_URI, values, where.getSQL(), null); + values.put(Accounts.IS_ACTIVATED, false); + where = Expression.in(new Columns.Column(Accounts.ACCOUNT_ID), new RawItemArray(falseIds.toArray())); + cr.update(Accounts.CONTENT_URI, values, where.getSQL(), null); + } - @NonNull - @Override - public Dialog onCreateDialog(final Bundle savedInstanceState) { - final Context wrapped = ThemeUtils.getDialogThemedContext(getActivity()); - final AlertDialog.Builder builder = new AlertDialog.Builder(wrapped); - builder.setNegativeButton(android.R.string.cancel, null); - builder.setPositiveButton(android.R.string.ok, this); - builder.setTitle(R.string.account_delete_confirm_title); - builder.setMessage(R.string.account_delete_confirm_message); - return builder.create(); - } - + @Override + public void onAccountToggle(long accountId, boolean state) { + mActivatedState.append(accountId, state); } @Override @@ -195,7 +193,6 @@ public class AccountsManagerFragment extends BaseSupportFragment implements Load mProgressContainer = view.findViewById(R.id.progress_container); } - @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { if (!(menuInfo instanceof AdapterContextMenuInfo)) return; @@ -222,6 +219,8 @@ public class AccountsManagerFragment extends BaseSupportFragment implements Load mAdapter = new AccountsAdapter(activity); Utils.configBaseAdapter(activity, mAdapter); mAdapter.setSortEnabled(true); + mAdapter.setSwitchEnabled(true); + mAdapter.setOnAccountToggleListener(this); mListView.setAdapter(mAdapter); mListView.setDragEnabled(true); mListView.setDropListener(this); @@ -265,7 +264,6 @@ public class AccountsManagerFragment extends BaseSupportFragment implements Load saveAccountPositions(); } - private void saveAccountPositions() { final ContentResolver cr = getContentResolver(); final ArrayList positions = mAdapter.getCursorPositions(); @@ -293,4 +291,41 @@ public class AccountsManagerFragment extends BaseSupportFragment implements Load private void updateDefaultAccount() { mAdapter.notifyDataSetChanged(); } + + public static final class AccountDeletionDialogFragment extends BaseSupportDialogFragment implements + DialogInterface.OnClickListener { + + @Override + public void onClick(final DialogInterface dialog, final int which) { + final Bundle args = getArguments(); + final long accountId = args != null ? args.getLong(EXTRA_ACCOUNT_ID, -1) : -1; + if (accountId < 0) return; + final ContentResolver resolver = getContentResolver(); + switch (which) { + case DialogInterface.BUTTON_POSITIVE: { + resolver.delete(Accounts.CONTENT_URI, Expression.equals(Accounts.ACCOUNT_ID, accountId).getSQL(), null); + // Also delete tweets related to the account we previously + // deleted. + resolver.delete(Statuses.CONTENT_URI, Expression.equals(Statuses.ACCOUNT_ID, accountId).getSQL(), null); + resolver.delete(Mentions.CONTENT_URI, Expression.equals(Mentions.ACCOUNT_ID, accountId).getSQL(), null); + resolver.delete(Inbox.CONTENT_URI, Expression.equals(DirectMessages.ACCOUNT_ID, accountId).getSQL(), null); + resolver.delete(Outbox.CONTENT_URI, Expression.equals(DirectMessages.ACCOUNT_ID, accountId).getSQL(), null); + break; + } + } + } + + @NonNull + @Override + public Dialog onCreateDialog(final Bundle savedInstanceState) { + final Context wrapped = ThemeUtils.getDialogThemedContext(getActivity()); + final AlertDialog.Builder builder = new AlertDialog.Builder(wrapped); + builder.setNegativeButton(android.R.string.cancel, null); + builder.setPositiveButton(android.R.string.ok, this); + builder.setTitle(R.string.account_delete_confirm_title); + builder.setMessage(R.string.account_delete_confirm_message); + return builder.create(); + } + + } } diff --git a/twidere/src/main/java/org/mariotaku/twidere/util/content/SupportFragmentReloadCursorObserver.java b/twidere/src/main/java/org/mariotaku/twidere/util/content/SupportFragmentReloadCursorObserver.java index a59c44397..acb229390 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/util/content/SupportFragmentReloadCursorObserver.java +++ b/twidere/src/main/java/org/mariotaku/twidere/util/content/SupportFragmentReloadCursorObserver.java @@ -24,39 +24,40 @@ import android.database.Cursor; import android.net.Uri; import android.os.Handler; import android.os.Looper; +import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.support.v4.app.LoaderManager.LoaderCallbacks; import org.mariotaku.twidere.TwidereConstants; -public final class SupportFragmentReloadCursorObserver extends ContentObserver implements TwidereConstants { +public class SupportFragmentReloadCursorObserver extends ContentObserver implements TwidereConstants { - private final Fragment mFragment; - private final int mLoaderId; - private final LoaderCallbacks mCallback; + private final Fragment mFragment; + private final int mLoaderId; + private final LoaderCallbacks mCallback; - public SupportFragmentReloadCursorObserver(final Fragment fragment, final int loaderId, - final LoaderCallbacks callback) { - super(createHandler()); - mFragment = fragment; - mLoaderId = loaderId; - mCallback = callback; - } + public SupportFragmentReloadCursorObserver(final Fragment fragment, final int loaderId, + final LoaderCallbacks callback) { + super(createHandler()); + mFragment = fragment; + mLoaderId = loaderId; + mCallback = callback; + } - @Override - public void onChange(final boolean selfChange) { - onChange(selfChange, null); - } + private static Handler createHandler() { + if (Thread.currentThread().getId() != 1) return new Handler(Looper.getMainLooper()); + return new Handler(); + } - @Override - public void onChange(final boolean selfChange, final Uri uri) { - if (mFragment == null || mFragment.getActivity() == null || mFragment.isDetached()) return; - // Handle change. - mFragment.getLoaderManager().restartLoader(mLoaderId, null, mCallback); - } + @Override + public final void onChange(final boolean selfChange) { + onChange(selfChange, null); + } - private static Handler createHandler() { - if (Thread.currentThread().getId() != 1) return new Handler(Looper.getMainLooper()); - return new Handler(); - } + @Override + public void onChange(final boolean selfChange, @Nullable final Uri uri) { + if (mFragment == null || mFragment.getActivity() == null || mFragment.isDetached()) return; + // Handle change. + mFragment.getLoaderManager().restartLoader(mLoaderId, null, mCallback); + } } diff --git a/twidere/src/main/java/org/mariotaku/twidere/view/holder/AccountViewHolder.java b/twidere/src/main/java/org/mariotaku/twidere/view/holder/AccountViewHolder.java index 764c647ad..bd55ce690 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/view/holder/AccountViewHolder.java +++ b/twidere/src/main/java/org/mariotaku/twidere/view/holder/AccountViewHolder.java @@ -20,7 +20,7 @@ package org.mariotaku.twidere.view.holder; import android.view.View; -import android.widget.CheckBox; +import android.widget.CompoundButton; import android.widget.ImageView; import android.widget.TextView; @@ -29,19 +29,19 @@ import org.mariotaku.twidere.view.ColorLabelRelativeLayout; public class AccountViewHolder { - public final ImageView profile_image; - public final TextView name, screen_name; - public final CheckBox checkbox; + public final ImageView profileImage; + public final TextView name, screenName; + public final CompoundButton toggle; private final ColorLabelRelativeLayout content; - private final View drag_handle; + private final View dragHandle; public AccountViewHolder(final View view) { content = (ColorLabelRelativeLayout) view; name = (TextView) view.findViewById(android.R.id.text1); - screen_name = (TextView) view.findViewById(android.R.id.text2); - profile_image = (ImageView) view.findViewById(android.R.id.icon); - checkbox = (CheckBox) view.findViewById(android.R.id.checkbox); - drag_handle = view.findViewById(R.id.drag_handle); + screenName = (TextView) view.findViewById(android.R.id.text2); + profileImage = (ImageView) view.findViewById(android.R.id.icon); + toggle = (CompoundButton) view.findViewById(android.R.id.toggle); + dragHandle = view.findViewById(R.id.drag_handle); } public void setAccountColor(final int color) { @@ -49,6 +49,6 @@ public class AccountViewHolder { } public void setSortEnabled(boolean enabled) { - drag_handle.setVisibility(enabled ? View.VISIBLE : View.GONE); + dragHandle.setVisibility(enabled ? View.VISIBLE : View.GONE); } } diff --git a/twidere/src/main/res-svg2png/drawable-hdpi/ic_action_search.png b/twidere/src/main/res-svg2png/drawable-hdpi/ic_action_search.png new file mode 100644 index 0000000000000000000000000000000000000000..2c4982ec67532e68b175a4b162e9643d205cbff4 GIT binary patch literal 774 zcmV+h1Nr=kP)004R> z004l5008;`004mK004C`008P>0026e000+ooVrmw00004XF*Lt006O$eEU(800001 zb5ch_0Itp)=>Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L02rG902rGANp*vi0007A zNkl2VF1us=!h>OxaI`SVwWnm$Zj^RjfdxRKKv{$A?nA zNreD;+3#%hb)V#2o(ahPV_&aQJzs@@h*Ynz(U(8TyF3#hpQ2SZ`f5%%nLQV921dCa zKve2XBZ8633`?dX&jldrQ0QEhOv@OUKgGvqz;dor^x9H&kj+Y~K!XqQ`H(ct1{YDC zkWX)(3}v}c8;U(CDn&VE-lbEQ-Gw%JEf4%h_(hxQOh~8u*`3k}t?>+%ummBaO44ag z)E+4{=4e!$LinYOvXb`CiyBF9SsaG6iI&NiwIU!Vxpfjd`%gy* zIs{w6D>m)WKcs)L0v0RrNq;fi`T?e)p`oFnp`l@cZ`0_|AD$=S9{>OV07*qoM6N<$ Eg4Nher2qf` literal 0 HcmV?d00001 diff --git a/twidere/src/main/res-svg2png/drawable-hdpi/ic_info_search.png b/twidere/src/main/res-svg2png/drawable-hdpi/ic_info_search.png index 9e6f3f3feefadc6888817bcd05804f246a790053..446a0f4ec016a47b596690678b1c010595393568 100644 GIT binary patch delta 1470 zcmV;v1ws1A48RPKlz*2=L_t(|+U=Z8XcS2l$GZ{{5f2{33`-6{6mk$z@ZiGA28^gE zC=x$lRXl7^Sj7(z6cK0eBZ@AoqF_KzD(tcm6b&dU8&HYM<{+$}kV6i0NW?=9Id~Ap z|1)nuG^VPjr@LNvzdt-`pnImK-mk0b)mI0BN~Kb%R4SE9rGHYXR4SD!FETzeuT&~C zkgR~shZVjuQW-Y3UOpK1FrsWuHFKk*u>B0Jf+9 zu80w)F*M277qKiN0Tj{z!12EnvIt;A5P;!40+2NCK9WTM&6c*eEC@h3N?D{&MWjI= z9R_5n12AkEClmw$XpRUdeEmnw( zcz>S9wh?$BjR1Nr*XQycA>X2T9@`$Jr>O(L%Zs+EyF&ngotEowB#c>V9S8K-3h#5> zmDj7+L@a}70Jdhx_qwagdi9Oe0^l78wsqIdyn8L_r+-giU$4HG#7>R4ry>qI+;ct2 z4jFk-$9vY{*3(krvp5Qb2&>LKmfp2|i0Qh$aG1%Kb4l5UUyp)rmhMS(_9uxt1@$00hZr>Jwk0NaY@ z0gwnGcL1b8 z$Rz+t5ONDZ3WQt(kN_d~0DMDG0G=Tz0M8Hhf=8jM<0eoa61Z{@tuKz+X++ z3t;CJfFB5voUZ_)L5S>p1vgMTgt|Ci6;iaQ!v{cADwRs5QmIrbl}e>jsZ=VJN)<|< Y07~N`V8|(fH2?qr07*qoM6N<$g1?`u%m4rY delta 1478 zcmV;%1v&b_49E`5AM7>cg{Cw=FFL&AW$e23WY+UP=6>C3WY+UP!t8mXW_M4 zZ4r_$A)i7@?+Bp^8J{JOA$N^2ua$ttmEMMA1Ed?$326!W3R3<}$W_Q7$atj$xG8=) zl0L|~7+*UL8G!VHh*2eAZpF7FISkpBU@=6*dC0M>S%gVY@zk{(f$W7WOsPJTkfR{s zOrZ&Y@;^lK7k{M7Q@t)gda^KBHz%O{4kY&=D?Qe08I3jNa`}3tQkg0Y0Z@J?E59V5 zZi^vXK*BAM@G|#Z5R^~8{4iuu$iGgpTX~0l{R#H}X$&EkwUr6o$Zl)c@r2&F0^QMg zZV7<$KSJ^kq&>vnZa{tuGqK`{8_gkhLp}>p)(GTtiGO2)i9z|)Qg3tXbipIYK`3J= zV!4};oPcz=4$LTXYwpGX^s(oVeCz0|{{$uUpidr)S}xx4AIk2>&jpUwunhU9@W0{Q zSO9xG|2l*d$UpCf^6w_(_I{7#cZczTzT*=~leMOZ|L=29K2>&gQp$hZij294-5A0d+fXdA<&HS$~*C3$U4P6)o_Q00IUrZYe2$Z59cz zwf-9-W|+oMkZ&krT|^R4$^rq7-%`pW0TY4<7%w6LlH%?Yc_g6C()U&c5m1d%7wMsh zxiB5bg6(@+vPi&uT}%sn>yjV>+N3v_xCs!^ug*fN<@r<|31}5WfUPl%=8=FdK?HQ= zk$-?EmggdZTpZ`IZ3G_4A_0Sz=Sz8ykZ(|&$F@i5VdeuH21c$eNlV2|$%rMXomNedtx zbjZ^V8BWp?c+kBc%>SpMGhJWjB zGwKTHa7I6fcoMQK@^E%RwuJZ_Z4h1|Y_TXl0%rBYw;Ql3vIIKyPDhkz330rBoQO}= z(*WMe6DyKNRX@BggUVpSNbq!=Jcz;N`NdgJYNxT#lnncC^#Lp!T-cg*O z!TlG=R&*~f@g0BTJIa=MkXI7YxU7S`77C7aCR`M`nS0*dmx}Uhj>K*DF(#yWT}{|y zrC}6*ltUwPm0Js8J*ku6re_O!8cTgp~ad3K|Jnj#v`B5|A?4B1vd23IXtPZo%83px`Qp?5TN2g&{yH356m+ zA_;{fKpF{!BtQ}gg(W}=356y=0ttmDz&8m>fM*hv0M8^S0iH={QkDN7#+ZFbes;`W zzu#0Xz>_8H1!3ou06!!|Qa`>D5RHV$%2xs!Cm|N)D?)-6b@%{?LZMJ76bgkxp-?Ck g3WY+UP$)v-4KwH?VA6UknE(I)07*qoM6N<$f*A?0D*ylh diff --git a/twidere/src/main/res-svg2png/drawable-mdpi/ic_action_search.png b/twidere/src/main/res-svg2png/drawable-mdpi/ic_action_search.png new file mode 100644 index 0000000000000000000000000000000000000000..df4164c87b6a8023c53a7e646ec17be818a8384f GIT binary patch literal 563 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=k0Y$sR$z3=CCj3=9n|3=F@3LJcn% z7)lKo7+xhXFj&oCU=S~uvn$XBD8Z8M=jA5L~c#IY^qbz$3Dlfk9$62s3(?HctU+>GE`O45_%4oFKuvI6;KRAVDSU;s5{t zc^g8^1a31JvJ1pBKH_$;nLcsiN5-=<3|nTfdVFOrS_2F|gK`)nFqeN84r zF_kV*3pgtqBy+&UK~CiP0*#D=X_hzGdwRSZuQ09Hl@sLLFoBt8!IvneSJxae#j~s( z*k7I2X1NmEa*63m*#Z6xo7DmV%lVed2i#_KU$DiTvD7Z$7t>Z*16Hr?49~UUI*Bs-t59 zQ{+DR4%G#n*C)@Ikg#kTbAw$S^Ov7t3dSrQTRV6;S6Md1xEmM-NHR44Wt&jM@<`l4 vhv|q7^QB9SOF0#$N#uU+Z3;Aa!N_pyW0Q1{=W$>RGcb6%`njxgN@xNA#G}ZW literal 0 HcmV?d00001 diff --git a/twidere/src/main/res-svg2png/drawable-xhdpi/ic_action_search.png b/twidere/src/main/res-svg2png/drawable-xhdpi/ic_action_search.png new file mode 100644 index 0000000000000000000000000000000000000000..d5eeae1b3b281d30a38b7759a4712c0a429afdf2 GIT binary patch literal 912 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 diff --git a/twidere/src/main/res-svg2png/drawable-xxxhdpi/ic_action_search.png b/twidere/src/main/res-svg2png/drawable-xxxhdpi/ic_action_search.png new file mode 100644 index 0000000000000000000000000000000000000000..0848fac72416fd09284ba4a8034ebe6f100c1128 GIT binary patch literal 1689 zcmZ`(X;c#U7XL%2XrtwTTcTq)W?C+p;^0!ybH%L~D|NIo>}igQ%D9vj4Ej(hvl*93 zb0N)_S}xGbCoZ%&xumF-y8&*AjoXk*Au5CCo%eC>J@@|3Z~1UP-OQ7|?&@m$)BphL zo*phl1=4l~uB_N?$3nXmU_|mD`T%hCfI?3LU}MLh10cZ~fIlt(;BXfJo!FwLQ%(v4 z7LND91Hit0O?E0r!66i)`w39ni~6V_$``%dU4VS2S*;IuY}HtgKnei5_jU&2nUIX23 z_+`qnp`olSPfd9>Y&TQWJepNup*;306N`KtbUz&x??Kpuotd~_e}l@05iZ-TB#M?~ zpQX>URa?4x7dClhA$gYHnzNfnIXN8F%t>wNLB_Pb8TRma;Z%n(KdW2A18%<;cg#Rk zH)A}iAAPtzE!I1+GSc}(5vk*c;ca$QT~tUqGvtmzE}Vx0qYiSs$?q2=B{s($Co3kCq-LWV zY4WByMuJ!nKowRn)b&z|SPVh^k;_h@rB4I1Q?aoAW8&ivX7&V9=~PDx8HQlZo<49p zN+a~Y3sta7KHVjjB=5cA=Thy(Qc6-d{A`%)!>umuZb9u#MwF4QwSPf#288I=H&RYG zr;2*?%*yoE9|cbDBDov4sHfNOZU^g+=tuc)yKae)&bTH`dFd}yhv9ayas2kbFoV-} zCL*QZRnBC0ytWM-$cvMv?HVnS996Vx=3ap2?oEn$0%-N=t+rr%9{_At3OA>Sy!(0-O#6;=SM{#JD!*`PsDYu%PP|`HW(^jGbHN$|lyHbPt4}ZL5ewcy@KUH~!7I%I+ zoV(Opa~2gNaWtZ78}16MYu+7Lmkfp2%601pF}#E%$M;LczM`#Vx9v4%xC5KW?Qy2D zt&I94zRGFl-Oy)!yEr%Y<)!t&CWZt)S2=;m8`X$+Z85*SO`a(gl`hN>*K9t6_HCNe z7N;t49cDS#tZT8j8K{0wCPL(8c-yBB&999H)%-K5q>np$cR24ed3>ONvl87YB_R_n zUzj$@sOCA~)1MBM0oCWGP)ffiwx?+D6FVk`@;dy~mw_kz4Fe{@?VLtNeT+~e11^Xr zg|H1YjvUw@>=lsj`enH@@xT}RaaI%eE5vaw@_9(#B*kZyFoYPXDou3hDV`3^&!)sZ zWCnrDWZm>)yC=+!b28opqYlo>LMPh=Ih57F4@EDu(9gr6@6^@gL{`!pLDinHV1wrQ z;oA5u6P?`cRPa{o#jSmb(mS2$N2?i&Uf0|(h?-487?%3CNTCK}> z!A{0$8qt_H0mMHT24_v7aX?E40@5Q}xr2%tG=>H?M?_ZALP#w!=QgiF(8tOv1 zN@a{+{aHGe398NL-o@E~qlKUCbqAxFMmoLe8l;mqQ6Yp7#*&?cyay%1sO&z}SZZiyvS!IL zwwesazGc@3W$b&l`Re!Q@1FCVbIFKC35Tw*!9% zwfT$zQMYiSFi$R9H$_wy9)guY16HgQ>Nk44xnlHWsAZQjm_0z3<%_f_6O#ab`URu@ zICcFljQhFyF+02Qo7~Y|tQicr5*QjkzEo6lM)mB%TtrSdk$lm`!8vZt1&ERT1puJswFk;Oif%Ft9JHPt$!HX&&Z2 zZ69?Mj^+XJ<6`>z$!feCw3nL#duho>U<3vO3=m-jc8W$Bkd7h;1EPW6mX+z{gy%E9 zVsUZm0+g3)N4Sn5a7NlJsoi@586nH|9(yfxZp;xl+Kjf7aIY%6u5mFQ9nX4?Lxo75~EC2MgKhgd;C6Cq^E-2?Kf3 z;WaU+v?Eui_ZC*#LDT1T&Q7QC9v}mNBa?V@s_T36c7IAW1g7CbaUsg<0F<1$18ioTy#H00YRMgiP@pmyF6E3 zSSZ%%_(e3~sdiAp-ZP67WoY-(ThNipQW)WeEdScudNCuJd_fr@8djQYV=(_pB?O!A zZGfFoO*>70U9pVj53j8hfp*dvb-g<3NfRWwW*gJ;iu;-TwL?Zt^xg<6z8n9v)x#fN zp$}MfRdsw$(9kPByOZPvz7LqIdoygr04tK6*bHH{&Lp-jloBcR+lRc2^p}t%D zkhSN4wY5yiP$aR;cE$eVlYr*;R@z;=FwpDDom zU#7q0;CC?Vb{eWa-k6aVBH`0FD*G#SGJ*?oWp|URqgvYYLC?ZN>HE1Yo3dhGnGaUy z1dCS96eT60f(4Go@s7)Pv3Pr9&lshJEzj;Hp7wa{bHCv2yMj0ng_|t)`Iz!)MmFC_ zdn?QdU)1=GXgO0=I$k?IuORu0vppH=#i-bMTNeAu{(84qM#!c}wZv)r^O)*Yab&7lio|>+>QUJ&Ldi!AC+O9j>)?{-aa2+-K)edrV z?OK6EZY0#=IXKgDW$U%rDMJ81TL%k}ikFso;@ zEpn?D#{&@eGxUEK{)z>Rgdy?)p@F)5pu(&z&7~t@?eeSFfP4YgrCp7)Q;}{kDD_v zz>Nj%2)j3Q+eOM_M}y^I**5MDAp@W^OZ(h52BL+WNG@;V~j+fCzUCV$}*0M9;P22355Naz7; z=XY=6Et=K%diph>nzY|l*4VNCnt;N55+AeQ;!x7QP2vZ3RbH{4{yV@2t&4uR4+?P! znTfyIZ-Sz#j}~A!=7`&QU>Dg9vFGRF;c;^uxGNtHD8nWe#*L0DKf1&=Aptc(3WiAn zj#J8qJBEL-q8|VUyt3n70OAjR1aso9|5$8jxSRvb00bzssL(<5xN$tKe^LLRQNdml zpyu}Dr;#%Xumq8Vk%g-;W#^fm8rNd`)DloTD;AIda=+^XXDr`53f_=pcH+n2Qx)wFD*7mg*ZfPT_3e=;2XGFx?)Z`QuJV{u}n<>m%kj6B?hv!&x;+nmjsAGalnmdVZ>R*y!6p3P=0%4 zNn)(I240W(Ri<%Q;N}8d!MJ18t4k6Iq{HjgX)d~$JJruwCkBvNVl3#XLn}<#dKIpW z$usj~v5WK=W^9_qJ2=|IJ9N{H58~TevALjRnl-(?9l3e?0aRH9@@gtXCahCu!`gK< z1x0Q4|Ll0O_8v+F5^WJoodWNDJL-ydVIQot>`XcBQ->d*6Iv(F)j>lDFH#w;L zGC3p>(x8h{>ej{Z&oMw$4lb7w;1MUO5ZC5t{w0(7OKoL5w%|Bm0HL2K>#7od zUZSLOPIGG5?s`}S%0jw$so}?A4+J)-ju~n5nHSW;kC8#YMMm?A8e?GSz=?yjps~wn z;En;Vn17rZTIS{;Wr|6MzZcS^@@&fRgT>OW*xuTD>yL$Ki*vmD_ zSRhi{BXeh5Sc`RIchGHmui1>%hIxuq{Em2VQ9pd40d$=U;t$`;Q*`h9C%Hm>TdshX z)ZE9n!v{j*ctehXSTD!+&W@Y+H!RIPV@WXZ^U}(-=UH}5!ZIVh&u0H??sNB?_N6RN zgkb=_-_63M3}k-rBkR7!N_LX}qvW9*e|E)-d~L%6t9w2A6PS_!-$L6D!fJW4R4TJ9 z^s_o=!|M~nMm&Wga2q!8q{5#|al?`TWp40GJQ(N#S%aKC=Dy)P%HQ*E>Q^0suRaHF zPK0K;w5!MZpkRc)ti6oRi%KRbO&2rd?>h7d{IrZpD(`F_oA0dQxtSV}G@X>2ldI&@ zssx?rTUmlnw@GXGrxkP{X-`EsT|EkipQxR^@IJ47JtdihfWYdn!~9vQX{D?$kxlPclJ1` zB9C}7SS#3rNEj3cR|eTTSF0d4C+pPnslj?fbe`y!IFFJ4o--RU(w7Bi!GRpgM9 z06g`SleDZ=#sg~4-@xZ`H6)bJoyv=V0msq6$TKtvgjofCk-3Y6&&Wv|Jvmy7e9x5Nsf6 zxrs_gW=ol3r-fkgqsfk55~`((bF00V`X>`o+D;wT5}>t7hAOD03J||ZX-&;`vdVP> z$8uMevMZ`Z4#anE2r&+20DzQ<${+{4CAv!Z)yjXGo delta 3901 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 diff --git a/twidere/src/main/res/drawable-mdpi/ic_action_search.png b/twidere/src/main/res/drawable-mdpi/ic_action_search.png deleted file mode 100644 index 79e129a57aa840e90a9c0f17c2cb4e5525768672..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 218 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE0wix1Z>k4U3q4&NLp+YZy}XgP*+8TvQ9Om~ zmH~_GM*f__1YYktJ7INPn5MW z{PRlG=|XPR2La=A_2wJBXIUf!J^SB!HRnQ0!YMbE1D||4lp6%5v>(&|yFM;dgWsPVKOJU1e|;h1A>EOQTRG|b4gm8 zIOLkP+<(14Isf_ZIp>}jhK7cQhK7d5)u4xsPe=+tN{Ek5?^fYQ#O(QsJuxHo!Ji4J zLcpWS@B`MIDg~TK7^usBEdw2hnB!n#;xH%TAkPv-E)dA<*LZYGXI(rg??j-c^m4>l z7a10@V472&mQ_`pgqC#nXKTgh|9 zAlmWvzecfPFfKes{fmr#;V~MkevV!4N@w@DGW#P-HT%F5NogUOF~r1V$c$BCA=&bx zZY4`z0vu(*K>H4?N7+J#@}LdK#60n&wbuAtz;qP6fsLYv_=G&D3cH2w@e0ZD=* U-epk8^8f$<07*qoM6N<$g0B$SegFUf diff --git a/twidere/src/main/res/drawable-xxhdpi/ic_action_search.png b/twidere/src/main/res/drawable-xxhdpi/ic_action_search.png deleted file mode 100644 index 4f3900c8228bbdd4d0ab0940208e44779c0bbd60..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 558 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD3?#3*wSy%50(?ST|Ns9FWCBU5fQ27!I0225 zED7=pW?&F-xN!b`!-oSCHZ0hmFn@i2K)r##LcD#cl3^|b17n$|i(^Oy`uK&uD^ilIvE&r~f_Xj^!@nlLr-gJM_pYiy7;Pqe2?T}orj#SE`uGaXC3$JeOIN{dF`upWi*9GgJKl!;`@TXj3{3_44Q~HuF zX>F-l#<=AhgZNJkD~2^;4X-QoPyPt+V!d$b*a4ZO99adAtsB1UbBAqc64i3r=ydYy q(tx5`&5)Kw9RV{8k4Yq-@!yx~yZdFxW&vO{F?hQAxvX @@ -75,14 +75,21 @@ android:textColor="?android:textColorSecondary" /> - + app:touchHeight="48dp" + app:touchWidth="48dp"> + + + \ No newline at end of file diff --git a/twidere/src/main/svg/drawable/ic_action_search-mdpi.svg b/twidere/src/main/svg/drawable/ic_action_search-mdpi.svg new file mode 100644 index 000000000..5b418f28d --- /dev/null +++ b/twidere/src/main/svg/drawable/ic_action_search-mdpi.svg @@ -0,0 +1,12 @@ + + + + Artboard + Created with Sketch. + + + + + + + \ No newline at end of file