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")
|
||||
@CursorField(value = Activities.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 ParcelableUser[] filtered_sources;
|
||||
public transient long[] after_filtered_source_ids;
|
||||
public transient ParcelableUser[] after_filtered_sources;
|
||||
|
||||
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.widget.TextView;
|
||||
|
||||
import org.apache.commons.collections.primitives.ArrayLongList;
|
||||
import org.apache.commons.lang3.ArrayUtils;
|
||||
import org.mariotaku.twidere.Constants;
|
||||
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.ParcelableMedia;
|
||||
import org.mariotaku.twidere.model.ParcelableStatus;
|
||||
import org.mariotaku.twidere.model.util.ParcelableActivityUtils;
|
||||
import org.mariotaku.twidere.util.MediaLoadingHandler;
|
||||
import org.mariotaku.twidere.util.OnLinkClickHandler;
|
||||
import org.mariotaku.twidere.util.ThemeUtils;
|
||||
|
@ -76,6 +76,7 @@ public abstract class AbsActivitiesAdapter<Data> extends LoadMoreSupportAdapter<
|
|||
private ActivityAdapterListener mActivityAdapterListener;
|
||||
|
||||
private long[] mFilteredUserIds;
|
||||
private boolean mFollowingOnly;
|
||||
|
||||
protected AbsActivitiesAdapter(final Context context, boolean compact) {
|
||||
super(context);
|
||||
|
@ -224,8 +225,7 @@ public abstract class AbsActivitiesAdapter<Data> extends LoadMoreSupportAdapter<
|
|||
}
|
||||
case ITEM_VIEW_TYPE_EMPTY: {
|
||||
final View view = new Space(getContext());
|
||||
return new ViewHolder(view) {
|
||||
};
|
||||
return new EmptyViewHolder(view);
|
||||
}
|
||||
}
|
||||
throw new UnsupportedOperationException("Unsupported viewType " + viewType);
|
||||
|
@ -271,36 +271,28 @@ public abstract class AbsActivitiesAdapter<Data> extends LoadMoreSupportAdapter<
|
|||
if (ArrayUtils.isEmpty(activity.target_object_statuses)) {
|
||||
return ITEM_VIEW_TYPE_STUB;
|
||||
}
|
||||
if (mFollowingOnly && !activity.status_user_following) return ITEM_VIEW_TYPE_EMPTY;
|
||||
return ITEM_VIEW_TYPE_STATUS;
|
||||
} else if (Activity.Action.REPLY.literal.equals(action)) {
|
||||
if (ArrayUtils.isEmpty(activity.target_statuses)) {
|
||||
return ITEM_VIEW_TYPE_STUB;
|
||||
}
|
||||
if (mFollowingOnly && !activity.status_user_following) return ITEM_VIEW_TYPE_EMPTY;
|
||||
return ITEM_VIEW_TYPE_STATUS;
|
||||
} else if (Activity.Action.QUOTE.literal.equals(action)) {
|
||||
if (ArrayUtils.isEmpty(activity.target_statuses)) {
|
||||
return ITEM_VIEW_TYPE_STUB;
|
||||
}
|
||||
if (mFollowingOnly && !activity.status_user_following) return ITEM_VIEW_TYPE_EMPTY;
|
||||
return ITEM_VIEW_TYPE_STATUS;
|
||||
} 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.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.LIST_MEMBER_ADDED.literal.equals(action)) {
|
||||
if (activity.filtered_source_ids == null) {
|
||||
if (!ArrayUtils.isEmpty(mFilteredUserIds)) {
|
||||
ArrayLongList list = new ArrayLongList();
|
||||
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)) {
|
||||
ParcelableActivityUtils.getAfterFilteredSourceIds(activity, mFilteredUserIds,
|
||||
mFollowingOnly);
|
||||
if (ArrayUtils.isEmpty(activity.after_filtered_source_ids)) {
|
||||
return ITEM_VIEW_TYPE_EMPTY;
|
||||
}
|
||||
return ITEM_VIEW_TYPE_TITLE_SUMMARY;
|
||||
|
@ -308,6 +300,11 @@ public abstract class AbsActivitiesAdapter<Data> extends LoadMoreSupportAdapter<
|
|||
return ITEM_VIEW_TYPE_STUB;
|
||||
}
|
||||
|
||||
public void setFollowingOnly(boolean followingOnly) {
|
||||
mFollowingOnly = followingOnly;
|
||||
notifyDataSetChanged();
|
||||
}
|
||||
|
||||
@Override
|
||||
public final int getItemCount() {
|
||||
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.ParcelableMedia;
|
||||
import org.mariotaku.twidere.model.ParcelableStatus;
|
||||
import org.mariotaku.twidere.model.util.ParcelableActivityUtils;
|
||||
import org.mariotaku.twidere.util.AsyncTwitterWrapper;
|
||||
import org.mariotaku.twidere.util.KeyboardShortcutsHandler;
|
||||
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) {
|
||||
final ParcelableActivity activity = getAdapter().getActivity(position);
|
||||
if (activity == null) return;
|
||||
Utils.openUsers(getActivity(), Arrays.asList(activity.sources));
|
||||
Utils.openUsers(getActivity(), Arrays.asList(ParcelableActivityUtils.getAfterFilteredSources(activity)));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -19,9 +19,12 @@
|
|||
|
||||
package org.mariotaku.twidere.fragment.support;
|
||||
|
||||
import android.content.Context;
|
||||
import android.net.Uri;
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.NonNull;
|
||||
|
||||
import org.mariotaku.twidere.adapter.ParcelableActivitiesAdapter;
|
||||
import org.mariotaku.twidere.provider.TwidereDataStore.Activities;
|
||||
|
||||
import edu.tsinghua.hotmobi.model.TimelineType;
|
||||
|
@ -60,6 +63,20 @@ public class ActivitiesAboutMeFragment extends CursorActivitiesFragment {
|
|||
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
|
||||
protected String getReadPositionTag() {
|
||||
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.ParcelableActivity;
|
||||
import org.mariotaku.twidere.model.ParcelableUser;
|
||||
import org.mariotaku.twidere.model.util.ParcelableActivityUtils;
|
||||
import org.mariotaku.twidere.util.MediaLoaderWrapper;
|
||||
import org.mariotaku.twidere.view.ActionIconView;
|
||||
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) {
|
||||
final Context context = adapter.getContext();
|
||||
final ParcelableUser[] sources = activity.getUnfilteredSources();
|
||||
final ParcelableUser[] sources = ParcelableActivityUtils.getAfterFilteredSources(activity);
|
||||
final ActivityTitleSummaryMessage message = ActivityTitleSummaryMessage.get(context,
|
||||
adapter.getUserColorNameManager(), activity, sources, activityTypeView.getDefaultColor(),
|
||||
byFriends, adapter.shouldUseStarsForLikes(), adapter.isNameFirst());
|
||||
|
|
Loading…
Reference in New Issue