use of com.github.moko256.latte.client.base.entity.Status in project twicalico by moko256.
the class ShowTweetActivity method onCreate.
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_show_tweet);
subscriptions = new CompositeSubscription();
ActionBar actionBar = getSupportActionBar();
if (actionBar != null) {
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setHomeAsUpIndicator(R.drawable.ic_back_white_24dp);
}
statusId = getIntent().getLongExtra("statusId", -1);
if (statusId == -1) {
ShowTweetActivity.this.finish();
return;
}
Status status = GlobalApplication.statusCache.get(statusId);
if (status == null) {
subscriptions.add(updateStatus().subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(result -> {
if (result == null) {
finish();
return;
}
updateView(result);
}, e -> {
e.printStackTrace();
finish();
}));
} else {
updateView(status);
}
SwipeRefreshLayout swipeRefreshLayout = findViewById(R.id.tweet_show_swipe_refresh);
swipeRefreshLayout.setColorSchemeResources(R.color.color_primary);
swipeRefreshLayout.setOnRefreshListener(() -> subscriptions.add(updateStatus().subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(result -> {
if (result == null) {
finish();
return;
}
updateView(result);
swipeRefreshLayout.setRefreshing(false);
}, e -> {
e.printStackTrace();
Toast.makeText(this, R.string.error_occurred, Toast.LENGTH_SHORT).show();
swipeRefreshLayout.setRefreshing(false);
})));
}
use of com.github.moko256.latte.client.base.entity.Status in project twicalico by moko256.
the class StatusView method updateView.
private void updateView() {
final Status item = status.isRetweet() ? status.getRetweetedStatus() : status;
if (status.isRetweet()) {
if (retweetUserName.getVisibility() != View.VISIBLE) {
retweetUserName.setVisibility(View.VISIBLE);
}
retweetUserName.setText(getContext().getString(R.string.repeat_by, status.getUser().getName()));
} else {
if (retweetUserName.getVisibility() != View.GONE) {
retweetUserName.setVisibility(View.GONE);
}
}
boolean isReply = item.getInReplyToScreenName() != null;
if (isReply) {
if (replyUserName.getVisibility() != View.VISIBLE) {
replyUserName.setVisibility(View.VISIBLE);
}
replyUserName.setText(getContext().getString((item.getInReplyToStatusId() != -1) ? R.string.reply_to : R.string.mention_to, item.getInReplyToScreenName()));
} else {
if (replyUserName.getVisibility() != View.GONE) {
replyUserName.setVisibility(View.GONE);
}
}
if (status.isRetweet() || isReply) {
if (headerBottomMargin.getVisibility() != VISIBLE) {
headerBottomMargin.setVisibility(VISIBLE);
}
} else {
if (headerBottomMargin.getVisibility() != GONE) {
headerBottomMargin.setVisibility(GONE);
}
}
if (GlobalApplication.configuration.isTimelineImageLoad) {
glideRequests.load(item.getUser().get400x400ProfileImageURLHttps()).circleCrop().into(userImage);
} else {
userImage.setImageResource(R.drawable.border_frame_round);
}
userName.setText(item.getUser().getName());
userId.setText(TwitterStringUtils.plusAtMark(item.getUser().getScreenName()));
TwitterStringUtils.setLinkedSequenceTo(item, tweetContext);
if (!tweetContext.getText().toString().trim().isEmpty()) {
tweetContext.setMovementMethod(LinkMovementMethod.getInstance());
if (tweetContext.getVisibility() != VISIBLE) {
tweetContext.setVisibility(VISIBLE);
}
} else {
tweetContext.setMovementMethod(null);
if (tweetContext.getVisibility() != GONE) {
tweetContext.setVisibility(GONE);
}
}
timeStampText.setText(DateUtils.getRelativeTimeSpanString(item.getCreatedAt().getTime(), System.currentTimeMillis(), 0));
userImage.setOnClickListener(v -> {
ActivityOptionsCompat animation = ActivityOptionsCompat.makeSceneTransitionAnimation(((Activity) getContext()), v, "icon_image");
getContext().startActivity(ShowUserActivity.getIntent(getContext(), item.getUser().getId()), animation.toBundle());
});
setOnClickListener(v -> {
ActivityOptionsCompat animation = ActivityOptionsCompat.makeSceneTransitionAnimation(((Activity) getContext()), userImage, "icon_image");
getContext().startActivity(ShowTweetActivity.getIntent(getContext(), item.getId()), animation.toBundle());
});
Status quotedStatus = item.getQuotedStatus();
if (quotedStatus != null) {
if (quoteTweetLayout.getVisibility() != View.VISIBLE) {
quoteTweetLayout.setVisibility(View.VISIBLE);
}
quoteTweetLayout.setOnClickListener(v -> getContext().startActivity(ShowTweetActivity.getIntent(getContext(), quotedStatus.getId())));
quoteTweetUserName.setText(quotedStatus.getUser().getName());
quoteTweetUserId.setText(TwitterStringUtils.plusAtMark(quotedStatus.getUser().getScreenName()));
quoteTweetContext.setText(quotedStatus.getText());
} else {
if (quoteTweetLayout.getVisibility() != View.GONE) {
quoteTweetLayout.setVisibility(View.GONE);
}
}
MediaEntity[] mediaEntities = item.getMediaEntities();
if (mediaEntities.length != 0) {
imageTableView.setVisibility(View.VISIBLE);
imageTableView.setMediaEntities(mediaEntities, item.isPossiblySensitive());
} else {
imageTableView.setVisibility(View.GONE);
}
likeButton.setOnCheckedChangeListener((compoundButton, b) -> Single.create(subscriber -> {
try {
if (b && (!item.isFavorited())) {
subscriber.onSuccess(GlobalApplication.twitter.createFavorite(item.getId()));
} else if ((!b) && item.isFavorited()) {
subscriber.onSuccess(GlobalApplication.twitter.destroyFavorite(item.getId()));
}
} catch (TwitterException e) {
subscriber.onError(e);
}
}).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(result -> {
Status status = (Status) result;
GlobalApplication.statusCache.add(status);
setStatus(GlobalApplication.statusCache.get(this.status.getId()));
Toast.makeText(getContext(), R.string.succeeded, Toast.LENGTH_SHORT).show();
}, throwable -> {
throwable.printStackTrace();
Toast.makeText(getContext(), R.string.error_occurred, Toast.LENGTH_SHORT).show();
}));
likeButton.setChecked(item.isFavorited());
retweetButton.setOnCheckedChangeListener((compoundButton, b) -> Single.create(subscriber -> {
try {
if (b && (!item.isRetweeted())) {
subscriber.onSuccess(GlobalApplication.twitter.retweetStatus(item.getId()));
} else if ((!b) && item.isRetweeted()) {
subscriber.onSuccess(GlobalApplication.twitter.unRetweetStatus(item.getId()));
}
} catch (TwitterException e) {
subscriber.onError(e);
}
}).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(result -> {
Status status = (Status) result;
GlobalApplication.statusCache.add(status);
setStatus(GlobalApplication.statusCache.get(this.status.getId()));
Toast.makeText(getContext(), R.string.succeeded, Toast.LENGTH_SHORT).show();
}, throwable -> {
throwable.printStackTrace();
Toast.makeText(getContext(), R.string.error_occurred, Toast.LENGTH_SHORT).show();
}));
retweetButton.setChecked(item.isRetweeted());
retweetButton.setEnabled(GlobalApplication.clientType == Type.MASTODON || !(item.getUser().isProtected()) || item.getUser().getId() == GlobalApplication.userId);
replyButton.setOnClickListener(v -> getContext().startActivity(PostActivity.getIntent(getContext(), item.getId(), TwitterStringUtils.convertToReplyTopString(GlobalApplication.userCache.get(GlobalApplication.userId).getScreenName(), item.getUser().getScreenName(), item.getUserMentionEntities()).toString())));
likeCount.setText((item.getFavoriteCount() != 0) ? TwitterStringUtils.convertToSIUnitString(item.getFavoriteCount()) : "");
retweetCount.setText((item.getRetweetCount() != 0) ? TwitterStringUtils.convertToSIUnitString(item.getRetweetCount()) : "");
}
use of com.github.moko256.latte.client.base.entity.Status in project twicalico by moko256.
the class BaseTweetListFragment method onCreateView.
@Override
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = super.onCreateView(inflater, container, savedInstanceState);
int dp8 = Math.round(8f * getResources().getDisplayMetrics().density);
getRecyclerView().setPadding(dp8, 0, 0, 0);
getRecyclerView().addItemDecoration(new RecyclerView.ItemDecoration() {
@Override
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
outRect.right = dp8;
outRect.top = dp8;
}
});
if (getActivity() instanceof GetRecyclerViewPool) {
getRecyclerView().setRecycledViewPool(((GetRecyclerViewPool) getActivity()).getTweetListViewPool());
}
adapter = new StatusesAdapter(getContext(), list);
adapter.setOnLoadMoreClick(position -> subscription.add(getResponseSingle(new Paging().maxId(list.get(position - 1) - 1L).sinceId(list.get(list.size() >= position + 2 ? position + 2 : position + 1)).count(GlobalApplication.statusLimit)).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(result -> {
if (result.size() > 0) {
list.remove(position);
statusIdsDatabase.deleteIds(ArrayUtils.convertToLongList(-1L));
adapter.notifyItemRemoved(position);
List<Long> ids = Observable.from(result).map(Status::getId).toList().toSingle().toBlocking().value();
if (ids.get(ids.size() - 1).equals(list.get(position))) {
ids.remove(ids.size() - 1);
} else {
ids.add(-1L);
}
list.addAll(position, ids);
statusIdsDatabase.insertIds(position, ids);
adapter.notifyItemRangeInserted(position, ids.size());
} else {
list.remove(position);
statusIdsDatabase.deleteIds(ArrayUtils.convertToLongList(-1L));
adapter.notifyItemRemoved(position);
}
}, e -> {
e.printStackTrace();
Snackbar.make(getSnackBarParentContainer(), TwitterStringUtils.convertErrorToText(e), Snackbar.LENGTH_INDEFINITE).setAction(R.string.retry, v -> onLoadMoreList()).show();
})));
setAdapter(adapter);
if (!isInitializedList()) {
adapter.notifyDataSetChanged();
}
LAST_SAVED_LIST_POSITION = statusIdsDatabase.getListViewPosition();
getRecyclerView().getLayoutManager().scrollToPosition(LAST_SAVED_LIST_POSITION);
return view;
}
use of com.github.moko256.latte.client.base.entity.Status in project twicalico by moko256.
the class CachedStatusesSQLiteOpenHelperTest method updateCacheTest.
private void updateCacheTest() {
helper.addCachedStatus(generateStatus(TEST_DUMMY_STATUS_ID_1, TEST_DUMMY_STATUS_TEXT_1), false);
StatusObject updatedStatusResult = helper.getCachedStatus(TEST_DUMMY_STATUS_ID_1);
assertEquals(((Status) updatedStatusResult).getText(), TEST_DUMMY_STATUS_TEXT_1);
}
use of com.github.moko256.latte.client.base.entity.Status in project twicalico by moko256.
the class ShowTweetActivity method updateView.
private void updateView(Status item) {
TextView tweetIsReply = findViewById(R.id.tweet_show_is_reply_text);
long replyTweetId = item.getInReplyToStatusId();
if (replyTweetId != -1) {
tweetIsReply.setVisibility(VISIBLE);
tweetIsReply.setOnClickListener(v -> startActivity(getIntent(this, replyTweetId)));
} else {
tweetIsReply.setVisibility(GONE);
}
StatusView statusView = new StatusView(this);
statusView.setStatus(item);
ViewGroup cview = (ViewGroup) statusView.getChildAt(0);
ViewGroup sview = (ViewGroup) cview.getChildAt(0);
cview.removeView(sview);
FrameLayout statusViewFrame = findViewById(R.id.tweet_show_tweet);
statusViewFrame.removeAllViews();
statusViewFrame.addView(sview);
((TextView) findViewById(R.id.tweet_show_timestamp)).setText(DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.FULL).format(item.getCreatedAt()));
TextView viaText = findViewById(R.id.tweet_show_via);
viaText.setText(TwitterStringUtils.convertUrlSpanToCustomTabs(Html.fromHtml("via:" + item.getSource()), this));
viaText.setMovementMethod(new LinkMovementMethod());
AppCompatEditText replyText = findViewById(R.id.tweet_show_tweet_reply_text);
AppCompatButton replyButton = findViewById(R.id.tweet_show_tweet_reply_button);
UserMentionEntity[] users = item.getUserMentionEntities();
replyText.setText(TwitterStringUtils.convertToReplyTopString(GlobalApplication.userCache.get(GlobalApplication.userId).getScreenName(), item.getUser().getScreenName(), users));
replyButton.setOnClickListener(v -> {
replyButton.setEnabled(false);
PostTweetModel model = PostTweetModelCreator.getInstance(GlobalApplication.twitter, getContentResolver());
model.setTweetText(replyText.getText().toString());
model.setInReplyToStatusId(item.getId());
subscriptions.add(model.postTweet().subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(it -> {
replyText.setText(TwitterStringUtils.convertToReplyTopString(GlobalApplication.userCache.get(GlobalApplication.userId).getScreenName(), item.getUser().getScreenName(), users));
replyButton.setEnabled(true);
Toast.makeText(ShowTweetActivity.this, R.string.succeeded, Toast.LENGTH_SHORT).show();
}, e -> {
e.printStackTrace();
Toast.makeText(ShowTweetActivity.this, R.string.error_occurred, Toast.LENGTH_SHORT).show();
replyButton.setEnabled(true);
}));
});
}
Aggregations