1
0
mirror of https://github.com/TwidereProject/Twidere-Android synced 2025-02-03 01:57:40 +01:00

improved exclude retweets from search

This commit is contained in:
Mariotaku Lee 2015-11-03 18:32:32 +08:00
parent 1359957e00
commit 0669cfe1e5
12 changed files with 49 additions and 36 deletions

View File

@ -311,4 +311,6 @@ public interface SharedPreferenceConstants {
String KEY_BUG_REPORTS = "bug_reports"; String KEY_BUG_REPORTS = "bug_reports";
@Preference(type = BOOLEAN, hasDefault = true, defaultBoolean = false) @Preference(type = BOOLEAN, hasDefault = true, defaultBoolean = false)
String KEY_COMBINED_NOTIFICATIONS = "combined_notifications"; String KEY_COMBINED_NOTIFICATIONS = "combined_notifications";
@Preference(type = BOOLEAN, hasDefault = true, defaultBoolean = true)
String TWITTER_OPTIMIZED_SEARCHES = "twitter_optimized_searches";
} }

View File

@ -102,7 +102,6 @@ public abstract class AbsStatusesFragment<Data> extends AbsContentListRecyclerVi
} }
} }
}; };
private SharedPreferences mPreferences;
private PopupMenu mPopupMenu; private PopupMenu mPopupMenu;
private final OnScrollListener mOnScrollListener = new OnScrollListener() { private final OnScrollListener mOnScrollListener = new OnScrollListener() {
@Override @Override
@ -136,11 +135,6 @@ public abstract class AbsStatusesFragment<Data> extends AbsContentListRecyclerVi
mStatusesBusCallback = createMessageBusCallback(); mStatusesBusCallback = createMessageBusCallback();
} }
public SharedPreferences getSharedPreferences() {
if (mPreferences != null) return mPreferences;
return mPreferences = getSharedPreferences(SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE);
}
public abstract boolean getStatuses(long[] accountIds, long[] maxIds, long[] sinceIds); public abstract boolean getStatuses(long[] accountIds, long[] maxIds, long[] sinceIds);
@Override @Override
@ -242,9 +236,8 @@ public abstract class AbsStatusesFragment<Data> extends AbsContentListRecyclerVi
@Override @Override
public final void onLoadFinished(Loader<Data> loader, Data data) { public final void onLoadFinished(Loader<Data> loader, Data data) {
final AbsStatusesAdapter<Data> adapter = getAdapter(); final AbsStatusesAdapter<Data> adapter = getAdapter();
final SharedPreferences preferences = getSharedPreferences(); final boolean rememberPosition = mPreferences.getBoolean(KEY_REMEMBER_POSITION, false);
final boolean rememberPosition = preferences.getBoolean(KEY_REMEMBER_POSITION, false); final boolean readFromBottom = mPreferences.getBoolean(KEY_READ_FROM_BOTTOM, false);
final boolean readFromBottom = preferences.getBoolean(KEY_READ_FROM_BOTTOM, false);
final long lastReadId; final long lastReadId;
final int lastVisiblePos, lastVisibleTop; final int lastVisiblePos, lastVisibleTop;
final String tag = getCurrentReadPositionTag(); final String tag = getCurrentReadPositionTag();

View File

@ -21,7 +21,6 @@ package org.mariotaku.twidere.fragment.support;
import android.content.ContentResolver; import android.content.ContentResolver;
import android.content.Context; import android.content.Context;
import android.content.SharedPreferences;
import android.database.ContentObserver; import android.database.ContentObserver;
import android.net.Uri; import android.net.Uri;
import android.os.Bundle; import android.os.Bundle;
@ -281,8 +280,7 @@ public abstract class CursorStatusesFragment extends AbsStatusesFragment<List<Pa
protected abstract void updateRefreshState(); protected abstract void updateRefreshState();
private String getSortOrder() { private String getSortOrder() {
final SharedPreferences preferences = getSharedPreferences(); final boolean sortById = mPreferences.getBoolean(KEY_SORT_TIMELINE_BY_ID, false);
final boolean sortById = preferences.getBoolean(KEY_SORT_TIMELINE_BY_ID, false);
return sortById ? Statuses.SORT_ORDER_STATUS_ID_DESC : Statuses.SORT_ORDER_TIMESTAMP_DESC; return sortById ? Statuses.SORT_ORDER_STATUS_ID_DESC : Statuses.SORT_ORDER_TIMESTAMP_DESC;
} }
} }

