1
0
mirror of https://github.com/TwidereProject/Twidere-Android synced 2025-02-17 04:00:48 +01:00

improved activity related items

This commit is contained in:
Mariotaku Lee 2016-03-20 18:49:32 +08:00
parent 60877c4394
commit 14559e576e
20 changed files with 393 additions and 222 deletions

View File

@ -74,7 +74,7 @@ public interface TwidereConstants extends SharedPreferenceConstants, IntentConst
String AUTHORITY_TWIDERE_CACHE = "twidere.cache";
String AUTHORITY_USER = "user";
String AUTHORITY_USERS = "users";
String AUTHORITY_ITEMS = "items";
String AUTHORITY_USER_TIMELINE = "user_timeline";
String AUTHORITY_USER_MEDIA_TIMELINE = "user_media_timeline";
String AUTHORITY_USER_FAVORITES = "user_favorites";
@ -82,7 +82,6 @@ public interface TwidereConstants extends SharedPreferenceConstants, IntentConst
String AUTHORITY_USER_FRIENDS = "user_friends";
String AUTHORITY_USER_BLOCKS = "user_blocks";
String AUTHORITY_STATUS = "status";
String AUTHORITY_STATUSES = "statuses";
String AUTHORITY_PUBLIC_TIMELINE = "public_timeline";
String AUTHORITY_DIRECT_MESSAGES_CONVERSATION = "direct_messages_conversation";
String AUTHORITY_DIRECT_MESSAGES = "direct_messages";

View File

