activities about me supports my following only limitation
This commit is contained in:
parent
84d8780423
commit
f8264eddc0
|
@ -105,10 +105,14 @@ public class ParcelableActivity implements Comparable<ParcelableActivity>, Parce
|
||||||
@JsonField(name = "is_gap")
|
@JsonField(name = "is_gap")
|
||||||
@CursorField(value = Activities.IS_GAP)
|
@CursorField(value = Activities.IS_GAP)
|
||||||
public boolean is_gap;
|
public boolean is_gap;
|
||||||
|
@ParcelableThisPlease
|
||||||
|
@JsonField(name = "status_user_following")
|
||||||
|
@CursorField(value = Activities.STATUS_USER_FOLLOWING, excludeWrite = true)
|
||||||
|
public boolean status_user_following;
|
||||||
|
|
||||||
|
|
||||||
public transient long[] filtered_source_ids;
|
public transient long[] after_filtered_source_ids;
|
||||||
public transient ParcelableUser[] filtered_sources;
|
public transient ParcelableUser[] after_filtered_sources;
|
||||||
|
|
||||||
public ParcelableActivity() {
|
public ParcelableActivity() {
|
||||||
}
|
}
|
||||||
|
@ -204,19 +208,4 @@ public class ParcelableActivity implements Comparable<ParcelableActivity>, Parce
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
public ParcelableUser[] getUnfilteredSources() {
|
|
||||||
if (filtered_sources != null) return filtered_sources;
|
|
||||||
if (filtered_source_ids == null || sources.length == filtered_source_ids.length) {
|
|
||||||
return sources;
|
|
||||||
}
|
|
||||||
ParcelableUser[] result = new ParcelableUser[filtered_source_ids.length];
|
|
||||||
for (int i = 0; i < filtered_source_ids.length; i++) {
|
|
||||||
for (ParcelableUser user : sources) {
|
|
||||||
if (user.id == filtered_source_ids[i]) {
|
|
||||||
result[i] = user;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return filtered_sources = result;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,7 +31,6 @@ import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
import org.apache.commons.collections.primitives.ArrayLongList;
|
|
||||||
import org.apache.commons.lang3.ArrayUtils;
|
import org.apache.commons.lang3.ArrayUtils;
|
||||||
import org.mariotaku.twidere.Constants;
|
import org.mariotaku.twidere.Constants;
|
||||||
import org.mariotaku.twidere.R;
|
import org.mariotaku.twidere.R;
|
||||||
|
@ -42,6 +41,7 @@ import org.mariotaku.twidere.fragment.support.UserFragment;
|
||||||
import org.mariotaku.twidere.model.ParcelableActivity;
|
import org.mariotaku.twidere.model.ParcelableActivity;
|
||||||
import org.mariotaku.twidere.model.ParcelableMedia;
|
import org.mariotaku.twidere.model.ParcelableMedia;
|
||||||
import org.mariotaku.twidere.model.ParcelableStatus;
|
import org.mariotaku.twidere.model.ParcelableStatus;
|
||||||
|
import org.mariotaku.twidere.model.util.ParcelableActivityUtils;
|
||||||
import org.mariotaku.twidere.util.MediaLoadingHandler;
|
import org.mariotaku.twidere.util.MediaLoadingHandler;
|
||||||
import org.mariotaku.twidere.util.OnLinkClickHandler;
|
import org.mariotaku.twidere.util.OnLinkClickHandler;
|
||||||
import org.mariotaku.twidere.util.ThemeUtils;
|
import org.mariotaku.twidere.util.ThemeUtils;
|
||||||
|
@ -76,6 +76,7 @@ public abstract class AbsActivitiesAdapter<Data> extends LoadMoreSupportAdapter<
|
||||||
private ActivityAdapterListener mActivityAdapterListener;
|
private ActivityAdapterListener mActivityAdapterListener;
|
||||||
|
|
||||||
private long[] mFilteredUserIds;
|
private long[] mFilteredUserIds;
|
||||||
|
private boolean mFollowingOnly;
|
||||||
|
|
||||||
protected AbsActivitiesAdapter(final Context context, boolean compact) {
|
protected AbsActivitiesAdapter(final Context context, boolean compact) {
|
||||||
super(context);
|
super(context);
|
||||||
|
@ -224,8 +225,7 @@ public abstract class AbsActivitiesAdapter<Data> extends LoadMoreSupportAdapter<
|
||||||
}
|
}
|
||||||
case ITEM_VIEW_TYPE_EMPTY: {
|
case ITEM_VIEW_TYPE_EMPTY: {
|
||||||
final View view = new Space(getContext());
|
final View view = new Space(getContext());
|
||||||
return new ViewHolder(view) {
|
return new EmptyViewHolder(view);
|
||||||
};
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
throw new UnsupportedOperationException("Unsupported viewType " + viewType);
|
throw new UnsupportedOperationException("Unsupported viewType " + viewType);
|
||||||
|
@ -271,36 +271,28 @@ public abstract class AbsActivitiesAdapter<Data> extends LoadMoreSupportAdapter<
|
||||||
if (ArrayUtils.isEmpty(activity.target_object_statuses)) {
|
if (ArrayUtils.isEmpty(activity.target_object_statuses)) {
|
||||||
return ITEM_VIEW_TYPE_STUB;
|
return ITEM_VIEW_TYPE_STUB;
|
||||||
}
|
}
|
||||||
|
if (mFollowingOnly && !activity.status_user_following) return ITEM_VIEW_TYPE_EMPTY;
|
||||||
return ITEM_VIEW_TYPE_STATUS;
|
return ITEM_VIEW_TYPE_STATUS;
|
||||||
} else if (Activity.Action.REPLY.literal.equals(action)) {
|
} else if (Activity.Action.REPLY.literal.equals(action)) {
|
||||||
if (ArrayUtils.isEmpty(activity.target_statuses)) {
|
if (ArrayUtils.isEmpty(activity.target_statuses)) {
|
||||||
return ITEM_VIEW_TYPE_STUB;
|
return ITEM_VIEW_TYPE_STUB;
|
||||||
}
|
}
|
||||||
|
if (mFollowingOnly && !activity.status_user_following) return ITEM_VIEW_TYPE_EMPTY;
|
||||||
return ITEM_VIEW_TYPE_STATUS;
|
return ITEM_VIEW_TYPE_STATUS;
|
||||||
} else if (Activity.Action.QUOTE.literal.equals(action)) {
|
} else if (Activity.Action.QUOTE.literal.equals(action)) {
|
||||||
if (ArrayUtils.isEmpty(activity.target_statuses)) {
|
if (ArrayUtils.isEmpty(activity.target_statuses)) {
|
||||||
return ITEM_VIEW_TYPE_STUB;
|
return ITEM_VIEW_TYPE_STUB;
|
||||||
}
|
}
|
||||||
|
if (mFollowingOnly && !activity.status_user_following) return ITEM_VIEW_TYPE_EMPTY;
|
||||||
return ITEM_VIEW_TYPE_STATUS;
|
return ITEM_VIEW_TYPE_STATUS;
|
||||||
} else if (Activity.Action.FOLLOW.literal.equals(action) || Activity.Action.FAVORITE.literal.equals(action)
|
} else if (Activity.Action.FOLLOW.literal.equals(action) || Activity.Action.FAVORITE.literal.equals(action)
|
||||||
|| Activity.Action.RETWEET.literal.equals(action) || Activity.Action.FAVORITED_RETWEET.literal.equals(action)
|
|| Activity.Action.RETWEET.literal.equals(action) || Activity.Action.FAVORITED_RETWEET.literal.equals(action)
|
||||||
|| Activity.Action.RETWEETED_RETWEET.literal.equals(action) || Activity.Action.RETWEETED_MENTION.literal.equals(action)
|
|| Activity.Action.RETWEETED_RETWEET.literal.equals(action) || Activity.Action.RETWEETED_MENTION.literal.equals(action)
|
||||||
|| Activity.Action.FAVORITED_MENTION.literal.equals(action) || Activity.Action.LIST_CREATED.literal.equals(action)
|
|| Activity.Action.FAVORITED_MENTION.literal.equals(action) || Activity.Action.LIST_CREATED.literal.equals(action)
|
||||||
|| Activity.Action.LIST_MEMBER_ADDED.literal.equals(action)) {
|
|| Activity.Action.LIST_MEMBER_ADDED.literal.equals(action)) {
|
||||||
if (activity.filtered_source_ids == null) {
|
ParcelableActivityUtils.getAfterFilteredSourceIds(activity, mFilteredUserIds,
|
||||||
if (!ArrayUtils.isEmpty(mFilteredUserIds)) {
|
mFollowingOnly);
|
||||||
ArrayLongList list = new ArrayLongList();
|
if (ArrayUtils.isEmpty(activity.after_filtered_source_ids)) {
|
||||||
for (long id : ArrayUtils.nullToEmpty(activity.source_ids)) {
|
|
||||||
if (!ArrayUtils.contains(mFilteredUserIds, id)) {
|
|
||||||
list.add(id);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
activity.filtered_source_ids = list.toArray();
|
|
||||||
} else {
|
|
||||||
activity.filtered_source_ids = activity.source_ids;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (ArrayUtils.isEmpty(activity.filtered_source_ids)) {
|
|
||||||
return ITEM_VIEW_TYPE_EMPTY;
|
return ITEM_VIEW_TYPE_EMPTY;
|
||||||
}
|
}
|
||||||
return ITEM_VIEW_TYPE_TITLE_SUMMARY;
|
return ITEM_VIEW_TYPE_TITLE_SUMMARY;
|
||||||
|
@ -308,6 +300,11 @@ public abstract class AbsActivitiesAdapter<Data> extends LoadMoreSupportAdapter<
|
||||||
return ITEM_VIEW_TYPE_STUB;
|
return ITEM_VIEW_TYPE_STUB;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setFollowingOnly(boolean followingOnly) {
|
||||||
|
mFollowingOnly = followingOnly;
|
||||||
|
notifyDataSetChanged();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public final int getItemCount() {
|
public final int getItemCount() {
|
||||||
return getActivityCount() + (isLoadMoreIndicatorVisible() ? 1 : 0);
|
return getActivityCount() + (isLoadMoreIndicatorVisible() ? 1 : 0);
|
||||||
|
@ -404,4 +401,9 @@ public abstract class AbsActivitiesAdapter<Data> extends LoadMoreSupportAdapter<
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private static class EmptyViewHolder extends ViewHolder {
|
||||||
|
public EmptyViewHolder(View view) {
|
||||||
|
super(view);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -47,6 +47,7 @@ import org.mariotaku.twidere.loader.iface.IExtendedLoader;
|
||||||
import org.mariotaku.twidere.model.ParcelableActivity;
|
import org.mariotaku.twidere.model.ParcelableActivity;
|
||||||
import org.mariotaku.twidere.model.ParcelableMedia;
|
import org.mariotaku.twidere.model.ParcelableMedia;
|
||||||
import org.mariotaku.twidere.model.ParcelableStatus;
|
import org.mariotaku.twidere.model.ParcelableStatus;
|
||||||
|
import org.mariotaku.twidere.model.util.ParcelableActivityUtils;
|
||||||
import org.mariotaku.twidere.util.AsyncTwitterWrapper;
|
import org.mariotaku.twidere.util.AsyncTwitterWrapper;
|
||||||
import org.mariotaku.twidere.util.KeyboardShortcutsHandler;
|
import org.mariotaku.twidere.util.KeyboardShortcutsHandler;
|
||||||
import org.mariotaku.twidere.util.KeyboardShortcutsHandler.KeyboardShortcutCallback;
|
import org.mariotaku.twidere.util.KeyboardShortcutsHandler.KeyboardShortcutCallback;
|
||||||
|
@ -361,7 +362,7 @@ public abstract class AbsActivitiesFragment<Data> extends AbsContentListRecycler
|
||||||
public void onActivityClick(ActivityTitleSummaryViewHolder holder, int position) {
|
public void onActivityClick(ActivityTitleSummaryViewHolder holder, int position) {
|
||||||
final ParcelableActivity activity = getAdapter().getActivity(position);
|
final ParcelableActivity activity = getAdapter().getActivity(position);
|
||||||
if (activity == null) return;
|
if (activity == null) return;
|
||||||
Utils.openUsers(getActivity(), Arrays.asList(activity.sources));
|
Utils.openUsers(getActivity(), Arrays.asList(ParcelableActivityUtils.getAfterFilteredSources(activity)));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -19,9 +19,12 @@
|
||||||
|
|
||||||
package org.mariotaku.twidere.fragment.support;
|
package org.mariotaku.twidere.fragment.support;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
|
import android.os.Bundle;
|
||||||
import android.support.annotation.NonNull;
|
import android.support.annotation.NonNull;
|
||||||
|
|
||||||
|
import org.mariotaku.twidere.adapter.ParcelableActivitiesAdapter;
|
||||||
import org.mariotaku.twidere.provider.TwidereDataStore.Activities;
|
import org.mariotaku.twidere.provider.TwidereDataStore.Activities;
|
||||||
|
|
||||||
import edu.tsinghua.hotmobi.model.TimelineType;
|
import edu.tsinghua.hotmobi.model.TimelineType;
|
||||||
|
@ -60,6 +63,20 @@ public class ActivitiesAboutMeFragment extends CursorActivitiesFragment {
|
||||||
setRefreshing(mTwitterWrapper.isMentionsTimelineRefreshing());
|
setRefreshing(mTwitterWrapper.isMentionsTimelineRefreshing());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NonNull
|
||||||
|
@Override
|
||||||
|
protected ParcelableActivitiesAdapter onCreateAdapter(Context context, boolean compact) {
|
||||||
|
final ParcelableActivitiesAdapter adapter = super.onCreateAdapter(context, compact);
|
||||||
|
final Bundle arguments = getArguments();
|
||||||
|
if (arguments != null) {
|
||||||
|
final Bundle extras = arguments.getBundle(EXTRA_EXTRAS);
|
||||||
|
if (extras != null) {
|
||||||
|
adapter.setFollowingOnly(extras.getBoolean(EXTRA_MY_FOLLOWING_ONLY));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return adapter;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected String getReadPositionTag() {
|
protected String getReadPositionTag() {
|
||||||
return READ_POSITION_TAG_ACTIVITIES_ABOUT_ME;
|
return READ_POSITION_TAG_ACTIVITIES_ABOUT_ME;
|
||||||
|
|
|
@ -0,0 +1,45 @@
|
||||||
|
package org.mariotaku.twidere.model.util;
|
||||||
|
|
||||||
|
import org.apache.commons.collections.primitives.ArrayLongList;
|
||||||
|
import org.apache.commons.lang3.ArrayUtils;
|
||||||
|
import org.mariotaku.twidere.model.ParcelableActivity;
|
||||||
|
import org.mariotaku.twidere.model.ParcelableUser;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by mariotaku on 16/1/2.
|
||||||
|
*/
|
||||||
|
public class ParcelableActivityUtils {
|
||||||
|
public static void getAfterFilteredSourceIds(ParcelableActivity activity, long[] filteredUserIds, boolean followingOnly) {
|
||||||
|
if (activity.after_filtered_source_ids != null) return;
|
||||||
|
if (!ArrayUtils.isEmpty(filteredUserIds)) {
|
||||||
|
ArrayLongList list = new ArrayLongList();
|
||||||
|
for (ParcelableUser user : activity.sources) {
|
||||||
|
if (followingOnly && !user.is_following) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (!ArrayUtils.contains(filteredUserIds, user.id)) {
|
||||||
|
list.add(user.id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
activity.after_filtered_source_ids = list.toArray();
|
||||||
|
} else {
|
||||||
|
activity.after_filtered_source_ids = activity.source_ids;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ParcelableUser[] getAfterFilteredSources(ParcelableActivity activity) {
|
||||||
|
if (activity.after_filtered_sources != null) return activity.after_filtered_sources;
|
||||||
|
if (activity.after_filtered_source_ids == null || activity.sources.length == activity.after_filtered_source_ids.length) {
|
||||||
|
return activity.sources;
|
||||||
|
}
|
||||||
|
ParcelableUser[] result = new ParcelableUser[activity.after_filtered_source_ids.length];
|
||||||
|
for (int i = 0; i < activity.after_filtered_source_ids.length; i++) {
|
||||||
|
for (ParcelableUser user : activity.sources) {
|
||||||
|
if (user.id == activity.after_filtered_source_ids[i]) {
|
||||||
|
result[i] = user;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return activity.after_filtered_sources = result;
|
||||||
|
}
|
||||||
|
}
|
|
@ -32,6 +32,7 @@ import org.mariotaku.twidere.adapter.AbsActivitiesAdapter;
|
||||||
import org.mariotaku.twidere.model.ActivityTitleSummaryMessage;
|
import org.mariotaku.twidere.model.ActivityTitleSummaryMessage;
|
||||||
import org.mariotaku.twidere.model.ParcelableActivity;
|
import org.mariotaku.twidere.model.ParcelableActivity;
|
||||||
import org.mariotaku.twidere.model.ParcelableUser;
|
import org.mariotaku.twidere.model.ParcelableUser;
|
||||||
|
import org.mariotaku.twidere.model.util.ParcelableActivityUtils;
|
||||||
import org.mariotaku.twidere.util.MediaLoaderWrapper;
|
import org.mariotaku.twidere.util.MediaLoaderWrapper;
|
||||||
import org.mariotaku.twidere.view.ActionIconView;
|
import org.mariotaku.twidere.view.ActionIconView;
|
||||||
import org.mariotaku.twidere.view.BadgeView;
|
import org.mariotaku.twidere.view.BadgeView;
|
||||||
|
@ -75,7 +76,7 @@ public class ActivityTitleSummaryViewHolder extends ViewHolder implements View.O
|
||||||
|
|
||||||
public void displayActivity(ParcelableActivity activity, boolean byFriends) {
|
public void displayActivity(ParcelableActivity activity, boolean byFriends) {
|
||||||
final Context context = adapter.getContext();
|
final Context context = adapter.getContext();
|
||||||
final ParcelableUser[] sources = activity.getUnfilteredSources();
|
final ParcelableUser[] sources = ParcelableActivityUtils.getAfterFilteredSources(activity);
|
||||||
final ActivityTitleSummaryMessage message = ActivityTitleSummaryMessage.get(context,
|
final ActivityTitleSummaryMessage message = ActivityTitleSummaryMessage.get(context,
|
||||||
adapter.getUserColorNameManager(), activity, sources, activityTypeView.getDefaultColor(),
|
adapter.getUserColorNameManager(), activity, sources, activityTypeView.getDefaultColor(),
|
||||||
byFriends, adapter.shouldUseStarsForLikes(), adapter.isNameFirst());
|
byFriends, adapter.shouldUseStarsForLikes(), adapter.isNameFirst());
|
||||||
|
|
Loading…
Reference in New Issue