added 'filter unavailable status'
This commit is contained in:
parent
e70056dd13
commit
24e5781b8c
|
@ -1193,7 +1193,7 @@ public final class TwidereDataProvider extends ContentProvider implements Consta
|
|||
for (final AccountPreferences pref : prefs) {
|
||||
if (!pref.isHomeTimelineNotificationEnabled()) continue;
|
||||
final long positionTag = getPositionTag(CustomTabType.HOME_TIMELINE, pref.getAccountKey());
|
||||
showTimelineNotification(pref, positionTag);
|
||||
showTimelineNotification(mPreferences, pref, positionTag);
|
||||
}
|
||||
notifyUnreadCountChanged(NOTIFICATION_ID_HOME_TIMELINE);
|
||||
}
|
||||
|
@ -1241,7 +1241,7 @@ public final class TwidereDataProvider extends ContentProvider implements Consta
|
|||
return mReadStateManager.getPosition(tag);
|
||||
}
|
||||
|
||||
private void showTimelineNotification(AccountPreferences pref, long position) {
|
||||
private void showTimelineNotification(SharedPreferences preferences, AccountPreferences pref, long position) {
|
||||
final UserKey accountKey = pref.getAccountKey();
|
||||
final Context context = getContext();
|
||||
if (context == null) return;
|
||||
|
@ -1249,8 +1249,8 @@ public final class TwidereDataProvider extends ContentProvider implements Consta
|
|||
final NotificationManagerWrapper nm = mNotificationManager;
|
||||
final Expression selection = Expression.and(Expression.equalsArgs(Statuses.ACCOUNT_KEY),
|
||||
Expression.greaterThan(Statuses.POSITION_KEY, position));
|
||||
final String filteredSelection = DataStoreUtils.buildStatusFilterWhereClause(Statuses.TABLE_NAME,
|
||||
selection).getSQL();
|
||||
final String filteredSelection = DataStoreUtils.buildStatusFilterWhereClause(preferences,
|
||||
Statuses.TABLE_NAME, selection).getSQL();
|
||||
final String[] selectionArgs = {accountKey.toString()};
|
||||
final String[] userProjection = {Statuses.USER_KEY, Statuses.USER_NAME, Statuses.USER_SCREEN_NAME};
|
||||
final String[] statusProjection = {Statuses.STATUS_ID};
|
||||
|
|
|
@ -24,6 +24,7 @@ import android.accounts.AccountManager;
|
|||
import android.content.ContentResolver;
|
||||
import android.content.ContentValues;
|
||||
import android.content.Context;
|
||||
import android.content.SharedPreferences;
|
||||
import android.content.UriMatcher;
|
||||
import android.database.Cursor;
|
||||
import android.net.Uri;
|
||||
|
@ -41,6 +42,7 @@ import com.bluelinelabs.logansquare.LoganSquare;
|
|||
|
||||
import org.apache.commons.lang3.ArrayUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.mariotaku.kpreferences.SharedPreferencesExtensionsKt;
|
||||
import org.mariotaku.microblog.library.twitter.model.Activity;
|
||||
import org.mariotaku.sqliteqb.library.ArgsArray;
|
||||
import org.mariotaku.sqliteqb.library.Columns;
|
||||
|
@ -54,6 +56,7 @@ import org.mariotaku.sqliteqb.library.Tables;
|
|||
import org.mariotaku.sqliteqb.library.query.SQLSelectQuery;
|
||||
import org.mariotaku.twidere.Constants;
|
||||
import org.mariotaku.twidere.TwidereConstants;
|
||||
import org.mariotaku.twidere.constant.PreferenceKeysKt;
|
||||
import org.mariotaku.twidere.extension.AccountExtensionsKt;
|
||||
import org.mariotaku.twidere.model.FiltersData;
|
||||
import org.mariotaku.twidere.model.FiltersData$BaseItemValuesCreator;
|
||||
|
@ -323,7 +326,9 @@ public class DataStoreUtils implements Constants {
|
|||
}
|
||||
|
||||
@NonNull
|
||||
public static Expression buildStatusFilterWhereClause(@NonNull final String table, final Expression extraSelection) {
|
||||
public static Expression buildStatusFilterWhereClause(@NonNull final SharedPreferences preferences,
|
||||
@NonNull final String table,
|
||||
@Nullable final Expression extraSelection) {
|
||||
final SQLSelectQuery filteredUsersQuery = SQLQueryBuilder
|
||||
.select(new Column(new Table(Filters.Users.TABLE_NAME), Filters.Users.USER_KEY))
|
||||
.from(new Tables(Filters.Users.TABLE_NAME))
|
||||
|
@ -364,8 +369,16 @@ public class DataStoreUtils implements Constants {
|
|||
Expression.likeRaw(new Column(new Table(table), Statuses.QUOTED_SPANS),
|
||||
"'%'||" + Filters.Links.TABLE_NAME + "." + Filters.Links.VALUE + "||'%'")
|
||||
));
|
||||
int filterFlags = 0;
|
||||
if (SharedPreferencesExtensionsKt.get(preferences, PreferenceKeysKt.getFilterUnavailableQuoteStatusesKey())) {
|
||||
filterFlags |= ParcelableStatus.FilterFlags.QUOTE_NOT_AVAILABLE;
|
||||
}
|
||||
|
||||
final Expression filterExpression = Expression.or(
|
||||
Expression.notIn(new Column(new Table(table), Statuses._ID), filteredIdsQueryBuilder.build()),
|
||||
Expression.and(
|
||||
new Expression("(" + Statuses.FILTER_FLAGS + " & " + filterFlags + ") == 0"),
|
||||
Expression.notIn(new Column(new Table(table), Statuses._ID), filteredIdsQueryBuilder.build())
|
||||
),
|
||||
Expression.equals(new Column(new Table(table), Statuses.IS_GAP), 1)
|
||||
);
|
||||
if (extraSelection != null) {
|
||||
|
@ -420,7 +433,9 @@ public class DataStoreUtils implements Constants {
|
|||
return keys.toArray(new UserKey[keys.size()]);
|
||||
}
|
||||
|
||||
public static int getStatusesCount(@NonNull final Context context, final Uri uri,
|
||||
public static int getStatusesCount(@NonNull final Context context,
|
||||
@NonNull final SharedPreferences preferences,
|
||||
final Uri uri,
|
||||
@Nullable final Bundle extraArgs, final long compare,
|
||||
String compareColumn, boolean greaterThan,
|
||||
@Nullable UserKey[] accountKeys) {
|
||||
|
@ -443,7 +458,7 @@ public class DataStoreUtils implements Constants {
|
|||
}
|
||||
expressionArgs.add(String.valueOf(compare));
|
||||
|
||||
expressions.add(buildStatusFilterWhereClause(getTableNameByUri(uri), null));
|
||||
expressions.add(buildStatusFilterWhereClause(preferences, getTableNameByUri(uri), null));
|
||||
|
||||
if (extraArgs != null) {
|
||||
Parcelable extras = extraArgs.getParcelable(EXTRA_EXTRAS);
|
||||
|
|
|
@ -28,6 +28,7 @@ import android.app.SearchManager
|
|||
import android.content.Context
|
||||
import android.content.DialogInterface
|
||||
import android.content.Intent
|
||||
import android.content.SharedPreferences
|
||||
import android.content.SharedPreferences.OnSharedPreferenceChangeListener
|
||||
import android.content.res.Configuration
|
||||
import android.graphics.Rect
|
||||
|
@ -515,7 +516,7 @@ class HomeActivity : BaseActivity(), OnClickListener, OnPageChangeListener, Supp
|
|||
fun updateUnreadCount() {
|
||||
if (mainTabs == null || updateUnreadCountTask != null && updateUnreadCountTask!!.status == AsyncTask.Status.RUNNING)
|
||||
return
|
||||
updateUnreadCountTask = UpdateUnreadCountTask(this, readStateManager, mainTabs,
|
||||
updateUnreadCountTask = UpdateUnreadCountTask(this, preferences, readStateManager, mainTabs,
|
||||
pagerAdapter.tabs.toTypedArray())
|
||||
AsyncTaskUtils.executeTask<UpdateUnreadCountTask, Any>(updateUnreadCountTask)
|
||||
mainTabs.setDisplayBadge(preferences.getBoolean(SharedPreferenceConstants.KEY_UNREAD_COUNT, true))
|
||||
|
@ -885,6 +886,7 @@ class HomeActivity : BaseActivity(), OnClickListener, OnPageChangeListener, Supp
|
|||
|
||||
private class UpdateUnreadCountTask internal constructor(
|
||||
private val context: Context,
|
||||
private val preferences: SharedPreferences,
|
||||
private val readStateManager: ReadStateManager,
|
||||
private val indicator: TabPagerIndicator,
|
||||
private val tabs: Array<SupportTabSpec>) : AsyncTask<Any, UpdateUnreadCountTask.TabBadge, SparseIntArray>() {
|
||||
|
@ -904,8 +906,9 @@ class HomeActivity : BaseActivity(), OnClickListener, OnPageChangeListener, Supp
|
|||
val tag = Utils.getReadPositionTagWithAccount(ReadPositionTag.HOME_TIMELINE, it)
|
||||
readStateManager.getPosition(tag)
|
||||
}.fold(0L, Math::max)
|
||||
val count = DataStoreUtils.getStatusesCount(context, Statuses.CONTENT_URI,
|
||||
spec.args, position, Statuses.STATUS_TIMESTAMP, true, accountKeys)
|
||||
val count = DataStoreUtils.getStatusesCount(context, preferences,
|
||||
Statuses.CONTENT_URI, spec.args, position, Statuses.STATUS_TIMESTAMP,
|
||||
true, accountKeys)
|
||||
result.put(i, count)
|
||||
publishProgress(TabBadge(i, count))
|
||||
}
|
||||
|
|
|
@ -51,6 +51,7 @@ val drawerToggleKey = KBooleanKey(KEY_DRAWER_TOGGLE, false)
|
|||
val fabVisibleKey = KBooleanKey(KEY_FAB_VISIBLE, true)
|
||||
val themeKey = KStringKey(KEY_THEME, VALUE_THEME_NAME_LIGHT)
|
||||
val themeColorKey = KIntKey(KEY_THEME_COLOR, 0)
|
||||
val filterUnavailableQuoteStatusesKey = KBooleanKey("filter_unavailable_quote_statuses", false)
|
||||
|
||||
object refreshIntervalKey : KSimpleKey<Long>(KEY_REFRESH_INTERVAL, 15) {
|
||||
override fun read(preferences: SharedPreferences): Long {
|
||||
|
|
|
@ -45,8 +45,6 @@ import org.mariotaku.twidere.model.message.*
|
|||
import org.mariotaku.twidere.provider.TwidereDataStore.Filters
|
||||
import org.mariotaku.twidere.provider.TwidereDataStore.Statuses
|
||||
import org.mariotaku.twidere.util.DataStoreUtils
|
||||
import org.mariotaku.twidere.util.DataStoreUtils.buildStatusFilterWhereClause
|
||||
import org.mariotaku.twidere.util.DataStoreUtils.getTableNameByUri
|
||||
import org.mariotaku.twidere.util.ErrorInfoStore
|
||||
import org.mariotaku.twidere.util.Utils
|
||||
|
||||
|
@ -78,7 +76,7 @@ abstract class CursorStatusesFragment : AbsStatusesFragment() {
|
|||
|
||||
override fun onCreateStatusesLoader(context: Context, args: Bundle, fromUser: Boolean): Loader<List<ParcelableStatus>?> {
|
||||
val uri = contentUri
|
||||
val table = getTableNameByUri(uri)
|
||||
val table = DataStoreUtils.getTableNameByUri(uri)
|
||||
val sortOrder = Statuses.DEFAULT_SORT_ORDER
|
||||
val accountKeys = this.accountKeys
|
||||
val accountWhere = Expression.`in`(Column(Statuses.ACCOUNT_KEY),
|
||||
|
@ -224,7 +222,7 @@ abstract class CursorStatusesFragment : AbsStatusesFragment() {
|
|||
|
||||
protected fun getFiltersWhere(table: String): Expression? {
|
||||
if (!isFilterEnabled) return null
|
||||
return buildStatusFilterWhereClause(table, null)
|
||||
return DataStoreUtils.buildStatusFilterWhereClause(preferences, table, null)
|
||||
}
|
||||
|
||||
protected fun getNewestStatusIds(accountKeys: Array<UserKey>): Array<String?>? {
|
||||
|
|
|
@ -7,7 +7,6 @@ import org.mariotaku.microblog.library.twitter.model.Status
|
|||
import org.mariotaku.twidere.TwidereConstants.USER_TYPE_FANFOU_COM
|
||||
import org.mariotaku.twidere.model.*
|
||||
import org.mariotaku.twidere.model.ParcelableStatus.FilterFlags
|
||||
import org.mariotaku.twidere.task.twitter.GetStatusesTask
|
||||
import org.mariotaku.twidere.util.HtmlSpanBuilder
|
||||
import org.mariotaku.twidere.util.InternalTwitterContentUtils
|
||||
import org.mariotaku.twidere.util.TwitterContentUtils
|
||||
|
@ -105,7 +104,7 @@ object ParcelableStatusUtils {
|
|||
result.quoted_user_profile_image = TwitterContentUtils.getProfileImageUrl(quotedUser)
|
||||
result.quoted_user_is_protected = quotedUser.isProtected
|
||||
result.quoted_user_is_verified = quotedUser.isVerified
|
||||
} else {
|
||||
} else if (status.isQuoteStatus) {
|
||||
result.filter_flags = result.filter_flags or FilterFlags.QUOTE_NOT_AVAILABLE
|
||||
}
|
||||
|
||||
|
|
|
@ -12,7 +12,7 @@ import org.apache.commons.lang3.ArrayUtils
|
|||
import org.apache.commons.lang3.math.NumberUtils
|
||||
import org.mariotaku.abstask.library.AbstractTask
|
||||
import org.mariotaku.abstask.library.TaskStarter
|
||||
import org.mariotaku.kpreferences.KPreferences
|
||||
import org.mariotaku.kpreferences.get
|
||||
import org.mariotaku.microblog.library.MicroBlog
|
||||
import org.mariotaku.microblog.library.MicroBlogException
|
||||
import org.mariotaku.microblog.library.twitter.model.Paging
|
||||
|
@ -48,7 +48,7 @@ abstract class GetStatusesTask(
|
|||
protected val context: Context
|
||||
) : AbstractTask<RefreshTaskParam, List<TwitterWrapper.StatusListResponse>, () -> Unit>() {
|
||||
@Inject
|
||||
lateinit var preferences: KPreferences
|
||||
lateinit var preferences: SharedPreferencesWrapper
|
||||
@Inject
|
||||
lateinit var bus: Bus
|
||||
@Inject
|
||||
|
@ -200,8 +200,8 @@ abstract class GetStatusesTask(
|
|||
val deleteWhereArgs = arrayOf(accountKey.toString(), *statusIds)
|
||||
var olderCount = -1
|
||||
if (minPositionKey > 0) {
|
||||
olderCount = DataStoreUtils.getStatusesCount(context, uri, null, minPositionKey,
|
||||
Statuses.POSITION_KEY, false, arrayOf(accountKey))
|
||||
olderCount = DataStoreUtils.getStatusesCount(context, preferences, uri, null,
|
||||
minPositionKey, Statuses.POSITION_KEY, false, arrayOf(accountKey))
|
||||
}
|
||||
val rowsDeleted = resolver.delete(writeUri, deleteWhere, deleteWhereArgs)
|
||||
|
||||
|
|
Loading…
Reference in New Issue