View File

@ -178,9 +178,10 @@ public class StatusFragment extends BaseSupportFragment implements LoaderCallbac
final long statusId = args.getLong(EXTRA_STATUS_ID, -1); final long statusId = args.getLong(EXTRA_STATUS_ID, -1);
final long maxId = args.getLong(EXTRA_MAX_ID, -1); final long maxId = args.getLong(EXTRA_MAX_ID, -1);
final long sinceId = args.getLong(EXTRA_SINCE_ID, -1); final long sinceId = args.getLong(EXTRA_SINCE_ID, -1);
final boolean twitterOptimizedSearches = mPreferences.getBoolean(TWITTER_OPTIMIZED_SEARCHES);
final StatusRepliesLoader loader = new StatusRepliesLoader(getActivity(), accountId, final StatusRepliesLoader loader = new StatusRepliesLoader(getActivity(), accountId,
screenName, statusId, maxId, sinceId, null, null, 0, true); screenName, statusId, maxId, sinceId, null, null, 0, true, twitterOptimizedSearches);
loader.setComparator(ParcelableStatus.REVERSE_ID_COMPARATOR); loader.setComparator(ParcelableStatus.REVERSE_ID_COMPARATOR);
return loader; return loader;
} }

View File

@ -40,8 +40,10 @@ public class StatusRepliesListFragment extends StatusesSearchFragment {
final long maxId = args.getLong(EXTRA_MAX_ID, -1); final long maxId = args.getLong(EXTRA_MAX_ID, -1);
final long sinceId = args.getLong(EXTRA_SINCE_ID, -1); final long sinceId = args.getLong(EXTRA_SINCE_ID, -1);
final int tabPosition = args.getInt(EXTRA_TAB_POSITION, -1); final int tabPosition = args.getInt(EXTRA_TAB_POSITION, -1);
final boolean twitterOptimizedSearches = mPreferences.getBoolean(TWITTER_OPTIMIZED_SEARCHES);
return new StatusRepliesLoader(getActivity(), accountId, screenName, statusId, maxId, return new StatusRepliesLoader(getActivity(), accountId, screenName, statusId, maxId,
sinceId, getAdapterData(), getSavedStatusesFileArgs(), tabPosition, fromUser); sinceId, getAdapterData(), getSavedStatusesFileArgs(), tabPosition, fromUser,
twitterOptimizedSearches);
} }
@Override @Override

View File

@ -45,8 +45,9 @@ public class StatusesSearchFragment extends ParcelableStatusesFragment {
final String query = args.getString(EXTRA_QUERY); final String query = args.getString(EXTRA_QUERY);
final int tabPosition = args.getInt(EXTRA_TAB_POSITION, -1); final int tabPosition = args.getInt(EXTRA_TAB_POSITION, -1);
final boolean makeGap = args.getBoolean(EXTRA_MAKE_GAP, true); final boolean makeGap = args.getBoolean(EXTRA_MAKE_GAP, true);
final boolean twitterOptimizedSearches = mPreferences.getBoolean(TWITTER_OPTIMIZED_SEARCHES);
return new TweetSearchLoader(getActivity(), accountId, query, sinceId, maxId, getAdapterData(), return new TweetSearchLoader(getActivity(), accountId, query, sinceId, maxId, getAdapterData(),
getSavedStatusesFileArgs(), tabPosition, fromUser, makeGap); getSavedStatusesFileArgs(), tabPosition, fromUser, makeGap, twitterOptimizedSearches);
} }
@Override @Override

View File

