aboutsummaryrefslogtreecommitdiffstats
path: root/app/src
diff options
context:
space:
mode:
authorKazuki Yamaguchi <k@rhe.jp>2015-09-18 21:43:03 +0900
committerKazuki Yamaguchi <k@rhe.jp>2015-09-18 21:43:03 +0900
commit7d57f6ac0aa8c32ad119cd74cb9cf279809dcbf4 (patch)
treeccdde90b6b8c509be65e934459a22a7e72826ed2 /app/src
parent2bf45f9bdc135fdcf287c048f0966a63b95c54d3 (diff)
downloadSmileEssence-7d57f6ac0aa8c32ad119cd74cb9cf279809dcbf4.tar.gz
View は twitter4j に直接触らないでほしい
Diffstat (limited to 'app/src')
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/command/CommandOpenHashtagDialog.java10
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/entity/DirectMessage.java59
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/entity/EntitySupport.java93
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/entity/Tweet.java56
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/twitter/TweetBuilder.java11
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/view/dialog/MessageDetailDialogFragment.java19
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/view/dialog/MessageMenuDialogFragment.java19
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/view/dialog/StatusDetailDialogFragment.java13
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/view/dialog/StatusMenuDialogFragment.java21
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/viewmodel/StatusViewModel.java16
10 files changed, 142 insertions, 175 deletions
diff --git a/app/src/main/java/net/lacolaco/smileessence/command/CommandOpenHashtagDialog.java b/app/src/main/java/net/lacolaco/smileessence/command/CommandOpenHashtagDialog.java
index 558bb415..7b481e5c 100644
--- a/app/src/main/java/net/lacolaco/smileessence/command/CommandOpenHashtagDialog.java
+++ b/app/src/main/java/net/lacolaco/smileessence/command/CommandOpenHashtagDialog.java
@@ -35,20 +35,20 @@ public class CommandOpenHashtagDialog extends Command {
// ------------------------------ FIELDS ------------------------------
- private final HashtagEntity hashtagEntity;
+ private final String hashtag;
// --------------------------- CONSTRUCTORS ---------------------------
- public CommandOpenHashtagDialog(Activity activity, HashtagEntity hashtagEntity) {
+ public CommandOpenHashtagDialog(Activity activity, String hashtag) {
super(-1, activity);
- this.hashtagEntity = hashtagEntity;
+ this.hashtag = hashtag;
}
// --------------------- GETTER / SETTER METHODS ---------------------
@Override
public String getText() {
- return "#" + hashtagEntity.getText();
+ return "#" + hashtag;
}
@Override
@@ -61,7 +61,7 @@ public class CommandOpenHashtagDialog extends Command {
@Override
public boolean execute() {
HashtagDialogFragment dialogFragment = new HashtagDialogFragment();
- dialogFragment.setText(hashtagEntity.getText());
+ dialogFragment.setText(hashtag);
DialogHelper.showDialog(getActivity(), dialogFragment);
return false;
}
diff --git a/app/src/main/java/net/lacolaco/smileessence/entity/DirectMessage.java b/app/src/main/java/net/lacolaco/smileessence/entity/DirectMessage.java
index 1f31171f..c7b3dfba 100644
--- a/app/src/main/java/net/lacolaco/smileessence/entity/DirectMessage.java
+++ b/app/src/main/java/net/lacolaco/smileessence/entity/DirectMessage.java
@@ -9,7 +9,7 @@ import java.util.ArrayList;
import java.util.Date;
import java.util.List;
-public class DirectMessage {
+public class DirectMessage extends EntitySupport {
// キャッシュ これも weak reference
private static Cache<Long, DirectMessage> storage = CacheBuilder.newBuilder().weakValues().build();
@@ -43,12 +43,6 @@ public class DirectMessage {
private String text;
private Date createdAt;
- private UserMentionEntity[] mentions;
- private HashtagEntity[] hashtags;
- private MediaEntity[] media;
- private URLEntity[] urls;
- private SymbolEntity[] symbols;
-
private DirectMessage(twitter4j.DirectMessage st) {
update(st);
}
@@ -60,11 +54,7 @@ public class DirectMessage {
text = message.getText();
createdAt = message.getCreatedAt();
- mentions = message.getUserMentionEntities();
- hashtags = message.getHashtagEntities();
- media = message.getExtendedMediaEntities().length > 0 ? message.getExtendedMediaEntities() : message.getMediaEntities();
- urls = message.getURLEntities();
- symbols = message.getSymbolEntities();
+ updateEntities(message);
}
public long getId() {
@@ -87,51 +77,6 @@ public class DirectMessage {
return createdAt;
}
- public UserMentionEntity[] getMentions() {
- return mentions;
- }
-
- public HashtagEntity[] getHashtags() {
- return hashtags;
- }
-
- public MediaEntity[] getMedia() {
- return media;
- }
-
- public URLEntity[] getUrls() {
- return urls;
- }
-
- public SymbolEntity[] getSymbols() {
- return symbols;
- }
-
- public List<String> getMentioningScreenNames(String excludeScreenName) {
- List<String> names = getMentioningScreenNames();
- if (excludeScreenName != null) {
- names.remove(excludeScreenName);
- }
- return names;
- }
-
- public List<String> getMentioningScreenNames() {
- List<String> names = new ArrayList<>();
- names.add(getSender().getScreenName());
- if (getSender() != getRecipient()) {
- names.add(getRecipient().getScreenName());
- }
- if (getMentions() != null) {
- for (UserMentionEntity entity : getMentions()) {
- if (names.contains(entity.getScreenName())) {
- continue;
- }
- names.add(entity.getScreenName());
- }
- }
- return names;
- }
-
public String getMessageSummary() {
return String.format("@%s: %s", getSender().getScreenName(), getText());
}
diff --git a/app/src/main/java/net/lacolaco/smileessence/entity/EntitySupport.java b/app/src/main/java/net/lacolaco/smileessence/entity/EntitySupport.java
new file mode 100644
index 00000000..1df7cbd1
--- /dev/null
+++ b/app/src/main/java/net/lacolaco/smileessence/entity/EntitySupport.java
@@ -0,0 +1,93 @@
+package net.lacolaco.smileessence.entity;
+
+import twitter4j.*;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public abstract class EntitySupport {
+ private List<String> mentions;
+ private List<String> hashtags;
+ private List<String> mediaUrls;
+ private List<String> urlsExpanded;
+ private List<String> symbols;
+
+ protected void updateEntities(twitter4j.EntitySupport status) {
+ mentions = extractMentions(status.getUserMentionEntities());
+ hashtags = extractHashtags(status.getHashtagEntities());
+ mediaUrls = extractMediaUrls(status.getExtendedMediaEntities().length > 0 ? status.getExtendedMediaEntities() : status.getMediaEntities());
+ urlsExpanded = extractExpandedUrls(status.getURLEntities());
+ symbols = extractSymbols(status.getSymbolEntities());
+ }
+
+ public List<String> getMentions() {
+ return mentions;
+ }
+
+ public List<String> getHashtags() {
+ return hashtags;
+ }
+
+ public List<String> getMediaUrls() {
+ return mediaUrls;
+ }
+
+ public List<String> getUrlsExpanded() {
+ return urlsExpanded;
+ }
+
+ public List<String> getSymbols() {
+ return symbols;
+ }
+
+ private List<String> extractMentions(UserMentionEntity[] entities) {
+ List<String> names = new ArrayList<>();
+ if (entities != null) {
+ for (UserMentionEntity entity : entities) {
+ names.add(entity.getScreenName());
+ }
+ }
+ return names;
+ }
+
+ private List<String> extractSymbols(SymbolEntity[] entities) {
+ List<String> names = new ArrayList<>();
+ if (entities != null) {
+ for (SymbolEntity entity : entities) {
+ names.add(entity.getText());
+ }
+ }
+ return names;
+ }
+
+ private List<String> extractExpandedUrls(URLEntity[] entities) {
+ List<String> names = new ArrayList<>();
+ if (entities != null) {
+ for (URLEntity entity : entities) {
+ names.add(entity.getExpandedURL());
+ }
+ }
+ return names;
+ }
+
+ private List<String> extractMediaUrls(MediaEntity[] entities) {
+ List<String> names = new ArrayList<>();
+ if (entities != null) {
+ for (MediaEntity entity : entities) {
+ names.add(entity.getMediaURLHttps());
+ }
+ }
+ return names;
+ }
+
+ private List<String> extractHashtags(HashtagEntity[] entities) {
+ List<String> names = new ArrayList<>();
+ if (entities != null) {
+ for (HashtagEntity entity : entities) {
+ names.add(entity.getText());
+ }
+ }
+ return names;
+ }
+
+}
diff --git a/app/src/main/java/net/lacolaco/smileessence/entity/Tweet.java b/app/src/main/java/net/lacolaco/smileessence/entity/Tweet.java
index 3d0cf8d3..3da59c38 100644
--- a/app/src/main/java/net/lacolaco/smileessence/entity/Tweet.java
+++ b/app/src/main/java/net/lacolaco/smileessence/entity/Tweet.java
@@ -10,7 +10,7 @@ import java.util.ArrayList;
import java.util.Date;
import java.util.List;
-public class Tweet {
+public class Tweet extends EntitySupport {
// キャッシュ こっちは soft reference
private static Cache<Long, Tweet> storage = CacheBuilder.newBuilder().softValues().build();
@@ -45,11 +45,6 @@ public class Tweet {
private String source;
private boolean isRetweet;
private Tweet retweetedTweet;
- private UserMentionEntity[] mentions;
- private HashtagEntity[] hashtags;
- private MediaEntity[] media;
- private URLEntity[] urls;
- private SymbolEntity[] symbols;
private long inReplyTo;
private int favoriteCount;
private int retweetCount;
@@ -67,17 +62,13 @@ public class Tweet {
favoriteCount = status.getFavoriteCount();
retweetCount = status.getRetweetCount();
- mentions = status.getUserMentionEntities();
- hashtags = status.getHashtagEntities();
- media = status.getExtendedMediaEntities().length > 0 ? status.getExtendedMediaEntities() : status.getMediaEntities();
- urls = status.getURLEntities();
- symbols = status.getSymbolEntities();
inReplyTo = status.getInReplyToStatusId();
-
isRetweet = status.isRetweet();
if (isRetweet()) {
retweetedTweet = Tweet.fromTwitter(status.getRetweetedStatus());
}
+
+ updateEntities(status);
}
public String getTwitterUrl() {
@@ -128,48 +119,7 @@ public class Tweet {
return retweetCount;
}
- public UserMentionEntity[] getMentions() {
- return mentions;
- }
-
- public HashtagEntity[] getHashtags() {
- return hashtags;
- }
-
- public MediaEntity[] getMedia() {
- return media;
- }
-
- public URLEntity[] getUrls() {
- return urls;
- }
-
- public SymbolEntity[] getSymbols() {
- return symbols;
- }
-
public long getInReplyTo() {
return inReplyTo;
}
-
- public List<String> getMentioningScreenNames(String excludeScreenName) {
- List<String> names = getMentioningScreenNames();
- if (excludeScreenName != null) {
- names.remove(excludeScreenName);
- }
- return names;
- }
-
- public List<String> getMentioningScreenNames() {
- List<String> names = new ArrayList<>();
- names.add(getUser().getScreenName());
- if (getMentions() != null) {
- for (UserMentionEntity entity : getMentions()) {
- if (!names.contains(entity.getScreenName())) {
- names.add(entity.getScreenName());
- }
- }
- }
- return names;
- }
}
diff --git a/app/src/main/java/net/lacolaco/smileessence/twitter/TweetBuilder.java b/app/src/main/java/net/lacolaco/smileessence/twitter/TweetBuilder.java
index 2cd0954a..4946a44e 100644
--- a/app/src/main/java/net/lacolaco/smileessence/twitter/TweetBuilder.java
+++ b/app/src/main/java/net/lacolaco/smileessence/twitter/TweetBuilder.java
@@ -33,6 +33,7 @@ import twitter4j.StatusUpdate;
import java.io.File;
import java.util.ArrayList;
import java.util.Collection;
+import java.util.List;
public class TweetBuilder {
@@ -67,12 +68,16 @@ public class TweetBuilder {
// -------------------------- OTHER METHODS --------------------------
public TweetBuilder addScreenName(String screenName) {
- screenNameList.add(screenName);
+ if (!screenNameList.contains(screenName)) {
+ screenNameList.add(screenName);
+ }
return this;
}
- public TweetBuilder addScreenNames(Collection<String> screenNames) {
- screenNameList.addAll(screenNames);
+ public TweetBuilder addScreenNames(List<String> screenNames) {
+ for (String name : screenNames) {
+ addScreenName(name);
+ }
return this;
}
diff --git a/app/src/main/java/net/lacolaco/smileessence/view/dialog/MessageDetailDialogFragment.java b/app/src/main/java/net/lacolaco/smileessence/view/dialog/MessageDetailDialogFragment.java
index 676c2db0..8ad43c3c 100644
--- a/app/src/main/java/net/lacolaco/smileessence/view/dialog/MessageDetailDialogFragment.java
+++ b/app/src/main/java/net/lacolaco/smileessence/view/dialog/MessageDetailDialogFragment.java
@@ -186,26 +186,15 @@ public class MessageDetailDialogFragment extends StackableDialogFragment impleme
private ArrayList<Command> getCommands(Activity activity, DirectMessage message, Account account) {
ArrayList<Command> commands = new ArrayList<>();
// URL
- if (message.getUrls() != null) {
- for (URLEntity urlEntity : message.getUrls()) {
- commands.add(new CommandOpenURL(activity, urlEntity.getExpandedURL()));
- }
+ for (String url : message.getUrlsExpanded()) {
+ commands.add(new CommandOpenURL(activity, url));
}
- for (MediaEntity mediaEntity : getMediaEntities(message)) {
- commands.add(new CommandOpenURL(activity, mediaEntity.getMediaURL()));
+ for (String url : message.getMediaUrls()) {
+ commands.add(new CommandOpenURL(activity, url));
}
return commands;
}
- private MediaEntity[] getMediaEntities(DirectMessage message) {
- if (message.getMedia().length == 0) {
- // direct message's media is contained also in url entities.
- return new MediaEntity[0];
- } else {
- return message.getMedia();
- }
- }
-
private View getTitleView(MainActivity activity, Account account, DirectMessage message) {
View view = activity.getLayoutInflater().inflate(R.layout.dialog_status_detail, null);
View messageHeader = view.findViewById(R.id.layout_status_header);
diff --git a/app/src/main/java/net/lacolaco/smileessence/view/dialog/MessageMenuDialogFragment.java b/app/src/main/java/net/lacolaco/smileessence/view/dialog/MessageMenuDialogFragment.java
index dcf24f38..8996ad02 100644
--- a/app/src/main/java/net/lacolaco/smileessence/view/dialog/MessageMenuDialogFragment.java
+++ b/app/src/main/java/net/lacolaco/smileessence/view/dialog/MessageMenuDialogFragment.java
@@ -92,20 +92,21 @@ public class MessageMenuDialogFragment extends MenuDialogFragment {
public void addBottomCommands(Activity activity, DirectMessage message, Account account, ArrayList<Command> commands) {
commands.add(new CommandSaveAsTemplate(activity, message.getText()));
//User
- for (String screenName : message.getMentioningScreenNames()) {
+ if (message.getSender() != message.getRecipient()) {
+ commands.add(new CommandOpenUserDetail(activity, message.getRecipient().getScreenName(), account));
+ }
+ for (String screenName : message.getMentions()) {
commands.add(new CommandOpenUserDetail(activity, screenName, account));
}
for (Command command : getHashtagCommands(activity, message)) {
commands.add(command);
}
// Media
- if (message.getUrls() != null) {
- for (URLEntity urlEntity : message.getUrls()) {
- commands.add(new CommandOpenURL(activity, urlEntity.getExpandedURL()));
- }
+ for (String url : message.getUrlsExpanded()) {
+ commands.add(new CommandOpenURL(activity, url));
}
- for (MediaEntity mediaEntity : message.getMedia()) {
- commands.add(new CommandOpenURL(activity, mediaEntity.getMediaURL()));
+ for (String url : message.getMediaUrls()) {
+ commands.add(new CommandOpenURL(activity, url));
}
}
@@ -123,8 +124,8 @@ public class MessageMenuDialogFragment extends MenuDialogFragment {
private ArrayList<Command> getHashtagCommands(Activity activity, DirectMessage status) {
ArrayList<Command> commands = new ArrayList<>();
if (status.getHashtags() != null) {
- for (HashtagEntity hashtagEntity : status.getHashtags()) {
- commands.add(new CommandOpenHashtagDialog(activity, hashtagEntity));
+ for (String hashtag : status.getHashtags()) {
+ commands.add(new CommandOpenHashtagDialog(activity, hashtag));
}
}
return commands;
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 d21c67c7..72db5583 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
@@ -57,7 +57,6 @@ import net.lacolaco.smileessence.viewmodel.StatusViewModel;
import java.util.ArrayList;
import twitter4j.MediaEntity;
-import twitter4j.URLEntity;
public class StatusDetailDialogFragment extends StackableDialogFragment implements View.OnClickListener {
@@ -235,13 +234,11 @@ public class StatusDetailDialogFragment extends StackableDialogFragment implemen
private ArrayList<Command> getCommands(Activity activity, Tweet tweet, Account account) {
ArrayList<Command> commands = new ArrayList<>();
// URL
- if (tweet.getUrls() != null) {
- for (URLEntity urlEntity : tweet.getUrls()) {
- commands.add(new CommandOpenURL(activity, urlEntity.getExpandedURL()));
- }
+ for (String url : tweet.getUrlsExpanded()) {
+ commands.add(new CommandOpenURL(activity, url));
}
- for (MediaEntity mediaEntity : tweet.getMedia()) {
- commands.add(new CommandOpenURL(activity, mediaEntity.getMediaURL()));
+ for (String url : tweet.getMediaUrls()) {
+ commands.add(new CommandOpenURL(activity, url));
}
return commands;
}
@@ -271,7 +268,7 @@ public class StatusDetailDialogFragment extends StackableDialogFragment implemen
if (account.userID == originalTweet.getUser().getId()) {
builder.addScreenName(account.screenName);
}
- builder.addScreenNames(originalTweet.getMentioningScreenNames(account.screenName));
+ builder.addScreenNames(originalTweet.getMentions());
String text = builder.buildText();
int selStart = originalTweet.getUser().getScreenName().length() + 2; // "@" and " "
diff --git a/app/src/main/java/net/lacolaco/smileessence/view/dialog/StatusMenuDialogFragment.java b/app/src/main/java/net/lacolaco/smileessence/view/dialog/StatusMenuDialogFragment.java
index 77c3ea29..55959e36 100644
--- a/app/src/main/java/net/lacolaco/smileessence/view/dialog/StatusMenuDialogFragment.java
+++ b/app/src/main/java/net/lacolaco/smileessence/view/dialog/StatusMenuDialogFragment.java
@@ -38,11 +38,11 @@ import net.lacolaco.smileessence.entity.Tweet;
import net.lacolaco.smileessence.view.adapter.CustomListAdapter;
import java.util.ArrayList;
+import java.util.LinkedHashSet;
import java.util.List;
import twitter4j.HashtagEntity;
import twitter4j.MediaEntity;
-import twitter4j.URLEntity;
public class StatusMenuDialogFragment extends MenuDialogFragment {
@@ -86,20 +86,19 @@ public class StatusMenuDialogFragment extends MenuDialogFragment {
public void addBottomCommands(Activity activity, Tweet tweet, Account account, ArrayList<Command> commands) {
commands.add(new CommandSaveAsTemplate(activity, tweet.getOriginalTweet().getText()));
//User
- for (String screenName : tweet.getMentioningScreenNames()) {
+ commands.add(new CommandOpenUserDetail(activity, tweet.getUser().getScreenName(), account));
+ for (String screenName : new ArrayList<>(new LinkedHashSet<>(tweet.getMentions()))) { // Array#uniq
commands.add(new CommandOpenUserDetail(activity, screenName, account));
}
for (Command command : getHashtagCommands(activity, tweet)) {
commands.add(command);
}
// Media
- if (tweet.getUrls() != null) {
- for (URLEntity urlEntity : tweet.getUrls()) {
- commands.add(new CommandOpenURL(activity, urlEntity.getExpandedURL()));
- }
+ for (String url : tweet.getUrlsExpanded()) {
+ commands.add(new CommandOpenURL(activity, url));
}
- for (MediaEntity mediaEntity : tweet.getMedia()) {
- commands.add(new CommandOpenURL(activity, mediaEntity.getMediaURL()));
+ for (String url : tweet.getMediaUrls()) {
+ commands.add(new CommandOpenURL(activity, url));
}
}
@@ -116,10 +115,8 @@ public class StatusMenuDialogFragment extends MenuDialogFragment {
private ArrayList<Command> getHashtagCommands(Activity activity, Tweet tweet) {
ArrayList<Command> commands = new ArrayList<>();
- if (tweet.getHashtags() != null) {
- for (HashtagEntity hashtagEntity : tweet.getHashtags()) {
- commands.add(new CommandOpenHashtagDialog(activity, hashtagEntity));
- }
+ for (String hashtag : tweet.getHashtags()) {
+ commands.add(new CommandOpenHashtagDialog(activity, hashtag));
}
return commands;
}
diff --git a/app/src/main/java/net/lacolaco/smileessence/viewmodel/StatusViewModel.java b/app/src/main/java/net/lacolaco/smileessence/viewmodel/StatusViewModel.java
index 5680ccc7..6f372562 100644
--- a/app/src/main/java/net/lacolaco/smileessence/viewmodel/StatusViewModel.java
+++ b/app/src/main/java/net/lacolaco/smileessence/viewmodel/StatusViewModel.java
@@ -52,8 +52,6 @@ import net.lacolaco.smileessence.view.dialog.StatusDetailDialogFragment;
import net.lacolaco.smileessence.view.dialog.UserDetailDialogFragment;
import net.lacolaco.smileessence.view.listener.ListItemClickListener;
-import twitter4j.*;
-
import java.util.ArrayList;
import java.util.List;
@@ -79,8 +77,8 @@ public class StatusViewModel implements IViewModel {
private List<Long> getEmbeddedStatusIDs() {
ArrayList<Long> list = new ArrayList<>();
- for (URLEntity url : tweet.getUrls()) {
- Uri uri = Uri.parse(url.getExpandedURL());
+ for (String url : tweet.getUrlsExpanded()) {
+ Uri uri = Uri.parse(url);
if (uri.getHost().equals("twitter.com")) {
String[] arr = uri.toString().split("/");
if (arr[arr.length - 2].equals("status")) {
@@ -244,15 +242,7 @@ public class StatusViewModel implements IViewModel {
}
public boolean isMention(String screenName) {
- if (tweet.getMentions() == null) {
- return false;
- }
- for (UserMentionEntity mention : tweet.getMentions()) {
- if (mention.getScreenName().equals(screenName)) {
- return true;
- }
- }
- return false;
+ return tweet.getMentions().contains(screenName);
}
private boolean isReadMorseEnabled(MainActivity activity) {