diff options
author | Kazuki Yamaguchi <k@rhe.jp> | 2015-09-23 00:12:39 +0900 |
---|---|---|
committer | Kazuki Yamaguchi <k@rhe.jp> | 2015-09-23 00:12:39 +0900 |
commit | be8fa9c1b0a732659c4501178f651708c6f6dd4a (patch) | |
tree | 722a012aaf294021b638c7f8f66bcb4b2add3792 /app/src/main/java/net/lacolaco/smileessence/view | |
parent | f44d5800abfee1fe45a4712d8674837b9f405e1a (diff) | |
download | SmileEssence-be8fa9c1b0a732659c4501178f651708c6f6dd4a.tar.gz |
RT をトグれるように(りぐれっしょん)
Diffstat (limited to 'app/src/main/java/net/lacolaco/smileessence/view')
5 files changed, 83 insertions, 151 deletions
diff --git a/app/src/main/java/net/lacolaco/smileessence/view/HomeFragment.java b/app/src/main/java/net/lacolaco/smileessence/view/HomeFragment.java index d22fd018..1969d107 100644 --- a/app/src/main/java/net/lacolaco/smileessence/view/HomeFragment.java +++ b/app/src/main/java/net/lacolaco/smileessence/view/HomeFragment.java @@ -73,7 +73,6 @@ public class HomeFragment extends CustomListFragment<StatusListAdapter> { for (Tweet tweet : tweets) { StatusViewModel statusViewModel = new StatusViewModel(tweet); adapter.addToBottom(statusViewModel); - StatusFilter.getInstance().filter(statusViewModel); } adapter.updateForce(); }).execute(); diff --git a/app/src/main/java/net/lacolaco/smileessence/view/adapter/CustomListAdapter.java b/app/src/main/java/net/lacolaco/smileessence/view/adapter/CustomListAdapter.java index 239b51b3..b79cb83a 100644 --- a/app/src/main/java/net/lacolaco/smileessence/view/adapter/CustomListAdapter.java +++ b/app/src/main/java/net/lacolaco/smileessence/view/adapter/CustomListAdapter.java @@ -28,6 +28,7 @@ import android.app.Activity; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; +import android.widget.ListAdapter; import net.lacolaco.smileessence.util.UIHandler; import net.lacolaco.smileessence.viewmodel.IViewModel; @@ -43,7 +44,7 @@ public class CustomListAdapter<T extends IViewModel> extends BaseAdapter { protected final Object LOCK = new Object(); protected ArrayList<T> list = new ArrayList<>(); protected List<T> frozenList = new ArrayList<>(); - protected boolean isNotifiable = true; + private boolean isNotifiable = true; protected Activity activity; // --------------------------- CONSTRUCTORS --------------------------- @@ -81,7 +82,7 @@ public class CustomListAdapter<T extends IViewModel> extends BaseAdapter { // --------------------- Interface Adapter --------------------- @Override - public Object getItem(int position) { + public T getItem(int position) { return frozenList.get(position); } @@ -92,7 +93,7 @@ public class CustomListAdapter<T extends IViewModel> extends BaseAdapter { @Override public View getView(int position, View convertView, ViewGroup parent) { - return ((T) getItem(position)).getView(activity, activity.getLayoutInflater(), convertView); + return getItem(position).getView(activity, activity.getLayoutInflater(), convertView); } // ------------------------ OVERRIDE METHODS ------------------------ @@ -100,7 +101,7 @@ public class CustomListAdapter<T extends IViewModel> extends BaseAdapter { @Override public void notifyDataSetChanged() { sort(); - frozenList = Collections.unmodifiableList((ArrayList) list.clone()); + frozenList = Collections.unmodifiableList(new ArrayList<>(list)); super.notifyDataSetChanged(); } @@ -152,7 +153,7 @@ public class CustomListAdapter<T extends IViewModel> extends BaseAdapter { } public void update() { - if (isNotifiable) { + if (isNotifiable()) { updateForce(); } } diff --git a/app/src/main/java/net/lacolaco/smileessence/view/adapter/MessageListAdapter.java b/app/src/main/java/net/lacolaco/smileessence/view/adapter/MessageListAdapter.java index 6a9d4215..f42536d3 100644 --- a/app/src/main/java/net/lacolaco/smileessence/view/adapter/MessageListAdapter.java +++ b/app/src/main/java/net/lacolaco/smileessence/view/adapter/MessageListAdapter.java @@ -42,44 +42,19 @@ public class MessageListAdapter extends CustomListAdapter<MessageViewModel> { // --------------------- GETTER / SETTER METHODS --------------------- public long getLastID() { - return ((MessageViewModel) getItem(getCount() - 1)).getDirectMessage().getId(); + return getItem(getCount() - 1).getDirectMessage().getId(); } public long getTopID() { - return ((MessageViewModel) getItem(0)).getDirectMessage().getId(); + return getItem(0).getDirectMessage().getId(); } // ------------------------ OVERRIDE METHODS ------------------------ @Override - public void addToBottom(MessageViewModel... items) { - for (MessageViewModel item : items) { - if (!preAdd(item)) { - continue; - } - super.addToBottom(items); - } - } - - @Override - public void addToTop(MessageViewModel... items) { - for (MessageViewModel item : items) { - if (!preAdd(item)) { - continue; - } - super.addToTop(items); - } - } - - @Override public void sort() { synchronized (LOCK) { - Collections.sort(list, new Comparator<MessageViewModel>() { - @Override - public int compare(MessageViewModel lhs, MessageViewModel rhs) { - return rhs.getDirectMessage().getCreatedAt().compareTo(lhs.getDirectMessage().getCreatedAt()); - } - }); + Collections.sort(list, (lhs, rhs) -> rhs.getDirectMessage().getCreatedAt().compareTo(lhs.getDirectMessage().getCreatedAt())); } } @@ -98,9 +73,4 @@ public class MessageListAdapter extends CustomListAdapter<MessageViewModel> { return null; } } - - private boolean preAdd(MessageViewModel item) { - removeByMessageID(item.getDirectMessage().getId()); - return true; - } } diff --git a/app/src/main/java/net/lacolaco/smileessence/view/adapter/StatusListAdapter.java b/app/src/main/java/net/lacolaco/smileessence/view/adapter/StatusListAdapter.java index 8992170a..490f9f97 100644 --- a/app/src/main/java/net/lacolaco/smileessence/view/adapter/StatusListAdapter.java +++ b/app/src/main/java/net/lacolaco/smileessence/view/adapter/StatusListAdapter.java @@ -44,7 +44,7 @@ public class StatusListAdapter extends CustomListAdapter<StatusViewModel> { public long getLastID() { if (getCount() > 0) { - return ((StatusViewModel) getItem(getCount() - 1)).getTweet().getId(); + return getItem(getCount() - 1).getTweet().getId(); } else { return Long.MAX_VALUE; } @@ -52,7 +52,7 @@ public class StatusListAdapter extends CustomListAdapter<StatusViewModel> { public long getTopID() { if (getCount() > 0) { - return ((StatusViewModel) getItem(0)).getTweet().getId(); + return getItem(0).getTweet().getId(); } else { return -1; } @@ -60,38 +60,13 @@ public class StatusListAdapter extends CustomListAdapter<StatusViewModel> { // ------------------------ OVERRIDE METHODS ------------------------ - @Override - public void addToBottom(StatusViewModel... items) { - for (StatusViewModel item : items) { - if (!preAdd(item)) { - continue; - } - super.addToBottom(item); - } - } - - @Override - public void addToTop(StatusViewModel... items) { - for (StatusViewModel item : items) { - if (!preAdd(item)) { - continue; - } - super.addToTop(item); - } - } - /** * Sort list by Status ID */ @Override protected void sort() { synchronized (LOCK) { - Collections.sort(list, new Comparator<StatusViewModel>() { - @Override - public int compare(StatusViewModel lhs, StatusViewModel rhs) { - return Long.valueOf(rhs.getTweet().getId()).compareTo(lhs.getTweet().getId()); - } - }); + Collections.sort(list, (lhs, rhs) -> Long.valueOf(rhs.getTweet().getId()).compareTo(lhs.getTweet().getId())); } } @@ -108,13 +83,4 @@ public class StatusListAdapter extends CustomListAdapter<StatusViewModel> { } } } - - private boolean isBlockUser(StatusViewModel item) { - return MuteUserIds.isMuted(item.getTweet().getOriginalTweet().getUser().getId()); - } - - private boolean preAdd(StatusViewModel item) { - removeByStatusID(item.getTweet().getId()); - return !isBlockUser(item); - } } diff --git a/app/src/main/java/net/lacolaco/smileessence/view/dialog/StatusDetailDialogFragment.java b/app/src/main/java/net/lacolaco/smileessence/view/dialog/StatusDetailDialogFragment.java index c9b3b07a..e7bc7f07 100644 --- a/app/src/main/java/net/lacolaco/smileessence/view/dialog/StatusDetailDialogFragment.java +++ b/app/src/main/java/net/lacolaco/smileessence/view/dialog/StatusDetailDialogFragment.java @@ -85,13 +85,11 @@ public class StatusDetailDialogFragment extends StackableDialogFragment implemen break; } case R.id.button_status_detail_retweet: { - final Long retweetID = (Long) v.getTag(); - toggleRetweet(activity, account, tweet, retweetID); + toggleRetweet(activity, account, tweet); break; } case R.id.button_status_detail_favorite: { - Boolean isFavorited = (Boolean) v.getTag(); - toggleFavorite(activity, account, tweet, isFavorited); + toggleFavorite(activity, account, tweet); break; } case R.id.button_status_detail_delete: { @@ -112,26 +110,33 @@ public class StatusDetailDialogFragment extends StackableDialogFragment implemen @Override public Dialog onCreateDialog(Bundle savedInstanceState) { - final MainActivity activity = (MainActivity) getActivity(); - final Account account = activity.getCurrentAccount(); - tweet = Tweet.fetch(getStatusID()); - final StatusViewModel status = new StatusViewModel(tweet); - View header = getTitleView(activity, account, status); + if (tweet == null) { // trying open deleted tweet + Notificator.getInstance().publish(R.string.notice_error_show_status); + return new DisposeDialog(getActivity()); + } + StatusViewModel vm = new StatusViewModel(tweet); + + MainActivity activity = (MainActivity) getActivity(); + Account account = activity.getCurrentAccount(); + + View header = getTitleView(activity, account, vm); + ListView listView = (ListView) header.findViewById(R.id.listview_status_detail_reply_to); final StatusListAdapter adapter = new StatusListAdapter(getActivity()); listView.setAdapter(adapter); - long inReplyToStatusId = tweet.getInReplyTo(); - if (inReplyToStatusId == -1) { - listView.setVisibility(View.GONE); - } else { - new ShowStatusTask(account, inReplyToStatusId) + + if (tweet.getInReplyTo() != -1) { + new ShowStatusTask(account, tweet.getInReplyTo()) .onDoneUI(replyTo -> { adapter.addToTop(new StatusViewModel(replyTo)); adapter.updateForce(); }) .execute(); + } else { + listView.setVisibility(View.GONE); } + return new AlertDialog.Builder(getActivity()).setView(header).create(); } @@ -152,53 +157,57 @@ public class StatusDetailDialogFragment extends StackableDialogFragment implemen private View getTitleView(MainActivity activity, Account account, StatusViewModel statusViewModel) { Tweet tweet = statusViewModel.getTweet(); View view = activity.getLayoutInflater().inflate(R.layout.dialog_status_detail, null); - View statusHeader = view.findViewById(R.id.layout_status_header); - statusHeader = statusViewModel.getView(activity, activity.getLayoutInflater(), statusHeader); + + View statusHeader = statusViewModel.getView(activity, activity.getLayoutInflater(), view.findViewById(R.id.layout_status_header)); statusHeader.setClickable(false); - int background = ((ColorDrawable) statusHeader.getBackground()).getColor(); - view.setBackgroundColor(background); + + view.setBackgroundColor(((ColorDrawable) statusHeader.getBackground()).getColor()); + + //--- favs/RTs count ImageView favCountIcon = (ImageView) view.findViewById(R.id.image_status_detail_fav_count); - ImageView rtCountIcon = (ImageView) view.findViewById(R.id.image_status_detail_rt_count); TextView favCountText = (TextView) view.findViewById(R.id.textview_status_detail_fav_count); - TextView rtCountText = (TextView) view.findViewById(R.id.textview_status_detail_rt_count); - int favoriteCount = statusViewModel.getTweet().getFavoriteCount(); - if (favoriteCount == 0) { + if (tweet.getFavoriteCount() > 0) { + favCountText.setText(Integer.toString(tweet.getFavoriteCount())); + } else { favCountIcon.setVisibility(View.GONE); favCountText.setVisibility(View.GONE); - } else { - favCountText.setText(Integer.toString(favoriteCount)); } - int retweetCount = statusViewModel.getTweet().getOriginalTweet().getRetweetCount(); - if (retweetCount == 0) { + + ImageView rtCountIcon = (ImageView) view.findViewById(R.id.image_status_detail_rt_count); + TextView rtCountText = (TextView) view.findViewById(R.id.textview_status_detail_rt_count); + if (tweet.getRetweetCount() > 0) { + rtCountText.setText(Integer.toString(tweet.getRetweetCount())); + } else { rtCountIcon.setVisibility(View.GONE); rtCountText.setVisibility(View.GONE); - } else { - rtCountText.setText(Integer.toString(retweetCount)); } - ImageButton menu = (ImageButton) view.findViewById(R.id.button_status_detail_menu); + + //--- buttons ImageButton message = (ImageButton) view.findViewById(R.id.button_status_detail_reply); - ImageButton retweet = (ImageButton) view.findViewById(R.id.button_status_detail_retweet); - ImageButton favorite = (ImageButton) view.findViewById(R.id.button_status_detail_favorite); - ImageButton delete = (ImageButton) view.findViewById(R.id.button_status_detail_delete); - menu.setOnClickListener(this); message.setOnClickListener(this); + + ImageButton retweet = (ImageButton) view.findViewById(R.id.button_status_detail_retweet); retweet.setOnClickListener(this); - favorite.setOnClickListener(this); - delete.setOnClickListener(this); - if (isNotRetweetable(account, tweet)) { + if (tweet.getOriginalTweet().getUser().isProtected() || + tweet.getOriginalTweet().getUser().getId() == account.getUserId()) { retweet.setVisibility(View.GONE); - } else if (isRetweetDeletable(account, tweet)) { + } else if (tweet.isRetweetedBy(account.getUserId())) { retweet.setImageDrawable(getResources().getDrawable(R.drawable.icon_retweet_on)); - retweet.setTag(tweet.getId()); - } else { - retweet.setTag(-1L); } - favorite.setTag(statusViewModel.getTweet().getOriginalTweet().isFavoritedBy(activity.getCurrentAccount().getUserId())); - if (statusViewModel.getTweet().getOriginalTweet().isFavoritedBy(activity.getCurrentAccount().getUserId())) { + + ImageButton favorite = (ImageButton) view.findViewById(R.id.button_status_detail_favorite); + favorite.setOnClickListener(this); + if (tweet.isFavoritedBy(account.getUserId())) { favorite.setImageDrawable(getResources().getDrawable(R.drawable.icon_favorite_on)); } - boolean deletable = isDeletable(account, tweet); - delete.setVisibility(deletable ? View.VISIBLE : View.GONE); + + ImageButton delete = (ImageButton) view.findViewById(R.id.button_status_detail_delete); + delete.setOnClickListener(this); + delete.setVisibility(account.canDelete(tweet) ? View.VISIBLE : View.GONE); + + //--- menu + ImageButton menu = (ImageButton) view.findViewById(R.id.button_status_detail_menu); + menu.setOnClickListener(this); LinearLayout commandsLayout = (LinearLayout) view.findViewById(R.id.linearlayout_status_detail_menu); commandsLayout.setClickable(true); ArrayList<Command> commands = getCommands(activity, tweet, account); @@ -206,12 +215,7 @@ public class StatusDetailDialogFragment extends StackableDialogFragment implemen for (final Command command : commands) { View commandView = command.getView(activity, activity.getLayoutInflater(), null); commandView.setBackgroundColor(getResources().getColor(R.color.transparent)); - commandView.setOnClickListener(new ListItemClickListener(activity, new Runnable() { - @Override - public void run() { - command.execute(); - } - })); + commandView.setOnClickListener(new ListItemClickListener(activity, () -> command.execute())); commandsLayout.addView(commandView); } return view; @@ -230,19 +234,6 @@ public class StatusDetailDialogFragment extends StackableDialogFragment implemen return commands; } - private boolean isDeletable(Account account, Tweet tweet) { - return tweet.getOriginalTweet().getUser().getId() == account.userID; - } - - private boolean isNotRetweetable(Account account, Tweet tweet) { - User user = tweet.getOriginalTweet().getUser(); - return user.isProtected() || user.getId() == account.userID; - } - - private boolean isRetweetDeletable(Account account, Tweet tweet) { - return tweet.isRetweet() && tweet.getUser().getId() == account.userID; - } - private void openMenu(MainActivity activity) { StatusMenuDialogFragment fragment = new StatusMenuDialogFragment(); fragment.setStatusID(getStatusID()); @@ -252,10 +243,12 @@ public class StatusDetailDialogFragment extends StackableDialogFragment implemen private void replyToStatus(MainActivity activity, Account account, Tweet tweet) { Tweet originalTweet = tweet.getOriginalTweet(); TweetBuilder builder = new TweetBuilder(); - if (account.userID == originalTweet.getUser().getId()) { - builder.addScreenName(account.screenName); + builder.addScreenName(originalTweet.getUser().getScreenName()); + for (String screenName : originalTweet.getMentions()) { + if (!screenName.equals(account.getCachedUser().getScreenName())) { + builder.addScreenName(screenName); + } } - builder.addScreenNames(originalTweet.getMentions()); String text = builder.buildText(); int selStart = originalTweet.getUser().getScreenName().length() + 2; // "@" and " " @@ -267,27 +260,30 @@ public class StatusDetailDialogFragment extends StackableDialogFragment implemen .commitWithOpen(activity); } - private void toggleFavorite(MainActivity activity, Account account, Tweet tweet, Boolean isFavorited) { - long statusID = tweet.getOriginalTweet().getId(); - if (isFavorited) { - new UnfavoriteTask(account, statusID) + private void toggleFavorite(MainActivity activity, Account account, Tweet tweet) { + if (tweet.isFavoritedBy(account.getUserId())) { + new UnfavoriteTask(account, tweet.getId()) .onDone(x -> Notificator.getInstance().publish(R.string.notice_unfavorite_succeeded)) .onFail(x -> Notificator.getInstance().publish(R.string.notice_unfavorite_failed, NotificationType.ALERT)) .execute(); } else { - new FavoriteTask(account, statusID) + new FavoriteTask(account, tweet.getId()) .onDone(x -> Notificator.getInstance().publish(R.string.notice_favorite_succeeded)) .onFail(x -> Notificator.getInstance().publish(R.string.notice_favorite_failed, NotificationType.ALERT)) .execute(); } } - private void toggleRetweet(final MainActivity activity, final Account account, final Tweet tweet, final Long retweetID) { + private void toggleRetweet(final MainActivity activity, final Account account, final Tweet tweet) { confirm(activity, () -> { - if (retweetID != -1L) { - deleteStatus(activity, account, tweet); + if (tweet.isRetweetedBy(account.getUserId())) { + new DeleteStatusTask(account, tweet.getRetweetIdBy(account.getUserId())) + .onDone(t -> Notificator.getInstance().publish(R.string.notice_status_delete_succeeded)) + .onFail(e -> Notificator.getInstance().publish(R.string.notice_status_delete_failed, NotificationType.ALERT)) + .execute(); + dismiss(); } else { - new RetweetTask(account, tweet.getOriginalTweet().getId()) + new RetweetTask(account, tweet.getId()) .onDone(x -> Notificator.getInstance().publish(R.string.notice_retweet_succeeded)) .onFail(x -> Notificator.getInstance().publish(R.string.notice_retweet_failed, NotificationType.ALERT)) .execute(); |