@ -32,8 +32,8 @@ public class UserMentionsFragment extends StatusesSearchFragment {
@Override @Override
protected Loader<List<ParcelableStatus>> onCreateStatusesLoader(final Context context, protected Loader<List<ParcelableStatus>> onCreateStatusesLoader(final Context context,
final Bundle args, final Bundle args,
final boolean fromUser) { final boolean fromUser) {
if (args == null) return null; if (args == null) return null;
final String screenName = args.getString(EXTRA_SCREEN_NAME); final String screenName = args.getString(EXTRA_SCREEN_NAME);
final long accountId = args.getLong(EXTRA_ACCOUNT_ID, -1); final long accountId = args.getLong(EXTRA_ACCOUNT_ID, -1);
@ -41,8 +41,10 @@ public class UserMentionsFragment extends StatusesSearchFragment {
final long sinceId = args.getLong(EXTRA_SINCE_ID, -1); final long sinceId = args.getLong(EXTRA_SINCE_ID, -1);
final int tabPosition = args.getInt(EXTRA_TAB_POSITION, -1); final int tabPosition = args.getInt(EXTRA_TAB_POSITION, -1);
final boolean makeGap = args.getBoolean(EXTRA_MAKE_GAP, true); final boolean makeGap = args.getBoolean(EXTRA_MAKE_GAP, true);
final boolean twitterOptimizedSearches = mPreferences.getBoolean(TWITTER_OPTIMIZED_SEARCHES);
return new UserMentionsLoader(getActivity(), accountId, screenName, maxId, sinceId, return new UserMentionsLoader(getActivity(), accountId, screenName, maxId, sinceId,
getAdapterData(), getSavedStatusesFileArgs(), tabPosition, fromUser, makeGap); getAdapterData(), getSavedStatusesFileArgs(), tabPosition, fromUser, makeGap,
twitterOptimizedSearches);
} }
@Override @Override

View File

@ -41,9 +41,10 @@ public class StatusRepliesLoader extends UserMentionsLoader {
public StatusRepliesLoader(final Context context, final long accountId, final String screenName, public StatusRepliesLoader(final Context context, final long accountId, final String screenName,
final long statusId, final long maxId, final long sinceId, final List<ParcelableStatus> data, final long statusId, final long maxId, final long sinceId, final List<ParcelableStatus> data,
final String[] savedStatusesArgs, final int tabPosition, boolean fromUser) { final String[] savedStatusesArgs, final int tabPosition, boolean fromUser,
boolean twitterOptimizedSearches) {
super(context, accountId, screenName, maxId, sinceId, data, savedStatusesArgs, tabPosition, super(context, accountId, screenName, maxId, sinceId, data, savedStatusesArgs, tabPosition,
fromUser, false); fromUser, false, twitterOptimizedSearches);
mInReplyToStatusId = statusId; mInReplyToStatusId = statusId;
} }

View File

@ -38,14 +38,16 @@ public class TweetSearchLoader extends TwitterAPIStatusesLoader {
private final String mQuery; private final String mQuery;
private final boolean mGapEnabled; private final boolean mGapEnabled;
private final boolean mTwitterOptimizedSearches;
public TweetSearchLoader(final Context context, final long accountId, final String query, public TweetSearchLoader(final Context context, final long accountId, final String query,
final long sinceId, final long maxId, final List<ParcelableStatus> data, final long sinceId, final long maxId, final List<ParcelableStatus> data,
final String[] savedStatusesArgs, final int tabPosition, boolean fromUser, final String[] savedStatusesArgs, final int tabPosition, boolean fromUser,
boolean makeGap) { boolean makeGap, boolean twitterOptimizedSearches) {
super(context, accountId, sinceId, maxId, data, savedStatusesArgs, tabPosition, fromUser); super(context, accountId, sinceId, maxId, data, savedStatusesArgs, tabPosition, fromUser);
mQuery = query; mQuery = query;
mGapEnabled = makeGap; mGapEnabled = makeGap;
mTwitterOptimizedSearches = twitterOptimizedSearches;
} }
@NonNull @NonNull
@ -57,7 +59,10 @@ public class TweetSearchLoader extends TwitterAPIStatusesLoader {
} }
protected String processQuery(final String query) { protected String processQuery(final String query) {
return String.format("%s -RT", query); if (mTwitterOptimizedSearches) {
return String.format("%s exclude:retweets", query);
}
return query;
} }
@Override @Override

View File

@ -30,9 +30,9 @@ public class UserMentionsLoader extends TweetSearchLoader {
public UserMentionsLoader(final Context context, final long accountId, final String screenName, public UserMentionsLoader(final Context context, final long accountId, final String screenName,
final long maxId, final long sinceId, final List<ParcelableStatus> data, final long maxId, final long sinceId, final List<ParcelableStatus> data,
final String[] savedStatusesArgs, final int tabPosition, boolean fromUser, final String[] savedStatusesArgs, final int tabPosition, boolean fromUser,
boolean makeGap) { boolean makeGap, boolean twitterOptimizedSearches) {
super(context, accountId, screenName, sinceId, maxId, data, savedStatusesArgs, tabPosition, super(context, accountId, screenName, sinceId, maxId, data, savedStatusesArgs, tabPosition,
fromUser, makeGap); fromUser, makeGap, twitterOptimizedSearches);
} }
@Override @Override

View File

@ -797,4 +797,6 @@
<string name="cant_load_all_replies_message">Can\'t load all replies. &lt;a href=\"#dialog\";&gt;Why?&lt;/a&gt;</string> <string name="cant_load_all_replies_message">Can\'t load all replies. &lt;a href=\"#dialog\";&gt;Why?&lt;/a&gt;</string>
<string name="cant_load_all_replies_explanation">Due to Twitter\'s limitation to third party twitter apps, Twidere has no access to replies to a tweet, there\'s no guarantee that Twidere can load all replies to a tweet.</string> <string name="cant_load_all_replies_explanation">Due to Twitter\'s limitation to third party twitter apps, Twidere has no access to replies to a tweet, there\'s no guarantee that Twidere can load all replies to a tweet.</string>
<string name="current_status">Current tweet</string> <string name="current_status">Current tweet</string>
<string name="twitter_optimized_searches">Twitter optimized searches</string>
<string name="twitter_optimized_searches_summary">Use special search terms to improve search results like exclude retweets</string>
</resources> </resources>

View File

@ -55,20 +55,26 @@
<Preference <Preference
android:fragment="org.mariotaku.twidere.fragment.KeyboardShortcutsFragment" android:fragment="org.mariotaku.twidere.fragment.KeyboardShortcutsFragment"
android:title="@string/keyboard_shortcuts" /> android:title="@string/keyboard_shortcuts" />
<org.mariotaku.twidere.preference.MediaUploaderPreference
android:defaultValue=""
android:key="media_uploader"
android:summary="%s"
android:title="@string/image_uploader" />
<org.mariotaku.twidere.preference.TimelineSyncPreference
android:defaultValue=""
android:key="timeline_sync_service"
android:summary="%s"
android:title="@string/timeline_sync_service" />
<org.mariotaku.twidere.preference.AutoFixCheckBoxPreference
android:defaultValue="true"
android:key="twitter_optimized_searches"
android:summary="@string/twitter_optimized_searches_summary"
android:title="@string/twitter_optimized_searches" />
</PreferenceCategory> </PreferenceCategory>
<org.mariotaku.twidere.preference.MediaUploaderPreference
android:defaultValue=""
android:key="media_uploader"
android:summary="%s"
android:title="@string/image_uploader" />
<org.mariotaku.twidere.preference.TimelineSyncPreference
android:defaultValue=""
android:key="timeline_sync_service"
android:summary="%s"
android:title="@string/timeline_sync_service" />
<PreferenceCategory <PreferenceCategory
android:key="category_safety" android:key="category_safety"
android:title="@string/safety"> android:title="@string/safety">