@ -145,6 +145,7 @@ public interface IntentConstants {
String EXTRA_IS_PUBLIC = "is_public";
String EXTRA_USER = "user";
String EXTRA_USERS = "users";
String EXTRA_ITEMS = "items";
String EXTRA_USER_LIST = "user_list";
String EXTRA_APPEND_TEXT = "append_text";
String EXTRA_NAME = "name";

View File

@ -60,10 +60,9 @@ public interface Constants extends TwidereConstants {
int LINK_ID_USER_LIST_MEMBERSHIPS = 15;
int LINK_ID_USER_GROUPS = 16;
int LINK_ID_SAVED_SEARCHES = 19;
int LINK_ID_ITEMS = 20;
int LINK_ID_USER_MENTIONS = 21;
int LINK_ID_INCOMING_FRIENDSHIPS = 22;
int LINK_ID_USERS = 23;
int LINK_ID_STATUSES = 24;
int LINK_ID_STATUS_RETWEETERS = 25;
int LINK_ID_STATUS_FAVORITERS = 27;
int LINK_ID_SEARCH = 28;

View File

@ -353,12 +353,8 @@ public class LinkHandlerActivity extends BaseActivity implements SystemWindowsIn
setTitle(R.string.incoming_friendships);
break;
}
case LINK_ID_USERS: {
setTitle(R.string.users);
break;
}
case LINK_ID_STATUSES: {
setTitle(R.string.statuses);
case LINK_ID_ITEMS: {
// TODO show title
break;
}
case LINK_ID_USER_MEDIA_TIMELINE: {

View File

@ -9,8 +9,12 @@ import android.support.v7.widget.RecyclerView;
import org.mariotaku.twidere.R;
import org.mariotaku.twidere.TwidereConstants;
import org.mariotaku.twidere.adapter.iface.IStatusesAdapter;
import org.mariotaku.twidere.adapter.iface.IUserListsAdapter;
import org.mariotaku.twidere.adapter.iface.IUsersAdapter;
import org.mariotaku.twidere.constant.SharedPreferenceConstants;
import org.mariotaku.twidere.model.ParcelableStatus;
import org.mariotaku.twidere.model.ParcelableUser;
import org.mariotaku.twidere.model.ParcelableUserList;
import org.mariotaku.twidere.model.UserKey;
import org.mariotaku.twidere.util.AsyncTwitterWrapper;
import org.mariotaku.twidere.util.MediaLoaderWrapper;
@ -27,7 +31,8 @@ import javax.inject.Inject;
/**
* Created by mariotaku on 16/1/22.
*/
public final class DummyStatusHolderAdapter implements IStatusesAdapter<Object>, SharedPreferenceConstants {
public final class DummyItemAdapter implements IStatusesAdapter<Object>,
IUsersAdapter<Object>, IUserListsAdapter<Object>, SharedPreferenceConstants {
private final Context context;
private final SharedPreferencesWrapper preferences;
@ -58,12 +63,12 @@ public final class DummyStatusHolderAdapter implements IStatusesAdapter<Object>,
private boolean showAbsoluteTime;
private int showingActionCardPosition = RecyclerView.NO_POSITION;
public DummyStatusHolderAdapter(Context context) {
public DummyItemAdapter(Context context) {
this(context, new TwidereLinkify(null), null);
}
public DummyStatusHolderAdapter(Context context, TwidereLinkify linkify,
@Nullable RecyclerView.Adapter<? extends RecyclerView.ViewHolder> adapter) {
public DummyItemAdapter(Context context, TwidereLinkify linkify,
@Nullable RecyclerView.Adapter<? extends RecyclerView.ViewHolder> adapter) {
GeneralComponentHelper.build(context).inject(this);
this.context = context;
preferences = SharedPreferencesWrapper.getInstance(context, TwidereConstants.SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE);
@ -83,6 +88,12 @@ public final class DummyStatusHolderAdapter implements IStatusesAdapter<Object>,
return loader;
}
@Nullable
@Override
public UserListAdapterListener getUserListAdapterListener() {
return null;
}
@NonNull
@Override
public BidiFormatter getBidiFormatter() {
@ -256,11 +267,58 @@ public final class DummyStatusHolderAdapter implements IStatusesAdapter<Object>,
}
}
@Override
public ParcelableUser getUser(int position) {
return null;
}
@Nullable
@Override
public String getUserId(int position) {
return null;
}
@Override
public int getUserCount() {
return 0;
}
@Override
public ParcelableUserList getUserList(int position) {
return null;
}
@Override
public long getUserListId(int position) {
return 0;
}
@Override
public int getUserListsCount() {
return 0;
}
@Override
public void setData(Object o) {
}
@Nullable
@Override
public UserAdapterListener getUserAdapterListener() {
return null;
}
@Override
public RequestClickListener getRequestClickListener() {
return null;
}
@Override
public FollowClickListener getFollowClickListener() {
return null;
}
@Override
public boolean shouldUseStarsForLikes() {
return useStarsForLikes;

View File

@ -8,6 +8,7 @@ import android.view.View;
import android.view.ViewGroup;
import org.mariotaku.twidere.R;
import org.mariotaku.twidere.adapter.iface.IStatusesAdapter;
import org.mariotaku.twidere.view.holder.StatusViewHolder;
import org.mariotaku.twidere.view.holder.iface.IStatusViewHolder;
@ -28,19 +29,24 @@ public class ListParcelableStatusesAdapter extends ParcelableStatusesAdapter {
@NonNull
@Override
protected IStatusViewHolder onCreateStatusViewHolder(ViewGroup parent, boolean compact) {
return createStatusViewHolder(this, getInflater(), parent, compact,
getCardBackgroundColor());
}
public static StatusViewHolder createStatusViewHolder(IStatusesAdapter<?> adapter,
LayoutInflater inflater, ViewGroup parent,
boolean compact, int cardBackgroundColor) {
final View view;
final int backgroundColor = getCardBackgroundColor();
final LayoutInflater inflater = getInflater();
if (compact) {
view = inflater.inflate(R.layout.card_item_status_compact, parent, false);
final View itemContent = view.findViewById(R.id.item_content);
itemContent.setBackgroundColor(backgroundColor);
itemContent.setBackgroundColor(cardBackgroundColor);
} else {
view = inflater.inflate(R.layout.card_item_status, parent, false);
final CardView cardView = (CardView) view.findViewById(R.id.card);
cardView.setCardBackgroundColor(backgroundColor);
cardView.setCardBackgroundColor(cardBackgroundColor);
}
final StatusViewHolder holder = new StatusViewHolder(this, view);
final StatusViewHolder holder = new StatusViewHolder(adapter, view);
holder.setOnClickListeners();
holder.setupViewOptions();
return holder;

View File

@ -42,6 +42,7 @@ import org.mariotaku.twidere.model.ParcelableActivity;
import org.mariotaku.twidere.model.ParcelableActivityCursorIndices;
import org.mariotaku.twidere.model.ParcelableMedia;
import org.mariotaku.twidere.model.ParcelableStatus;
import org.mariotaku.twidere.model.ParcelableStatusCursorIndices;
import org.mariotaku.twidere.model.UserKey;
import org.mariotaku.twidere.model.util.ParcelableActivityUtils;
import org.mariotaku.twidere.util.IntentUtils;
@ -75,7 +76,7 @@ public class ParcelableActivitiesAdapter extends LoadMoreSupportAdapter<Recycler
private final MediaLoadingHandler mLoadingHandler;
private final int mCardBackgroundColor;
private final boolean mCompactCards;
private final DummyStatusHolderAdapter mStatusAdapterDelegate;
private final DummyItemAdapter mStatusAdapterDelegate;
private final EventListener mEventListener;
private List<ParcelableActivity> mData;
private final boolean mIsByFriends;
@ -86,7 +87,7 @@ public class ParcelableActivitiesAdapter extends LoadMoreSupportAdapter<Recycler
public ParcelableActivitiesAdapter(Context context, boolean compact, boolean byFriends) {
super(context);
mStatusAdapterDelegate = new DummyStatusHolderAdapter(context,
mStatusAdapterDelegate = new DummyItemAdapter(context,
new TwidereLinkify(new OnLinkClickHandler(context, null)), this);
mCardBackgroundColor = ThemeUtils.getCardBackgroundColor(context,
ThemeUtils.getThemeBackgroundOption(context),
@ -102,8 +103,18 @@ public class ParcelableActivitiesAdapter extends LoadMoreSupportAdapter<Recycler
@Override
public boolean isGapItem(int adapterPosition) {
int dataPosition = adapterPosition - getActivityStartIndex();
if (dataPosition < 0 || dataPosition >= getActivityCount()) return false;
return getActivity(adapterPosition).is_gap;
final int activityCount = getActivityCount();
if (dataPosition < 0 || dataPosition >= activityCount) return false;
// Don't show gap if it's last item
if (dataPosition == activityCount - 1) {
return false;
}
if (mData instanceof ObjectCursor) {
final Cursor cursor = ((ObjectCursor) mData).getCursor(dataPosition);
final ParcelableActivityCursorIndices indices = (ParcelableActivityCursorIndices) ((ObjectCursor) mData).getIndices();
return cursor.getShort(indices.is_gap) == 1;
}
return mData.get(dataPosition).is_gap;
}
@Override

View File

@ -113,7 +113,17 @@ public abstract class ParcelableStatusesAdapter extends LoadMoreSupportAdapter<R
@Override
public boolean isGapItem(int position) {
return getStatus(position).is_gap && position != getStatusCount() - 1;
int dataPosition = position - getStatusStartIndex();
final int statusCount = getStatusCount();
if (dataPosition < 0 || dataPosition >= statusCount) return false;
// Don't show gap if it's last item
if (dataPosition == statusCount - 1) return false;
if (mData instanceof ObjectCursor) {
final Cursor cursor = ((ObjectCursor) mData).getCursor(dataPosition);
final ParcelableStatusCursorIndices indices = (ParcelableStatusCursorIndices) ((ObjectCursor) mData).getIndices();
return cursor.getShort(indices.is_gap) == 1;
}
return mData.get(dataPosition).is_gap;
}
@Override

View File

@ -142,14 +142,7 @@ public class ParcelableUserListsAdapter extends LoadMoreSupportAdapter<RecyclerV
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
switch (viewType) {
case ITEM_VIEW_TYPE_USER_LIST: {
final View view;
view = mInflater.inflate(R.layout.card_item_user_list_compact, parent, false);
final View itemContent = view.findViewById(R.id.item_content);
itemContent.setBackgroundColor(mCardBackgroundColor);
final UserListViewHolder holder = new UserListViewHolder(this, view);
holder.setOnClickListeners();
holder.setupViewOptions();
return holder;
return createUserListViewHolder(this, mInflater, parent, mCardBackgroundColor);
}
case ITEM_VIEW_TYPE_LOAD_INDICATOR: {
final View view = mInflater.inflate(R.layout.card_item_load_indicator, parent, false);
@ -195,6 +188,20 @@ public class ParcelableUserListsAdapter extends LoadMoreSupportAdapter<RecyclerV
return mEventListener;
}
public static UserListViewHolder createUserListViewHolder(IUserListsAdapter<?> adapter,
LayoutInflater inflater,
ViewGroup parent,
int cardBackgroundColor) {
final View view;
view = inflater.inflate(R.layout.card_item_user_list_compact, parent, false);
final View itemContent = view.findViewById(R.id.item_content);
itemContent.setBackgroundColor(cardBackgroundColor);
final UserListViewHolder holder = new UserListViewHolder(adapter, view);
holder.setOnClickListeners();
holder.setupViewOptions();
return holder;
}
public interface UserListAdapterListener {
void onUserListClick(UserListViewHolder holder, int position);

View File

@ -167,14 +167,7 @@ public class ParcelableUsersAdapter extends LoadMoreSupportAdapter<RecyclerView.
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
switch (viewType) {
case ITEM_VIEW_TYPE_USER: {
final View view;
view = mInflater.inflate(R.layout.card_item_user_compact, parent, false);
final View itemContent = view.findViewById(R.id.item_content);
itemContent.setBackgroundColor(mCardBackgroundColor);
final UserViewHolder holder = new UserViewHolder(this, view);
holder.setOnClickListeners();
holder.setupViewOptions();
return holder;
return createUserViewHolder(this, mInflater, parent, mCardBackgroundColor);
}
case ITEM_VIEW_TYPE_LOAD_INDICATOR: {
final View view = mInflater.inflate(R.layout.card_item_load_indicator, parent, false);
@ -237,4 +230,16 @@ public class ParcelableUsersAdapter extends LoadMoreSupportAdapter<RecyclerView.
public boolean shouldShowAccountsColor() {
return false;
}
public static UserViewHolder createUserViewHolder(IUsersAdapter<?> adapter,
LayoutInflater inflater, ViewGroup parent,
int cardBackgroundColor) {
final View view = inflater.inflate(R.layout.card_item_user_compact, parent, false);
final View itemContent = view.findViewById(R.id.item_content);
itemContent.setBackgroundColor(cardBackgroundColor);
final UserViewHolder holder = new UserViewHolder(adapter, view);
holder.setOnClickListeners();
holder.setupViewOptions();
return holder;
}
}

View File

@ -0,0 +1,110 @@
package org.mariotaku.twidere.adapter;
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.ViewGroup;
import org.mariotaku.twidere.model.ParcelableStatus;
import org.mariotaku.twidere.model.ParcelableUser;
import org.mariotaku.twidere.model.ParcelableUserList;
import org.mariotaku.twidere.util.ThemeUtils;
import org.mariotaku.twidere.view.holder.StatusViewHolder;
import org.mariotaku.twidere.view.holder.UserListViewHolder;
import org.mariotaku.twidere.view.holder.UserViewHolder;
import java.util.List;
/**
* Created by mariotaku on 16/3/20.
*/
public class VariousItemsAdapter extends LoadMoreSupportAdapter<RecyclerView.ViewHolder> {
public static final int VIEW_TYPE_STATUS = 1;
public static final int VIEW_TYPE_USER = 2;
public static final int VIEW_TYPE_USER_LIST = 3;
private final boolean mCompact;
private final LayoutInflater mInflater;
private final int mCardBackgroundColor;
private final DummyItemAdapter mDummyAdapter;
private List<?> mData;
public VariousItemsAdapter(Context context, boolean compact) {
super(context);
mCompact = compact;
mInflater = LayoutInflater.from(context);
mCardBackgroundColor = ThemeUtils.getCardBackgroundColor(context,
ThemeUtils.getThemeBackgroundOption(context),
ThemeUtils.getUserThemeBackgroundAlpha(context));
mDummyAdapter = new DummyItemAdapter(context);
setLoadMoreIndicatorPosition(IndicatorPosition.NONE);
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
switch (viewType) {
case VIEW_TYPE_STATUS: {
return ListParcelableStatusesAdapter.createStatusViewHolder(mDummyAdapter,
mInflater, parent, mCompact, mCardBackgroundColor);
}
case VIEW_TYPE_USER: {
return ParcelableUsersAdapter.createUserViewHolder(mDummyAdapter, mInflater, parent,
mCardBackgroundColor);
}
case VIEW_TYPE_USER_LIST: {
return ParcelableUserListsAdapter.createUserListViewHolder(mDummyAdapter, mInflater,
parent, mCardBackgroundColor);
}
}
throw new UnsupportedOperationException();
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
final Object obj = mData.get(position);
switch (getItemViewType(obj)) {
case VIEW_TYPE_STATUS: {
((StatusViewHolder) holder).displayStatus(((ParcelableStatus) obj), true);
break;
}
case VIEW_TYPE_USER: {
((UserViewHolder) holder).displayUser(((ParcelableUser) obj));
break;
}
case VIEW_TYPE_USER_LIST: {
((UserListViewHolder) holder).displayUserList(((ParcelableUserList) obj));
break;
}
}
}
@Override
public int getItemViewType(int position) {
Object obj = mData.get(position);
return getItemViewType(obj);
}
protected int getItemViewType(Object obj) {
if (obj instanceof ParcelableStatus) {
return VIEW_TYPE_STATUS;
} else if (obj instanceof ParcelableUser) {
return VIEW_TYPE_USER;
} else if (obj instanceof ParcelableUserList) {
return VIEW_TYPE_USER_LIST;
}
throw new UnsupportedOperationException("Unsupported object " + obj);
}
public void setData(List<?> data) {
mData = data;
notifyDataSetChanged();
}
@Override
public int getItemCount() {
if (mData == null) return 0;
return mData.size();
}
}

View File

@ -24,6 +24,7 @@ import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.Rect;
import android.os.Bundle;
import android.os.Parcelable;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.FragmentActivity;
@ -74,7 +75,7 @@ import org.mariotaku.twidere.view.holder.iface.IStatusViewHolder;
import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.TimeZone;
@ -397,7 +398,14 @@ public abstract class AbsActivitiesFragment extends AbsContentListRecyclerViewFr
public void onActivityClick(ActivityTitleSummaryViewHolder holder, int position) {
final ParcelableActivity activity = getAdapter().getActivity(position);
if (activity == null) return;
IntentUtils.openUsers(getActivity(), Arrays.asList(ParcelableActivityUtils.getAfterFilteredSources(activity)));
final List<Parcelable> list = new ArrayList<>();
if (activity.target_object_statuses != null) {
Collections.addAll(list, activity.target_object_statuses);
} else if (activity.target_statuses != null) {
Collections.addAll(list, activity.target_statuses);
}
Collections.addAll(list, ParcelableActivityUtils.getAfterFilteredSources(activity));
IntentUtils.openItems(getActivity(), list);
}
@Override

View File

@ -0,0 +1,114 @@
package org.mariotaku.twidere.fragment;
import android.content.Context;
import android.os.Bundle;
import android.os.Parcelable;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.LoaderManager.LoaderCallbacks;
import android.support.v4.content.AsyncTaskLoader;
import android.support.v4.content.Loader;
import android.support.v7.widget.RecyclerView;
import org.mariotaku.twidere.adapter.VariousItemsAdapter;
import org.mariotaku.twidere.adapter.decorator.DividerItemDecoration;
import java.util.List;
/**
* Created by mariotaku on 16/3/20.
*/
public class ItemsListFragment extends AbsContentListRecyclerViewFragment<VariousItemsAdapter>
implements LoaderCallbacks<List<?>> {
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
getLoaderManager().initLoader(0, null, this);
setRefreshEnabled(false);
showContent();
}
@NonNull
@Override
protected VariousItemsAdapter onCreateAdapter(Context context, boolean compact) {
return new VariousItemsAdapter(context, compact);
}
@Override
public Loader<List<?>> onCreateLoader(int id, Bundle args) {
return new ItemsLoader(getContext(), getArguments());
}
@Override
public void onLoadFinished(Loader<List<?>> loader, List<?> data) {
getAdapter().setData(data);
}
@Override
public void onLoaderReset(Loader<List<?>> loader) {
getAdapter().setData(null);
}
@Override
protected void setupRecyclerView(Context context, boolean compact) {
if (compact) {
super.setupRecyclerView(context, true);
return;
}
final RecyclerView recyclerView = getRecyclerView();
final VariousItemsAdapter adapter = getAdapter();
// Dividers are drawn on bottom of view
recyclerView.addItemDecoration(new DividerItemDecoration(context, getLayoutManager().getOrientation()) {
@Override
protected boolean isDividerEnabled(int childPos) {
// Don't draw for last item
if (childPos == RecyclerView.NO_POSITION || childPos == adapter.getItemCount() - 1) {
return false;
}
final int itemViewType = adapter.getItemViewType(childPos);
// Draw only if current item and next item is TITLE_SUMMARY
if (shouldUseDividerFor(itemViewType)) {
if (shouldUseDividerFor(adapter.getItemViewType(childPos + 1))) {
return true;
}
}
return false;
}
private boolean shouldUseDividerFor(int itemViewType) {
switch (itemViewType) {
case VariousItemsAdapter.VIEW_TYPE_USER:
case VariousItemsAdapter.VIEW_TYPE_USER_LIST:
return true;
default:
return false;
}
}
});
}
@Override
public boolean isRefreshing() {
return false;
}
public static class ItemsLoader extends AsyncTaskLoader<List<?>> {
private final Bundle mArguments;
public ItemsLoader(Context context, Bundle args) {
super(context);
mArguments = args;
}
@Override
public List<?> loadInBackground() {
return mArguments.<Parcelable>getParcelableArrayList(EXTRA_ITEMS);
}
@Override
protected void onStartLoading() {
forceLoad();
}
}
}

View File

@ -44,7 +44,7 @@ import com.twitter.Validator;
import org.mariotaku.twidere.Constants;
import org.mariotaku.twidere.R;
import org.mariotaku.twidere.adapter.DummyStatusHolderAdapter;
import org.mariotaku.twidere.adapter.DummyItemAdapter;
import org.mariotaku.twidere.model.Draft;
import org.mariotaku.twidere.model.ParcelableAccount;
import org.mariotaku.twidere.model.ParcelableCredentials;
@ -79,7 +79,7 @@ public class RetweetQuoteDialogFragment extends BaseSupportDialogFragment implem
final Context context = builder.getContext();
final LayoutInflater inflater = LayoutInflater.from(context);
@SuppressLint("InflateParams") final View view = inflater.inflate(R.layout.dialog_status_quote_retweet, null);
final DummyStatusHolderAdapter adapter = new DummyStatusHolderAdapter(context);
final DummyItemAdapter adapter = new DummyItemAdapter(context);
adapter.setShouldShowAccountsColor(true);
final IStatusViewHolder holder = new StatusViewHolder(adapter, view.findViewById(R.id.item_content));
final ParcelableStatus status = getStatus();

View File

@ -1,70 +0,0 @@
/*
* Twidere - Twitter client for Android
*
* Copyright (C) 2012-2014 Mariotaku Lee <mariotaku.lee@gmail.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.mariotaku.twidere.fragment;
import android.content.Context;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.content.Loader;
import org.mariotaku.twidere.loader.IntentExtrasStatusesLoader;
import org.mariotaku.twidere.model.ParcelableStatus;
import java.util.List;
import edu.tsinghua.hotmobi.model.TimelineType;
public class StatusesListFragment extends ParcelableStatusesFragment {
@Override
protected Loader<List<ParcelableStatus>> onCreateStatusesLoader(final Context context,
final Bundle args,
final boolean fromUser) {
return new IntentExtrasStatusesLoader(context, getArguments(), getAdapterData(), fromUser);
}
@Override
protected String[] getSavedStatusesFileArgs() {
return null;
}
// @Override
// protected boolean shouldShowAccountColor() {
// final List<ParcelableStatus> data = getData();
// if (data != null) {
// long account_id = -1;
// for (final ParcelableStatus status : data) {
// final long prev = account_id;
// account_id = status.account_id;
// if (prev > 0 && account_id != prev) return true;
// }
// }
// return false;
// }
@NonNull
@Override
@TimelineType
protected String getTimelineType() {
return TimelineType.OTHER;
}
}

View File

@ -1,65 +0,0 @@
/*
* Twidere - Twitter client for Android
*
* Copyright (C) 2012-2014 Mariotaku Lee <mariotaku.lee@gmail.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.mariotaku.twidere.fragment;
import android.content.Context;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.content.Loader;
import org.mariotaku.twidere.loader.IntentExtrasUsersLoader;
import org.mariotaku.twidere.model.ParcelableUser;
import java.util.List;
public class UsersListFragment extends ParcelableUsersFragment {
@Override
protected boolean hasMoreData(List<ParcelableUser> data) {
return false;
}
@Override
public boolean isRefreshing() {
if (getContext() == null || isDetached()) return false;
return false;
}
@Override
public void onLoadFinished(Loader<List<ParcelableUser>> loader, List<ParcelableUser> data) {
super.onLoadFinished(loader, data);
setRefreshEnabled(false);
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
setRefreshEnabled(false);
}
@Override
public Loader<List<ParcelableUser>> onCreateUsersLoader(final Context context, @NonNull final Bundle args, boolean fromUser) {
if (args.containsKey(EXTRA_USERS))
return new IntentExtrasUsersLoader(context, args, getData(), fromUser);
return null;
}
}

View File

@ -29,7 +29,7 @@ import android.util.AttributeSet;
import org.mariotaku.twidere.Constants;
import org.mariotaku.twidere.R;
import org.mariotaku.twidere.adapter.DummyStatusHolderAdapter;
import org.mariotaku.twidere.adapter.DummyItemAdapter;
import org.mariotaku.twidere.graphic.like.LikeAnimationDrawable;
import org.mariotaku.twidere.view.holder.StatusViewHolder;
import org.mariotaku.twidere.view.holder.iface.IStatusViewHolder;
@ -38,7 +38,7 @@ public class CardPreviewPreference extends Preference implements Constants, OnSh
private StatusViewHolder mHolder;
private boolean mCompactModeChanged;
private DummyStatusHolderAdapter mAdapter;
private DummyItemAdapter mAdapter;
public CardPreviewPreference(final Context context) {
this(context, null);
@ -54,7 +54,7 @@ public class CardPreviewPreference extends Preference implements Constants, OnSh
Context.MODE_PRIVATE);
setLayoutResources(preferences);
preferences.registerOnSharedPreferenceChangeListener(this);
mAdapter = new DummyStatusHolderAdapter(context);
mAdapter = new DummyItemAdapter(context);
}
@Override

View File

@ -7,6 +7,7 @@ import android.content.SharedPreferences;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.Parcelable;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.ActivityCompat;
@ -19,7 +20,6 @@ import org.apache.commons.lang3.ArrayUtils;
import org.mariotaku.twidere.BuildConfig;
import org.mariotaku.twidere.Constants;
import org.mariotaku.twidere.R;
import org.mariotaku.twidere.TwidereConstants;
import org.mariotaku.twidere.activity.MediaViewerActivity;
import org.mariotaku.twidere.constant.SharedPreferenceConstants;
import org.mariotaku.twidere.fragment.SensitiveContentWarningDialogFragment;
@ -59,14 +59,14 @@ public class IntentUtils implements Constants {
final Bundle extras = new Bundle();
extras.putParcelable(EXTRA_USER, user);
final Uri.Builder builder = new Uri.Builder();
builder.scheme(TwidereConstants.SCHEME_TWIDERE);
builder.authority(TwidereConstants.AUTHORITY_USER);
builder.appendQueryParameter(TwidereConstants.QUERY_PARAM_ACCOUNT_KEY, user.account_key.toString());
builder.scheme(SCHEME_TWIDERE);
builder.authority(AUTHORITY_USER);
builder.appendQueryParameter(QUERY_PARAM_ACCOUNT_KEY, user.account_key.toString());
if (user.key != null) {
builder.appendQueryParameter(TwidereConstants.QUERY_PARAM_USER_ID, user.key.toString());
builder.appendQueryParameter(QUERY_PARAM_USER_ID, user.key.toString());
}
if (user.screen_name != null) {
builder.appendQueryParameter(TwidereConstants.QUERY_PARAM_SCREEN_NAME, user.screen_name);
builder.appendQueryParameter(QUERY_PARAM_SCREEN_NAME, user.screen_name);
}
final Intent intent = new Intent(Intent.ACTION_VIEW, builder.build());
intent.setExtrasClassLoader(context.getClassLoader());
@ -100,13 +100,13 @@ public class IntentUtils implements Constants {
}
}
public static void openUsers(@NonNull final Context context, final List<ParcelableUser> users) {
if (users == null) return;
public static void openItems(@NonNull final Context context, final List<Parcelable> items) {
if (items == null) return;
final Bundle extras = new Bundle();
extras.putParcelableArrayList(EXTRA_USERS, new ArrayList<>(users));
extras.putParcelableArrayList(EXTRA_ITEMS, new ArrayList<>(items));
final Uri.Builder builder = new Uri.Builder();
builder.scheme(TwidereConstants.SCHEME_TWIDERE);
builder.authority(TwidereConstants.AUTHORITY_USERS);
builder.scheme(SCHEME_TWIDERE);
builder.authority(AUTHORITY_ITEMS);
final Intent intent = new Intent(Intent.ACTION_VIEW, builder.build());
intent.putExtras(extras);
context.startActivity(intent);
@ -115,12 +115,12 @@ public class IntentUtils implements Constants {
public static void openUserMentions(@NonNull final Context context, @Nullable final UserKey accountKey,
@NonNull final String screenName) {
final Uri.Builder builder = new Uri.Builder();
builder.scheme(TwidereConstants.SCHEME_TWIDERE);
builder.authority(TwidereConstants.AUTHORITY_USER_MENTIONS);
builder.scheme(SCHEME_TWIDERE);
builder.authority(AUTHORITY_USER_MENTIONS);
if (accountKey != null) {
builder.appendQueryParameter(TwidereConstants.QUERY_PARAM_ACCOUNT_KEY, accountKey.toString());
builder.appendQueryParameter(QUERY_PARAM_ACCOUNT_KEY, accountKey.toString());
}
builder.appendQueryParameter(TwidereConstants.QUERY_PARAM_SCREEN_NAME, screenName);
builder.appendQueryParameter(QUERY_PARAM_SCREEN_NAME, screenName);
final Intent intent = new Intent(Intent.ACTION_VIEW, builder.build());
context.startActivity(intent);
}
@ -150,7 +150,7 @@ public class IntentUtils implements Constants {
final ParcelableMedia current, final ParcelableMedia[] media,
final Bundle options, final boolean newDocument) {
if (media == null) return;
final SharedPreferences prefs = context.getSharedPreferences(TwidereConstants.SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE);
final SharedPreferences prefs = context.getSharedPreferences(SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE);
if (context instanceof FragmentActivity && isPossiblySensitive
&& !prefs.getBoolean(SharedPreferenceConstants.KEY_DISPLAY_SENSITIVE_CONTENTS, false)) {
final FragmentActivity activity = (FragmentActivity) context;
@ -373,18 +373,6 @@ public class IntentUtils implements Constants {
}
}
public static void openStatuses(final Context context, final List<ParcelableStatus> statuses) {
if (context == null || statuses == null) return;
final Bundle extras = new Bundle();
extras.putParcelableArrayList(EXTRA_STATUSES, new ArrayList<>(statuses));
final Uri.Builder builder = new Uri.Builder();
builder.scheme(SCHEME_TWIDERE);
builder.authority(AUTHORITY_STATUSES);
final Intent intent = new Intent(Intent.ACTION_VIEW, builder.build());
intent.putExtras(extras);
context.startActivity(intent);
}
public static void openStatusFavoriters(@NonNull final Context context, @Nullable final UserKey accountKey,
@NonNull final String statusId) {
final Uri.Builder builder = new Uri.Builder();

View File

@ -132,6 +132,7 @@ import org.mariotaku.twidere.fragment.DraftsFragment;
import org.mariotaku.twidere.fragment.FiltersFragment;
import org.mariotaku.twidere.fragment.IncomingFriendshipsFragment;
import org.mariotaku.twidere.fragment.InteractionsTimelineFragment;
import org.mariotaku.twidere.fragment.ItemsListFragment;
import org.mariotaku.twidere.fragment.ListsFragment;
import org.mariotaku.twidere.fragment.MessagesConversationFragment;
import org.mariotaku.twidere.fragment.MutesUsersListFragment;
@ -142,7 +143,6 @@ import org.mariotaku.twidere.fragment.SearchFragment;
import org.mariotaku.twidere.fragment.StatusFavoritersListFragment;
import org.mariotaku.twidere.fragment.StatusFragment;
import org.mariotaku.twidere.fragment.StatusRetweetersListFragment;
import org.mariotaku.twidere.fragment.StatusesListFragment;
import org.mariotaku.twidere.fragment.UserBlocksListFragment;
import org.mariotaku.twidere.fragment.UserFavoritesFragment;
import org.mariotaku.twidere.fragment.UserFollowersFragment;
@ -158,7 +158,6 @@ import org.mariotaku.twidere.fragment.UserMediaTimelineFragment;
import org.mariotaku.twidere.fragment.UserMentionsFragment;
import org.mariotaku.twidere.fragment.UserProfileEditorFragment;
import org.mariotaku.twidere.fragment.UserTimelineFragment;
import org.mariotaku.twidere.fragment.UsersListFragment;
import org.mariotaku.twidere.fragment.iface.IBaseFragment.SystemWindowsInsetsCallback;
import org.mariotaku.twidere.graphic.PaddingDrawable;
import org.mariotaku.twidere.model.AccountPreferences;
@ -256,8 +255,7 @@ public final class Utils implements Constants {
LINK_HANDLER_URI_MATCHER.addURI(AUTHORITY_SAVED_SEARCHES, null, LINK_ID_SAVED_SEARCHES);
LINK_HANDLER_URI_MATCHER.addURI(AUTHORITY_USER_MENTIONS, null, LINK_ID_USER_MENTIONS);
LINK_HANDLER_URI_MATCHER.addURI(AUTHORITY_INCOMING_FRIENDSHIPS, null, LINK_ID_INCOMING_FRIENDSHIPS);
LINK_HANDLER_URI_MATCHER.addURI(AUTHORITY_USERS, null, LINK_ID_USERS);
LINK_HANDLER_URI_MATCHER.addURI(AUTHORITY_STATUSES, null, LINK_ID_STATUSES);
LINK_HANDLER_URI_MATCHER.addURI(AUTHORITY_ITEMS, null, LINK_ID_ITEMS);
LINK_HANDLER_URI_MATCHER.addURI(AUTHORITY_STATUS_RETWEETERS, null, LINK_ID_STATUS_RETWEETERS);
LINK_HANDLER_URI_MATCHER.addURI(AUTHORITY_STATUS_FAVORITERS, null, LINK_ID_STATUS_FAVORITERS);
LINK_HANDLER_URI_MATCHER.addURI(AUTHORITY_SEARCH, null, LINK_ID_SEARCH);
@ -728,12 +726,8 @@ public final class Utils implements Constants {
fragment = new IncomingFriendshipsFragment();
break;
}
case LINK_ID_USERS: {
fragment = new UsersListFragment();
break;
}
case LINK_ID_STATUSES: {
fragment = new StatusesListFragment();
case LINK_ID_ITEMS: {
fragment = new ItemsListFragment();
break;
}
case LINK_ID_STATUS_RETWEETERS: {

View File

@ -30,7 +30,7 @@ import org.mariotaku.twidere.adapter.BaseArrayAdapter;
import org.mariotaku.twidere.adapter.BaseRecyclerViewAdapter;
import org.mariotaku.twidere.adapter.ComposeAutoCompleteAdapter;
import org.mariotaku.twidere.adapter.DraftsAdapter;
import org.mariotaku.twidere.adapter.DummyStatusHolderAdapter;
import org.mariotaku.twidere.adapter.DummyItemAdapter;
import org.mariotaku.twidere.adapter.UserAutoCompleteAdapter;
import org.mariotaku.twidere.fragment.BaseListFragment;
import org.mariotaku.twidere.fragment.BasePreferenceFragment;
@ -65,7 +65,7 @@ import dagger.Component;
@Singleton
@Component(modules = ApplicationModule.class)
public interface GeneralComponent {
void inject(DummyStatusHolderAdapter object);
void inject(DummyItemAdapter object);
void inject(BaseSupportFragment object);