quote should work in activities list

This commit is contained in:
Mariotaku Lee 2015-08-13 11:27:53 +08:00
parent 78cc736b23
commit 47bf917d5b
13 changed files with 154 additions and 58 deletions

View File

@ -29,7 +29,8 @@ import org.mariotaku.twidere.api.twitter.model.ResponseList;
@SuppressWarnings("RedundantThrows")
@MethodExtra(name = "extra_params", values = {"include_my_retweet", "include_rts", "include_entities",
"include_cards", "cards_platform", "include_reply_count", "include_descendent_reply_count"})
"include_cards", "cards_platform", "include_reply_count", "include_descendent_reply_count",
"model_version"})
public interface PrivateActivityResources extends PrivateResources {
@GET("/activity/about_me.json")

View File

@ -23,6 +23,17 @@ import java.util.Date;
public interface Activity extends TwitterResponse, Comparable<Activity> {
int ACTION_FAVORITE = 0x01;
int ACTION_FOLLOW = 0x02;
int ACTION_MENTION = 0x03;
int ACTION_REPLY = 0x04;
int ACTION_RETWEET = 0x05;
int ACTION_LIST_MEMBER_ADDED = 0x06;
int ACTION_LIST_CREATED = 0x07;
int ACTION_FAVORITED_RETWEET = 0x08;
int ACTION_RETWEETED_RETWEET = 0x09;
int ACTION_QUOTE = 0x0A;
Action getAction();
Date getCreatedAt();
@ -49,19 +60,13 @@ public interface Activity extends TwitterResponse, Comparable<Activity> {
User[] getTargetUsers();
enum Action {
FAVORITE(0x1), FOLLOW(0x2), MENTION(0x3), REPLY(0x4), RETWEET(0x5), LIST_MEMBER_ADDED(0x06),
LIST_CREATED(0x07), FAVORITED_RETWEET(0x08), RETWEETED_RETWEET(0x09);
User[] getTargetObjectUsers();
public final static int ACTION_FAVORITE = 0x01;
public final static int ACTION_FOLLOW = 0x02;
public final static int ACTION_MENTION = 0x03;
public final static int ACTION_REPLY = 0x04;
public final static int ACTION_RETWEET = 0x05;
public final static int ACTION_LIST_MEMBER_ADDED = 0x06;
public final static int ACTION_LIST_CREATED = 0x07;
public final static int ACTION_FAVORITED_RETWEET = 0x08;
public final static int ACTION_RETWEETED_RETWEET = 0x09;
enum Action {
FAVORITE(ACTION_FAVORITE), FOLLOW(ACTION_FOLLOW), MENTION(ACTION_MENTION), REPLY(ACTION_REPLY),
RETWEET(ACTION_RETWEET), LIST_MEMBER_ADDED(ACTION_LIST_MEMBER_ADDED), LIST_CREATED(ACTION_LIST_CREATED),
FAVORITED_RETWEET(ACTION_FAVORITED_RETWEET), RETWEETED_RETWEET(ACTION_RETWEETED_RETWEET), QUOTE(ACTION_QUOTE);
private final int actionId;
@ -83,6 +88,7 @@ public interface Activity extends TwitterResponse, Comparable<Activity> {
if ("list_created".equalsIgnoreCase(string)) return LIST_CREATED;
if ("favorited_retweet".equalsIgnoreCase(string)) return FAVORITED_RETWEET;
if ("retweeted_retweet".equalsIgnoreCase(string)) return RETWEETED_RETWEET;
if ("quote".equalsIgnoreCase(string)) return QUOTE;
throw new IllegalArgumentException("Unknown action " + string);
}
}

View File

@ -101,6 +101,8 @@ public class ActivityImpl extends TwitterResponseImpl implements Activity {
if (instance.action == null) throw new IOException();
if (instance.action == Action.LIST_MEMBER_ADDED) {
instance.targetObjectUserLists = LoganSquare.mapperFor(UserList.class).parseList(jsonParser).toArray(new UserList[instance.targetObjectsSize]);
} else if (instance.action == Action.RETWEETED_RETWEET) {
instance.targetObjectUsers = LoganSquare.mapperFor(User.class).parseList(jsonParser).toArray(new User[instance.targetObjectsSize]);
} else {
instance.targetObjectStatuses = LoganSquare.mapperFor(Status.class).parseList(jsonParser).toArray(new Status[instance.targetObjectsSize]);
}
@ -112,7 +114,15 @@ public class ActivityImpl extends TwitterResponseImpl implements Activity {
private Date createdAt;
private User[] sources, targetUsers;
private User[] sources;
private User[] targetUsers;
@Override
public User[] getTargetObjectUsers() {
return targetObjectUsers;
}
private User[] targetObjectUsers;
private Status[] targetObjectStatuses, targetStatuses;

View File

@ -80,6 +80,7 @@ dependencies {
compile 'com.github.boxme:asyncmanager:1.0.0'
compile 'com.sprylab.android.texturevideoview:texturevideoview:1.0.0'
compile 'com.squareup:pollexor:2.0.2'
compile 'com.squareup:tape:1.2.3'
compile 'org.apache.commons:commons-lang3:3.4'
compile 'com.bluelinelabs:logansquare:1.1.0'
compile 'ch.acra:acra:4.6.2'

View File

@ -0,0 +1,64 @@
/*
* Twidere - Twitter client for Android
*
* Copyright (C) 2012-2015 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 edu.tsinghua.hotmobi;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;
import edu.tsinghua.hotmobi.model.BaseEvent;
import edu.tsinghua.hotmobi.model.FirstLaunchEvent;
import edu.tsinghua.hotmobi.model.RefreshEvent;
import edu.tsinghua.hotmobi.model.SessionEvent;
import edu.tsinghua.hotmobi.model.TweetEvent;
/**
* Created by mariotaku on 15/8/10.
*/
public class HotMobiLogger {
private final Executor mExecutor;
HotMobiLogger() {
mExecutor = Executors.newSingleThreadExecutor();
}
public void log(BaseEvent event) {
mExecutor.execute(new Runnable() {
@Override
public void run() {
}
});
}
private static String getLogFilename(BaseEvent event) {
if (event instanceof FirstLaunchEvent) {
return "first_launch";
} else if (event instanceof RefreshEvent) {
return "refresh";
} else if (event instanceof SessionEvent) {
return "session";
} else if (event instanceof TweetEvent) {
return "tweet";
}
return null;
}
}

View File

@ -34,6 +34,7 @@ import android.widget.TextView;
import org.mariotaku.twidere.Constants;
import org.mariotaku.twidere.R;
import org.mariotaku.twidere.adapter.iface.IActivitiesAdapter;
import org.mariotaku.twidere.api.twitter.model.Activity;
import org.mariotaku.twidere.app.TwidereApplication;
import org.mariotaku.twidere.fragment.support.UserFragment;
import org.mariotaku.twidere.model.ParcelableActivity;
@ -177,7 +178,7 @@ public abstract class AbsActivitiesAdapter<Data> extends LoadMoreSupportAdapter<
public void onStatusClick(StatusViewHolder holder, int position) {
final ParcelableActivity activity = getActivity(position);
final ParcelableStatus status;
if (activity.action == ParcelableActivity.ACTION_MENTION) {
if (activity.action == Activity.ACTION_MENTION) {
status = activity.target_object_statuses[0];
} else {
status = activity.target_statuses[0];
@ -195,7 +196,7 @@ public abstract class AbsActivitiesAdapter<Data> extends LoadMoreSupportAdapter<
final Context context = getContext();
final ParcelableActivity activity = getActivity(position);
final ParcelableStatus status;
if (activity.action == ParcelableActivity.ACTION_MENTION) {
if (activity.action == Activity.ACTION_MENTION) {
status = activity.target_object_statuses[0];
} else {
status = activity.target_statuses[0];
@ -265,7 +266,7 @@ public abstract class AbsActivitiesAdapter<Data> extends LoadMoreSupportAdapter<
case ITEM_VIEW_TYPE_STATUS: {
final ParcelableActivity activity = getActivity(position);
final ParcelableStatus status;
if (activity.action == ParcelableActivity.ACTION_MENTION) {
if (activity.action == Activity.ACTION_MENTION) {
status = activity.target_object_statuses[0];
} else {
status = activity.target_statuses[0];
@ -298,16 +299,17 @@ public abstract class AbsActivitiesAdapter<Data> extends LoadMoreSupportAdapter<
return ITEM_VIEW_TYPE_GAP;
}
switch (getActivityAction(position)) {
case ParcelableActivity.ACTION_MENTION:
case ParcelableActivity.ACTION_REPLY: {
case Activity.ACTION_MENTION:
case Activity.ACTION_REPLY:
case Activity.ACTION_QUOTE: {
return ITEM_VIEW_TYPE_STATUS;
}
case ParcelableActivity.ACTION_FOLLOW:
case ParcelableActivity.ACTION_FAVORITE:
case ParcelableActivity.ACTION_RETWEET:
case ParcelableActivity.ACTION_FAVORITED_RETWEET:
case ParcelableActivity.ACTION_RETWEETED_RETWEET:
case ParcelableActivity.ACTION_LIST_MEMBER_ADDED: {
case Activity.ACTION_FOLLOW:
case Activity.ACTION_FAVORITE:
case Activity.ACTION_RETWEET:
case Activity.ACTION_FAVORITED_RETWEET:
case Activity.ACTION_RETWEETED_RETWEET:
case Activity.ACTION_LIST_MEMBER_ADDED: {
return ITEM_VIEW_TYPE_TITLE_SUMMARY;
}
}

View File

@ -36,16 +36,6 @@ import java.util.Arrays;
@JsonObject
public class ParcelableActivity implements Comparable<ParcelableActivity>, Parcelable {
public final static int ACTION_FAVORITE = Activity.Action.ACTION_FAVORITE;
public final static int ACTION_FOLLOW = Activity.Action.ACTION_FOLLOW;
public final static int ACTION_MENTION = Activity.Action.ACTION_MENTION;
public final static int ACTION_REPLY = Activity.Action.ACTION_REPLY;
public final static int ACTION_RETWEET = Activity.Action.ACTION_RETWEET;
public final static int ACTION_LIST_MEMBER_ADDED = Activity.Action.ACTION_LIST_MEMBER_ADDED;
public final static int ACTION_LIST_CREATED = Activity.Action.ACTION_LIST_CREATED;
public final static int ACTION_FAVORITED_RETWEET = Activity.Action.ACTION_FAVORITED_RETWEET;
public final static int ACTION_RETWEETED_RETWEET = Activity.Action.ACTION_RETWEETED_RETWEET;
public static final Creator<ParcelableActivity> CREATOR = new Creator<ParcelableActivity>() {
@Override
public ParcelableActivity createFromParcel(Parcel source) {
@ -94,6 +84,9 @@ public class ParcelableActivity implements Comparable<ParcelableActivity>, Parce
@JsonField(name = "target_object_statuses")
public ParcelableStatus[] target_object_statuses;
@ParcelableThisPlease
@JsonField(name = "target_object_users")
public ParcelableUser[] target_object_users;
@ParcelableThisPlease
@JsonField(name = "is_gap")
public boolean is_gap;
@ -112,6 +105,7 @@ public class ParcelableActivity implements Comparable<ParcelableActivity>, Parce
target_statuses = ParcelableStatus.fromStatuses(activity.getTargetStatuses(), account_id);
target_object_statuses = ParcelableStatus.fromStatuses(activity.getTargetObjectStatuses(), account_id);
target_object_user_lists = ParcelableUserList.fromUserLists(activity.getTargetObjectUserLists(), account_id);
target_object_users = ParcelableUser.fromUsers(activity.getTargetObjectUsers(), account_id);
this.is_gap = is_gap;
}
@ -119,6 +113,24 @@ public class ParcelableActivity implements Comparable<ParcelableActivity>, Parce
ParcelableActivityParcelablePlease.readFromParcel(this, src);
}
@Override
public String toString() {
return "ParcelableActivity{" +
"account_id=" + account_id +
", timestamp=" + timestamp +
", max_position=" + max_position +
", min_position=" + min_position +
", action=" + action +
", sources=" + Arrays.toString(sources) +
", target_users=" + Arrays.toString(target_users) +
", target_statuses=" + Arrays.toString(target_statuses) +
", target_user_lists=" + Arrays.toString(target_user_lists) +
", target_object_user_lists=" + Arrays.toString(target_object_user_lists) +
", target_object_statuses=" + Arrays.toString(target_object_statuses) +
", target_object_users=" + Arrays.toString(target_object_users) +
", is_gap=" + is_gap +
'}';
}
@Override
public int compareTo(@NonNull final ParcelableActivity another) {
@ -135,17 +147,6 @@ public class ParcelableActivity implements Comparable<ParcelableActivity>, Parce
return max_position == activity.max_position && min_position == activity.min_position;
}
@Override
public String toString() {
return "ParcelableActivity{account_id=" + account_id + ", timestamp=" + timestamp
+ ", max_position=" + max_position + ", min_position=" + min_position + ", action=" + action
+ ", sources=" + Arrays.toString(sources) + ", target_users=" + Arrays.toString(target_users)
+ ", target_statuses=" + Arrays.toString(target_statuses) + ", target_user_lists="
+ Arrays.toString(target_user_lists) + ", target_object_user_lists="
+ Arrays.toString(target_object_user_lists) + ", target_object_statuses="
+ Arrays.toString(target_object_statuses) + "}";
}
@Override
public int describeContents() {

View File

@ -360,6 +360,7 @@ public class TwitterAPIFactory implements TwidereConstants {
sExtraParams.put("include_reply_count", "true");
sExtraParams.put("include_descendent_reply_count", "true");
sExtraParams.put("full_text", "true");
sExtraParams.put("model_version", "7");
}

View File

@ -35,6 +35,7 @@ import android.widget.TextView;
import org.mariotaku.twidere.R;
import org.mariotaku.twidere.adapter.AbsActivitiesAdapter;
import org.mariotaku.twidere.api.twitter.model.Activity;
import org.mariotaku.twidere.model.ParcelableActivity;
import org.mariotaku.twidere.model.ParcelableUser;
import org.mariotaku.twidere.util.MediaLoaderWrapper;
@ -76,7 +77,7 @@ public class ActivityTitleSummaryViewHolder extends ViewHolder {
final Context context = adapter.getContext();
final Resources resources = adapter.getContext().getResources();
switch (activity.action) {
case ParcelableActivity.ACTION_FOLLOW: {
case Activity.ACTION_FOLLOW: {
activityTypeView.setImageResource(R.drawable.ic_activity_action_follow);
activityTypeView.setColorFilter(resources.getColor(R.color.highlight_follow), Mode.SRC_ATOP);
titleView.setText(getTitleStringAboutMe(R.string.activity_about_me_follow,
@ -85,7 +86,7 @@ public class ActivityTitleSummaryViewHolder extends ViewHolder {
summaryView.setVisibility(View.GONE);
break;
}
case ParcelableActivity.ACTION_FAVORITE: {
case Activity.ACTION_FAVORITE: {
activityTypeView.setImageResource(R.drawable.ic_activity_action_favorite);
activityTypeView.setColorFilter(resources.getColor(R.color.highlight_favorite), Mode.SRC_ATOP);
titleView.setText(getTitleStringAboutMe(R.string.activity_about_me_favorite,
@ -95,7 +96,7 @@ public class ActivityTitleSummaryViewHolder extends ViewHolder {
summaryView.setVisibility(View.VISIBLE);
break;
}
case ParcelableActivity.ACTION_RETWEET: {
case Activity.ACTION_RETWEET: {
activityTypeView.setImageResource(R.drawable.ic_activity_action_retweet);
activityTypeView.setColorFilter(resources.getColor(R.color.highlight_retweet), Mode.SRC_ATOP);
titleView.setText(getTitleStringAboutMe(R.string.activity_about_me_retweet,
@ -105,7 +106,7 @@ public class ActivityTitleSummaryViewHolder extends ViewHolder {
summaryView.setVisibility(View.VISIBLE);
break;
}
case ParcelableActivity.ACTION_FAVORITED_RETWEET: {
case Activity.ACTION_FAVORITED_RETWEET: {
activityTypeView.setImageResource(R.drawable.ic_activity_action_favorite);
activityTypeView.setColorFilter(resources.getColor(R.color.highlight_favorite), Mode.SRC_ATOP);
titleView.setText(getTitleStringAboutMe(R.string.activity_about_me_favorited_retweet,
@ -115,7 +116,7 @@ public class ActivityTitleSummaryViewHolder extends ViewHolder {
summaryView.setVisibility(View.VISIBLE);
break;
}
case ParcelableActivity.ACTION_RETWEETED_RETWEET: {
case Activity.ACTION_RETWEETED_RETWEET: {
activityTypeView.setImageResource(R.drawable.ic_activity_action_retweet);
activityTypeView.setColorFilter(resources.getColor(R.color.highlight_retweet), Mode.SRC_ATOP);
titleView.setText(getTitleStringAboutMe(R.string.activity_about_me_retweeted_retweet,
@ -125,7 +126,7 @@ public class ActivityTitleSummaryViewHolder extends ViewHolder {
summaryView.setVisibility(View.VISIBLE);
break;
}
case ParcelableActivity.ACTION_LIST_MEMBER_ADDED: {
case Activity.ACTION_LIST_MEMBER_ADDED: {
activityTypeView.setImageResource(R.drawable.ic_activity_action_list_added);
activityTypeView.setColorFilter(activityTypeView.getDefaultColor(), Mode.SRC_ATOP);
if (activity.sources.length == 1 && activity.target_object_user_lists != null

View File

@ -26,15 +26,15 @@
tools:layout_height="160dp"
tools:layout_width="280dp">
<ImageView
<org.mariotaku.twidere.view.ForegroundImageView
android:id="@+id/account_profile_banner"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignBottom="@id/profile_container"
android:layout_alignTop="@id/profile_container"
android:alpha="0.5"
android:contentDescription="@string/profile_banner"
android:focusable="false"
android:foreground="@color/drawer_banner_foreground"
android:scaleType="centerCrop"
tools:src="@drawable/nyan_stars_background" />
@ -77,7 +77,8 @@
android:layout_marginBottom="@dimen/element_spacing_large"
android:layout_toEndOf="@id/profile_image"
android:layout_toRightOf="@id/profile_image"
android:focusable="false" />
android:focusable="false"
tools:visibility="invisible" />
<LinearLayout
android:layout_width="match_parent"
@ -103,7 +104,7 @@
android:focusable="false"
android:singleLine="true"
android:textAppearance="?android:textAppearanceSmall"
android:textColor="?android:textColorPrimary"
android:textColor="?attr/textColorDrawerNamePrimary"
android:textStyle="bold"
tools:text="Name" />
@ -114,7 +115,7 @@
android:focusable="false"
android:singleLine="true"
android:textAppearance="?android:textAppearanceSmall"
android:textColor="?android:textColorSecondary"
android:textColor="?textColorDrawerNameSecondary"
tools:text="\@username" />
</LinearLayout>
@ -152,7 +153,8 @@
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/profile_container"
android:layout_alignTop="@+id/profile_container"
android:clickable="true">
android:clickable="true"
tools:visibility="gone">
<TextView
android:layout_width="wrap_content"

View File

@ -11,6 +11,8 @@
<attr name="messageBubbleColor" format="color"/>
<attr name="cardItemBackgroundColor" format="color"/>
<attr name="linePageIndicatorStyle" format="reference"/>
<attr name="textColorDrawerNamePrimary" format="color"/>
<attr name="textColorDrawerNameSecondary" format="color"/>
</declare-styleable>
<declare-styleable name="ColorLabelView">
<attr name="ignorePadding" format="boolean"/>

View File

@ -36,5 +36,6 @@
<color name="background_color_card_item_light">#fafafa</color>
<color name="background_color_action_bar_dark">#212121</color>
<color name="bg_color_video_playback_progress">#A0000000</color>
<color name="drawer_banner_foreground">#80000000</color>
</resources>

View File

@ -254,11 +254,15 @@
<style name="Theme.Twidere.Drawer.Dark" parent="Theme.Twidere.Dark.NoActionBar">
<!-- Window attributes -->
<item name="android:windowBackground">@color/bg_color_drawer_dark</item>
<item name="textColorDrawerNamePrimary">?android:textColorPrimary</item>
<item name="textColorDrawerNameSecondary">?android:textColorSecondary</item>
</style>
<style name="Theme.Twidere.Drawer.Light" parent="Theme.Twidere.Light.NoActionBar">
<!-- Window attributes -->
<item name="android:windowBackground">@color/bg_color_drawer_light</item>
<item name="textColorDrawerNamePrimary">?android:textColorPrimaryInverse</item>
<item name="textColorDrawerNameSecondary">?android:textColorSecondaryInverse</item>
</style>
<style name="Theme.Twidere.Dark.NoDisplay" parent="Theme.Twidere.Dark.NoActionBar">