From d87e8c2b04042b2d72fa11d016ae3e0bd4652681 Mon Sep 17 00:00:00 2001 From: Kazuki Yamaguchi Date: Sat, 5 Sep 2015 19:06:46 +0900 Subject: [WIP] twitter4j.{Status,User,DirectMessage} を排除 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../smileessence/command/CommandsTest.java | 2 +- .../smileessence/twitter/TweetBuilderTest.java | 2 +- .../twitter/UserStreamListenerTest.java | 4 +- .../lacolaco/smileessence/util/TwitterMock.java | 4 +- .../smileessence/viewmodel/EventViewModelTest.java | 2 +- .../viewmodel/MessageViewModelTest.java | 2 +- .../net/lacolaco/smileessence/IntentRouter.java | 5 +- .../smileessence/activity/EditCommandActivity.java | 19 +- .../smileessence/activity/MainActivity.java | 56 +++--- .../net/lacolaco/smileessence/command/Command.java | 43 +++-- .../command/CommandOpenUserDetail.java | 3 +- .../command/message/MessageCommand.java | 2 +- .../message/MessageCommandCopyTextToClipboard.java | 2 +- .../message/MessageCommandSearchOnGoogle.java | 2 +- .../command/message/MessageCommandShare.java | 2 +- .../command/message/MessageCommandTofuBuster.java | 2 +- .../smileessence/command/status/StatusCommand.java | 15 +- .../command/status/StatusCommandAddToReply.java | 5 +- .../command/status/StatusCommandCongratulate.java | 13 +- .../command/status/StatusCommandCopy.java | 5 +- .../status/StatusCommandCopyTextToClipboard.java | 5 +- .../status/StatusCommandCopyURLToClipboard.java | 7 +- .../command/status/StatusCommandFavAndRT.java | 8 +- .../command/status/StatusCommandMakeAnonymous.java | 9 +- .../command/status/StatusCommandNanigaja.java | 15 +- .../command/status/StatusCommandOpenInBrowser.java | 7 +- .../status/StatusCommandOpenQuoteDialog.java | 5 +- .../command/status/StatusCommandOpenTalkView.java | 7 +- .../command/status/StatusCommandReview.java | 5 +- .../status/StatusCommandSearchOnGoogle.java | 5 +- .../command/status/StatusCommandShare.java | 9 +- .../command/status/StatusCommandTextQuote.java | 5 +- .../command/status/StatusCommandTofuBuster.java | 5 +- .../command/status/StatusCommandURLQuote.java | 7 +- .../smileessence/command/user/UserCommand.java | 2 +- .../command/user/UserCommandAddToReply.java | 2 +- .../command/user/UserCommandBlock.java | 2 +- .../command/user/UserCommandIntroduce.java | 2 +- .../command/user/UserCommandOpenAclog.java | 2 +- .../command/user/UserCommandOpenFavstar.java | 2 +- .../command/user/UserCommandOpenTwilog.java | 2 +- .../command/user/UserCommandReply.java | 2 +- .../command/user/UserCommandReportForSpam.java | 2 +- .../command/user/UserCommandSendMessage.java | 2 +- .../command/user/UserCommandUnblock.java | 2 +- .../smileessence/data/CommandSettingCache.java | 64 ------- .../smileessence/data/DirectMessageCache.java | 91 --------- .../lacolaco/smileessence/data/StatusCache.java | 98 ---------- .../net/lacolaco/smileessence/data/UserCache.java | 96 ---------- .../smileessence/entity/CommandSetting.java | 71 ++++--- .../smileessence/entity/DirectMessage.java | 114 ++++++++++++ .../lacolaco/smileessence/entity/MuteUserIds.java | 22 +++ .../net/lacolaco/smileessence/entity/Tweet.java | 159 ++++++++++++++++ .../net/lacolaco/smileessence/entity/User.java | 134 +++++++++++++ .../smileessence/twitter/StatusFilter.java | 4 +- .../smileessence/twitter/TweetBuilder.java | 5 +- .../smileessence/twitter/UserStreamListener.java | 125 ++++++------- .../smileessence/twitter/task/BlockIDsTask.java | 15 +- .../smileessence/twitter/task/BlockTask.java | 6 +- .../twitter/task/DeleteMessageTask.java | 6 +- .../twitter/task/DeleteStatusTask.java | 14 +- .../twitter/task/DirectMessagesTask.java | 34 ++-- .../smileessence/twitter/task/FavoriteTask.java | 13 +- .../smileessence/twitter/task/FollowTask.java | 6 +- .../smileessence/twitter/task/GetTalkTask.java | 40 ++++ .../twitter/task/HomeTimelineTask.java | 34 ++-- .../twitter/task/MentionsTimelineTask.java | 32 ++-- .../smileessence/twitter/task/MutesIDsTask.java | 15 +- .../twitter/task/ReportForSpamTask.java | 6 +- .../smileessence/twitter/task/RetweetTask.java | 13 +- .../smileessence/twitter/task/SearchTask.java | 4 +- .../smileessence/twitter/task/SendMessageTask.java | 6 +- .../twitter/task/SentDirectMessagesTask.java | 34 ++-- .../twitter/task/ShowDirectMessageTask.java | 8 +- .../smileessence/twitter/task/ShowStatusTask.java | 16 +- .../smileessence/twitter/task/ShowUserTask.java | 10 +- .../smileessence/twitter/task/TweetTask.java | 25 ++- .../smileessence/twitter/task/TwitterTask.java | 15 +- .../twitter/task/TwitterTaskWithProgress.java | 13 ++ .../smileessence/twitter/task/UnblockTask.java | 6 +- .../smileessence/twitter/task/UnfavoriteTask.java | 13 +- .../smileessence/twitter/task/UnfollowTask.java | 6 +- .../twitter/task/UserListStatusesTask.java | 30 ++- .../twitter/task/UserTimelineTask.java | 23 ++- .../smileessence/twitter/util/TwitterUtils.java | 90 +++------ .../lacolaco/smileessence/view/HomeFragment.java | 22 ++- .../smileessence/view/MentionsFragment.java | 20 +- .../smileessence/view/MessagesFragment.java | 14 +- .../lacolaco/smileessence/view/PostFragment.java | 5 +- .../lacolaco/smileessence/view/SearchFragment.java | 5 +- .../smileessence/view/UserListFragment.java | 25 +-- .../view/adapter/MessageListAdapter.java | 10 +- .../view/adapter/StatusListAdapter.java | 14 +- .../view/dialog/MessageDetailDialogFragment.java | 96 +++++----- .../view/dialog/MessageMenuDialogFragment.java | 12 +- .../view/dialog/QuoteDialogFragment.java | 11 +- .../view/dialog/ReviewDialogFragment.java | 12 +- .../view/dialog/StatusDetailDialogFragment.java | 100 +++++----- .../view/dialog/StatusMenuDialogFragment.java | 35 ++-- .../view/dialog/TalkChainDialogFragment.java | 68 +------ .../view/dialog/UserDetailDialogFragment.java | 42 +++-- .../view/dialog/UserMenuDialogFragment.java | 3 +- .../smileessence/viewmodel/EventViewModel.java | 17 +- .../smileessence/viewmodel/MessageViewModel.java | 87 ++------- .../smileessence/viewmodel/StatusViewModel.java | 207 +++------------------ .../smileessence/viewmodel/UserViewModel.java | 10 +- 106 files changed, 1210 insertions(+), 1432 deletions(-) delete mode 100644 app/src/main/java/net/lacolaco/smileessence/data/CommandSettingCache.java delete mode 100644 app/src/main/java/net/lacolaco/smileessence/data/DirectMessageCache.java delete mode 100644 app/src/main/java/net/lacolaco/smileessence/data/StatusCache.java delete mode 100644 app/src/main/java/net/lacolaco/smileessence/data/UserCache.java create mode 100644 app/src/main/java/net/lacolaco/smileessence/entity/DirectMessage.java create mode 100644 app/src/main/java/net/lacolaco/smileessence/entity/MuteUserIds.java create mode 100644 app/src/main/java/net/lacolaco/smileessence/entity/Tweet.java create mode 100644 app/src/main/java/net/lacolaco/smileessence/entity/User.java create mode 100644 app/src/main/java/net/lacolaco/smileessence/twitter/task/GetTalkTask.java create mode 100644 app/src/main/java/net/lacolaco/smileessence/twitter/task/TwitterTaskWithProgress.java (limited to 'app/src') diff --git a/app/src/androidTest/java/net/lacolaco/smileessence/command/CommandsTest.java b/app/src/androidTest/java/net/lacolaco/smileessence/command/CommandsTest.java index 8616dff1..f86cbab4 100644 --- a/app/src/androidTest/java/net/lacolaco/smileessence/command/CommandsTest.java +++ b/app/src/androidTest/java/net/lacolaco/smileessence/command/CommandsTest.java @@ -47,7 +47,7 @@ public class CommandsTest extends ActivityInstrumentationTestCase2 // final Activity activity = getActivity(); // final Account account = new Account(mock.getAccessToken(), mock.getAccessTokenSecret(), mock.getUserMock().getId(), mock.getUserMock().getScreenName()); // final Status status = mock.getStatusMock(); -// StatusCache.getInstance().put(status); +// Tweet.fromTwitter(status); // getActivity().runOnUiThread(new Runnable() // { // @Override diff --git a/app/src/androidTest/java/net/lacolaco/smileessence/twitter/TweetBuilderTest.java b/app/src/androidTest/java/net/lacolaco/smileessence/twitter/TweetBuilderTest.java index 3e8f55bd..fa387466 100644 --- a/app/src/androidTest/java/net/lacolaco/smileessence/twitter/TweetBuilderTest.java +++ b/app/src/androidTest/java/net/lacolaco/smileessence/twitter/TweetBuilderTest.java @@ -29,7 +29,7 @@ import android.test.InstrumentationTestCase; import net.lacolaco.smileessence.util.TwitterMock; import twitter4j.Status; -import twitter4j.User; +import net.lacolaco.smileessence.entity.User; public class TweetBuilderTest extends InstrumentationTestCase { diff --git a/app/src/androidTest/java/net/lacolaco/smileessence/twitter/UserStreamListenerTest.java b/app/src/androidTest/java/net/lacolaco/smileessence/twitter/UserStreamListenerTest.java index 3c9f05ba..0fe3566b 100644 --- a/app/src/androidTest/java/net/lacolaco/smileessence/twitter/UserStreamListenerTest.java +++ b/app/src/androidTest/java/net/lacolaco/smileessence/twitter/UserStreamListenerTest.java @@ -31,10 +31,10 @@ import net.lacolaco.smileessence.entity.Account; import net.lacolaco.smileessence.util.TwitterMock; import net.lacolaco.smileessence.view.adapter.CustomListAdapter; -import twitter4j.DirectMessage; +import net.lacolaco.smileessence.entity.DirectMessage; import twitter4j.Status; import twitter4j.StatusDeletionNotice; -import twitter4j.User; +import net.lacolaco.smileessence.entity.User; public class UserStreamListenerTest extends ActivityInstrumentationTestCase2 { diff --git a/app/src/androidTest/java/net/lacolaco/smileessence/util/TwitterMock.java b/app/src/androidTest/java/net/lacolaco/smileessence/util/TwitterMock.java index e70862d5..738da64a 100644 --- a/app/src/androidTest/java/net/lacolaco/smileessence/util/TwitterMock.java +++ b/app/src/androidTest/java/net/lacolaco/smileessence/util/TwitterMock.java @@ -36,13 +36,13 @@ import java.io.InputStream; import java.io.InputStreamReader; import java.util.Properties; -import twitter4j.DirectMessage; +import net.lacolaco.smileessence.entity.DirectMessage; import twitter4j.JSONException; import twitter4j.Status; import twitter4j.Twitter; import twitter4j.TwitterException; import twitter4j.TwitterObjectFactory; -import twitter4j.User; +import net.lacolaco.smileessence.entity.User; public class TwitterMock { diff --git a/app/src/androidTest/java/net/lacolaco/smileessence/viewmodel/EventViewModelTest.java b/app/src/androidTest/java/net/lacolaco/smileessence/viewmodel/EventViewModelTest.java index 57ce28d9..922fd718 100644 --- a/app/src/androidTest/java/net/lacolaco/smileessence/viewmodel/EventViewModelTest.java +++ b/app/src/androidTest/java/net/lacolaco/smileessence/viewmodel/EventViewModelTest.java @@ -32,7 +32,7 @@ import net.lacolaco.smileessence.R; import net.lacolaco.smileessence.util.TwitterMock; import twitter4j.Status; -import twitter4j.User; +import net.lacolaco.smileessence.entity.User; import java.util.Locale; diff --git a/app/src/androidTest/java/net/lacolaco/smileessence/viewmodel/MessageViewModelTest.java b/app/src/androidTest/java/net/lacolaco/smileessence/viewmodel/MessageViewModelTest.java index b9adfd9a..484d526b 100644 --- a/app/src/androidTest/java/net/lacolaco/smileessence/viewmodel/MessageViewModelTest.java +++ b/app/src/androidTest/java/net/lacolaco/smileessence/viewmodel/MessageViewModelTest.java @@ -29,7 +29,7 @@ import android.test.InstrumentationTestCase; import net.lacolaco.smileessence.entity.Account; import net.lacolaco.smileessence.util.TwitterMock; -import twitter4j.DirectMessage; +import net.lacolaco.smileessence.entity.DirectMessage; public class MessageViewModelTest extends InstrumentationTestCase { diff --git a/app/src/main/java/net/lacolaco/smileessence/IntentRouter.java b/app/src/main/java/net/lacolaco/smileessence/IntentRouter.java index 13e93298..6a5d6d50 100644 --- a/app/src/main/java/net/lacolaco/smileessence/IntentRouter.java +++ b/app/src/main/java/net/lacolaco/smileessence/IntentRouter.java @@ -31,6 +31,7 @@ import android.text.TextUtils; import net.lacolaco.smileessence.activity.MainActivity; import net.lacolaco.smileessence.command.CommandOpenUserDetail; +import net.lacolaco.smileessence.entity.Tweet; import net.lacolaco.smileessence.logging.Logger; import net.lacolaco.smileessence.notification.NotificationType; import net.lacolaco.smileessence.notification.Notificator; @@ -191,9 +192,9 @@ public class IntentRouter { if (id != -1) { TwitterUtils.tryGetStatus(activity.getCurrentAccount(), id, new TwitterUtils.StatusCallback() { @Override - public void success(Status status) { + public void success(Tweet tweet) { StatusDetailDialogFragment fragment = new StatusDetailDialogFragment(); - fragment.setStatusID(status.getId()); + fragment.setStatusID(tweet.getId()); DialogHelper.showDialog(activity, fragment); } diff --git a/app/src/main/java/net/lacolaco/smileessence/activity/EditCommandActivity.java b/app/src/main/java/net/lacolaco/smileessence/activity/EditCommandActivity.java index a45766bb..556148ac 100644 --- a/app/src/main/java/net/lacolaco/smileessence/activity/EditCommandActivity.java +++ b/app/src/main/java/net/lacolaco/smileessence/activity/EditCommandActivity.java @@ -37,7 +37,6 @@ import net.lacolaco.smileessence.R; import net.lacolaco.smileessence.command.Command; import net.lacolaco.smileessence.command.status.StatusCommand; import net.lacolaco.smileessence.command.user.UserCommand; -import net.lacolaco.smileessence.data.CommandSettingCache; import net.lacolaco.smileessence.entity.CommandSetting; import net.lacolaco.smileessence.logging.Logger; import net.lacolaco.smileessence.preference.UserPreferenceHelper; @@ -60,7 +59,6 @@ public class EditCommandActivity extends Activity { private CheckBoxModel[] getCheckBoxItems() { editedCommands = new ArrayList<>(); List checkBoxModels = new ArrayList<>(); - List commandSettings = CommandSetting.getAll(); List commands = Command.getAllCommands(this); for (Command command : commands) { if (command.getKey() < 0) { @@ -75,17 +73,7 @@ public class EditCommandActivity extends Activity { continue; } editedCommands.add(command); - CommandSetting setting = null; - for (CommandSetting s : commandSettings) { - if (command.getKey() == s.commandKey) { - setting = s; - } - } - if (setting == null) { - setting = new CommandSetting(command.getKey(), true); - setting.save(); - } - CheckBoxModel checkBoxModel = new CheckBoxModel(text, setting.visibility); + CheckBoxModel checkBoxModel = new CheckBoxModel(text, CommandSetting.isVisible(command.getKey())); checkBoxModels.add(checkBoxModel); } return checkBoxModels.toArray(new CheckBoxModel[checkBoxModels.size()]); @@ -122,10 +110,7 @@ public class EditCommandActivity extends Activity { for (int i = 0; i < adapter.getCount(); i++) { CheckBoxModel checkBoxModel = (CheckBoxModel) adapter.getItem(i); Command command = editedCommands.get(i); - CommandSetting commandSetting = CommandSetting.selectByKey(command.getKey()); - commandSetting.visibility = checkBoxModel.isChecked(); - commandSetting.save(); - CommandSettingCache.getInstance().put(commandSetting); + CommandSetting.setVisible(command.getKey(), checkBoxModel.isChecked()); } super.onDestroy(); } diff --git a/app/src/main/java/net/lacolaco/smileessence/activity/MainActivity.java b/app/src/main/java/net/lacolaco/smileessence/activity/MainActivity.java index 3e65742f..6c82f26d 100644 --- a/app/src/main/java/net/lacolaco/smileessence/activity/MainActivity.java +++ b/app/src/main/java/net/lacolaco/smileessence/activity/MainActivity.java @@ -44,10 +44,8 @@ import net.lacolaco.smileessence.Application; import net.lacolaco.smileessence.BuildConfig; import net.lacolaco.smileessence.IntentRouter; import net.lacolaco.smileessence.R; -import net.lacolaco.smileessence.data.CommandSettingCache; import net.lacolaco.smileessence.data.UserListCache; -import net.lacolaco.smileessence.entity.Account; -import net.lacolaco.smileessence.entity.CommandSetting; +import net.lacolaco.smileessence.entity.*; import net.lacolaco.smileessence.logging.Logger; import net.lacolaco.smileessence.notification.NotificationType; import net.lacolaco.smileessence.notification.Notificator; @@ -63,7 +61,10 @@ import net.lacolaco.smileessence.view.adapter.*; import net.lacolaco.smileessence.view.dialog.ConfirmDialogFragment; import net.lacolaco.smileessence.viewmodel.*; import net.lacolaco.smileessence.viewmodel.menu.MainActivityMenuHelper; -import twitter4j.*; +import twitter4j.Paging; +import twitter4j.QueryResult; +import twitter4j.Twitter; +import twitter4j.TwitterStream; import java.util.Collection; import java.util.HashMap; @@ -417,7 +418,7 @@ public class MainActivity extends Activity { public void startMainLogic() { initializeView(); - initCommandSetting(); + CommandSetting.initialize(); startTwitter(); } @@ -437,7 +438,7 @@ public class MainActivity extends Activity { for (int i = tweets.size() - 1; i >= 0; i--) { twitter4j.Status status = tweets.get(i); if (!status.isRetweet()) { - StatusViewModel viewModel = new StatusViewModel(status, getCurrentAccount()); + StatusViewModel viewModel = new StatusViewModel(Tweet.fromTwitter(status)); adapter.addToTop(viewModel); StatusFilter.filter(MainActivity.this, viewModel); } @@ -491,7 +492,7 @@ public class MainActivity extends Activity { protected void onPostExecute(User user) { super.onPostExecute(user); if (user != null) { - String urlHttps = user.getProfileImageURLHttps(); + String urlHttps = user.getProfileImageUrl(); homeIcon.setScaleType(ImageView.ScaleType.FIT_CENTER); new BitmapURLTask(urlHttps, homeIcon).execute(); } @@ -558,21 +559,14 @@ public class MainActivity extends Activity { openPostPageWithImage(uri); } - private void initCommandSetting() { - List commandSettings = CommandSetting.getAll(); - for (CommandSetting setting : commandSettings) { - CommandSettingCache.getInstance().put(setting); - } - } - private void initHome(final Twitter twitter, final Paging paging) { new HomeTimelineTask(twitter, this, paging) { @Override - protected void onPostExecute(twitter4j.Status[] statuses) { - super.onPostExecute(statuses); + protected void onPostExecute(List tweets) { + super.onPostExecute(tweets); StatusListAdapter adapter = (StatusListAdapter) getListAdapter(AdapterID.Home); - for (twitter4j.Status status : statuses) { - StatusViewModel statusViewModel = new StatusViewModel(status, currentAccount); + for (Tweet tweet : tweets) { + StatusViewModel statusViewModel = new StatusViewModel(tweet); adapter.addToBottom(statusViewModel); StatusFilter.filter(MainActivity.this, statusViewModel); } @@ -589,11 +583,11 @@ public class MainActivity extends Activity { private void initMentions(final Twitter twitter, final Paging paging) { new MentionsTimelineTask(twitter, this, paging) { @Override - protected void onPostExecute(twitter4j.Status[] statuses) { - super.onPostExecute(statuses); + protected void onPostExecute(List tweets) { + super.onPostExecute(tweets); StatusListAdapter adapter = (StatusListAdapter) getListAdapter(AdapterID.Mentions); - for (twitter4j.Status status : statuses) { - adapter.addToBottom(new StatusViewModel(status, currentAccount)); + for (Tweet tweet : tweets) { + adapter.addToBottom(new StatusViewModel(tweet)); } adapter.updateForce(); } @@ -606,22 +600,22 @@ public class MainActivity extends Activity { } new DirectMessagesTask(twitter, this, paging) { @Override - protected void onPostExecute(DirectMessage[] directMessages) { + protected void onPostExecute(List directMessages) { super.onPostExecute(directMessages); MessageListAdapter adapter = (MessageListAdapter) getListAdapter(AdapterID.Messages); for (DirectMessage message : directMessages) { - adapter.addToBottom(new MessageViewModel(message, currentAccount)); + adapter.addToBottom(new MessageViewModel(message)); } adapter.notifyDataSetChanged(); } }.execute(); new SentDirectMessagesTask(twitter, this, paging) { @Override - protected void onPostExecute(DirectMessage[] directMessages) { + protected void onPostExecute(List directMessages) { super.onPostExecute(directMessages); MessageListAdapter adapter = (MessageListAdapter) getListAdapter(AdapterID.Messages); for (DirectMessage message : directMessages) { - adapter.addToBottom(new MessageViewModel(message, currentAccount)); + adapter.addToBottom(new MessageViewModel(message)); } adapter.notifyDataSetChanged(); } @@ -722,12 +716,12 @@ public class MainActivity extends Activity { adapter.setListFullName(listFullName); adapter.clear(); adapter.updateForce(); - new UserListStatusesTask(twitter, listFullName, this) { + new UserListStatusesTask(twitter, this, listFullName) { @Override - protected void onPostExecute(twitter4j.Status[] statuses) { - super.onPostExecute(statuses); - for (twitter4j.Status status : statuses) { - StatusViewModel statusViewModel = new StatusViewModel(status, getCurrentAccount()); + protected void onPostExecute(List tweets) { + super.onPostExecute(tweets); + for (Tweet tweet : tweets) { + StatusViewModel statusViewModel = new StatusViewModel(tweet); adapter.addToBottom(statusViewModel); StatusFilter.filter(MainActivity.this, statusViewModel); } diff --git a/app/src/main/java/net/lacolaco/smileessence/command/Command.java b/app/src/main/java/net/lacolaco/smileessence/command/Command.java index 5f0015ff..eb8cf797 100644 --- a/app/src/main/java/net/lacolaco/smileessence/command/Command.java +++ b/app/src/main/java/net/lacolaco/smileessence/command/Command.java @@ -33,13 +33,13 @@ import net.lacolaco.smileessence.R; import net.lacolaco.smileessence.command.message.*; import net.lacolaco.smileessence.command.status.*; import net.lacolaco.smileessence.command.user.*; -import net.lacolaco.smileessence.data.CommandSettingCache; import net.lacolaco.smileessence.entity.Account; +import net.lacolaco.smileessence.entity.CommandSetting; +import net.lacolaco.smileessence.entity.Tweet; +import net.lacolaco.smileessence.entity.User; import net.lacolaco.smileessence.viewmodel.IViewModel; -import twitter4j.DirectMessage; -import twitter4j.Status; -import twitter4j.User; +import net.lacolaco.smileessence.entity.DirectMessage; import java.util.ArrayList; import java.util.Iterator; @@ -81,23 +81,23 @@ public abstract class Command implements IViewModel { return commands; } - public static List getStatusCommands(Activity activity, Status status, Account account) { + public static List getStatusCommands(Activity activity, Tweet tweet, Account account) { List commands = new ArrayList<>(); - commands.add(new StatusCommandAddToReply(activity, status)); - commands.add(new StatusCommandOpenTalkView(activity, status, account)); - commands.add(new StatusCommandFavAndRT(activity, status, account)); - commands.add(new StatusCommandOpenQuoteDialog(activity, status)); - commands.add(new StatusCommandShare(activity, status)); - commands.add(new StatusCommandOpenInBrowser(activity, status)); - commands.add(new StatusCommandCopyTextToClipboard(activity, status)); - commands.add(new StatusCommandCopyURLToClipboard(activity, status)); - commands.add(new StatusCommandCopy(activity, status)); - commands.add(new StatusCommandSearchOnGoogle(activity, status)); - commands.add(new StatusCommandTofuBuster(activity, status)); - commands.add(new StatusCommandNanigaja(activity, status, account)); - commands.add(new StatusCommandMakeAnonymous(activity, status, account)); - commands.add(new StatusCommandCongratulate(activity, status, account)); - commands.add(new StatusCommandReview(activity, status)); + commands.add(new StatusCommandAddToReply(activity, tweet)); + commands.add(new StatusCommandOpenTalkView(activity, tweet, account)); + commands.add(new StatusCommandFavAndRT(activity, tweet, account)); + commands.add(new StatusCommandOpenQuoteDialog(activity, tweet)); + commands.add(new StatusCommandShare(activity, tweet)); + commands.add(new StatusCommandOpenInBrowser(activity, tweet)); + commands.add(new StatusCommandCopyTextToClipboard(activity, tweet)); + commands.add(new StatusCommandCopyURLToClipboard(activity, tweet)); + commands.add(new StatusCommandCopy(activity, tweet)); + commands.add(new StatusCommandSearchOnGoogle(activity, tweet)); + commands.add(new StatusCommandTofuBuster(activity, tweet)); + commands.add(new StatusCommandNanigaja(activity, tweet, account)); + commands.add(new StatusCommandMakeAnonymous(activity, tweet, account)); + commands.add(new StatusCommandCongratulate(activity, tweet, account)); + commands.add(new StatusCommandReview(activity, tweet)); return commands; } @@ -119,8 +119,7 @@ public abstract class Command implements IViewModel { if (!command.isEnabled()) { iterator.remove(); } else if (command.getKey() >= 0) { - boolean visibility = CommandSettingCache.getInstance().get(command.getKey()); - if (!visibility) { + if (!CommandSetting.isVisible(command.getKey())) { iterator.remove(); } } diff --git a/app/src/main/java/net/lacolaco/smileessence/command/CommandOpenUserDetail.java b/app/src/main/java/net/lacolaco/smileessence/command/CommandOpenUserDetail.java index dda629cd..09f0593c 100644 --- a/app/src/main/java/net/lacolaco/smileessence/command/CommandOpenUserDetail.java +++ b/app/src/main/java/net/lacolaco/smileessence/command/CommandOpenUserDetail.java @@ -28,6 +28,7 @@ import android.app.Activity; import net.lacolaco.smileessence.R; import net.lacolaco.smileessence.entity.Account; +import net.lacolaco.smileessence.entity.User; import net.lacolaco.smileessence.notification.NotificationType; import net.lacolaco.smileessence.notification.Notificator; import net.lacolaco.smileessence.twitter.TwitterApi; @@ -35,8 +36,6 @@ import net.lacolaco.smileessence.twitter.task.ShowUserTask; import net.lacolaco.smileessence.view.DialogHelper; import net.lacolaco.smileessence.view.dialog.UserDetailDialogFragment; -import twitter4j.User; - public class CommandOpenUserDetail extends Command { // ------------------------------ FIELDS ------------------------------ diff --git a/app/src/main/java/net/lacolaco/smileessence/command/message/MessageCommand.java b/app/src/main/java/net/lacolaco/smileessence/command/message/MessageCommand.java index a36b872d..9c05d80d 100644 --- a/app/src/main/java/net/lacolaco/smileessence/command/message/MessageCommand.java +++ b/app/src/main/java/net/lacolaco/smileessence/command/message/MessageCommand.java @@ -28,7 +28,7 @@ import android.app.Activity; import net.lacolaco.smileessence.command.Command; -import twitter4j.DirectMessage; +import net.lacolaco.smileessence.entity.DirectMessage; public abstract class MessageCommand extends Command { diff --git a/app/src/main/java/net/lacolaco/smileessence/command/message/MessageCommandCopyTextToClipboard.java b/app/src/main/java/net/lacolaco/smileessence/command/message/MessageCommandCopyTextToClipboard.java index 435090fa..7c598b89 100644 --- a/app/src/main/java/net/lacolaco/smileessence/command/message/MessageCommandCopyTextToClipboard.java +++ b/app/src/main/java/net/lacolaco/smileessence/command/message/MessageCommandCopyTextToClipboard.java @@ -31,7 +31,7 @@ import android.content.ClipboardManager; import net.lacolaco.smileessence.R; import net.lacolaco.smileessence.notification.Notificator; -import twitter4j.DirectMessage; +import net.lacolaco.smileessence.entity.DirectMessage; public class MessageCommandCopyTextToClipboard extends MessageCommand { diff --git a/app/src/main/java/net/lacolaco/smileessence/command/message/MessageCommandSearchOnGoogle.java b/app/src/main/java/net/lacolaco/smileessence/command/message/MessageCommandSearchOnGoogle.java index e8de560b..f23e86dd 100644 --- a/app/src/main/java/net/lacolaco/smileessence/command/message/MessageCommandSearchOnGoogle.java +++ b/app/src/main/java/net/lacolaco/smileessence/command/message/MessageCommandSearchOnGoogle.java @@ -30,7 +30,7 @@ import net.lacolaco.smileessence.R; import net.lacolaco.smileessence.view.DialogHelper; import net.lacolaco.smileessence.view.dialog.SearchOnGoogleDialogFragment; -import twitter4j.DirectMessage; +import net.lacolaco.smileessence.entity.DirectMessage; public class MessageCommandSearchOnGoogle extends MessageCommand { diff --git a/app/src/main/java/net/lacolaco/smileessence/command/message/MessageCommandShare.java b/app/src/main/java/net/lacolaco/smileessence/command/message/MessageCommandShare.java index f1a19d6d..5747dfdd 100644 --- a/app/src/main/java/net/lacolaco/smileessence/command/message/MessageCommandShare.java +++ b/app/src/main/java/net/lacolaco/smileessence/command/message/MessageCommandShare.java @@ -31,7 +31,7 @@ import net.lacolaco.smileessence.R; import net.lacolaco.smileessence.twitter.util.TwitterUtils; import net.lacolaco.smileessence.util.IntentUtils; -import twitter4j.DirectMessage; +import net.lacolaco.smileessence.entity.DirectMessage; public class MessageCommandShare extends MessageCommand { diff --git a/app/src/main/java/net/lacolaco/smileessence/command/message/MessageCommandTofuBuster.java b/app/src/main/java/net/lacolaco/smileessence/command/message/MessageCommandTofuBuster.java index 7b3bde07..5e46dbdd 100644 --- a/app/src/main/java/net/lacolaco/smileessence/command/message/MessageCommandTofuBuster.java +++ b/app/src/main/java/net/lacolaco/smileessence/command/message/MessageCommandTofuBuster.java @@ -31,7 +31,7 @@ import android.content.Intent; import net.lacolaco.smileessence.R; import net.lacolaco.smileessence.notification.Notificator; -import twitter4j.DirectMessage; +import net.lacolaco.smileessence.entity.DirectMessage; public class MessageCommandTofuBuster extends MessageCommand { diff --git a/app/src/main/java/net/lacolaco/smileessence/command/status/StatusCommand.java b/app/src/main/java/net/lacolaco/smileessence/command/status/StatusCommand.java index dd28dd5f..9f6f3edb 100644 --- a/app/src/main/java/net/lacolaco/smileessence/command/status/StatusCommand.java +++ b/app/src/main/java/net/lacolaco/smileessence/command/status/StatusCommand.java @@ -28,28 +28,29 @@ import android.app.Activity; import net.lacolaco.smileessence.command.Command; +import net.lacolaco.smileessence.entity.Tweet; import twitter4j.Status; public abstract class StatusCommand extends Command { // ------------------------------ FIELDS ------------------------------ - private final Status status; + private final Tweet tweet; // --------------------------- CONSTRUCTORS --------------------------- - public StatusCommand(int key, Activity activity, Status status) { + public StatusCommand(int key, Activity activity, Tweet tweet) { super(key, activity); - this.status = status; + this.tweet = tweet; } // --------------------- GETTER / SETTER METHODS --------------------- - protected final Status getOriginalStatus() { - return status.isRetweet() ? status.getRetweetedStatus() : status; + protected final Tweet getOriginalStatus() { + return tweet.getOriginalTweet(); } - protected final Status getStatus() { - return status; + protected final Tweet getStatus() { + return tweet; } } diff --git a/app/src/main/java/net/lacolaco/smileessence/command/status/StatusCommandAddToReply.java b/app/src/main/java/net/lacolaco/smileessence/command/status/StatusCommandAddToReply.java index ee7d2f74..f845258d 100644 --- a/app/src/main/java/net/lacolaco/smileessence/command/status/StatusCommandAddToReply.java +++ b/app/src/main/java/net/lacolaco/smileessence/command/status/StatusCommandAddToReply.java @@ -27,6 +27,7 @@ package net.lacolaco.smileessence.command.status; import android.app.Activity; import net.lacolaco.smileessence.R; +import net.lacolaco.smileessence.entity.Tweet; import net.lacolaco.smileessence.notification.Notificator; import net.lacolaco.smileessence.view.adapter.PostState; @@ -36,8 +37,8 @@ public class StatusCommandAddToReply extends StatusCommand { // --------------------------- CONSTRUCTORS --------------------------- - public StatusCommandAddToReply(Activity activity, Status status) { - super(R.id.key_command_status_add_to_reply, activity, status); + public StatusCommandAddToReply(Activity activity, Tweet tweet) { + super(R.id.key_command_status_add_to_reply, activity, tweet); } // --------------------- GETTER / SETTER METHODS --------------------- diff --git a/app/src/main/java/net/lacolaco/smileessence/command/status/StatusCommandCongratulate.java b/app/src/main/java/net/lacolaco/smileessence/command/status/StatusCommandCongratulate.java index 6c260358..577ad7f1 100644 --- a/app/src/main/java/net/lacolaco/smileessence/command/status/StatusCommandCongratulate.java +++ b/app/src/main/java/net/lacolaco/smileessence/command/status/StatusCommandCongratulate.java @@ -29,6 +29,7 @@ import android.app.Activity; import net.lacolaco.smileessence.R; import net.lacolaco.smileessence.command.IConfirmable; import net.lacolaco.smileessence.entity.Account; +import net.lacolaco.smileessence.entity.Tweet; import net.lacolaco.smileessence.twitter.TweetBuilder; import net.lacolaco.smileessence.twitter.TwitterApi; import net.lacolaco.smileessence.twitter.task.FavoriteTask; @@ -48,8 +49,8 @@ public class StatusCommandCongratulate extends StatusCommand implements IConfirm // --------------------------- CONSTRUCTORS --------------------------- - public StatusCommandCongratulate(Activity activity, Status status, Account account) { - super(R.id.key_command_status_congratulate, activity, status); + public StatusCommandCongratulate(Activity activity, Tweet tweet, Account account) { + super(R.id.key_command_status_congratulate, activity, tweet); this.account = account; } @@ -68,7 +69,6 @@ public class StatusCommandCongratulate extends StatusCommand implements IConfirm // -------------------------- OTHER METHODS -------------------------- public String build() { - Status status = getOriginalStatus(); int favCount; Random rand = new Random(); int r = rand.nextInt(100); @@ -84,18 +84,17 @@ public class StatusCommandCongratulate extends StatusCommand implements IConfirm favCount = 10000; } return String.format("@%s Congrats on your %s ★ tweet! http://favstar.fm/t/%s", - status.getUser().getScreenName(), favCount, status.getId()); + getOriginalStatus().getUser().getScreenName(), favCount, getOriginalStatus().getId()); } @Override public boolean execute() { - Status status = getOriginalStatus(); StatusUpdate update = new TweetBuilder().setText(build()) - .setInReplyToStatusID(status.getId()) + .setInReplyToStatusID(getOriginalStatus().getId()) .build(); Twitter twitter = new TwitterApi(account).getTwitter(); new TweetTask(twitter, update, getActivity()).execute(); - new FavoriteTask(twitter, status.getId(), getActivity()).execute(); + new FavoriteTask(twitter, getOriginalStatus().getId(), getActivity()).execute(); return true; } } diff --git a/app/src/main/java/net/lacolaco/smileessence/command/status/StatusCommandCopy.java b/app/src/main/java/net/lacolaco/smileessence/command/status/StatusCommandCopy.java index f1647465..64c220b0 100644 --- a/app/src/main/java/net/lacolaco/smileessence/command/status/StatusCommandCopy.java +++ b/app/src/main/java/net/lacolaco/smileessence/command/status/StatusCommandCopy.java @@ -28,6 +28,7 @@ import android.app.Activity; import net.lacolaco.smileessence.R; import net.lacolaco.smileessence.activity.MainActivity; +import net.lacolaco.smileessence.entity.Tweet; import net.lacolaco.smileessence.view.adapter.PostState; import twitter4j.Status; @@ -36,8 +37,8 @@ public class StatusCommandCopy extends StatusCommand { // --------------------------- CONSTRUCTORS --------------------------- - public StatusCommandCopy(Activity activity, Status status) { - super(R.id.key_command_status_copy, activity, status); + public StatusCommandCopy(Activity activity, Tweet tweet) { + super(R.id.key_command_status_copy, activity, tweet); } // --------------------- GETTER / SETTER METHODS --------------------- diff --git a/app/src/main/java/net/lacolaco/smileessence/command/status/StatusCommandCopyTextToClipboard.java b/app/src/main/java/net/lacolaco/smileessence/command/status/StatusCommandCopyTextToClipboard.java index c01a0929..65c38867 100644 --- a/app/src/main/java/net/lacolaco/smileessence/command/status/StatusCommandCopyTextToClipboard.java +++ b/app/src/main/java/net/lacolaco/smileessence/command/status/StatusCommandCopyTextToClipboard.java @@ -29,6 +29,7 @@ import android.content.ClipData; import android.content.ClipboardManager; import net.lacolaco.smileessence.R; +import net.lacolaco.smileessence.entity.Tweet; import net.lacolaco.smileessence.notification.Notificator; import twitter4j.Status; @@ -37,8 +38,8 @@ public class StatusCommandCopyTextToClipboard extends StatusCommand { // --------------------------- CONSTRUCTORS --------------------------- - public StatusCommandCopyTextToClipboard(Activity activity, Status status) { - super(R.id.key_command_status_copy_text_to_clipboard, activity, status); + public StatusCommandCopyTextToClipboard(Activity activity, Tweet tweet) { + super(R.id.key_command_status_copy_text_to_clipboard, activity, tweet); } // --------------------- GETTER / SETTER METHODS --------------------- diff --git a/app/src/main/java/net/lacolaco/smileessence/command/status/StatusCommandCopyURLToClipboard.java b/app/src/main/java/net/lacolaco/smileessence/command/status/StatusCommandCopyURLToClipboard.java index ea031d2a..65dbffea 100644 --- a/app/src/main/java/net/lacolaco/smileessence/command/status/StatusCommandCopyURLToClipboard.java +++ b/app/src/main/java/net/lacolaco/smileessence/command/status/StatusCommandCopyURLToClipboard.java @@ -29,6 +29,7 @@ import android.content.ClipData; import android.content.ClipboardManager; import net.lacolaco.smileessence.R; +import net.lacolaco.smileessence.entity.Tweet; import net.lacolaco.smileessence.notification.Notificator; import net.lacolaco.smileessence.twitter.util.TwitterUtils; @@ -38,8 +39,8 @@ public class StatusCommandCopyURLToClipboard extends StatusCommand { // --------------------------- CONSTRUCTORS --------------------------- - public StatusCommandCopyURLToClipboard(Activity activity, Status status) { - super(R.id.key_command_status_copy_url_to_clipboard, activity, status); + public StatusCommandCopyURLToClipboard(Activity activity, Tweet tweet) { + super(R.id.key_command_status_copy_url_to_clipboard, activity, tweet); } // --------------------- GETTER / SETTER METHODS --------------------- @@ -58,7 +59,7 @@ public class StatusCommandCopyURLToClipboard extends StatusCommand { @Override public boolean execute() { - String statusURL = TwitterUtils.getStatusURL(getOriginalStatus()); + String statusURL = getOriginalStatus().getTwitterUrl(); ClipboardManager manager = (ClipboardManager) getActivity().getSystemService(Activity.CLIPBOARD_SERVICE); manager.setPrimaryClip(ClipData.newPlainText("tweet url", statusURL)); Notificator.publish(getActivity(), R.string.notice_copy_clipboard); diff --git a/app/src/main/java/net/lacolaco/smileessence/command/status/StatusCommandFavAndRT.java b/app/src/main/java/net/lacolaco/smileessence/command/status/StatusCommandFavAndRT.java index 1f82e261..d7de6df7 100644 --- a/app/src/main/java/net/lacolaco/smileessence/command/status/StatusCommandFavAndRT.java +++ b/app/src/main/java/net/lacolaco/smileessence/command/status/StatusCommandFavAndRT.java @@ -29,12 +29,12 @@ import android.app.Activity; import net.lacolaco.smileessence.R; import net.lacolaco.smileessence.command.IConfirmable; import net.lacolaco.smileessence.entity.Account; +import net.lacolaco.smileessence.entity.Tweet; +import net.lacolaco.smileessence.entity.User; import net.lacolaco.smileessence.twitter.TwitterApi; import net.lacolaco.smileessence.twitter.task.FavoriteTask; import net.lacolaco.smileessence.twitter.task.RetweetTask; -import twitter4j.Status; -import twitter4j.User; public class StatusCommandFavAndRT extends StatusCommand implements IConfirmable { @@ -44,8 +44,8 @@ public class StatusCommandFavAndRT extends StatusCommand implements IConfirmable // --------------------------- CONSTRUCTORS --------------------------- - public StatusCommandFavAndRT(Activity activity, Status status, Account account) { - super(R.id.key_command_status_fav_and_rt, activity, status); + public StatusCommandFavAndRT(Activity activity, Tweet tweet, Account account) { + super(R.id.key_command_status_fav_and_rt, activity, tweet); this.account = account; } diff --git a/app/src/main/java/net/lacolaco/smileessence/command/status/StatusCommandMakeAnonymous.java b/app/src/main/java/net/lacolaco/smileessence/command/status/StatusCommandMakeAnonymous.java index 8526c30f..a0253e2b 100644 --- a/app/src/main/java/net/lacolaco/smileessence/command/status/StatusCommandMakeAnonymous.java +++ b/app/src/main/java/net/lacolaco/smileessence/command/status/StatusCommandMakeAnonymous.java @@ -29,6 +29,7 @@ import android.app.Activity; import net.lacolaco.smileessence.R; import net.lacolaco.smileessence.command.IConfirmable; import net.lacolaco.smileessence.entity.Account; +import net.lacolaco.smileessence.entity.Tweet; import net.lacolaco.smileessence.twitter.TweetBuilder; import net.lacolaco.smileessence.twitter.TwitterApi; import net.lacolaco.smileessence.twitter.task.FavoriteTask; @@ -46,15 +47,15 @@ public class StatusCommandMakeAnonymous extends StatusCommand implements IConfir // -------------------------- STATIC METHODS -------------------------- - public StatusCommandMakeAnonymous(Activity activity, Status status, Account account) { - super(R.id.key_command_status_make_anonymous, activity, status); + public StatusCommandMakeAnonymous(Activity activity, Tweet tweet, Account account) { + super(R.id.key_command_status_make_anonymous, activity, tweet); this.account = account; } // --------------------------- CONSTRUCTORS --------------------------- - public static String build(Activity activity, Status status, Account account) { - String str = status.getText(); + public static String build(Activity activity, Tweet tweet, Account account) { + String str = tweet.getText(); String header = ""; if (str.startsWith(".")) { str = str.replaceFirst(".", ""); diff --git a/app/src/main/java/net/lacolaco/smileessence/command/status/StatusCommandNanigaja.java b/app/src/main/java/net/lacolaco/smileessence/command/status/StatusCommandNanigaja.java index 99d786ae..1e6ce199 100644 --- a/app/src/main/java/net/lacolaco/smileessence/command/status/StatusCommandNanigaja.java +++ b/app/src/main/java/net/lacolaco/smileessence/command/status/StatusCommandNanigaja.java @@ -29,6 +29,7 @@ import android.app.Activity; import net.lacolaco.smileessence.R; import net.lacolaco.smileessence.command.IConfirmable; import net.lacolaco.smileessence.entity.Account; +import net.lacolaco.smileessence.entity.Tweet; import net.lacolaco.smileessence.twitter.TweetBuilder; import net.lacolaco.smileessence.twitter.TwitterApi; import net.lacolaco.smileessence.twitter.task.FavoriteTask; @@ -46,8 +47,8 @@ public class StatusCommandNanigaja extends StatusCommand implements IConfirmable // --------------------------- CONSTRUCTORS --------------------------- - public StatusCommandNanigaja(Activity activity, Status status, Account account) { - super(R.id.key_command_status_nanigaja, activity, status); + public StatusCommandNanigaja(Activity activity, Tweet tweet, Account account) { + super(R.id.key_command_status_nanigaja, activity, tweet); this.account = account; } @@ -66,15 +67,14 @@ public class StatusCommandNanigaja extends StatusCommand implements IConfirmable // -------------------------- OTHER METHODS -------------------------- public String build() { - Status status = getOriginalStatus(); - String str = status.getText(); + String str = getOriginalStatus().getText(); String header = ""; if (str.startsWith(".")) { str = str.replaceFirst(".", ""); } if (str.startsWith(String.format("@%s", account.screenName))) { str = str.replaceFirst(String.format("@%s", account.screenName), "").trim(); - header = "@" + status.getUser().getScreenName(); + header = "@" + getOriginalStatus().getUser().getScreenName(); } str = String.format("%s %s", header, String.format(getFormatString(getActivity()), str)).trim(); return str; @@ -82,13 +82,12 @@ public class StatusCommandNanigaja extends StatusCommand implements IConfirmable @Override public boolean execute() { - Status status = getOriginalStatus(); StatusUpdate update = new TweetBuilder().setText(build()) - .setInReplyToStatusID(status.getId()) + .setInReplyToStatusID(getOriginalStatus().getId()) .build(); Twitter twitter = new TwitterApi(account).getTwitter(); new TweetTask(twitter, update, getActivity()).execute(); - new FavoriteTask(twitter, status.getId(), getActivity()).execute(); + new FavoriteTask(twitter, getOriginalStatus().getId(), getActivity()).execute(); return true; } diff --git a/app/src/main/java/net/lacolaco/smileessence/command/status/StatusCommandOpenInBrowser.java b/app/src/main/java/net/lacolaco/smileessence/command/status/StatusCommandOpenInBrowser.java index bef7638b..818ef672 100644 --- a/app/src/main/java/net/lacolaco/smileessence/command/status/StatusCommandOpenInBrowser.java +++ b/app/src/main/java/net/lacolaco/smileessence/command/status/StatusCommandOpenInBrowser.java @@ -28,6 +28,7 @@ import android.app.Activity; import net.lacolaco.smileessence.R; import net.lacolaco.smileessence.command.CommandOpenURL; +import net.lacolaco.smileessence.entity.Tweet; import net.lacolaco.smileessence.twitter.util.TwitterUtils; import twitter4j.Status; @@ -36,8 +37,8 @@ public class StatusCommandOpenInBrowser extends StatusCommand { // --------------------------- CONSTRUCTORS --------------------------- - public StatusCommandOpenInBrowser(Activity activity, Status status) { - super(R.id.key_command_status_open_in_browser, activity, status); + public StatusCommandOpenInBrowser(Activity activity, Tweet tweet) { + super(R.id.key_command_status_open_in_browser, activity, tweet); } // --------------------- GETTER / SETTER METHODS --------------------- @@ -56,6 +57,6 @@ public class StatusCommandOpenInBrowser extends StatusCommand { @Override public boolean execute() { - return new CommandOpenURL(getActivity(), TwitterUtils.getStatusURL(getOriginalStatus())).execute(); + return new CommandOpenURL(getActivity(), getOriginalStatus().getTwitterUrl()).execute(); } } diff --git a/app/src/main/java/net/lacolaco/smileessence/command/status/StatusCommandOpenQuoteDialog.java b/app/src/main/java/net/lacolaco/smileessence/command/status/StatusCommandOpenQuoteDialog.java index ac08b98c..45fb06e6 100644 --- a/app/src/main/java/net/lacolaco/smileessence/command/status/StatusCommandOpenQuoteDialog.java +++ b/app/src/main/java/net/lacolaco/smileessence/command/status/StatusCommandOpenQuoteDialog.java @@ -27,6 +27,7 @@ package net.lacolaco.smileessence.command.status; import android.app.Activity; import net.lacolaco.smileessence.R; +import net.lacolaco.smileessence.entity.Tweet; import net.lacolaco.smileessence.view.DialogHelper; import net.lacolaco.smileessence.view.dialog.QuoteDialogFragment; @@ -36,8 +37,8 @@ public class StatusCommandOpenQuoteDialog extends StatusCommand { // --------------------------- CONSTRUCTORS --------------------------- - public StatusCommandOpenQuoteDialog(Activity activity, Status status) { - super(R.id.key_command_status_quote, activity, status); + public StatusCommandOpenQuoteDialog(Activity activity, Tweet tweet) { + super(R.id.key_command_status_quote, activity, tweet); } // --------------------- GETTER / SETTER METHODS --------------------- diff --git a/app/src/main/java/net/lacolaco/smileessence/command/status/StatusCommandOpenTalkView.java b/app/src/main/java/net/lacolaco/smileessence/command/status/StatusCommandOpenTalkView.java index 79e48fed..3034e9cc 100644 --- a/app/src/main/java/net/lacolaco/smileessence/command/status/StatusCommandOpenTalkView.java +++ b/app/src/main/java/net/lacolaco/smileessence/command/status/StatusCommandOpenTalkView.java @@ -28,6 +28,7 @@ import android.app.Activity; import net.lacolaco.smileessence.R; import net.lacolaco.smileessence.entity.Account; +import net.lacolaco.smileessence.entity.Tweet; import net.lacolaco.smileessence.view.DialogHelper; import net.lacolaco.smileessence.view.dialog.TalkChainDialogFragment; @@ -41,8 +42,8 @@ public class StatusCommandOpenTalkView extends StatusCommand { // --------------------------- CONSTRUCTORS --------------------------- - public StatusCommandOpenTalkView(Activity activity, Status status, Account account) { - super(R.id.key_command_status_open_chain, activity, status); + public StatusCommandOpenTalkView(Activity activity, Tweet tweet, Account account) { + super(R.id.key_command_status_open_chain, activity, tweet); this.account = account; } @@ -55,7 +56,7 @@ public class StatusCommandOpenTalkView extends StatusCommand { @Override public boolean isEnabled() { - return getOriginalStatus().getInReplyToStatusId() >= 0; + return getOriginalStatus().getInReplyTo() >= 0; } // -------------------------- OTHER METHODS -------------------------- diff --git a/app/src/main/java/net/lacolaco/smileessence/command/status/StatusCommandReview.java b/app/src/main/java/net/lacolaco/smileessence/command/status/StatusCommandReview.java index 755e9628..df5f6515 100644 --- a/app/src/main/java/net/lacolaco/smileessence/command/status/StatusCommandReview.java +++ b/app/src/main/java/net/lacolaco/smileessence/command/status/StatusCommandReview.java @@ -27,6 +27,7 @@ package net.lacolaco.smileessence.command.status; import android.app.Activity; import net.lacolaco.smileessence.R; +import net.lacolaco.smileessence.entity.Tweet; import net.lacolaco.smileessence.view.DialogHelper; import net.lacolaco.smileessence.view.dialog.ReviewDialogFragment; @@ -36,8 +37,8 @@ public class StatusCommandReview extends StatusCommand { // --------------------------- CONSTRUCTORS --------------------------- - public StatusCommandReview(Activity activity, Status status) { - super(R.id.key_command_status_review, activity, status); + public StatusCommandReview(Activity activity, Tweet tweet) { + super(R.id.key_command_status_review, activity, tweet); } // --------------------- GETTER / SETTER METHODS --------------------- diff --git a/app/src/main/java/net/lacolaco/smileessence/command/status/StatusCommandSearchOnGoogle.java b/app/src/main/java/net/lacolaco/smileessence/command/status/StatusCommandSearchOnGoogle.java index 0ecf8ca3..91738e23 100644 --- a/app/src/main/java/net/lacolaco/smileessence/command/status/StatusCommandSearchOnGoogle.java +++ b/app/src/main/java/net/lacolaco/smileessence/command/status/StatusCommandSearchOnGoogle.java @@ -27,6 +27,7 @@ package net.lacolaco.smileessence.command.status; import android.app.Activity; import net.lacolaco.smileessence.R; +import net.lacolaco.smileessence.entity.Tweet; import net.lacolaco.smileessence.view.DialogHelper; import net.lacolaco.smileessence.view.dialog.SearchOnGoogleDialogFragment; @@ -36,8 +37,8 @@ public class StatusCommandSearchOnGoogle extends StatusCommand { // --------------------------- CONSTRUCTORS --------------------------- - public StatusCommandSearchOnGoogle(Activity activity, Status status) { - super(R.id.key_command_status_search_on_google, activity, status); + public StatusCommandSearchOnGoogle(Activity activity, Tweet tweet) { + super(R.id.key_command_status_search_on_google, activity, tweet); } // --------------------- GETTER / SETTER METHODS --------------------- diff --git a/app/src/main/java/net/lacolaco/smileessence/command/status/StatusCommandShare.java b/app/src/main/java/net/lacolaco/smileessence/command/status/StatusCommandShare.java index 2874b3f9..57987380 100644 --- a/app/src/main/java/net/lacolaco/smileessence/command/status/StatusCommandShare.java +++ b/app/src/main/java/net/lacolaco/smileessence/command/status/StatusCommandShare.java @@ -28,6 +28,7 @@ import android.app.Activity; import android.content.Intent; import net.lacolaco.smileessence.R; +import net.lacolaco.smileessence.entity.Tweet; import net.lacolaco.smileessence.twitter.util.TwitterUtils; import net.lacolaco.smileessence.util.IntentUtils; @@ -37,8 +38,8 @@ public class StatusCommandShare extends StatusCommand { // --------------------------- CONSTRUCTORS --------------------------- - public StatusCommandShare(Activity activity, Status status) { - super(R.id.key_command_status_share, activity, status); + public StatusCommandShare(Activity activity, Tweet tweet) { + super(R.id.key_command_status_share, activity, tweet); } // --------------------- GETTER / SETTER METHODS --------------------- @@ -57,10 +58,12 @@ public class StatusCommandShare extends StatusCommand { @Override public boolean execute() { + String summary = String.format("@%s: %s", getOriginalStatus().getUser().getScreenName(), getOriginalStatus().getText()); + Intent intent = new Intent(); intent.setAction(Intent.ACTION_SEND); intent.setType("text/plain"); - intent.putExtra(Intent.EXTRA_TEXT, TwitterUtils.getStatusSummary(getOriginalStatus())); + intent.putExtra(Intent.EXTRA_TEXT, summary); IntentUtils.startActivityIfFound(getActivity(), intent); return true; } diff --git a/app/src/main/java/net/lacolaco/smileessence/command/status/StatusCommandTextQuote.java b/app/src/main/java/net/lacolaco/smileessence/command/status/StatusCommandTextQuote.java index f502c0fa..3c320066 100644 --- a/app/src/main/java/net/lacolaco/smileessence/command/status/StatusCommandTextQuote.java +++ b/app/src/main/java/net/lacolaco/smileessence/command/status/StatusCommandTextQuote.java @@ -28,6 +28,7 @@ import android.app.Activity; import net.lacolaco.smileessence.R; import net.lacolaco.smileessence.activity.MainActivity; +import net.lacolaco.smileessence.entity.Tweet; import net.lacolaco.smileessence.twitter.TweetBuilder; import net.lacolaco.smileessence.view.adapter.PostState; @@ -37,8 +38,8 @@ public class StatusCommandTextQuote extends StatusCommand { // --------------------------- CONSTRUCTORS --------------------------- - public StatusCommandTextQuote(Activity activity, Status status) { - super(-1, activity, status); + public StatusCommandTextQuote(Activity activity, Tweet tweet) { + super(-1, activity, tweet); } // --------------------- GETTER / SETTER METHODS --------------------- diff --git a/app/src/main/java/net/lacolaco/smileessence/command/status/StatusCommandTofuBuster.java b/app/src/main/java/net/lacolaco/smileessence/command/status/StatusCommandTofuBuster.java index 7ceb70a5..223f5dcd 100644 --- a/app/src/main/java/net/lacolaco/smileessence/command/status/StatusCommandTofuBuster.java +++ b/app/src/main/java/net/lacolaco/smileessence/command/status/StatusCommandTofuBuster.java @@ -29,6 +29,7 @@ import android.content.ActivityNotFoundException; import android.content.Intent; import net.lacolaco.smileessence.R; +import net.lacolaco.smileessence.entity.Tweet; import net.lacolaco.smileessence.notification.Notificator; import twitter4j.Status; @@ -37,8 +38,8 @@ public class StatusCommandTofuBuster extends StatusCommand { // --------------------------- CONSTRUCTORS --------------------------- - public StatusCommandTofuBuster(Activity activity, Status status) { - super(R.id.key_command_status_tofubuster, activity, status); + public StatusCommandTofuBuster(Activity activity, Tweet tweet) { + super(R.id.key_command_status_tofubuster, activity, tweet); } // --------------------- GETTER / SETTER METHODS --------------------- diff --git a/app/src/main/java/net/lacolaco/smileessence/command/status/StatusCommandURLQuote.java b/app/src/main/java/net/lacolaco/smileessence/command/status/StatusCommandURLQuote.java index 8e695cb9..29a5ec38 100644 --- a/app/src/main/java/net/lacolaco/smileessence/command/status/StatusCommandURLQuote.java +++ b/app/src/main/java/net/lacolaco/smileessence/command/status/StatusCommandURLQuote.java @@ -28,6 +28,7 @@ import android.app.Activity; import net.lacolaco.smileessence.R; import net.lacolaco.smileessence.activity.MainActivity; +import net.lacolaco.smileessence.entity.Tweet; import net.lacolaco.smileessence.twitter.util.TwitterUtils; import net.lacolaco.smileessence.view.adapter.PostState; @@ -37,8 +38,8 @@ public class StatusCommandURLQuote extends StatusCommand { // --------------------------- CONSTRUCTORS --------------------------- - public StatusCommandURLQuote(Activity activity, Status status) { - super(-1, activity, status); + public StatusCommandURLQuote(Activity activity, Tweet tweet) { + super(-1, activity, tweet); } // --------------------- GETTER / SETTER METHODS --------------------- @@ -57,7 +58,7 @@ public class StatusCommandURLQuote extends StatusCommand { @Override public boolean execute() { - String statusURL = TwitterUtils.getStatusURL(getOriginalStatus()); + String statusURL = getOriginalStatus().getTwitterUrl(); PostState.newState().beginTransaction() .setText(statusURL) .commitWithOpen((MainActivity) getActivity()); diff --git a/app/src/main/java/net/lacolaco/smileessence/command/user/UserCommand.java b/app/src/main/java/net/lacolaco/smileessence/command/user/UserCommand.java index a3fae3c8..b371c8a0 100644 --- a/app/src/main/java/net/lacolaco/smileessence/command/user/UserCommand.java +++ b/app/src/main/java/net/lacolaco/smileessence/command/user/UserCommand.java @@ -28,7 +28,7 @@ import android.app.Activity; import net.lacolaco.smileessence.command.Command; -import twitter4j.User; +import net.lacolaco.smileessence.entity.User; public abstract class UserCommand extends Command { diff --git a/app/src/main/java/net/lacolaco/smileessence/command/user/UserCommandAddToReply.java b/app/src/main/java/net/lacolaco/smileessence/command/user/UserCommandAddToReply.java index 6494eba4..bd0ae429 100644 --- a/app/src/main/java/net/lacolaco/smileessence/command/user/UserCommandAddToReply.java +++ b/app/src/main/java/net/lacolaco/smileessence/command/user/UserCommandAddToReply.java @@ -30,7 +30,7 @@ import net.lacolaco.smileessence.R; import net.lacolaco.smileessence.notification.Notificator; import net.lacolaco.smileessence.view.adapter.PostState; -import twitter4j.User; +import net.lacolaco.smileessence.entity.User; public class UserCommandAddToReply extends UserCommand { diff --git a/app/src/main/java/net/lacolaco/smileessence/command/user/UserCommandBlock.java b/app/src/main/java/net/lacolaco/smileessence/command/user/UserCommandBlock.java index ec1e9c0e..159d551a 100644 --- a/app/src/main/java/net/lacolaco/smileessence/command/user/UserCommandBlock.java +++ b/app/src/main/java/net/lacolaco/smileessence/command/user/UserCommandBlock.java @@ -32,7 +32,7 @@ import net.lacolaco.smileessence.entity.Account; import net.lacolaco.smileessence.twitter.TwitterApi; import net.lacolaco.smileessence.twitter.task.BlockTask; -import twitter4j.User; +import net.lacolaco.smileessence.entity.User; public class UserCommandBlock extends UserCommand implements IConfirmable { diff --git a/app/src/main/java/net/lacolaco/smileessence/command/user/UserCommandIntroduce.java b/app/src/main/java/net/lacolaco/smileessence/command/user/UserCommandIntroduce.java index f810aaae..566f3687 100644 --- a/app/src/main/java/net/lacolaco/smileessence/command/user/UserCommandIntroduce.java +++ b/app/src/main/java/net/lacolaco/smileessence/command/user/UserCommandIntroduce.java @@ -30,7 +30,7 @@ import net.lacolaco.smileessence.R; import net.lacolaco.smileessence.activity.MainActivity; import net.lacolaco.smileessence.view.adapter.PostState; -import twitter4j.User; +import net.lacolaco.smileessence.entity.User; public class UserCommandIntroduce extends UserCommand { diff --git a/app/src/main/java/net/lacolaco/smileessence/command/user/UserCommandOpenAclog.java b/app/src/main/java/net/lacolaco/smileessence/command/user/UserCommandOpenAclog.java index 63f304e1..e10ba654 100644 --- a/app/src/main/java/net/lacolaco/smileessence/command/user/UserCommandOpenAclog.java +++ b/app/src/main/java/net/lacolaco/smileessence/command/user/UserCommandOpenAclog.java @@ -30,7 +30,7 @@ import net.lacolaco.smileessence.R; import net.lacolaco.smileessence.command.CommandOpenURL; import net.lacolaco.smileessence.twitter.util.TwitterUtils; -import twitter4j.User; +import net.lacolaco.smileessence.entity.User; public class UserCommandOpenAclog extends UserCommand { diff --git a/app/src/main/java/net/lacolaco/smileessence/command/user/UserCommandOpenFavstar.java b/app/src/main/java/net/lacolaco/smileessence/command/user/UserCommandOpenFavstar.java index f0175e00..da55fe5e 100644 --- a/app/src/main/java/net/lacolaco/smileessence/command/user/UserCommandOpenFavstar.java +++ b/app/src/main/java/net/lacolaco/smileessence/command/user/UserCommandOpenFavstar.java @@ -30,7 +30,7 @@ import net.lacolaco.smileessence.R; import net.lacolaco.smileessence.command.CommandOpenURL; import net.lacolaco.smileessence.twitter.util.TwitterUtils; -import twitter4j.User; +import net.lacolaco.smileessence.entity.User; public class UserCommandOpenFavstar extends UserCommand { diff --git a/app/src/main/java/net/lacolaco/smileessence/command/user/UserCommandOpenTwilog.java b/app/src/main/java/net/lacolaco/smileessence/command/user/UserCommandOpenTwilog.java index 7ee8ec1c..584e1bae 100644 --- a/app/src/main/java/net/lacolaco/smileessence/command/user/UserCommandOpenTwilog.java +++ b/app/src/main/java/net/lacolaco/smileessence/command/user/UserCommandOpenTwilog.java @@ -30,7 +30,7 @@ import net.lacolaco.smileessence.R; import net.lacolaco.smileessence.command.CommandOpenURL; import net.lacolaco.smileessence.twitter.util.TwitterUtils; -import twitter4j.User; +import net.lacolaco.smileessence.entity.User; public class UserCommandOpenTwilog extends UserCommand { diff --git a/app/src/main/java/net/lacolaco/smileessence/command/user/UserCommandReply.java b/app/src/main/java/net/lacolaco/smileessence/command/user/UserCommandReply.java index 94dd6cfa..6c9cae7c 100644 --- a/app/src/main/java/net/lacolaco/smileessence/command/user/UserCommandReply.java +++ b/app/src/main/java/net/lacolaco/smileessence/command/user/UserCommandReply.java @@ -31,7 +31,7 @@ import net.lacolaco.smileessence.activity.MainActivity; import net.lacolaco.smileessence.twitter.TweetBuilder; import net.lacolaco.smileessence.view.adapter.PostState; -import twitter4j.User; +import net.lacolaco.smileessence.entity.User; public class UserCommandReply extends UserCommand { diff --git a/app/src/main/java/net/lacolaco/smileessence/command/user/UserCommandReportForSpam.java b/app/src/main/java/net/lacolaco/smileessence/command/user/UserCommandReportForSpam.java index 553dc632..79b037cc 100644 --- a/app/src/main/java/net/lacolaco/smileessence/command/user/UserCommandReportForSpam.java +++ b/app/src/main/java/net/lacolaco/smileessence/command/user/UserCommandReportForSpam.java @@ -32,7 +32,7 @@ import net.lacolaco.smileessence.entity.Account; import net.lacolaco.smileessence.twitter.TwitterApi; import net.lacolaco.smileessence.twitter.task.ReportForSpamTask; -import twitter4j.User; +import net.lacolaco.smileessence.entity.User; public class UserCommandReportForSpam extends UserCommand implements IConfirmable { diff --git a/app/src/main/java/net/lacolaco/smileessence/command/user/UserCommandSendMessage.java b/app/src/main/java/net/lacolaco/smileessence/command/user/UserCommandSendMessage.java index ee966031..ff3c434f 100644 --- a/app/src/main/java/net/lacolaco/smileessence/command/user/UserCommandSendMessage.java +++ b/app/src/main/java/net/lacolaco/smileessence/command/user/UserCommandSendMessage.java @@ -31,7 +31,7 @@ import net.lacolaco.smileessence.entity.Account; import net.lacolaco.smileessence.view.DialogHelper; import net.lacolaco.smileessence.view.dialog.SendMessageDialogFragment; -import twitter4j.User; +import net.lacolaco.smileessence.entity.User; public class UserCommandSendMessage extends UserCommand { diff --git a/app/src/main/java/net/lacolaco/smileessence/command/user/UserCommandUnblock.java b/app/src/main/java/net/lacolaco/smileessence/command/user/UserCommandUnblock.java index 7f1a8776..db271821 100644 --- a/app/src/main/java/net/lacolaco/smileessence/command/user/UserCommandUnblock.java +++ b/app/src/main/java/net/lacolaco/smileessence/command/user/UserCommandUnblock.java @@ -32,7 +32,7 @@ import net.lacolaco.smileessence.entity.Account; import net.lacolaco.smileessence.twitter.TwitterApi; import net.lacolaco.smileessence.twitter.task.UnblockTask; -import twitter4j.User; +import net.lacolaco.smileessence.entity.User; public class UserCommandUnblock extends UserCommand implements IConfirmable { diff --git a/app/src/main/java/net/lacolaco/smileessence/data/CommandSettingCache.java b/app/src/main/java/net/lacolaco/smileessence/data/CommandSettingCache.java deleted file mode 100644 index ad0ed9c6..00000000 --- a/app/src/main/java/net/lacolaco/smileessence/data/CommandSettingCache.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * The MIT License (MIT) - * - * Copyright (c) 2012-2014 lacolaco.net - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -package net.lacolaco.smileessence.data; - -import net.lacolaco.smileessence.entity.CommandSetting; - -import java.util.concurrent.ConcurrentHashMap; - -public class CommandSettingCache { - - // ------------------------------ FIELDS ------------------------------ - - private static CommandSettingCache instance = new CommandSettingCache(); - - private ConcurrentHashMap cache = new ConcurrentHashMap<>(); - - // -------------------------- STATIC METHODS -------------------------- - - private CommandSettingCache() { - } - - // --------------------------- CONSTRUCTORS --------------------------- - - public static CommandSettingCache getInstance() { - return instance; - } - - // -------------------------- OTHER METHODS -------------------------- - - public Boolean get(int id) { - Boolean visibility = cache.get(Integer.valueOf(id)); - return visibility != null ? visibility : true; - } - - public void put(CommandSetting commandSetting) { - cache.put(commandSetting.commandKey, commandSetting.visibility); - } - - public boolean remove(int id) { - return cache.remove(Integer.valueOf(id)); - } -} diff --git a/app/src/main/java/net/lacolaco/smileessence/data/DirectMessageCache.java b/app/src/main/java/net/lacolaco/smileessence/data/DirectMessageCache.java deleted file mode 100644 index c7a83b50..00000000 --- a/app/src/main/java/net/lacolaco/smileessence/data/DirectMessageCache.java +++ /dev/null @@ -1,91 +0,0 @@ -/* - * The MIT License (MIT) - * - * Copyright (c) 2012-2014 lacolaco.net - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -package net.lacolaco.smileessence.data; - -import twitter4j.DirectMessage; - -import java.util.Collection; -import java.util.concurrent.ConcurrentHashMap; - -public class DirectMessageCache { - - // ------------------------------ FIELDS ------------------------------ - - private static DirectMessageCache instance = new DirectMessageCache(); - - private ConcurrentHashMap cache = new ConcurrentHashMap<>(); - - // -------------------------- STATIC METHODS -------------------------- - - private DirectMessageCache() { - } - - // --------------------------- CONSTRUCTORS --------------------------- - - public static DirectMessageCache getInstance() { - return instance; - } - - // -------------------------- OTHER METHODS -------------------------- - - /** - * Get all elements - * - * @return cached all message - */ - public Collection all() { - return cache.values(); - } - - /** - * Get message by id - * - * @param id message id - * @return cached value - */ - public DirectMessage get(long id) { - return cache.get(id); - } - - /** - * Put message into cache - * - * @param message - * @return the previous value associated with key, or null if there was no mapping for key - */ - public DirectMessage put(DirectMessage message) { - return cache.put(message.getId(), message); - } - - /** - * Remove message by id - * - * @param id message id - * @return removed message - */ - public DirectMessage remove(long id) { - return cache.remove(id); - } -} diff --git a/app/src/main/java/net/lacolaco/smileessence/data/StatusCache.java b/app/src/main/java/net/lacolaco/smileessence/data/StatusCache.java deleted file mode 100644 index 76c89a40..00000000 --- a/app/src/main/java/net/lacolaco/smileessence/data/StatusCache.java +++ /dev/null @@ -1,98 +0,0 @@ -/* - * The MIT License (MIT) - * - * Copyright (c) 2012-2014 lacolaco.net - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -package net.lacolaco.smileessence.data; - -import twitter4j.Status; - -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.ConcurrentLinkedQueue; - -public class StatusCache { - - // ------------------------------ FIELDS ------------------------------ - - private static StatusCache instance = new StatusCache(); - - private ConcurrentHashMap cache = new ConcurrentHashMap<>(); - - private ConcurrentLinkedQueue ignoreIDs = new ConcurrentLinkedQueue<>(); - - // -------------------------- STATIC METHODS -------------------------- - - private StatusCache() { - } - - // --------------------------- CONSTRUCTORS --------------------------- - - public static StatusCache getInstance() { - return instance; - } - - // -------------------------- OTHER METHODS -------------------------- - - public void addToIgnoreStatus(long id) { - ignoreIDs.add(id); - } - - /** - * Get status by id - * - * @param id status id - * @return cached value - */ - public Status get(long id) { - return cache.get(id); - } - - public boolean isIgnored(long id) { - return ignoreIDs.contains(id); - } - - /** - * Put status into cache - * - * @param status - * @return the previous value associated with key, or null if there was no mapping for key - */ - public Status put(Status status) { - if (status.isRetweet()) { - put(status.getRetweetedStatus()); - } - if (cache.containsKey(status.getId())) { - cache.remove(status.getId()); - } - return cache.put(status.getId(), status); - } - - /** - * Remove status by id - * - * @param id status id - * @return removed status - */ - public Status remove(long id) { - return cache.remove(id); - } -} diff --git a/app/src/main/java/net/lacolaco/smileessence/data/UserCache.java b/app/src/main/java/net/lacolaco/smileessence/data/UserCache.java deleted file mode 100644 index 831a0949..00000000 --- a/app/src/main/java/net/lacolaco/smileessence/data/UserCache.java +++ /dev/null @@ -1,96 +0,0 @@ -/* - * The MIT License (MIT) - * - * Copyright (c) 2012-2014 lacolaco.net - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -package net.lacolaco.smileessence.data; - -import twitter4j.User; - -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.ConcurrentLinkedQueue; - -public class UserCache { - - // ------------------------------ FIELDS ------------------------------ - - private static UserCache instance = new UserCache(); - - private ConcurrentHashMap cache = new ConcurrentHashMap<>(); - - private ConcurrentLinkedQueue invisibleIDs = new ConcurrentLinkedQueue<>(); - - // -------------------------- STATIC METHODS -------------------------- - - private UserCache() { - } - - // --------------------------- CONSTRUCTORS --------------------------- - - public static UserCache getInstance() { - return instance; - } - - // -------------------------- OTHER METHODS -------------------------- - - /** - * Get user by id - * - * @param id user id - * @return cached value - */ - public User get(long id) { - return cache.get(id); - } - - public boolean isInvisibleUserID(long id) { - return invisibleIDs.contains(Long.valueOf(id)); - } - - /** - * Put user into cache - * - * @param user - * @return the previous value associated with key, or null if there was no mapping for key - */ - public User put(User user) { - return cache.put(user.getId(), user); - } - - public void putInvisibleUser(long id) { - invisibleIDs.add(id); - } - - /** - * Remove user by id - * - * @param id user id - * @return removed user - */ - public User remove(long id) { - return cache.remove(id); - } - - public void removeInvisibleUser(long id) { - invisibleIDs.remove(Long.valueOf(id)); - } -} diff --git a/app/src/main/java/net/lacolaco/smileessence/entity/CommandSetting.java b/app/src/main/java/net/lacolaco/smileessence/entity/CommandSetting.java index 3cb08ce0..ab9f9073 100644 --- a/app/src/main/java/net/lacolaco/smileessence/entity/CommandSetting.java +++ b/app/src/main/java/net/lacolaco/smileessence/entity/CommandSetting.java @@ -24,42 +24,65 @@ package net.lacolaco.smileessence.entity; -import com.activeandroid.Model; import com.activeandroid.annotation.Column; import com.activeandroid.annotation.Table; import com.activeandroid.query.Select; import java.util.List; +import java.util.concurrent.ConcurrentHashMap; -@Table(name = "Commands") -public class CommandSetting extends Model { +public class CommandSetting { + public static ConcurrentHashMap cache; - // ------------------------------ FIELDS ------------------------------ - - @Column(name = "CommandKey") - public int commandKey; - @Column(name = "Visibility") - public boolean visibility; - - // -------------------------- STATIC METHODS -------------------------- + public static boolean isVisible(int key) { + if (cache == null) { + throw new IllegalStateException("Call .initialize first"); + } + Boolean result = cache.get(key); + if (result == null) { + result = true; // default value + } + return result; + } - public CommandSetting() { - super(); + public static void setVisible(int key, boolean value) { + if (cache == null) { + throw new IllegalStateException("Call .initialize first"); + } + Model model = new Select().from(Model.class).where("CommandKey = ?", key).executeSingle(); + if (model == null) { + model = new Model(); + } + model.commandKey = key; + model.visibility = value; + model.save(); + cache.put(key, value); } - public CommandSetting(int commandKey, boolean visibility) { - super(); - this.commandKey = commandKey; - this.visibility = visibility; + public static void initialize() { + cache = new ConcurrentHashMap<>(); + List all = new Select().from(Model.class).execute(); + for(Model model : all) { + cache.put(model.commandKey, model.visibility); + } } - // --------------------------- CONSTRUCTORS --------------------------- + @Table(name = "Commands") + private static class Model extends com.activeandroid.Model { + // ------------------------------ FIELDS ------------------------------ + @Column(name = "CommandKey") + public int commandKey; // R.id はいってるらしいけどいいのこれ?(しらない) + @Column(name = "Visibility") + public boolean visibility; - public static List getAll() { - return new Select().from(CommandSetting.class).execute(); - } + public Model() { + super(); + } - public static CommandSetting selectByKey(int key) { - return new Select().from(CommandSetting.class).where("CommandKey = ?", key).executeSingle(); + public Model(int commandKey, boolean visibility) { + super(); + this.commandKey = commandKey; + this.visibility = visibility; + } } -} +} \ No newline at end of file diff --git a/app/src/main/java/net/lacolaco/smileessence/entity/DirectMessage.java b/app/src/main/java/net/lacolaco/smileessence/entity/DirectMessage.java new file mode 100644 index 00000000..dd870836 --- /dev/null +++ b/app/src/main/java/net/lacolaco/smileessence/entity/DirectMessage.java @@ -0,0 +1,114 @@ +package net.lacolaco.smileessence.entity; + +import com.google.common.base.Function; +import com.google.common.cache.Cache; +import com.google.common.cache.CacheBuilder; +import com.google.common.collect.Lists; +import twitter4j.*; + +import java.util.Date; +import java.util.List; + +public class DirectMessage { + // キャッシュ これも weak reference + private static Cache storage = CacheBuilder.newBuilder().weakValues().build(); + + public synchronized static DirectMessage fetch(long statusId) { + return storage.getIfPresent(statusId); + } + + public synchronized static void remove(long statusId) { + storage.invalidate(statusId); + } + + public synchronized static DirectMessage fromTwitter(twitter4j.DirectMessage st) { + DirectMessage t = fetch(st.getId()); + if (t == null) { + t = new DirectMessage(st); + storage.put(st.getId(), t); + } else { + t.update(st); + } + return t; + } + + public synchronized static List fromTwitter(List sts) { + return Lists.transform(sts, new Function() { + @Override + public DirectMessage apply(twitter4j.DirectMessage input) { + return DirectMessage.fromTwitter(input); + } + }); + } + + // インスタンス + private long id; + private User sender; + private User recipient; + 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); + } + + private void update(twitter4j.DirectMessage message) { + id = message.getId(); + sender = User.fromTwitter(message.getSender()); + recipient = User.fromTwitter(message.getRecipient()); + 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(); + } + + public long getId() { + return id; + } + + public User getSender() { + return sender; + } + + public User getRecipient() { + return recipient; + } + + public String getText() { + return text; + } + + public Date getCreatedAt() { + 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; + } +} diff --git a/app/src/main/java/net/lacolaco/smileessence/entity/MuteUserIds.java b/app/src/main/java/net/lacolaco/smileessence/entity/MuteUserIds.java new file mode 100644 index 00000000..e699adaa --- /dev/null +++ b/app/src/main/java/net/lacolaco/smileessence/entity/MuteUserIds.java @@ -0,0 +1,22 @@ +package net.lacolaco.smileessence.entity; + +import android.support.annotation.NonNull; + +import java.util.Collection; +import java.util.HashSet; +import java.util.Iterator; +import java.util.Set; + +public class MuteUserIds { + private static Set storage = new HashSet<>(); + + public synchronized static boolean isMuted(long userId) { + return storage.contains(userId); + } + + public synchronized static void remove(long userId) { + storage.remove(userId); + } + + public synchronized static void add(long userId) { storage.add(userId); } +} diff --git a/app/src/main/java/net/lacolaco/smileessence/entity/Tweet.java b/app/src/main/java/net/lacolaco/smileessence/entity/Tweet.java new file mode 100644 index 00000000..effec22f --- /dev/null +++ b/app/src/main/java/net/lacolaco/smileessence/entity/Tweet.java @@ -0,0 +1,159 @@ +package net.lacolaco.smileessence.entity; + +import com.google.common.base.Function; +import com.google.common.cache.Cache; +import com.google.common.cache.CacheBuilder; +import com.google.common.collect.Lists; +import net.lacolaco.smileessence.twitter.util.TwitterUtils; +import twitter4j.*; + +import java.util.Date; +import java.util.List; + +public class Tweet { + // キャッシュ こっちは soft reference + private static Cache storage = CacheBuilder.newBuilder().softValues().build(); + + public synchronized static Tweet fetch(long statusId) { + return storage.getIfPresent(statusId); + } + + public synchronized static void remove(long statusId) { + storage.invalidate(statusId); + } + + public synchronized static Tweet fromTwitter(final twitter4j.Status st) { + Tweet t = fetch(st.getId()); + if (t == null) { + t = new Tweet(st); + storage.put(st.getId(), t); + } else { + t.update(st); + } + return t; + } + + public synchronized static List fromTwitter(List sts) { + return Lists.transform(sts, new Function() { + @Override + public Tweet apply(twitter4j.Status input) { + return Tweet.fromTwitter(input); + } + }); + } + + // インスタンス + private long id; + private User user; + private String text; + private Date createdAt; + 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; + + private Tweet(twitter4j.Status st) { + update(st); + } + + private void update(twitter4j.Status status) { + id = status.getId(); + user = User.fromTwitter(status.getUser()); + text = TwitterUtils.replaceURLEntities(status.getText(), status.getURLEntities(), false); + createdAt = status.getCreatedAt(); + source = status.getSource(); + 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()); + } + } + + public String getTwitterUrl() { + return String.format("https://twitter.com/%s/status/%s", getOriginalTweet().getUser().getScreenName(), getOriginalTweet().getId()); + } + + public long getId() { + return id; + } + + public User getUser() { + return user; + } + + public String getText() { + return text; + } + + public Date getCreatedAt() { + return createdAt; + } + + public String getSource() { + return source; + } + + public boolean isRetweet() { + return isRetweet; + } + + public Tweet getRetweetedTweet() { + return retweetedTweet; + } + + public Tweet getOriginalTweet() { + if (isRetweet()) { + return getRetweetedTweet(); + } else { + return this; + } + } + + public int getFavoriteCount() { + return favoriteCount; + } + + public int getRetweetCount() { + 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; + } +} diff --git a/app/src/main/java/net/lacolaco/smileessence/entity/User.java b/app/src/main/java/net/lacolaco/smileessence/entity/User.java new file mode 100644 index 00000000..04f3e4fc --- /dev/null +++ b/app/src/main/java/net/lacolaco/smileessence/entity/User.java @@ -0,0 +1,134 @@ +package net.lacolaco.smileessence.entity; + +import com.google.common.cache.Cache; +import com.google.common.cache.CacheBuilder; + +public class User { + // 重複防止用キャッシュ こっちは weak reference + private static Cache storage = CacheBuilder.newBuilder().weakValues().build(); + + public synchronized static User fetch(long userId) { + return storage.getIfPresent(userId); + } + + public synchronized static User fromTwitter(final twitter4j.User st) { + User u = fetch(st.getId()); + if (u == null) { + u = new User(st); + storage.put(st.getId(), u); + } else { + u.update(st); + } + return u; + } + + // インスタンス + private long id; + private boolean isProtected; + private String screenName; + private String name; + private String profileImageUrl; + private String profileBannerUrl; + private String description; + private String location; + private String url; + private int favoritesCount; + private int statusesCount; + private int friendsCount; + private int followersCount; + private boolean isVerified; + + private User(twitter4j.User st) { + update(st); + } + + private void update(twitter4j.User user) { + id = user.getId(); + isProtected = user.isProtected(); + screenName = user.getScreenName(); + name = user.getName(); + profileImageUrl = user.getProfileImageURLHttps(); + profileBannerUrl = user.getProfileBannerURL(); + description = user.getDescription(); + location = user.getLocation(); + url = user.getURL(); + favoritesCount = user.getFavouritesCount(); + statusesCount = user.getStatusesCount(); + friendsCount = user.getFriendsCount(); + followersCount = user.getFollowersCount(); + isVerified = user.isVerified(); + } + + public long getId() { + return id; + } + + public boolean isProtected() { + return isProtected; + } + + public String getScreenName() { + return screenName; + } + + public String getName() { + return name; + } + + public String getProfileImageUrl() { + return profileImageUrl; + } + + public String getProfileImageUrlOriginal() { + return getProfileImageUrlWithSuffix(""); + } + + private String getProfileImageUrlWithSuffix(String suffix) { + String original = getProfileImageUrl(); + if (original != null) { + String url = original.substring(0, original.lastIndexOf("_")) + suffix; + int extIndex = original.lastIndexOf("."); + if (extIndex > original.lastIndexOf("/")) { + url += original.substring(extIndex); + } + return url; + } + return null; + } + + public String getProfileBannerUrl() { + return profileBannerUrl; + } + + public String getDescription() { + return description; + } + + public String getLocation() { + return location; + } + + public String getUrl() { + return url; + } + + public int getFavoritesCount() { + return favoritesCount; + } + + public int getStatusesCount() { + return statusesCount; + } + + public int getFriendsCount() { + return friendsCount; + } + + public int getFollowersCount() { + return followersCount; + } + + public boolean isVerified() { + return isVerified; + } +} diff --git a/app/src/main/java/net/lacolaco/smileessence/twitter/StatusFilter.java b/app/src/main/java/net/lacolaco/smileessence/twitter/StatusFilter.java index 986055d7..9c07fb6d 100644 --- a/app/src/main/java/net/lacolaco/smileessence/twitter/StatusFilter.java +++ b/app/src/main/java/net/lacolaco/smileessence/twitter/StatusFilter.java @@ -40,13 +40,13 @@ public class StatusFilter { } private static void extract(MainActivity activity, StatusViewModel status) { - if (status.isRetweet()) { + if (status.getTweet().isRetweet()) { return; } Pattern pattern; for (ExtractionWord word : ExtractionWord.getAll()) { pattern = Pattern.compile(word.text); - if (pattern.matcher(status.getText()).find()) { + if (pattern.matcher(status.getTweet().getText()).find()) { addToMentions(activity, status); } } 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 4fe692c8..2cd0954a 100644 --- a/app/src/main/java/net/lacolaco/smileessence/twitter/TweetBuilder.java +++ b/app/src/main/java/net/lacolaco/smileessence/twitter/TweetBuilder.java @@ -26,6 +26,7 @@ package net.lacolaco.smileessence.twitter; import android.text.TextUtils; +import net.lacolaco.smileessence.entity.Tweet; import twitter4j.Status; import twitter4j.StatusUpdate; @@ -54,8 +55,8 @@ public class TweetBuilder { return this; } - public TweetBuilder setQuotation(Status status) { - return setText(String.format(" RT @%s: %s", status.getUser().getScreenName(), status.getText())); + public TweetBuilder setQuotation(Tweet tweet) { + return setText(String.format(" RT @%s: %s", tweet.getUser().getScreenName(), tweet.getText())); } public TweetBuilder setText(String text) { diff --git a/app/src/main/java/net/lacolaco/smileessence/twitter/UserStreamListener.java b/app/src/main/java/net/lacolaco/smileessence/twitter/UserStreamListener.java index 41cabcc9..b34a8984 100644 --- a/app/src/main/java/net/lacolaco/smileessence/twitter/UserStreamListener.java +++ b/app/src/main/java/net/lacolaco/smileessence/twitter/UserStreamListener.java @@ -27,6 +27,9 @@ package net.lacolaco.smileessence.twitter; import net.lacolaco.smileessence.R; import net.lacolaco.smileessence.activity.MainActivity; import net.lacolaco.smileessence.data.*; +import net.lacolaco.smileessence.entity.DirectMessage; +import net.lacolaco.smileessence.entity.Tweet; +import net.lacolaco.smileessence.entity.User; import net.lacolaco.smileessence.notification.Notificator; import net.lacolaco.smileessence.view.adapter.CustomListAdapter; import net.lacolaco.smileessence.view.adapter.EventListAdapter; @@ -36,8 +39,9 @@ import net.lacolaco.smileessence.viewmodel.EnumEvent; import net.lacolaco.smileessence.viewmodel.EventViewModel; import net.lacolaco.smileessence.viewmodel.MessageViewModel; import net.lacolaco.smileessence.viewmodel.StatusViewModel; - -import twitter4j.*; +import twitter4j.ConnectionLifeCycleListener; +import twitter4j.Status; +import twitter4j.StatusDeletionNotice; public class UserStreamListener implements twitter4j.UserStreamListener, ConnectionLifeCycleListener { @@ -86,22 +90,19 @@ public class UserStreamListener implements twitter4j.UserStreamListener, Connect @Override public void onStatus(Status status) { - StatusCache.getInstance().put(status); - if (isIgnoredStatus(status)) { - return; - } - StatusViewModel viewModel = new StatusViewModel(status, activity.getCurrentAccount()); - addToHome(viewModel); - if (status.isRetweet()) { - if (viewModel.isRetweetOfMe()) { - addToHistory(new EventViewModel(EnumEvent.RETWEETED, status.getUser(), status)); - } - } else if (viewModel.isMention()) { - addToMentions(viewModel); - EventViewModel mentioned = new EventViewModel(EnumEvent.MENTIONED, status.getUser(), status); - Notificator.publish(activity, mentioned.getFormattedString(activity)); - } - StatusFilter.filter(activity, viewModel); + Tweet tweet = Tweet.fromTwitter(status); + StatusViewModel vm = new StatusViewModel(tweet); + addToHome(vm); + if (tweet.isRetweet()) { + //if (viewModel.isRetweetOfMe()) { + // addToHistory(new EventViewModel(EnumEvent.RETWEETED, status.getUser(), status)); + //} + }// else if (viewModel.isMention()) { + // addToMentions(viewModel); + // EventViewModel mentioned = new EventViewModel(EnumEvent.MENTIONED, status.getUser(), status); + // Notificator.publish(activity, mentioned.getFormattedString(activity)); + //} + StatusFilter.filter(activity, vm); FavoriteCache.getInstance().put(status); } @@ -114,7 +115,7 @@ public class UserStreamListener implements twitter4j.UserStreamListener, Connect statusListAdapter.updateForce(); } } - StatusCache.getInstance().remove(statusDeletionNotice.getStatusId()); + Tweet.remove(statusDeletionNotice.getStatusId()); } @Override @@ -126,7 +127,7 @@ public class UserStreamListener implements twitter4j.UserStreamListener, Connect } @Override - public void onStallWarning(StallWarning warning) { + public void onStallWarning(twitter4j.StallWarning warning) { } // --------------------- Interface StreamListener --------------------- @@ -143,7 +144,7 @@ public class UserStreamListener implements twitter4j.UserStreamListener, Connect MessageListAdapter messages = (MessageListAdapter) activity.getListAdapter(MainActivity.AdapterID.Messages); messages.removeByMessageID(directMessageId); messages.updateForce(); - DirectMessageCache.getInstance().remove(directMessageId); + DirectMessage.remove(directMessageId); } @Override @@ -151,12 +152,12 @@ public class UserStreamListener implements twitter4j.UserStreamListener, Connect } @Override - public void onFavorite(User source, User target, Status favoritedStatus) { - StatusCache.getInstance().put(favoritedStatus); - if (isMe(target)) { - addToHistory(new EventViewModel(EnumEvent.FAVORITED, source, favoritedStatus)); + public void onFavorite(twitter4j.User source, twitter4j.User target, Status favoritedStatus) { + Tweet tweet = Tweet.fromTwitter(favoritedStatus); + if (isMe(User.fromTwitter(target))) { + addToHistory(new EventViewModel(EnumEvent.FAVORITED, User.fromTwitter(source), tweet)); } - if (isMe(source)) { + if (isMe(User.fromTwitter(source))) { FavoriteCache.getInstance().put(favoritedStatus, true); activity.getListAdapter(MainActivity.AdapterID.Home).update(); activity.getListAdapter(MainActivity.AdapterID.Mentions).update(); @@ -164,76 +165,74 @@ public class UserStreamListener implements twitter4j.UserStreamListener, Connect } @Override - public void onUnfavorite(User source, User target, Status unfavoritedStatus) { - StatusCache.getInstance().put(unfavoritedStatus); + public void onUnfavorite(twitter4j.User source, twitter4j.User target, twitter4j.Status unfavoritedStatus) { + Tweet tweet = Tweet.fromTwitter(unfavoritedStatus); boolean unfavNoticeEnabled = activity.getUserPreferenceHelper().getValue(R.string.key_setting_notify_on_unfavorited, true); - if (isMe(target) && unfavNoticeEnabled) { - addToHistory(new EventViewModel(EnumEvent.UNFAVORITED, source, unfavoritedStatus)); + if (isMe(User.fromTwitter(target)) && unfavNoticeEnabled) { + addToHistory(new EventViewModel(EnumEvent.UNFAVORITED, User.fromTwitter(source), tweet)); } - if (isMe(source)) { - FavoriteCache.getInstance().put(unfavoritedStatus, false); + if (isMe(User.fromTwitter(source))) { + //FavoriteCache.getInstance().put(unfavoritedStatus, false); activity.getListAdapter(MainActivity.AdapterID.Home).update(); activity.getListAdapter(MainActivity.AdapterID.Mentions).update(); } } @Override - public void onFollow(User source, User followedUser) { - UserCache.getInstance().put(source); - UserCache.getInstance().put(followedUser); - if (isMe(followedUser)) { - addToHistory(new EventViewModel(EnumEvent.FOLLOWED, source)); + public void onFollow(twitter4j.User source, twitter4j.User followedUser) { + if (isMe(User.fromTwitter(followedUser))) { + addToHistory(new EventViewModel(EnumEvent.FOLLOWED, User.fromTwitter(source))); } } @Override - public void onUnfollow(User source, User unfollowedUser) { + public void onUnfollow(twitter4j.User source, twitter4j.User unfollowedUser) { } @Override - public void onDirectMessage(DirectMessage directMessage) { - DirectMessageCache.getInstance().put(directMessage); - if (isMe(directMessage.getRecipient())) { - addToHistory(new EventViewModel(EnumEvent.RECEIVE_MESSAGE, directMessage.getSender())); + public void onDirectMessage(twitter4j.DirectMessage directMessage) { + DirectMessage message = DirectMessage.fromTwitter(directMessage); + if (isMe(message.getRecipient())) { + addToHistory(new EventViewModel(EnumEvent.RECEIVE_MESSAGE, User.fromTwitter(directMessage.getSender()))); } - MessageViewModel message = new MessageViewModel(directMessage, activity.getCurrentAccount()); - addToMessages(message); + MessageViewModel vm = new MessageViewModel(message); + addToMessages(vm); } @Override - public void onUserListMemberAddition(User addedMember, User listOwner, UserList list) { + public void onUserListMemberAddition(twitter4j.User addedMember, twitter4j.User listOwner, twitter4j.UserList list) { } @Override - public void onUserListMemberDeletion(User deletedMember, User listOwner, UserList list) { + public void onUserListMemberDeletion(twitter4j.User deletedMember, twitter4j.User listOwner, twitter4j.UserList list) { } @Override - public void onUserListSubscription(User subscriber, User listOwner, UserList list) { + public void onUserListSubscription(twitter4j.User subscriber, twitter4j.User listOwner, twitter4j.UserList list) { UserListCache.getInstance().put(list.getFullName()); } @Override - public void onUserListUnsubscription(User subscriber, User listOwner, UserList list) { + public void onUserListUnsubscription(twitter4j.User subscriber, twitter4j.User listOwner, twitter4j.UserList list) { UserListCache.getInstance().remove(list.getFullName()); } @Override - public void onUserListCreation(User listOwner, UserList list) { + public void onUserListCreation(twitter4j.User listOwner, twitter4j.UserList list) { UserListCache.getInstance().put(list.getFullName()); } @Override - public void onUserListUpdate(User listOwner, UserList list) { + public void onUserListUpdate(twitter4j.User listOwner, twitter4j.UserList list) { } @Override - public void onUserListDeletion(User listOwner, UserList list) { + public void onUserListDeletion(twitter4j.User listOwner, twitter4j.UserList list) { UserListCache.getInstance().remove(list.getFullName()); } @Override - public void onUserProfileUpdate(User updatedUser) { + public void onUserProfileUpdate(twitter4j.User updatedUser) { } @Override @@ -245,29 +244,29 @@ public class UserStreamListener implements twitter4j.UserStreamListener, Connect } @Override - public void onBlock(User source, User blockedUser) { - if (isMe(blockedUser)) { - addToHistory(new EventViewModel(EnumEvent.BLOCKED, source)); + public void onBlock(twitter4j.User source, twitter4j.User blockedUser) { + if (isMe(User.fromTwitter(blockedUser))) { + addToHistory(new EventViewModel(EnumEvent.BLOCKED, User.fromTwitter(source))); } } @Override - public void onUnblock(User source, User unblockedUser) { - if (isMe(unblockedUser)) { - addToHistory(new EventViewModel(EnumEvent.UNBLOCKED, source)); + public void onUnblock(twitter4j.User source, twitter4j.User unblockedUser) { + if (isMe(User.fromTwitter(unblockedUser))) { + addToHistory(new EventViewModel(EnumEvent.UNBLOCKED, User.fromTwitter(source))); } } @Override - public void onRetweetedRetweet(User source, User target, Status retweetedStatus) { + public void onRetweetedRetweet(twitter4j.User source, twitter4j.User target, twitter4j.Status retweetedStatus) { } @Override - public void onFavoritedRetweet(User source, User target, Status favoritedRetweeet) { + public void onFavoritedRetweet(twitter4j.User source, twitter4j.User target, twitter4j.Status favoritedRetweeet) { } @Override - public void onQuotedTweet(User source, User target, Status quotingTweet) { + public void onQuotedTweet(twitter4j.User source, twitter4j.User target, twitter4j.Status quotingTweet) { } private void addToHistory(EventViewModel mentioned) { @@ -295,10 +294,6 @@ public class UserStreamListener implements twitter4j.UserStreamListener, Connect messages.update(); } - private boolean isIgnoredStatus(Status status) { - return status.isRetweet() && StatusCache.getInstance().isIgnored(status.getRetweetedStatus().getId()); - } - private boolean isMe(User user) { return user.getId() == getMyID(); } diff --git a/app/src/main/java/net/lacolaco/smileessence/twitter/task/BlockIDsTask.java b/app/src/main/java/net/lacolaco/smileessence/twitter/task/BlockIDsTask.java index cf57fb80..6e18ae99 100644 --- a/app/src/main/java/net/lacolaco/smileessence/twitter/task/BlockIDsTask.java +++ b/app/src/main/java/net/lacolaco/smileessence/twitter/task/BlockIDsTask.java @@ -24,7 +24,7 @@ package net.lacolaco.smileessence.twitter.task; -import net.lacolaco.smileessence.data.UserCache; +import net.lacolaco.smileessence.entity.MuteUserIds; import net.lacolaco.smileessence.logging.Logger; import twitter4j.IDs; @@ -32,9 +32,10 @@ import twitter4j.Twitter; import twitter4j.TwitterException; import java.util.ArrayList; +import java.util.Collections; import java.util.List; -public class BlockIDsTask extends TwitterTask { +public class BlockIDsTask extends TwitterTask> { // --------------------------- CONSTRUCTORS --------------------------- @@ -45,14 +46,14 @@ public class BlockIDsTask extends TwitterTask { // ------------------------ OVERRIDE METHODS ------------------------ @Override - protected void onPostExecute(Long[] blockIDs) { + protected void onPostExecute(List blockIDs) { for (Long blockID : blockIDs) { - UserCache.getInstance().putInvisibleUser(blockID); + MuteUserIds.add(blockID); } } @Override - protected Long[] doInBackground(Void... params) { + protected List doInBackground(Void... params) { try { List idList = new ArrayList<>(); long cursor = -1; @@ -65,10 +66,10 @@ public class BlockIDsTask extends TwitterTask { } while (cursor != 0); - return idList.toArray(new Long[idList.size()]); + return idList; } catch (TwitterException e) { Logger.error(e); - return new Long[0]; + return Collections.emptyList(); } } } diff --git a/app/src/main/java/net/lacolaco/smileessence/twitter/task/BlockTask.java b/app/src/main/java/net/lacolaco/smileessence/twitter/task/BlockTask.java index 70f59a21..d0f9728d 100644 --- a/app/src/main/java/net/lacolaco/smileessence/twitter/task/BlockTask.java +++ b/app/src/main/java/net/lacolaco/smileessence/twitter/task/BlockTask.java @@ -27,14 +27,13 @@ package net.lacolaco.smileessence.twitter.task; import android.app.Activity; import net.lacolaco.smileessence.R; -import net.lacolaco.smileessence.data.UserCache; +import net.lacolaco.smileessence.entity.User; import net.lacolaco.smileessence.logging.Logger; import net.lacolaco.smileessence.notification.NotificationType; import net.lacolaco.smileessence.notification.Notificator; import twitter4j.Twitter; import twitter4j.TwitterException; -import twitter4j.User; public class BlockTask extends TwitterTask { @@ -56,7 +55,6 @@ public class BlockTask extends TwitterTask { @Override protected void onPostExecute(User user) { if (user != null) { - UserCache.getInstance().put(user); new Notificator(activity, R.string.notice_block_succeeded).publish(); } else { new Notificator(activity, R.string.notice_block_failed, NotificationType.ALERT).publish(); @@ -66,7 +64,7 @@ public class BlockTask extends TwitterTask { @Override protected User doInBackground(Void... params) { try { - return twitter.users().createBlock(userID); + return User.fromTwitter(twitter.users().createBlock(userID)); } catch (TwitterException e) { e.printStackTrace(); Logger.error(e.toString()); diff --git a/app/src/main/java/net/lacolaco/smileessence/twitter/task/DeleteMessageTask.java b/app/src/main/java/net/lacolaco/smileessence/twitter/task/DeleteMessageTask.java index c218cfe5..36ad887f 100644 --- a/app/src/main/java/net/lacolaco/smileessence/twitter/task/DeleteMessageTask.java +++ b/app/src/main/java/net/lacolaco/smileessence/twitter/task/DeleteMessageTask.java @@ -27,12 +27,11 @@ package net.lacolaco.smileessence.twitter.task; import android.app.Activity; import net.lacolaco.smileessence.R; -import net.lacolaco.smileessence.data.DirectMessageCache; import net.lacolaco.smileessence.logging.Logger; import net.lacolaco.smileessence.notification.NotificationType; import net.lacolaco.smileessence.notification.Notificator; -import twitter4j.DirectMessage; +import net.lacolaco.smileessence.entity.DirectMessage; import twitter4j.Twitter; import twitter4j.TwitterException; @@ -56,7 +55,6 @@ public class DeleteMessageTask extends TwitterTask { @Override protected void onPostExecute(DirectMessage message) { if (message != null) { - DirectMessageCache.getInstance().put(message); new Notificator(activity, R.string.notice_message_delete_succeeded).publish(); } else { new Notificator(activity, R.string.notice_message_delete_failed, NotificationType.ALERT).publish(); @@ -66,7 +64,7 @@ public class DeleteMessageTask extends TwitterTask { @Override protected DirectMessage doInBackground(Void... params) { try { - return twitter.directMessages().destroyDirectMessage(messageID); + return DirectMessage.fromTwitter(twitter.directMessages().destroyDirectMessage(messageID)); } catch (TwitterException e) { e.printStackTrace(); Logger.error(e.toString()); diff --git a/app/src/main/java/net/lacolaco/smileessence/twitter/task/DeleteStatusTask.java b/app/src/main/java/net/lacolaco/smileessence/twitter/task/DeleteStatusTask.java index 7dcc7b07..c770f5f7 100644 --- a/app/src/main/java/net/lacolaco/smileessence/twitter/task/DeleteStatusTask.java +++ b/app/src/main/java/net/lacolaco/smileessence/twitter/task/DeleteStatusTask.java @@ -27,7 +27,7 @@ package net.lacolaco.smileessence.twitter.task; import android.app.Activity; import net.lacolaco.smileessence.R; -import net.lacolaco.smileessence.data.StatusCache; +import net.lacolaco.smileessence.entity.Tweet; import net.lacolaco.smileessence.logging.Logger; import net.lacolaco.smileessence.notification.NotificationType; import net.lacolaco.smileessence.notification.Notificator; @@ -36,7 +36,7 @@ import twitter4j.Status; import twitter4j.Twitter; import twitter4j.TwitterException; -public class DeleteStatusTask extends TwitterTask { +public class DeleteStatusTask extends TwitterTask { // ------------------------------ FIELDS ------------------------------ @@ -54,9 +54,9 @@ public class DeleteStatusTask extends TwitterTask { // ------------------------ OVERRIDE METHODS ------------------------ @Override - protected void onPostExecute(twitter4j.Status status) { - if (status != null) { - StatusCache.getInstance().remove(status.getId()); + protected void onPostExecute(Tweet tweet) { + if (tweet != null) { + Tweet.remove(tweet.getId()); new Notificator(activity, R.string.notice_status_delete_succeeded).publish(); } else { new Notificator(activity, R.string.notice_status_delete_failed, NotificationType.ALERT).publish(); @@ -64,9 +64,9 @@ public class DeleteStatusTask extends TwitterTask { } @Override - protected twitter4j.Status doInBackground(Void... params) { + protected Tweet doInBackground(Void... params) { try { - return twitter.tweets().destroyStatus(statusID); + return Tweet.fromTwitter(twitter.tweets().destroyStatus(statusID)); } catch (TwitterException e) { e.printStackTrace(); Logger.error(e.toString()); diff --git a/app/src/main/java/net/lacolaco/smileessence/twitter/task/DirectMessagesTask.java b/app/src/main/java/net/lacolaco/smileessence/twitter/task/DirectMessagesTask.java index 13b69255..481a0e6f 100644 --- a/app/src/main/java/net/lacolaco/smileessence/twitter/task/DirectMessagesTask.java +++ b/app/src/main/java/net/lacolaco/smileessence/twitter/task/DirectMessagesTask.java @@ -27,14 +27,19 @@ package net.lacolaco.smileessence.twitter.task; import android.app.Activity; import net.lacolaco.smileessence.R; -import net.lacolaco.smileessence.data.DirectMessageCache; +import net.lacolaco.smileessence.entity.DirectMessage; import net.lacolaco.smileessence.logging.Logger; import net.lacolaco.smileessence.notification.NotificationType; import net.lacolaco.smileessence.notification.Notificator; -import twitter4j.*; +import twitter4j.Paging; +import twitter4j.Twitter; +import twitter4j.TwitterException; -public class DirectMessagesTask extends TwitterTask { +import java.util.Collections; +import java.util.List; + +public class DirectMessagesTask extends TwitterTask> { // ------------------------------ FIELDS ------------------------------ @@ -43,10 +48,6 @@ public class DirectMessagesTask extends TwitterTask { // --------------------------- CONSTRUCTORS --------------------------- - protected DirectMessagesTask(Twitter twitter, Activity activity) { - this(twitter, activity, null); - } - public DirectMessagesTask(Twitter twitter, Activity activity, Paging paging) { super(twitter); this.activity = activity; @@ -56,23 +57,13 @@ public class DirectMessagesTask extends TwitterTask { // ------------------------ OVERRIDE METHODS ------------------------ @Override - protected void onPostExecute(DirectMessage[] directMessages) { - if (directMessages.length != 0) { - for (DirectMessage message : directMessages) { - DirectMessageCache.getInstance().put(message); - } - } + protected void onPostExecute(List directMessages) { } @Override - protected DirectMessage[] doInBackground(Void... params) { - ResponseList responseList; + protected List doInBackground(Void... params) { try { - if (paging == null) { - responseList = twitter.directMessages().getDirectMessages(); - } else { - responseList = twitter.directMessages().getDirectMessages(paging); - } + return DirectMessage.fromTwitter(twitter.directMessages().getDirectMessages(paging)); } catch (TwitterException e) { e.printStackTrace(); Logger.error(e.toString()); @@ -81,8 +72,7 @@ public class DirectMessagesTask extends TwitterTask { } else { Notificator.publish(activity, R.string.notice_error_get_messages, NotificationType.ALERT); } - return new DirectMessage[0]; + return Collections.emptyList(); } - return responseList.toArray(new DirectMessage[responseList.size()]); } } diff --git a/app/src/main/java/net/lacolaco/smileessence/twitter/task/FavoriteTask.java b/app/src/main/java/net/lacolaco/smileessence/twitter/task/FavoriteTask.java index d0ee13c5..491437c6 100644 --- a/app/src/main/java/net/lacolaco/smileessence/twitter/task/FavoriteTask.java +++ b/app/src/main/java/net/lacolaco/smileessence/twitter/task/FavoriteTask.java @@ -27,7 +27,7 @@ package net.lacolaco.smileessence.twitter.task; import android.app.Activity; import net.lacolaco.smileessence.R; -import net.lacolaco.smileessence.data.StatusCache; +import net.lacolaco.smileessence.entity.Tweet; import net.lacolaco.smileessence.logging.Logger; import net.lacolaco.smileessence.notification.NotificationType; import net.lacolaco.smileessence.notification.Notificator; @@ -36,7 +36,7 @@ import twitter4j.Status; import twitter4j.Twitter; import twitter4j.TwitterException; -public class FavoriteTask extends TwitterTask { +public class FavoriteTask extends TwitterTask { // ------------------------------ FIELDS ------------------------------ @@ -54,9 +54,8 @@ public class FavoriteTask extends TwitterTask { // ------------------------ OVERRIDE METHODS ------------------------ @Override - protected void onPostExecute(twitter4j.Status status) { - if (status != null) { - StatusCache.getInstance().put(status); + protected void onPostExecute(Tweet tweet) { + if (tweet != null) { new Notificator(activity, R.string.notice_favorite_succeeded).publish(); } else { new Notificator(activity, R.string.notice_favorite_failed, NotificationType.ALERT).publish(); @@ -64,9 +63,9 @@ public class FavoriteTask extends TwitterTask { } @Override - protected twitter4j.Status doInBackground(Void... params) { + protected Tweet doInBackground(Void... params) { try { - return twitter.favorites().createFavorite(statusID); + return Tweet.fromTwitter(twitter.favorites().createFavorite(statusID)); } catch (TwitterException e) { e.printStackTrace(); Logger.error(e.toString()); diff --git a/app/src/main/java/net/lacolaco/smileessence/twitter/task/FollowTask.java b/app/src/main/java/net/lacolaco/smileessence/twitter/task/FollowTask.java index ecd6fe17..604d41ce 100644 --- a/app/src/main/java/net/lacolaco/smileessence/twitter/task/FollowTask.java +++ b/app/src/main/java/net/lacolaco/smileessence/twitter/task/FollowTask.java @@ -27,14 +27,13 @@ package net.lacolaco.smileessence.twitter.task; import android.app.Activity; import net.lacolaco.smileessence.R; -import net.lacolaco.smileessence.data.UserCache; +import net.lacolaco.smileessence.entity.User; import net.lacolaco.smileessence.logging.Logger; import net.lacolaco.smileessence.notification.NotificationType; import net.lacolaco.smileessence.notification.Notificator; import twitter4j.Twitter; import twitter4j.TwitterException; -import twitter4j.User; public class FollowTask extends TwitterTask { @@ -56,7 +55,6 @@ public class FollowTask extends TwitterTask { @Override protected void onPostExecute(User user) { if (user != null) { - UserCache.getInstance().put(user); new Notificator(activity, R.string.notice_follow_succeeded).publish(); } else { new Notificator(activity, R.string.notice_follow_failed, NotificationType.ALERT).publish(); @@ -66,7 +64,7 @@ public class FollowTask extends TwitterTask { @Override protected User doInBackground(Void... params) { try { - return twitter.friendsFollowers().createFriendship(userID); + return User.fromTwitter(twitter.friendsFollowers().createFriendship(userID)); } catch (TwitterException e) { e.printStackTrace(); Logger.error(e.toString()); diff --git a/app/src/main/java/net/lacolaco/smileessence/twitter/task/GetTalkTask.java b/app/src/main/java/net/lacolaco/smileessence/twitter/task/GetTalkTask.java new file mode 100644 index 00000000..2c7f8205 --- /dev/null +++ b/app/src/main/java/net/lacolaco/smileessence/twitter/task/GetTalkTask.java @@ -0,0 +1,40 @@ +package net.lacolaco.smileessence.twitter.task; + +import net.lacolaco.smileessence.entity.Tweet; +import net.lacolaco.smileessence.logging.Logger; +import twitter4j.Status; +import twitter4j.Twitter; +import twitter4j.TwitterException; + +import java.util.ArrayList; +import java.util.List; + +public class GetTalkTask extends TwitterTaskWithProgress, Tweet> { + private final long statusId; + + public GetTalkTask(Twitter twitter, long statusId) { + super(twitter); + this.statusId = statusId; + } + + @Override + protected List doInBackground(Void... params) { + ArrayList list = new ArrayList<>(); + try { + long id = statusId; + while (id != -1) { + Tweet tweet = Tweet.fromTwitter(twitter.showStatus(id)); + if (tweet != null) { + publishProgress(tweet); + list.add(tweet); + } else { + break; + } + } + } catch (TwitterException e) { + e.printStackTrace(); + Logger.error(e); + } + return list; + } +} diff --git a/app/src/main/java/net/lacolaco/smileessence/twitter/task/HomeTimelineTask.java b/app/src/main/java/net/lacolaco/smileessence/twitter/task/HomeTimelineTask.java index 9b435f74..2b56969f 100644 --- a/app/src/main/java/net/lacolaco/smileessence/twitter/task/HomeTimelineTask.java +++ b/app/src/main/java/net/lacolaco/smileessence/twitter/task/HomeTimelineTask.java @@ -26,16 +26,21 @@ package net.lacolaco.smileessence.twitter.task; import android.app.Activity; +import com.google.common.base.Function; +import com.google.common.collect.Lists; import net.lacolaco.smileessence.R; import net.lacolaco.smileessence.data.FavoriteCache; -import net.lacolaco.smileessence.data.StatusCache; +import net.lacolaco.smileessence.entity.Tweet; import net.lacolaco.smileessence.logging.Logger; import net.lacolaco.smileessence.notification.NotificationType; import net.lacolaco.smileessence.notification.Notificator; import twitter4j.*; -public class HomeTimelineTask extends TwitterTask { +import java.util.Collections; +import java.util.List; + +public class HomeTimelineTask extends TwitterTask> { // ------------------------------ FIELDS ------------------------------ @@ -44,10 +49,6 @@ public class HomeTimelineTask extends TwitterTask { // --------------------------- CONSTRUCTORS --------------------------- - public HomeTimelineTask(Twitter twitter, Activity activity) { - this(twitter, activity, null); - } - public HomeTimelineTask(Twitter twitter, Activity activity, Paging paging) { super(twitter); this.activity = activity; @@ -57,24 +58,16 @@ public class HomeTimelineTask extends TwitterTask { // ------------------------ OVERRIDE METHODS ------------------------ @Override - protected void onPostExecute(twitter4j.Status[] statuses) { - if (statuses.length != 0) { - for (twitter4j.Status status : statuses) { - StatusCache.getInstance().put(status); - FavoriteCache.getInstance().put(status); - } + protected void onPostExecute(List tweets) { + for (Tweet tweet : tweets) { + // FavoriteCache.getInstance().put(tweet); } } @Override - protected twitter4j.Status[] doInBackground(Void... params) { - ResponseList responseList; + protected List doInBackground(Void... params) { try { - if (paging == null) { - responseList = twitter.timelines().getHomeTimeline(); - } else { - responseList = twitter.timelines().getHomeTimeline(paging); - } + return Tweet.fromTwitter(twitter.timelines().getHomeTimeline(paging)); } catch (TwitterException e) { e.printStackTrace(); Logger.error(e.toString()); @@ -83,8 +76,7 @@ public class HomeTimelineTask extends TwitterTask { } else { Notificator.publish(activity, R.string.notice_error_get_home, NotificationType.ALERT); } - return new twitter4j.Status[0]; + return Collections.emptyList(); } - return responseList.toArray(new twitter4j.Status[responseList.size()]); } } diff --git a/app/src/main/java/net/lacolaco/smileessence/twitter/task/MentionsTimelineTask.java b/app/src/main/java/net/lacolaco/smileessence/twitter/task/MentionsTimelineTask.java index 87d9aacf..d38bb380 100644 --- a/app/src/main/java/net/lacolaco/smileessence/twitter/task/MentionsTimelineTask.java +++ b/app/src/main/java/net/lacolaco/smileessence/twitter/task/MentionsTimelineTask.java @@ -28,14 +28,17 @@ import android.app.Activity; import net.lacolaco.smileessence.R; import net.lacolaco.smileessence.data.FavoriteCache; -import net.lacolaco.smileessence.data.StatusCache; +import net.lacolaco.smileessence.entity.Tweet; import net.lacolaco.smileessence.logging.Logger; import net.lacolaco.smileessence.notification.NotificationType; import net.lacolaco.smileessence.notification.Notificator; import twitter4j.*; -public class MentionsTimelineTask extends TwitterTask { +import java.util.Collections; +import java.util.List; + +public class MentionsTimelineTask extends TwitterTask> { // ------------------------------ FIELDS ------------------------------ @@ -44,10 +47,6 @@ public class MentionsTimelineTask extends TwitterTask { // --------------------------- CONSTRUCTORS --------------------------- - protected MentionsTimelineTask(Twitter twitter, Activity activity) { - this(twitter, activity, null); - } - public MentionsTimelineTask(Twitter twitter, Activity activity, Paging paging) { super(twitter); this.activity = activity; @@ -57,24 +56,16 @@ public class MentionsTimelineTask extends TwitterTask { // ------------------------ OVERRIDE METHODS ------------------------ @Override - protected void onPostExecute(twitter4j.Status[] statuses) { - if (statuses.length != 0) { - for (twitter4j.Status status : statuses) { - StatusCache.getInstance().put(status); - FavoriteCache.getInstance().put(status); - } + protected void onPostExecute(List tweets) { + for (Tweet tweet : tweets) { + //FavoriteCache.getInstance().put(tweet); } } @Override - protected twitter4j.Status[] doInBackground(Void... params) { - ResponseList responseList; + protected List doInBackground(Void... params) { try { - if (paging == null) { - responseList = twitter.timelines().getMentionsTimeline(); - } else { - responseList = twitter.timelines().getMentionsTimeline(paging); - } + return Tweet.fromTwitter(twitter.timelines().getMentionsTimeline(paging)); } catch (TwitterException e) { e.printStackTrace(); Logger.error(e.toString()); @@ -83,8 +74,7 @@ public class MentionsTimelineTask extends TwitterTask { } else { Notificator.publish(activity, R.string.notice_error_get_mentions, NotificationType.ALERT); } - return new twitter4j.Status[0]; + return Collections.emptyList(); } - return responseList.toArray(new twitter4j.Status[responseList.size()]); } } diff --git a/app/src/main/java/net/lacolaco/smileessence/twitter/task/MutesIDsTask.java b/app/src/main/java/net/lacolaco/smileessence/twitter/task/MutesIDsTask.java index d65b4bce..fa5a93b1 100644 --- a/app/src/main/java/net/lacolaco/smileessence/twitter/task/MutesIDsTask.java +++ b/app/src/main/java/net/lacolaco/smileessence/twitter/task/MutesIDsTask.java @@ -24,7 +24,7 @@ package net.lacolaco.smileessence.twitter.task; -import net.lacolaco.smileessence.data.UserCache; +import net.lacolaco.smileessence.entity.MuteUserIds; import net.lacolaco.smileessence.logging.Logger; import twitter4j.IDs; @@ -32,9 +32,10 @@ import twitter4j.Twitter; import twitter4j.TwitterException; import java.util.ArrayList; +import java.util.Collections; import java.util.List; -public class MutesIDsTask extends TwitterTask { +public class MutesIDsTask extends TwitterTask> { // --------------------------- CONSTRUCTORS --------------------------- @@ -45,14 +46,14 @@ public class MutesIDsTask extends TwitterTask { // ------------------------ OVERRIDE METHODS ------------------------ @Override - protected void onPostExecute(Long[] mutesIDs) { + protected void onPostExecute(List mutesIDs) { for (Long mutesID : mutesIDs) { - UserCache.getInstance().putInvisibleUser(mutesID); + MuteUserIds.add(mutesID); } } @Override - protected Long[] doInBackground(Void... params) { + protected List doInBackground(Void... params) { try { List idList = new ArrayList<>(); long cursor = -1; @@ -65,10 +66,10 @@ public class MutesIDsTask extends TwitterTask { } while (cursor != 0); - return idList.toArray(new Long[idList.size()]); + return idList; } catch (TwitterException e) { Logger.error(e); - return new Long[0]; + return Collections.emptyList(); } } } diff --git a/app/src/main/java/net/lacolaco/smileessence/twitter/task/ReportForSpamTask.java b/app/src/main/java/net/lacolaco/smileessence/twitter/task/ReportForSpamTask.java index 35e71fbc..38b88f4b 100644 --- a/app/src/main/java/net/lacolaco/smileessence/twitter/task/ReportForSpamTask.java +++ b/app/src/main/java/net/lacolaco/smileessence/twitter/task/ReportForSpamTask.java @@ -27,14 +27,13 @@ package net.lacolaco.smileessence.twitter.task; import android.app.Activity; import net.lacolaco.smileessence.R; -import net.lacolaco.smileessence.data.UserCache; +import net.lacolaco.smileessence.entity.User; import net.lacolaco.smileessence.logging.Logger; import net.lacolaco.smileessence.notification.NotificationType; import net.lacolaco.smileessence.notification.Notificator; import twitter4j.Twitter; import twitter4j.TwitterException; -import twitter4j.User; public class ReportForSpamTask extends TwitterTask { @@ -56,7 +55,6 @@ public class ReportForSpamTask extends TwitterTask { @Override protected void onPostExecute(User user) { if (user != null) { - UserCache.getInstance().put(user); new Notificator(activity, R.string.notice_r4s_succeeded).publish(); } else { new Notificator(activity, R.string.notice_r4s_failed, NotificationType.ALERT).publish(); @@ -66,7 +64,7 @@ public class ReportForSpamTask extends TwitterTask { @Override protected User doInBackground(Void... params) { try { - return twitter.spamReporting().reportSpam(userID); + return User.fromTwitter(twitter.spamReporting().reportSpam(userID)); } catch (TwitterException e) { e.printStackTrace(); Logger.error(e.toString()); diff --git a/app/src/main/java/net/lacolaco/smileessence/twitter/task/RetweetTask.java b/app/src/main/java/net/lacolaco/smileessence/twitter/task/RetweetTask.java index ffd780a6..3770588a 100644 --- a/app/src/main/java/net/lacolaco/smileessence/twitter/task/RetweetTask.java +++ b/app/src/main/java/net/lacolaco/smileessence/twitter/task/RetweetTask.java @@ -27,7 +27,7 @@ package net.lacolaco.smileessence.twitter.task; import android.app.Activity; import net.lacolaco.smileessence.R; -import net.lacolaco.smileessence.data.StatusCache; +import net.lacolaco.smileessence.entity.Tweet; import net.lacolaco.smileessence.logging.Logger; import net.lacolaco.smileessence.notification.NotificationType; import net.lacolaco.smileessence.notification.Notificator; @@ -36,7 +36,7 @@ import twitter4j.Status; import twitter4j.Twitter; import twitter4j.TwitterException; -public class RetweetTask extends TwitterTask { +public class RetweetTask extends TwitterTask { // ------------------------------ FIELDS ------------------------------ @@ -54,9 +54,8 @@ public class RetweetTask extends TwitterTask { // ------------------------ OVERRIDE METHODS ------------------------ @Override - protected void onPostExecute(twitter4j.Status status) { - if (status != null) { - StatusCache.getInstance().put(status); + protected void onPostExecute(Tweet tweet) { + if (tweet != null) { new Notificator(activity, R.string.notice_retweet_succeeded).publish(); } else { new Notificator(activity, R.string.notice_retweet_failed, NotificationType.ALERT).publish(); @@ -64,9 +63,9 @@ public class RetweetTask extends TwitterTask { } @Override - protected twitter4j.Status doInBackground(Void... params) { + protected Tweet doInBackground(Void... params) { try { - return twitter.tweets().retweetStatus(statusID); + return Tweet.fromTwitter(twitter.tweets().retweetStatus(statusID)); } catch (TwitterException e) { e.printStackTrace(); Logger.error(e.toString()); diff --git a/app/src/main/java/net/lacolaco/smileessence/twitter/task/SearchTask.java b/app/src/main/java/net/lacolaco/smileessence/twitter/task/SearchTask.java index 0d6d3358..3bf715e3 100644 --- a/app/src/main/java/net/lacolaco/smileessence/twitter/task/SearchTask.java +++ b/app/src/main/java/net/lacolaco/smileessence/twitter/task/SearchTask.java @@ -29,7 +29,7 @@ import android.content.res.Configuration; import net.lacolaco.smileessence.R; import net.lacolaco.smileessence.activity.MainActivity; import net.lacolaco.smileessence.data.FavoriteCache; -import net.lacolaco.smileessence.data.StatusCache; +import net.lacolaco.smileessence.entity.Tweet; import net.lacolaco.smileessence.logging.Logger; import net.lacolaco.smileessence.notification.NotificationType; import net.lacolaco.smileessence.notification.Notificator; @@ -76,7 +76,7 @@ public class SearchTask extends TwitterTask { protected void onPostExecute(QueryResult queryResult) { if (queryResult != null) { for (twitter4j.Status status : queryResult.getTweets()) { - StatusCache.getInstance().put(status); + Tweet.fromTwitter(status); FavoriteCache.getInstance().put(status); } } diff --git a/app/src/main/java/net/lacolaco/smileessence/twitter/task/SendMessageTask.java b/app/src/main/java/net/lacolaco/smileessence/twitter/task/SendMessageTask.java index c3338e63..eb4cd835 100644 --- a/app/src/main/java/net/lacolaco/smileessence/twitter/task/SendMessageTask.java +++ b/app/src/main/java/net/lacolaco/smileessence/twitter/task/SendMessageTask.java @@ -27,12 +27,11 @@ package net.lacolaco.smileessence.twitter.task; import android.app.Activity; import net.lacolaco.smileessence.R; -import net.lacolaco.smileessence.data.DirectMessageCache; import net.lacolaco.smileessence.logging.Logger; import net.lacolaco.smileessence.notification.NotificationType; import net.lacolaco.smileessence.notification.Notificator; -import twitter4j.DirectMessage; +import net.lacolaco.smileessence.entity.DirectMessage; import twitter4j.Twitter; import twitter4j.TwitterException; @@ -58,7 +57,6 @@ public class SendMessageTask extends TwitterTask { @Override protected void onPostExecute(DirectMessage message) { if (message != null) { - DirectMessageCache.getInstance().put(message); new Notificator(activity, R.string.notice_message_send_succeeded).publish(); } else { new Notificator(activity, R.string.notice_message_send_failed, NotificationType.ALERT).publish(); @@ -68,7 +66,7 @@ public class SendMessageTask extends TwitterTask { @Override protected DirectMessage doInBackground(Void... params) { try { - return twitter.directMessages().sendDirectMessage(userID, text); + return DirectMessage.fromTwitter(twitter.directMessages().sendDirectMessage(userID, text)); } catch (TwitterException e) { e.printStackTrace(); Logger.error(e.toString()); diff --git a/app/src/main/java/net/lacolaco/smileessence/twitter/task/SentDirectMessagesTask.java b/app/src/main/java/net/lacolaco/smileessence/twitter/task/SentDirectMessagesTask.java index 5cbb6700..f6c28fd6 100644 --- a/app/src/main/java/net/lacolaco/smileessence/twitter/task/SentDirectMessagesTask.java +++ b/app/src/main/java/net/lacolaco/smileessence/twitter/task/SentDirectMessagesTask.java @@ -27,14 +27,19 @@ package net.lacolaco.smileessence.twitter.task; import android.app.Activity; import net.lacolaco.smileessence.R; -import net.lacolaco.smileessence.data.DirectMessageCache; +import net.lacolaco.smileessence.entity.DirectMessage; import net.lacolaco.smileessence.logging.Logger; import net.lacolaco.smileessence.notification.NotificationType; import net.lacolaco.smileessence.notification.Notificator; -import twitter4j.*; +import twitter4j.Paging; +import twitter4j.Twitter; +import twitter4j.TwitterException; -public class SentDirectMessagesTask extends TwitterTask { +import java.util.Collections; +import java.util.List; + +public class SentDirectMessagesTask extends TwitterTask> { // ------------------------------ FIELDS ------------------------------ @@ -43,10 +48,6 @@ public class SentDirectMessagesTask extends TwitterTask { // --------------------------- CONSTRUCTORS --------------------------- - protected SentDirectMessagesTask(Twitter twitter, Activity activity) { - this(twitter, activity, null); - } - public SentDirectMessagesTask(Twitter twitter, Activity activity, Paging paging) { super(twitter); this.activity = activity; @@ -56,23 +57,13 @@ public class SentDirectMessagesTask extends TwitterTask { // ------------------------ OVERRIDE METHODS ------------------------ @Override - protected void onPostExecute(DirectMessage[] directMessages) { - if (directMessages.length != 0) { - for (DirectMessage message : directMessages) { - DirectMessageCache.getInstance().put(message); - } - } + protected void onPostExecute(List directMessages) { } @Override - protected DirectMessage[] doInBackground(Void... params) { - ResponseList responseList; + protected List doInBackground(Void... params) { try { - if (paging == null) { - responseList = twitter.directMessages().getSentDirectMessages(); - } else { - responseList = twitter.directMessages().getSentDirectMessages(paging); - } + return DirectMessage.fromTwitter(twitter.directMessages().getSentDirectMessages(paging)); } catch (TwitterException e) { e.printStackTrace(); Logger.error(e.toString()); @@ -81,8 +72,7 @@ public class SentDirectMessagesTask extends TwitterTask { } else { Notificator.publish(activity, R.string.notice_error_get_messages, NotificationType.ALERT); } - return new DirectMessage[0]; + return Collections.emptyList(); } - return responseList.toArray(new DirectMessage[responseList.size()]); } } diff --git a/app/src/main/java/net/lacolaco/smileessence/twitter/task/ShowDirectMessageTask.java b/app/src/main/java/net/lacolaco/smileessence/twitter/task/ShowDirectMessageTask.java index f48f1510..ab5cd409 100644 --- a/app/src/main/java/net/lacolaco/smileessence/twitter/task/ShowDirectMessageTask.java +++ b/app/src/main/java/net/lacolaco/smileessence/twitter/task/ShowDirectMessageTask.java @@ -24,10 +24,9 @@ package net.lacolaco.smileessence.twitter.task; -import net.lacolaco.smileessence.data.DirectMessageCache; import net.lacolaco.smileessence.logging.Logger; -import twitter4j.DirectMessage; +import net.lacolaco.smileessence.entity.DirectMessage; import twitter4j.Twitter; import twitter4j.TwitterException; @@ -48,15 +47,12 @@ public class ShowDirectMessageTask extends TwitterTask { @Override protected void onPostExecute(DirectMessage directMessage) { - if (directMessage != null) { - DirectMessageCache.getInstance().put(directMessage); - } } @Override protected DirectMessage doInBackground(Void... params) { try { - return twitter.directMessages().showDirectMessage(messageID); + return DirectMessage.fromTwitter(twitter.directMessages().showDirectMessage(messageID)); } catch (TwitterException e) { e.printStackTrace(); Logger.error(e.toString()); diff --git a/app/src/main/java/net/lacolaco/smileessence/twitter/task/ShowStatusTask.java b/app/src/main/java/net/lacolaco/smileessence/twitter/task/ShowStatusTask.java index 89066553..2da142ef 100644 --- a/app/src/main/java/net/lacolaco/smileessence/twitter/task/ShowStatusTask.java +++ b/app/src/main/java/net/lacolaco/smileessence/twitter/task/ShowStatusTask.java @@ -24,14 +24,14 @@ package net.lacolaco.smileessence.twitter.task; -import net.lacolaco.smileessence.data.StatusCache; +import net.lacolaco.smileessence.entity.Tweet; import net.lacolaco.smileessence.logging.Logger; import twitter4j.Status; import twitter4j.Twitter; import twitter4j.TwitterException; -public class ShowStatusTask extends TwitterTask { +public class ShowStatusTask extends TwitterTask { // ------------------------------ FIELDS ------------------------------ @@ -47,16 +47,10 @@ public class ShowStatusTask extends TwitterTask { // ------------------------ OVERRIDE METHODS ------------------------ @Override - protected void onPostExecute(twitter4j.Status status) { - if (status != null) { - StatusCache.getInstance().put(status); - } - } - - @Override - protected twitter4j.Status doInBackground(Void... params) { + protected Tweet doInBackground(Void... params) { try { - return twitter.tweets().showStatus(id); + twitter4j.Status status = twitter.tweets().showStatus(id); + return Tweet.fromTwitter(status); } catch (TwitterException e) { e.printStackTrace(); Logger.error(e.toString()); diff --git a/app/src/main/java/net/lacolaco/smileessence/twitter/task/ShowUserTask.java b/app/src/main/java/net/lacolaco/smileessence/twitter/task/ShowUserTask.java index 71706edf..bbea10c6 100644 --- a/app/src/main/java/net/lacolaco/smileessence/twitter/task/ShowUserTask.java +++ b/app/src/main/java/net/lacolaco/smileessence/twitter/task/ShowUserTask.java @@ -24,12 +24,11 @@ package net.lacolaco.smileessence.twitter.task; -import net.lacolaco.smileessence.data.UserCache; +import net.lacolaco.smileessence.entity.User; import net.lacolaco.smileessence.logging.Logger; import twitter4j.Twitter; import twitter4j.TwitterException; -import twitter4j.User; public class ShowUserTask extends TwitterTask { @@ -56,18 +55,15 @@ public class ShowUserTask extends TwitterTask { @Override protected void onPostExecute(User user) { - if (user != null) { - UserCache.getInstance().put(user); - } } @Override protected User doInBackground(Void... params) { try { if (screenName != null) { - return twitter.users().showUser(screenName); + return User.fromTwitter(twitter.users().showUser(screenName)); } else { - return twitter.users().showUser(userID); + return User.fromTwitter(twitter.users().showUser(userID)); } } catch (TwitterException e) { e.printStackTrace(); diff --git a/app/src/main/java/net/lacolaco/smileessence/twitter/task/TweetTask.java b/app/src/main/java/net/lacolaco/smileessence/twitter/task/TweetTask.java index 3cec661b..0e3c8ff0 100644 --- a/app/src/main/java/net/lacolaco/smileessence/twitter/task/TweetTask.java +++ b/app/src/main/java/net/lacolaco/smileessence/twitter/task/TweetTask.java @@ -31,7 +31,7 @@ import android.os.Environment; import android.text.TextUtils; import net.lacolaco.smileessence.R; -import net.lacolaco.smileessence.data.StatusCache; +import net.lacolaco.smileessence.entity.Tweet; import net.lacolaco.smileessence.logging.Logger; import net.lacolaco.smileessence.notification.NotificationType; import net.lacolaco.smileessence.notification.Notificator; @@ -47,7 +47,7 @@ import java.io.File; import java.io.FileOutputStream; import java.io.IOException; -public class TweetTask extends TwitterTask { +public class TweetTask extends TwitterTask { // ------------------------------ FIELDS ------------------------------ @@ -109,9 +109,8 @@ public class TweetTask extends TwitterTask { // ------------------------ OVERRIDE METHODS ------------------------ @Override - protected void onPostExecute(twitter4j.Status status) { - if (status != null) { - StatusCache.getInstance().put(status); + protected void onPostExecute(Tweet tweet) { + if (tweet != null) { new Notificator(activity, R.string.notice_tweet_succeeded).publish(); } else { new Notificator(activity, R.string.notice_tweet_failed, NotificationType.ALERT).publish(); @@ -119,21 +118,19 @@ public class TweetTask extends TwitterTask { } @Override - protected twitter4j.Status doInBackground(Void... params) { + protected Tweet doInBackground(Void... params) { try { - if (TextUtils.isEmpty(mediaPath)) { - return twitter.tweets().updateStatus(update); - } else { + if (!TextUtils.isEmpty(mediaPath)) { File mediaFile = getMediaFile(); if (mediaFile.exists()) { update.setMedia(mediaFile); } - twitter4j.Status status = twitter.tweets().updateStatus(update); - if (tempFilePath != null) { - new File(tempFilePath).delete(); - } - return status; } + Tweet tweet = Tweet.fromTwitter(twitter.tweets().updateStatus(update)); + if (tempFilePath != null) { + new File(tempFilePath).delete(); + } + return tweet; } catch (TwitterException e) { e.printStackTrace(); Logger.error(e.toString()); diff --git a/app/src/main/java/net/lacolaco/smileessence/twitter/task/TwitterTask.java b/app/src/main/java/net/lacolaco/smileessence/twitter/task/TwitterTask.java index b62e6770..3fa00e5a 100644 --- a/app/src/main/java/net/lacolaco/smileessence/twitter/task/TwitterTask.java +++ b/app/src/main/java/net/lacolaco/smileessence/twitter/task/TwitterTask.java @@ -24,19 +24,10 @@ package net.lacolaco.smileessence.twitter.task; -import android.os.AsyncTask; - import twitter4j.Twitter; -public abstract class TwitterTask extends AsyncTask { - - // ------------------------------ FIELDS ------------------------------ - - protected Twitter twitter; - - // --------------------------- CONSTRUCTORS --------------------------- - +public abstract class TwitterTask extends TwitterTaskWithProgress { protected TwitterTask(Twitter twitter) { - this.twitter = twitter; + super(twitter); } -} +} \ No newline at end of file diff --git a/app/src/main/java/net/lacolaco/smileessence/twitter/task/TwitterTaskWithProgress.java b/app/src/main/java/net/lacolaco/smileessence/twitter/task/TwitterTaskWithProgress.java new file mode 100644 index 00000000..6eb9fadd --- /dev/null +++ b/app/src/main/java/net/lacolaco/smileessence/twitter/task/TwitterTaskWithProgress.java @@ -0,0 +1,13 @@ +package net.lacolaco.smileessence.twitter.task; + +import android.os.AsyncTask; +import twitter4j.Twitter; + +public abstract class TwitterTaskWithProgress extends AsyncTask { + protected Twitter twitter; + + protected TwitterTaskWithProgress(Twitter twitter) { + this.twitter = twitter; + } +} + diff --git a/app/src/main/java/net/lacolaco/smileessence/twitter/task/UnblockTask.java b/app/src/main/java/net/lacolaco/smileessence/twitter/task/UnblockTask.java index 9199a136..a1092a1f 100644 --- a/app/src/main/java/net/lacolaco/smileessence/twitter/task/UnblockTask.java +++ b/app/src/main/java/net/lacolaco/smileessence/twitter/task/UnblockTask.java @@ -27,14 +27,13 @@ package net.lacolaco.smileessence.twitter.task; import android.app.Activity; import net.lacolaco.smileessence.R; -import net.lacolaco.smileessence.data.UserCache; import net.lacolaco.smileessence.logging.Logger; import net.lacolaco.smileessence.notification.NotificationType; import net.lacolaco.smileessence.notification.Notificator; import twitter4j.Twitter; import twitter4j.TwitterException; -import twitter4j.User; +import net.lacolaco.smileessence.entity.User; public class UnblockTask extends TwitterTask { @@ -56,7 +55,6 @@ public class UnblockTask extends TwitterTask { @Override protected void onPostExecute(User user) { if (user != null) { - UserCache.getInstance().put(user); new Notificator(activity, R.string.notice_unblock_succeeded).publish(); } else { new Notificator(activity, R.string.notice_unblock_failed, NotificationType.ALERT).publish(); @@ -66,7 +64,7 @@ public class UnblockTask extends TwitterTask { @Override protected User doInBackground(Void... params) { try { - return twitter.users().destroyBlock(userID); + return User.fromTwitter(twitter.users().destroyBlock(userID)); } catch (TwitterException e) { e.printStackTrace(); Logger.error(e.toString()); diff --git a/app/src/main/java/net/lacolaco/smileessence/twitter/task/UnfavoriteTask.java b/app/src/main/java/net/lacolaco/smileessence/twitter/task/UnfavoriteTask.java index 93eb8623..46e70cb5 100644 --- a/app/src/main/java/net/lacolaco/smileessence/twitter/task/UnfavoriteTask.java +++ b/app/src/main/java/net/lacolaco/smileessence/twitter/task/UnfavoriteTask.java @@ -27,7 +27,7 @@ package net.lacolaco.smileessence.twitter.task; import android.app.Activity; import net.lacolaco.smileessence.R; -import net.lacolaco.smileessence.data.StatusCache; +import net.lacolaco.smileessence.entity.Tweet; import net.lacolaco.smileessence.logging.Logger; import net.lacolaco.smileessence.notification.NotificationType; import net.lacolaco.smileessence.notification.Notificator; @@ -36,7 +36,7 @@ import twitter4j.Status; import twitter4j.Twitter; import twitter4j.TwitterException; -public class UnfavoriteTask extends TwitterTask { +public class UnfavoriteTask extends TwitterTask { // ------------------------------ FIELDS ------------------------------ @@ -54,9 +54,8 @@ public class UnfavoriteTask extends TwitterTask { // ------------------------ OVERRIDE METHODS ------------------------ @Override - protected void onPostExecute(twitter4j.Status status) { - if (status != null) { - StatusCache.getInstance().put(status); + protected void onPostExecute(Tweet tweet) { + if (tweet != null) { new Notificator(activity, R.string.notice_unfavorite_succeeded).publish(); } else { new Notificator(activity, R.string.notice_unfavorite_failed, NotificationType.ALERT).publish(); @@ -64,9 +63,9 @@ public class UnfavoriteTask extends TwitterTask { } @Override - protected twitter4j.Status doInBackground(Void... params) { + protected Tweet doInBackground(Void... params) { try { - return twitter.favorites().destroyFavorite(statusID); + return Tweet.fromTwitter(twitter.favorites().destroyFavorite(statusID)); } catch (TwitterException e) { e.printStackTrace(); Logger.error(e.toString()); diff --git a/app/src/main/java/net/lacolaco/smileessence/twitter/task/UnfollowTask.java b/app/src/main/java/net/lacolaco/smileessence/twitter/task/UnfollowTask.java index 8c5f7dc5..c0d890fa 100644 --- a/app/src/main/java/net/lacolaco/smileessence/twitter/task/UnfollowTask.java +++ b/app/src/main/java/net/lacolaco/smileessence/twitter/task/UnfollowTask.java @@ -27,14 +27,13 @@ package net.lacolaco.smileessence.twitter.task; import android.app.Activity; import net.lacolaco.smileessence.R; -import net.lacolaco.smileessence.data.UserCache; +import net.lacolaco.smileessence.entity.User; import net.lacolaco.smileessence.logging.Logger; import net.lacolaco.smileessence.notification.NotificationType; import net.lacolaco.smileessence.notification.Notificator; import twitter4j.Twitter; import twitter4j.TwitterException; -import twitter4j.User; public class UnfollowTask extends TwitterTask { @@ -56,7 +55,6 @@ public class UnfollowTask extends TwitterTask { @Override protected void onPostExecute(User user) { if (user != null) { - UserCache.getInstance().put(user); new Notificator(activity, R.string.notice_unfollow_succeeded).publish(); } else { new Notificator(activity, R.string.notice_unfollow_failed, NotificationType.ALERT).publish(); @@ -66,7 +64,7 @@ public class UnfollowTask extends TwitterTask { @Override protected User doInBackground(Void... params) { try { - return twitter.friendsFollowers().destroyFriendship(userID); + return User.fromTwitter(twitter.friendsFollowers().destroyFriendship(userID)); } catch (TwitterException e) { e.printStackTrace(); Logger.error(e.toString()); diff --git a/app/src/main/java/net/lacolaco/smileessence/twitter/task/UserListStatusesTask.java b/app/src/main/java/net/lacolaco/smileessence/twitter/task/UserListStatusesTask.java index 8d56463e..beb8890c 100644 --- a/app/src/main/java/net/lacolaco/smileessence/twitter/task/UserListStatusesTask.java +++ b/app/src/main/java/net/lacolaco/smileessence/twitter/task/UserListStatusesTask.java @@ -26,54 +26,52 @@ package net.lacolaco.smileessence.twitter.task; import net.lacolaco.smileessence.activity.MainActivity; import net.lacolaco.smileessence.data.FavoriteCache; -import net.lacolaco.smileessence.data.StatusCache; +import net.lacolaco.smileessence.entity.Tweet; import net.lacolaco.smileessence.logging.Logger; import net.lacolaco.smileessence.twitter.util.TwitterUtils; import twitter4j.*; -public class UserListStatusesTask extends TwitterTask { +import java.util.Collections; +import java.util.List; + +public class UserListStatusesTask extends TwitterTask> { // ------------------------------ FIELDS ------------------------------ private final String listFullName; - private final MainActivity activity; private final Paging paging; // --------------------------- CONSTRUCTORS --------------------------- - public UserListStatusesTask(Twitter twitter, String listFullName, MainActivity activity) { - this(twitter, listFullName, activity, TwitterUtils.getPaging(TwitterUtils.getPagingCount(activity))); + public UserListStatusesTask(Twitter twitter, MainActivity activity, String listFullName) { + this(twitter, activity, listFullName, TwitterUtils.getPaging(TwitterUtils.getPagingCount(activity))); } - public UserListStatusesTask(Twitter twitter, String listFullName, MainActivity activity, Paging paging) { + public UserListStatusesTask(Twitter twitter, MainActivity activity, String listFullName, Paging paging) { super(twitter); this.listFullName = listFullName; - this.activity = activity; this.paging = paging; } // ------------------------ OVERRIDE METHODS ------------------------ @Override - protected void onPostExecute(twitter4j.Status[] statuses) { - for (twitter4j.Status status : statuses) { - StatusCache.getInstance().put(status); - FavoriteCache.getInstance().put(status); + protected void onPostExecute(List tweets) { + for (Tweet tweet : tweets) { + // FavoriteCache.getInstance().put(tweet); } } @Override - protected twitter4j.Status[] doInBackground(Void... params) { - ResponseList responseList; + protected List doInBackground(Void... params) { try { String[] strings = listFullName.split("/"); - responseList = twitter.list().getUserListStatuses(strings[0], strings[1], paging); + return Tweet.fromTwitter(twitter.list().getUserListStatuses(strings[0], strings[1], paging)); } catch (TwitterException e) { e.printStackTrace(); Logger.error(e.toString()); - return new twitter4j.Status[0]; + return Collections.emptyList(); } - return responseList.toArray(new twitter4j.Status[responseList.size()]); } } diff --git a/app/src/main/java/net/lacolaco/smileessence/twitter/task/UserTimelineTask.java b/app/src/main/java/net/lacolaco/smileessence/twitter/task/UserTimelineTask.java index 6950c563..ce5a8ed2 100644 --- a/app/src/main/java/net/lacolaco/smileessence/twitter/task/UserTimelineTask.java +++ b/app/src/main/java/net/lacolaco/smileessence/twitter/task/UserTimelineTask.java @@ -24,12 +24,15 @@ package net.lacolaco.smileessence.twitter.task; -import net.lacolaco.smileessence.data.StatusCache; +import net.lacolaco.smileessence.entity.Tweet; import net.lacolaco.smileessence.logging.Logger; import twitter4j.*; -public class UserTimelineTask extends TwitterTask { +import java.util.Collections; +import java.util.List; + +public class UserTimelineTask extends TwitterTask> { // ------------------------------ FIELDS ------------------------------ @@ -51,27 +54,23 @@ public class UserTimelineTask extends TwitterTask { // ------------------------ OVERRIDE METHODS ------------------------ @Override - protected void onPostExecute(twitter4j.Status[] statuses) { - for (twitter4j.Status status : statuses) { - StatusCache.getInstance().put(status); + protected void onPostExecute(List tweets) { + for (Tweet tweet : tweets) { } - } @Override - protected twitter4j.Status[] doInBackground(Void... params) { - ResponseList responseList; + protected List doInBackground(Void... params) { try { if (paging == null) { - responseList = twitter.timelines().getUserTimeline(userID); + return Tweet.fromTwitter(twitter.timelines().getUserTimeline(userID)); } else { - responseList = twitter.timelines().getUserTimeline(userID, paging); + return Tweet.fromTwitter(twitter.timelines().getUserTimeline(userID, paging)); } } catch (TwitterException e) { e.printStackTrace(); Logger.error(e.toString()); - return new twitter4j.Status[0]; + return Collections.emptyList(); } - return responseList.toArray(new twitter4j.Status[responseList.size()]); } } diff --git a/app/src/main/java/net/lacolaco/smileessence/twitter/util/TwitterUtils.java b/app/src/main/java/net/lacolaco/smileessence/twitter/util/TwitterUtils.java index 764c12a7..0e0f73fb 100644 --- a/app/src/main/java/net/lacolaco/smileessence/twitter/util/TwitterUtils.java +++ b/app/src/main/java/net/lacolaco/smileessence/twitter/util/TwitterUtils.java @@ -30,17 +30,19 @@ import com.twitter.Validator; import net.lacolaco.smileessence.R; import net.lacolaco.smileessence.activity.MainActivity; -import net.lacolaco.smileessence.data.DirectMessageCache; -import net.lacolaco.smileessence.data.StatusCache; -import net.lacolaco.smileessence.data.UserCache; import net.lacolaco.smileessence.entity.Account; +import net.lacolaco.smileessence.entity.Tweet; +import net.lacolaco.smileessence.entity.User; import net.lacolaco.smileessence.twitter.TwitterApi; import net.lacolaco.smileessence.twitter.task.ShowDirectMessageTask; import net.lacolaco.smileessence.twitter.task.ShowStatusTask; import net.lacolaco.smileessence.twitter.task.ShowUserTask; import net.lacolaco.smileessence.twitter.task.TwitterTask; -import twitter4j.*; +import net.lacolaco.smileessence.entity.DirectMessage; +import twitter4j.Paging; +import twitter4j.URLEntity; +import twitter4j.UserMentionEntity; import java.util.ArrayList; import java.util.Collection; @@ -62,35 +64,33 @@ public class TwitterUtils { /** * Get status from api if not cached */ - public static TwitterTask tryGetStatus(Account account, long statusID, final StatusCallback callback) { - Status status = StatusCache.getInstance().get(statusID); + public static TwitterTask tryGetStatus(Account account, long statusID, final StatusCallback callback) { ShowStatusTask task; - if (status != null) { - callback.success(status); + Tweet tweet = Tweet.fetch(statusID); + if (tweet != null) { + callback.success(tweet); //update cache task = new ShowStatusTask(new TwitterApi(account).getTwitter(), statusID); } else { task = new ShowStatusTask(new TwitterApi(account).getTwitter(), statusID) { @Override - protected void onPostExecute(twitter4j.Status status) { - super.onPostExecute(status); - if (status != null) { - callback.success(status); + protected void onPostExecute(Tweet tweet) { + if (tweet != null) { + callback.success(tweet); } else { callback.error(); } } }; } - task.execute(); - return task; + return (TwitterTask) task.execute(); } /** * Get status from api if not cached */ public static void tryGetUser(Account account, long userID, final UserCallback callback) { - User user = UserCache.getInstance().get(userID); + User user = User.fetch(userID); if (user != null) { callback.success(user); ShowUserTask task = new ShowUserTask(new TwitterApi(account).getTwitter(), userID); @@ -116,11 +116,9 @@ public class TwitterUtils { * Get direct message from api if not cached */ public static void tryGetMessage(Account account, long messageID, final MessageCallback callback) { - DirectMessage message = DirectMessageCache.getInstance().get(messageID); + DirectMessage message = DirectMessage.fetch(messageID); if (message != null) { callback.success(message); - ShowDirectMessageTask task = new ShowDirectMessageTask(new TwitterApi(account).getTwitter(), messageID); - task.execute(); } else { ShowDirectMessageTask task = new ShowDirectMessageTask(new TwitterApi(account).getTwitter(), messageID) { @Override @@ -140,15 +138,15 @@ public class TwitterUtils { /** * Get array of screenName in own text * - * @param status status + * @param tweet tweet * @param excludeScreenName * @return */ - public static Collection getScreenNames(Status status, String excludeScreenName) { + public static Collection getScreenNames(Tweet tweet, String excludeScreenName) { ArrayList names = new ArrayList<>(); - names.add(status.getUser().getScreenName()); - if (status.getUserMentionEntities() != null) { - for (UserMentionEntity entity : status.getUserMentionEntities()) { + names.add(tweet.getUser().getScreenName()); + if (tweet.getMentions() != null) { + for (UserMentionEntity entity : tweet.getMentions()) { if (names.contains(entity.getScreenName())) { continue; } @@ -163,12 +161,12 @@ public class TwitterUtils { public static Collection getScreenNames(DirectMessage message, String excludeScreenName) { ArrayList names = new ArrayList<>(); - names.add(message.getSenderScreenName()); - if (!message.getRecipientScreenName().equals(message.getSenderScreenName())) { - names.add(message.getRecipientScreenName()); + names.add(message.getSender().getScreenName()); + if (!message.getRecipient().getScreenName().equals(message.getSender().getScreenName())) { + names.add(message.getRecipient().getScreenName()); } - if (message.getUserMentionEntities() != null) { - for (UserMentionEntity entity : message.getUserMentionEntities()) { + if (message.getMentions() != null) { + for (UserMentionEntity entity : message.getMentions()) { if (names.contains(entity.getScreenName())) { continue; } @@ -197,26 +195,6 @@ public class TwitterUtils { return String.format("http://twilog.org/%s", screenName); } - /** - * Get twitter status permalink - * - * @param status status - * @return url string - */ - public static String getStatusURL(Status status) { - return String.format("https://twitter.com/%s/status/%s", getOriginalStatus(status).getUser().getScreenName(), getOriginalStatus(status).getId()); - } - - /** - * Get "@screen_name: text" format text - * - * @param status status - * @return summary string - */ - public static String getStatusSummary(Status status) { - return String.format("@%s: %s", status.getUser().getScreenName(), status.getText()); - } - /** * Replace urls by entities * @@ -240,16 +218,6 @@ public class TwitterUtils { return text; } - /** - * Return original status text. If status is not retweet, value is same to a given. - * - * @param status - * @return - */ - public static String getOriginalStatusText(Status status) { - return status.isRetweet() ? status.getRetweetedStatus().getText() : status.getText(); - } - public static Paging getPaging(int count) { return new Paging(1).count(count); } @@ -258,10 +226,6 @@ public class TwitterUtils { return activity.getUserPreferenceHelper().getValue(R.string.key_setting_timelines, 20); } - public static Status getOriginalStatus(Status status) { - return StatusCache.getInstance().get((status.isRetweet() ? status.getRetweetedStatus() : status).getId()); - } - public static String getMessageSummary(DirectMessage message) { return String.format("@%s: %s", message.getSender().getScreenName(), message.getText()); } @@ -270,7 +234,7 @@ public class TwitterUtils { public interface StatusCallback { - void success(Status status); + void success(Tweet status); void error(); } 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 dfadebaf..ad39f65b 100644 --- a/app/src/main/java/net/lacolaco/smileessence/view/HomeFragment.java +++ b/app/src/main/java/net/lacolaco/smileessence/view/HomeFragment.java @@ -30,6 +30,7 @@ import com.handmark.pulltorefresh.library.PullToRefreshBase; import net.lacolaco.smileessence.activity.MainActivity; import net.lacolaco.smileessence.entity.Account; +import net.lacolaco.smileessence.entity.Tweet; import net.lacolaco.smileessence.twitter.StatusFilter; import net.lacolaco.smileessence.twitter.TwitterApi; import net.lacolaco.smileessence.twitter.task.HomeTimelineTask; @@ -41,6 +42,9 @@ import net.lacolaco.smileessence.viewmodel.StatusViewModel; import twitter4j.Paging; import twitter4j.Twitter; +import java.util.List; +import java.util.ListIterator; + public class HomeFragment extends CustomListFragment { // --------------------- GETTER / SETTER METHODS --------------------- @@ -83,11 +87,11 @@ public class HomeFragment extends CustomListFragment { } new HomeTimelineTask(twitter, activity, paging) { @Override - protected void onPostExecute(twitter4j.Status[] statuses) { - super.onPostExecute(statuses); - for (int i = statuses.length - 1; i >= 0; i--) { - twitter4j.Status status = statuses[i]; - StatusViewModel viewModel = new StatusViewModel(status, currentAccount); + protected void onPostExecute(List tweets) { + super.onPostExecute(tweets); + ListIterator li = tweets.listIterator(tweets.size()); + while (li.hasPrevious()) { + StatusViewModel viewModel = new StatusViewModel(li.previous()); adapter.addToTop(viewModel); StatusFilter.filter(activity, viewModel); } @@ -109,10 +113,10 @@ public class HomeFragment extends CustomListFragment { } new HomeTimelineTask(twitter, activity, paging) { @Override - protected void onPostExecute(twitter4j.Status[] statuses) { - super.onPostExecute(statuses); - for (twitter4j.Status status : statuses) { - StatusViewModel viewModel = new StatusViewModel(status, currentAccount); + protected void onPostExecute(List tweets) { + super.onPostExecute(tweets); + for (Tweet tweet : tweets) { + StatusViewModel viewModel = new StatusViewModel(tweet); adapter.addToBottom(viewModel); StatusFilter.filter(activity, viewModel); } diff --git a/app/src/main/java/net/lacolaco/smileessence/view/MentionsFragment.java b/app/src/main/java/net/lacolaco/smileessence/view/MentionsFragment.java index 3cbdfd4b..6d932eb3 100644 --- a/app/src/main/java/net/lacolaco/smileessence/view/MentionsFragment.java +++ b/app/src/main/java/net/lacolaco/smileessence/view/MentionsFragment.java @@ -30,6 +30,7 @@ import com.handmark.pulltorefresh.library.PullToRefreshBase; import net.lacolaco.smileessence.activity.MainActivity; import net.lacolaco.smileessence.entity.Account; +import net.lacolaco.smileessence.entity.Tweet; import net.lacolaco.smileessence.twitter.TwitterApi; import net.lacolaco.smileessence.twitter.task.MentionsTimelineTask; import net.lacolaco.smileessence.twitter.util.TwitterUtils; @@ -39,6 +40,8 @@ import net.lacolaco.smileessence.viewmodel.StatusViewModel; import twitter4j.Paging; import twitter4j.Twitter; +import java.util.List; + public class MentionsFragment extends CustomListFragment { // --------------------- GETTER / SETTER METHODS --------------------- @@ -70,11 +73,10 @@ public class MentionsFragment extends CustomListFragment { } new MentionsTimelineTask(twitter, activity, paging) { @Override - protected void onPostExecute(twitter4j.Status[] statuses) { - super.onPostExecute(statuses); - for (int i = statuses.length - 1; i >= 0; i--) { - twitter4j.Status status = statuses[i]; - adapter.addToTop(new StatusViewModel(status, currentAccount)); + protected void onPostExecute(List tweets) { + super.onPostExecute(tweets); + for (int i = tweets.size() - 1; i >= 0; i--) { + adapter.addToTop(new StatusViewModel(tweets.get(i))); } updateListViewWithNotice(refreshView.getRefreshableView(), adapter, true); refreshView.onRefreshComplete(); @@ -94,10 +96,10 @@ public class MentionsFragment extends CustomListFragment { } new MentionsTimelineTask(twitter, activity, paging) { @Override - protected void onPostExecute(twitter4j.Status[] statuses) { - super.onPostExecute(statuses); - for (twitter4j.Status status : statuses) { - adapter.addToBottom(new StatusViewModel(status, currentAccount)); + protected void onPostExecute(List tweets) { + super.onPostExecute(tweets); + for (Tweet tweet : tweets) { + adapter.addToBottom(new StatusViewModel(tweet)); } updateListViewWithNotice(refreshView.getRefreshableView(), adapter, false); refreshView.onRefreshComplete(); diff --git a/app/src/main/java/net/lacolaco/smileessence/view/MessagesFragment.java b/app/src/main/java/net/lacolaco/smileessence/view/MessagesFragment.java index 0a10ba53..994b265c 100644 --- a/app/src/main/java/net/lacolaco/smileessence/view/MessagesFragment.java +++ b/app/src/main/java/net/lacolaco/smileessence/view/MessagesFragment.java @@ -36,10 +36,12 @@ import net.lacolaco.smileessence.twitter.util.TwitterUtils; import net.lacolaco.smileessence.view.adapter.MessageListAdapter; import net.lacolaco.smileessence.viewmodel.MessageViewModel; -import twitter4j.DirectMessage; +import net.lacolaco.smileessence.entity.DirectMessage; import twitter4j.Paging; import twitter4j.Twitter; +import java.util.List; + /** * Fragment of messages list */ @@ -74,10 +76,10 @@ public class MessagesFragment extends CustomListFragment { } new DirectMessagesTask(twitter, activity, paging) { @Override - protected void onPostExecute(DirectMessage[] directMessages) { + protected void onPostExecute(List directMessages) { super.onPostExecute(directMessages); - for (int i = directMessages.length - 1; i >= 0; i--) { - adapter.addToTop(new MessageViewModel(directMessages[i], currentAccount)); + for (int i = directMessages.size() - 1; i >= 0; i--) { + adapter.addToTop(new MessageViewModel(directMessages.get(i))); } updateListViewWithNotice(refreshView.getRefreshableView(), adapter, true); refreshView.onRefreshComplete(); @@ -97,10 +99,10 @@ public class MessagesFragment extends CustomListFragment { } new DirectMessagesTask(twitter, activity, paging) { @Override - protected void onPostExecute(DirectMessage[] directMessages) { + protected void onPostExecute(List directMessages) { super.onPostExecute(directMessages); for (DirectMessage directMessage : directMessages) { - adapter.addToBottom(new MessageViewModel(directMessage, currentAccount)); + adapter.addToBottom(new MessageViewModel(directMessage)); } updateListViewWithNotice(refreshView.getRefreshableView(), adapter, false); refreshView.onRefreshComplete(); diff --git a/app/src/main/java/net/lacolaco/smileessence/view/PostFragment.java b/app/src/main/java/net/lacolaco/smileessence/view/PostFragment.java index 23358f46..fd980bff 100644 --- a/app/src/main/java/net/lacolaco/smileessence/view/PostFragment.java +++ b/app/src/main/java/net/lacolaco/smileessence/view/PostFragment.java @@ -43,6 +43,7 @@ import com.twitter.Validator; import net.lacolaco.smileessence.R; import net.lacolaco.smileessence.activity.MainActivity; import net.lacolaco.smileessence.entity.Account; +import net.lacolaco.smileessence.entity.Tweet; import net.lacolaco.smileessence.logging.Logger; import net.lacolaco.smileessence.preference.UserPreferenceHelper; import net.lacolaco.smileessence.twitter.TwitterApi; @@ -149,9 +150,9 @@ public class PostFragment extends Fragment implements TextWatcher, View.OnFocusC final Account account = activity.getCurrentAccount(); TwitterUtils.tryGetStatus(account, postState.getInReplyToStatusID(), new TwitterUtils.StatusCallback() { @Override - public void success(Status status) { + public void success(Tweet tweet) { View header = viewGroupReply.findViewById(R.id.layout_post_reply_status); - header = new StatusViewModel(status, account).getView(activity, activity.getLayoutInflater(), header); + header = new StatusViewModel(tweet).getView(activity, activity.getLayoutInflater(), header); header.setBackgroundColor(getResources().getColor(R.color.transparent)); header.setClickable(false); } diff --git a/app/src/main/java/net/lacolaco/smileessence/view/SearchFragment.java b/app/src/main/java/net/lacolaco/smileessence/view/SearchFragment.java index 9372a5a1..3313bda1 100644 --- a/app/src/main/java/net/lacolaco/smileessence/view/SearchFragment.java +++ b/app/src/main/java/net/lacolaco/smileessence/view/SearchFragment.java @@ -47,6 +47,7 @@ import net.lacolaco.smileessence.command.Command; import net.lacolaco.smileessence.command.CommandOpenSearch; import net.lacolaco.smileessence.entity.Account; import net.lacolaco.smileessence.entity.SearchQuery; +import net.lacolaco.smileessence.entity.Tweet; import net.lacolaco.smileessence.notification.NotificationType; import net.lacolaco.smileessence.notification.Notificator; import net.lacolaco.smileessence.twitter.StatusFilter; @@ -154,7 +155,7 @@ public class SearchFragment extends CustomListFragment implements View.OnClickLi for (int i = tweets.size() - 1; i >= 0; i--) { twitter4j.Status status = tweets.get(i); if (!status.isRetweet()) { - StatusViewModel viewModel = new StatusViewModel(status, currentAccount); + StatusViewModel viewModel = new StatusViewModel(Tweet.fromTwitter(status)); adapter.addToTop(viewModel); StatusFilter.filter(activity, viewModel); } @@ -196,7 +197,7 @@ public class SearchFragment extends CustomListFragment implements View.OnClickLi List tweets = queryResult.getTweets(); for (twitter4j.Status status : tweets) { if (!status.isRetweet()) { - StatusViewModel viewModel = new StatusViewModel(status, currentAccount); + StatusViewModel viewModel = new StatusViewModel(Tweet.fromTwitter(status)); adapter.addToBottom(viewModel); StatusFilter.filter(activity, viewModel); } diff --git a/app/src/main/java/net/lacolaco/smileessence/view/UserListFragment.java b/app/src/main/java/net/lacolaco/smileessence/view/UserListFragment.java index 89fe984f..f1922092 100644 --- a/app/src/main/java/net/lacolaco/smileessence/view/UserListFragment.java +++ b/app/src/main/java/net/lacolaco/smileessence/view/UserListFragment.java @@ -40,6 +40,7 @@ import com.handmark.pulltorefresh.library.PullToRefreshListView; import net.lacolaco.smileessence.R; import net.lacolaco.smileessence.activity.MainActivity; import net.lacolaco.smileessence.entity.Account; +import net.lacolaco.smileessence.entity.Tweet; import net.lacolaco.smileessence.notification.Notificator; import net.lacolaco.smileessence.twitter.StatusFilter; import net.lacolaco.smileessence.twitter.TwitterApi; @@ -53,6 +54,8 @@ import net.lacolaco.smileessence.viewmodel.UserListListAdapter; import twitter4j.Paging; import twitter4j.Twitter; +import java.util.List; + public class UserListFragment extends CustomListFragment implements View.OnClickListener { // ------------------------------ FIELDS ------------------------------ @@ -114,13 +117,12 @@ public class UserListFragment extends CustomListFragment implements View.OnClick if (adapter.getCount() > 0) { paging.setSinceId(adapter.getTopID()); } - new UserListStatusesTask(twitter, listFullName, activity, paging) { + new UserListStatusesTask(twitter, activity, listFullName, paging) { @Override - protected void onPostExecute(twitter4j.Status[] statuses) { - super.onPostExecute(statuses); - for (int i = statuses.length - 1; i >= 0; i--) { - twitter4j.Status status = statuses[i]; - StatusViewModel statusViewModel = new StatusViewModel(status, activity.getCurrentAccount()); + protected void onPostExecute(List tweets) { + super.onPostExecute(tweets); + for (int i = tweets.size() - 1; i >= 0; i--) { + StatusViewModel statusViewModel = new StatusViewModel(tweets.get(i)); adapter.addToTop(statusViewModel); StatusFilter.filter(activity, statusViewModel); } @@ -151,13 +153,12 @@ public class UserListFragment extends CustomListFragment implements View.OnClick if (adapter.getCount() > 0) { paging.setMaxId(adapter.getLastID() - 1); } - new UserListStatusesTask(twitter, listFullName, activity, paging) { + new UserListStatusesTask(twitter, activity, listFullName, paging) { @Override - protected void onPostExecute(twitter4j.Status[] statuses) { - super.onPostExecute(statuses); - for (int i = 0; i < statuses.length; i++) { - twitter4j.Status status = statuses[i]; - StatusViewModel statusViewModel = new StatusViewModel(status, activity.getCurrentAccount()); + protected void onPostExecute(List tweets) { + super.onPostExecute(tweets); + for (int i = 0; i < tweets.size(); i++) { + StatusViewModel statusViewModel = new StatusViewModel(tweets.get(i)); adapter.addToBottom(statusViewModel); StatusFilter.filter(activity, statusViewModel); } 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 b521e236..f9731a94 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 @@ -43,11 +43,11 @@ public class MessageListAdapter extends CustomListAdapter { // --------------------- GETTER / SETTER METHODS --------------------- public long getLastID() { - return ((MessageViewModel) getItem(getCount() - 1)).getID(); + return ((MessageViewModel) getItem(getCount() - 1)).getDirectMessage().getId(); } public long getTopID() { - return ((MessageViewModel) getItem(0)).getID(); + return ((MessageViewModel) getItem(0)).getDirectMessage().getId(); } // ------------------------ OVERRIDE METHODS ------------------------ @@ -78,7 +78,7 @@ public class MessageListAdapter extends CustomListAdapter { Collections.sort(list, new Comparator() { @Override public int compare(MessageViewModel lhs, MessageViewModel rhs) { - return rhs.getCreatedAt().compareTo(lhs.getCreatedAt()); + return rhs.getDirectMessage().getCreatedAt().compareTo(lhs.getDirectMessage().getCreatedAt()); } }); } @@ -91,7 +91,7 @@ public class MessageListAdapter extends CustomListAdapter { Iterator iterator = this.list.iterator(); while (iterator.hasNext()) { MessageViewModel message = iterator.next(); - if (message.getID() == messageID) { + if (message.getDirectMessage().getId() == messageID) { iterator.remove(); return message; } @@ -101,7 +101,7 @@ public class MessageListAdapter extends CustomListAdapter { } private boolean preAdd(MessageViewModel item) { - removeByMessageID(item.getID()); + 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 ece2eea8..e69e5214 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 @@ -26,7 +26,7 @@ package net.lacolaco.smileessence.view.adapter; import android.app.Activity; -import net.lacolaco.smileessence.data.UserCache; +import net.lacolaco.smileessence.entity.MuteUserIds; import net.lacolaco.smileessence.viewmodel.StatusViewModel; import java.util.Collections; @@ -44,11 +44,11 @@ public class StatusListAdapter extends CustomListAdapter { // --------------------- GETTER / SETTER METHODS --------------------- public long getLastID() { - return ((StatusViewModel) getItem(getCount() - 1)).getID(); + return ((StatusViewModel) getItem(getCount() - 1)).getTweet().getId(); } public long getTopID() { - return ((StatusViewModel) getItem(0)).getID(); + return ((StatusViewModel) getItem(0)).getTweet().getId(); } // ------------------------ OVERRIDE METHODS ------------------------ @@ -82,7 +82,7 @@ public class StatusListAdapter extends CustomListAdapter { Collections.sort(list, new Comparator() { @Override public int compare(StatusViewModel lhs, StatusViewModel rhs) { - return Long.valueOf(rhs.getID()).compareTo(lhs.getID()); + return Long.valueOf(rhs.getTweet().getId()).compareTo(lhs.getTweet().getId()); } }); } @@ -95,7 +95,7 @@ public class StatusListAdapter extends CustomListAdapter { Iterator iterator = this.list.iterator(); while (iterator.hasNext()) { StatusViewModel statusViewModel = iterator.next(); - if (statusViewModel.getID() == statusID || statusViewModel.getOriginal().getID() == statusID) { + if (statusViewModel.getTweet().getOriginalTweet().getId() == statusID) { iterator.remove(); } } @@ -103,11 +103,11 @@ public class StatusListAdapter extends CustomListAdapter { } private boolean isBlockUser(StatusViewModel item) { - return UserCache.getInstance().isInvisibleUserID(item.getOriginalUserID()); + return MuteUserIds.isMuted(item.getTweet().getOriginalTweet().getUser().getId()); } private boolean preAdd(StatusViewModel item) { - removeByStatusID(item.getID()); + removeByStatusID(item.getTweet().getId()); return !isBlockUser(item); } } 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 76b6e99d..bbe71d47 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 @@ -34,13 +34,10 @@ import android.widget.ImageButton; import android.widget.LinearLayout; import android.widget.ListView; -import com.google.common.collect.Lists; - import net.lacolaco.smileessence.R; import net.lacolaco.smileessence.activity.MainActivity; import net.lacolaco.smileessence.command.Command; import net.lacolaco.smileessence.command.CommandOpenURL; -import net.lacolaco.smileessence.data.DirectMessageCache; import net.lacolaco.smileessence.entity.Account; import net.lacolaco.smileessence.notification.Notificator; import net.lacolaco.smileessence.twitter.TwitterApi; @@ -52,10 +49,8 @@ import net.lacolaco.smileessence.view.listener.ListItemClickListener; import net.lacolaco.smileessence.viewmodel.MessageViewModel; import java.util.ArrayList; -import java.util.Collections; -import java.util.Comparator; -import twitter4j.DirectMessage; +import net.lacolaco.smileessence.entity.DirectMessage; import twitter4j.MediaEntity; import twitter4j.URLEntity; @@ -122,7 +117,7 @@ public class MessageDetailDialogFragment extends StackableDialogFragment impleme MainActivity activity = (MainActivity) getActivity(); final Account account = activity.getCurrentAccount(); - DirectMessage selectedMessage = DirectMessageCache.getInstance().get(getMessageID()); + DirectMessage selectedMessage = DirectMessage.fetch(getMessageID()); if (selectedMessage == null) { Notificator.publish(getActivity(), R.string.notice_error_get_messages); return new DisposeDialog(getActivity()); @@ -132,42 +127,43 @@ public class MessageDetailDialogFragment extends StackableDialogFragment impleme final MessageListAdapter adapter = new MessageListAdapter(getActivity()); listView.setAdapter(adapter); long replyToMessageId = -1; - ArrayList allMessages = Lists.newArrayList(DirectMessageCache.getInstance().all()); - Collections.sort(allMessages, new Comparator() { - @Override - public int compare(DirectMessage lhs, DirectMessage rhs) { - return rhs.getCreatedAt().compareTo(lhs.getCreatedAt()); - } - }); - for (DirectMessage directMessage : allMessages) { - if (selectedMessage.getId() == directMessage.getId()) { - continue; - } - if (directMessage.getCreatedAt().getTime() > selectedMessage.getCreatedAt().getTime()) { - continue; - } - if (directMessage.getSenderId() == selectedMessage.getRecipientId() && directMessage.getRecipientId() == selectedMessage.getSenderId()) { - replyToMessageId = directMessage.getId(); - break; - } - } - - if (replyToMessageId == -1) { - listView.setVisibility(View.GONE); - } else { - TwitterUtils.tryGetMessage(account, replyToMessageId, new TwitterUtils.MessageCallback() { - @Override - public void success(DirectMessage message) { - adapter.addToTop(new MessageViewModel(message, account)); - adapter.updateForce(); - } - - @Override - public void error() { - - } - }); - } + // ArrayList allMessages = Lists.newArrayList(DirectMessageCache.getInstance().all()); + // Collections.sort(allMessages, new Comparator() { + // @Override + // public int compare(DirectMessage lhs, DirectMessage rhs) { + // return rhs.getCreatedAt().compareTo(lhs.getCreatedAt()); + // } + // }); + // for (DirectMessage directMessage : allMessages) { + // if (selectedMessage.getId() == directMessage.getId()) { + // continue; + // } + // if (directMessage.getCreatedAt().getTime() > selectedMessage.getCreatedAt().getTime()) { + // continue; + // } + // if (directMessage.getSender().getId() == selectedMessage.getRecipient().getId() && + // directMessage.getRecipient().getId() == selectedMessage.getSender().getId()) { + // replyToMessageId = directMessage.getId(); + // break; + // } + // } + + // if (replyToMessageId == -1) { + listView.setVisibility(View.GONE); + // } else { + // TwitterUtils.tryGetMessage(account, replyToMessageId, new TwitterUtils.MessageCallback() { + // @Override + // public void success(DirectMessage message) { + // adapter.addToTop(new MessageViewModel(message)); + // adapter.updateForce(); + // } + + // @Override + // public void error() { + + // } + // }); + // } return new AlertDialog.Builder(getActivity()).setView(header).create(); } @@ -185,15 +181,15 @@ public class MessageDetailDialogFragment extends StackableDialogFragment impleme public void openSendMessageDialog(DirectMessage message) { SendMessageDialogFragment dialogFragment = new SendMessageDialogFragment(); - dialogFragment.setScreenName(message.getSenderScreenName()); + dialogFragment.setScreenName(message.getSender().getScreenName()); DialogHelper.showDialog(getActivity(), dialogFragment); } private ArrayList getCommands(Activity activity, DirectMessage message, Account account) { ArrayList commands = new ArrayList<>(); // URL - if (message.getURLEntities() != null) { - for (URLEntity urlEntity : message.getURLEntities()) { + if (message.getUrls() != null) { + for (URLEntity urlEntity : message.getUrls()) { commands.add(new CommandOpenURL(activity, urlEntity.getExpandedURL())); } } @@ -204,18 +200,18 @@ public class MessageDetailDialogFragment extends StackableDialogFragment impleme } private MediaEntity[] getMediaEntities(DirectMessage message) { - if (message.getExtendedMediaEntities().length == 0) { + if (message.getMedia().length == 0) { // direct message's media is contained also in url entities. return new MediaEntity[0]; } else { - return message.getExtendedMediaEntities(); + 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); - MessageViewModel statusViewModel = new MessageViewModel(message, account); + MessageViewModel statusViewModel = new MessageViewModel(message); messageHeader = statusViewModel.getView(activity, activity.getLayoutInflater(), messageHeader); messageHeader.setClickable(false); int background = ((ColorDrawable) messageHeader.getBackground()).getColor(); @@ -252,7 +248,7 @@ public class MessageDetailDialogFragment extends StackableDialogFragment impleme } private boolean isDeletable(Account account, DirectMessage message) { - return message.getSenderId() == account.userID; + return message.getSender().getId() == account.userID; } private void openMenu(MainActivity activity) { 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 c4fd6028..d2c487b3 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 @@ -40,7 +40,7 @@ import net.lacolaco.smileessence.view.adapter.CustomListAdapter; import java.util.ArrayList; import java.util.List; -import twitter4j.DirectMessage; +import net.lacolaco.smileessence.entity.DirectMessage; import twitter4j.HashtagEntity; import twitter4j.MediaEntity; import twitter4j.URLEntity; @@ -100,12 +100,12 @@ public class MessageMenuDialogFragment extends MenuDialogFragment { commands.add(command); } // Media - if (message.getURLEntities() != null) { - for (URLEntity urlEntity : message.getURLEntities()) { + if (message.getUrls() != null) { + for (URLEntity urlEntity : message.getUrls()) { commands.add(new CommandOpenURL(activity, urlEntity.getExpandedURL())); } } - for (MediaEntity mediaEntity : message.getExtendedMediaEntities().length == 0 ? message.getMediaEntities() : message.getExtendedMediaEntities()) { + for (MediaEntity mediaEntity : message.getMedia()) { commands.add(new CommandOpenURL(activity, mediaEntity.getMediaURL())); } } @@ -123,8 +123,8 @@ public class MessageMenuDialogFragment extends MenuDialogFragment { private ArrayList getHashtagCommands(Activity activity, DirectMessage status) { ArrayList commands = new ArrayList<>(); - if (status.getHashtagEntities() != null) { - for (HashtagEntity hashtagEntity : status.getHashtagEntities()) { + if (status.getHashtags() != null) { + for (HashtagEntity hashtagEntity : status.getHashtags()) { commands.add(new CommandOpenHashtagDialog(activity, hashtagEntity)); } } diff --git a/app/src/main/java/net/lacolaco/smileessence/view/dialog/QuoteDialogFragment.java b/app/src/main/java/net/lacolaco/smileessence/view/dialog/QuoteDialogFragment.java index e0f51d69..049c3ee2 100644 --- a/app/src/main/java/net/lacolaco/smileessence/view/dialog/QuoteDialogFragment.java +++ b/app/src/main/java/net/lacolaco/smileessence/view/dialog/QuoteDialogFragment.java @@ -32,6 +32,7 @@ import net.lacolaco.smileessence.command.Command; import net.lacolaco.smileessence.command.status.StatusCommandTextQuote; import net.lacolaco.smileessence.command.status.StatusCommandURLQuote; import net.lacolaco.smileessence.entity.Account; +import net.lacolaco.smileessence.entity.Tweet; import net.lacolaco.smileessence.twitter.util.TwitterUtils; import net.lacolaco.smileessence.view.adapter.CustomListAdapter; @@ -67,8 +68,8 @@ public class QuoteDialogFragment extends MenuDialogFragment { TwitterUtils.tryGetStatus(account, getStatusID(), new TwitterUtils.StatusCallback() { @Override - public void success(Status status) { - List commands = getCommands(activity, status); + public void success(Tweet tweet) { + List commands = getCommands(activity, tweet); Command.filter(commands); for (Command command : commands) { adapter.addToBottom(command); @@ -85,10 +86,10 @@ public class QuoteDialogFragment extends MenuDialogFragment { // -------------------------- OTHER METHODS -------------------------- - public List getCommands(Activity activity, Status status) { + public List getCommands(Activity activity, Tweet tweet) { ArrayList commands = new ArrayList<>(); - commands.add(new StatusCommandTextQuote(activity, status)); - commands.add(new StatusCommandURLQuote(activity, status)); + commands.add(new StatusCommandTextQuote(activity, tweet)); + commands.add(new StatusCommandURLQuote(activity, tweet)); return commands; } } diff --git a/app/src/main/java/net/lacolaco/smileessence/view/dialog/ReviewDialogFragment.java b/app/src/main/java/net/lacolaco/smileessence/view/dialog/ReviewDialogFragment.java index 36cb1f6e..1e95d8be 100644 --- a/app/src/main/java/net/lacolaco/smileessence/view/dialog/ReviewDialogFragment.java +++ b/app/src/main/java/net/lacolaco/smileessence/view/dialog/ReviewDialogFragment.java @@ -35,11 +35,10 @@ import android.widget.RatingBar; import net.lacolaco.smileessence.R; import net.lacolaco.smileessence.activity.MainActivity; -import net.lacolaco.smileessence.data.StatusCache; -import net.lacolaco.smileessence.twitter.util.TwitterUtils; +import net.lacolaco.smileessence.entity.Tweet; import net.lacolaco.smileessence.view.adapter.PostState; -import twitter4j.Status; +import net.lacolaco.smileessence.viewmodel.StatusViewModel; public class ReviewDialogFragment extends StackableDialogFragment implements View.OnClickListener { @@ -100,7 +99,8 @@ public class ReviewDialogFragment extends StackableDialogFragment implements Vie private void execute() { hideIME(); - Status status = StatusCache.getInstance().get(statusID); + Tweet tweet = Tweet.fetch(statusID).getOriginalTweet(); + StatusViewModel status = new StatusViewModel(tweet); int star = (int) ratingBar.getRating(); StringBuilder builder = new StringBuilder(); for (int i = 0; i < 5; i++) { @@ -113,8 +113,8 @@ public class ReviewDialogFragment extends StackableDialogFragment implements Vie String formatString = getFormatString(); String str = String.format(formatString, builder.toString(), - TwitterUtils.getOriginalStatus(status).getUser().getScreenName(), - TwitterUtils.getStatusURL(status)); + tweet.getUser().getScreenName(), + tweet.getTwitterUrl()); PostState.newState().beginTransaction() .setText(str) .setInReplyToStatusID(statusID) 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 118273b9..d7e08af6 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 @@ -40,8 +40,9 @@ import net.lacolaco.smileessence.R; import net.lacolaco.smileessence.activity.MainActivity; import net.lacolaco.smileessence.command.Command; import net.lacolaco.smileessence.command.CommandOpenURL; -import net.lacolaco.smileessence.data.StatusCache; import net.lacolaco.smileessence.entity.Account; +import net.lacolaco.smileessence.entity.Tweet; +import net.lacolaco.smileessence.entity.User; import net.lacolaco.smileessence.twitter.TweetBuilder; import net.lacolaco.smileessence.twitter.TwitterApi; import net.lacolaco.smileessence.twitter.task.DeleteStatusTask; @@ -58,9 +59,7 @@ import net.lacolaco.smileessence.viewmodel.StatusViewModel; import java.util.ArrayList; import twitter4j.MediaEntity; -import twitter4j.Status; import twitter4j.URLEntity; -import twitter4j.User; public class StatusDetailDialogFragment extends StackableDialogFragment implements View.OnClickListener { @@ -91,24 +90,24 @@ public class StatusDetailDialogFragment extends StackableDialogFragment implemen final Account account = activity.getCurrentAccount(); TwitterUtils.tryGetStatus(account, getStatusID(), new TwitterUtils.StatusCallback() { @Override - public void success(Status status) { + public void success(Tweet tweet) { switch (v.getId()) { case R.id.button_status_detail_reply: { - replyToStatus(activity, account, status); + replyToStatus(activity, account, tweet); break; } case R.id.button_status_detail_retweet: { final Long retweetID = (Long) v.getTag(); - toggleRetweet(activity, account, status, retweetID); + toggleRetweet(activity, account, tweet, retweetID); break; } case R.id.button_status_detail_favorite: { Boolean isFavorited = (Boolean) v.getTag(); - toggleFavorite(activity, account, status, isFavorited); + toggleFavorite(activity, account, tweet, isFavorited); break; } case R.id.button_status_detail_delete: { - deleteStatus(activity, account, status); + deleteStatus(activity, account, tweet); break; } case R.id.button_status_detail_menu: { @@ -135,19 +134,20 @@ public class StatusDetailDialogFragment extends StackableDialogFragment implemen final MainActivity activity = (MainActivity) getActivity(); final Account account = activity.getCurrentAccount(); - Status status = StatusCache.getInstance().get(getStatusID()); + final Tweet tweet = Tweet.fetch(getStatusID()); + final StatusViewModel status = new StatusViewModel(tweet); View header = getTitleView(activity, account, status); ListView listView = (ListView) header.findViewById(R.id.listview_status_detail_reply_to); final StatusListAdapter adapter = new StatusListAdapter(getActivity()); listView.setAdapter(adapter); - long inReplyToStatusId = TwitterUtils.getOriginalStatus(status).getInReplyToStatusId(); + long inReplyToStatusId = tweet.getInReplyTo(); if (inReplyToStatusId == -1) { listView.setVisibility(View.GONE); } else { TwitterUtils.tryGetStatus(account, inReplyToStatusId, new TwitterUtils.StatusCallback() { @Override - public void success(Status status) { - adapter.addToTop(new StatusViewModel(status, account)); + public void success(Tweet tweet) { + adapter.addToTop(new StatusViewModel(tweet)); adapter.updateForce(); } @@ -164,20 +164,20 @@ public class StatusDetailDialogFragment extends StackableDialogFragment implemen ConfirmDialogFragment.show(activity, getString(R.string.dialog_confirm_commands), onYes); } - private void deleteStatus(final MainActivity activity, final Account account, final Status status) { + private void deleteStatus(final MainActivity activity, final Account account, final Tweet tweet) { confirm(activity, new Runnable() { @Override public void run() { - new DeleteStatusTask(TwitterApi.getTwitter(account), TwitterUtils.getOriginalStatus(status).getId(), activity).execute(); + new DeleteStatusTask(TwitterApi.getTwitter(account), tweet.getOriginalTweet().getId(), activity).execute(); dismiss(); } }); } - private View getTitleView(MainActivity activity, Account account, Status status) { + 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); - StatusViewModel statusViewModel = new StatusViewModel(status, account); statusHeader = statusViewModel.getView(activity, activity.getLayoutInflater(), statusHeader); statusHeader.setClickable(false); int background = ((ColorDrawable) statusHeader.getBackground()).getColor(); @@ -186,14 +186,14 @@ public class StatusDetailDialogFragment extends StackableDialogFragment implemen 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 = TwitterUtils.getOriginalStatus(status).getFavoriteCount(); + int favoriteCount = statusViewModel.getTweet().getFavoriteCount(); if (favoriteCount == 0) { favCountIcon.setVisibility(View.GONE); favCountText.setVisibility(View.GONE); } else { favCountText.setText(Integer.toString(favoriteCount)); } - int retweetCount = TwitterUtils.getOriginalStatus(status).getRetweetCount(); + int retweetCount = statusViewModel.getTweet().getOriginalTweet().getRetweetCount(); if (retweetCount == 0) { rtCountIcon.setVisibility(View.GONE); rtCountText.setVisibility(View.GONE); @@ -210,11 +210,11 @@ public class StatusDetailDialogFragment extends StackableDialogFragment implemen retweet.setOnClickListener(this); favorite.setOnClickListener(this); delete.setOnClickListener(this); - if (isNotRetweetable(account, status)) { + if (isNotRetweetable(account, tweet)) { retweet.setVisibility(View.GONE); - } else if (isRetweetDeletable(account, status)) { + } else if (isRetweetDeletable(account, tweet)) { retweet.setImageDrawable(getResources().getDrawable(R.drawable.icon_retweet_on)); - retweet.setTag(status.getId()); + retweet.setTag(tweet.getId()); } else { retweet.setTag(-1L); } @@ -222,11 +222,11 @@ public class StatusDetailDialogFragment extends StackableDialogFragment implemen if (statusViewModel.isFavorited()) { favorite.setImageDrawable(getResources().getDrawable(R.drawable.icon_favorite_on)); } - boolean deletable = isDeletable(account, status); + boolean deletable = isDeletable(account, tweet); delete.setVisibility(deletable ? View.VISIBLE : View.GONE); LinearLayout commandsLayout = (LinearLayout) view.findViewById(R.id.linearlayout_status_detail_menu); commandsLayout.setClickable(true); - ArrayList commands = getCommands(activity, status, account); + ArrayList commands = getCommands(activity, tweet, account); Command.filter(commands); for (final Command command : commands) { View commandView = command.getView(activity, activity.getLayoutInflater(), null); @@ -243,45 +243,31 @@ public class StatusDetailDialogFragment extends StackableDialogFragment implemen } - private MediaEntity[] getMediaEntities(Status status) { - if (status.getExtendedMediaEntities().length == 0) { - return status.getMediaEntities(); - } else { - return status.getExtendedMediaEntities(); - } - } - - private ArrayList getCommands(Activity activity, Status status, Account account) { + private ArrayList getCommands(Activity activity, Tweet tweet, Account account) { ArrayList commands = new ArrayList<>(); // URL - if (status.getURLEntities() != null) { - for (URLEntity urlEntity : status.getURLEntities()) { + if (tweet.getUrls() != null) { + for (URLEntity urlEntity : tweet.getUrls()) { commands.add(new CommandOpenURL(activity, urlEntity.getExpandedURL())); } } - for (MediaEntity mediaEntity : getMediaEntities(status)) { + for (MediaEntity mediaEntity : tweet.getMedia()) { commands.add(new CommandOpenURL(activity, mediaEntity.getMediaURL())); } return commands; } - private boolean isDeletable(Account account, Status status) { - boolean deletable; - if (!status.isRetweet()) { - deletable = status.getUser().getId() == account.userID; - } else { - deletable = status.getRetweetedStatus().getUser().getId() == account.userID; - } - return deletable; + private boolean isDeletable(Account account, Tweet tweet) { + return tweet.getOriginalTweet().getUser().getId() == account.userID; } - private boolean isNotRetweetable(Account account, Status status) { - User user = TwitterUtils.getOriginalStatus(status).getUser(); + private boolean isNotRetweetable(Account account, Tweet tweet) { + User user = tweet.getOriginalTweet().getUser(); return user.isProtected() || user.getId() == account.userID; } - private boolean isRetweetDeletable(Account account, Status status) { - return status.isRetweet() && status.getUser().getId() == account.userID; + private boolean isRetweetDeletable(Account account, Tweet tweet) { + return tweet.isRetweet() && tweet.getUser().getId() == account.userID; } private void openMenu(MainActivity activity) { @@ -290,26 +276,26 @@ public class StatusDetailDialogFragment extends StackableDialogFragment implemen DialogHelper.showDialog(activity, fragment); } - private void replyToStatus(MainActivity activity, Account account, Status status) { - Status originalStatus = TwitterUtils.getOriginalStatus(status); + private void replyToStatus(MainActivity activity, Account account, Tweet tweet) { + Tweet originalTweet = tweet.getOriginalTweet(); TweetBuilder builder = new TweetBuilder(); - if (account.userID == originalStatus.getUser().getId()) { + if (account.userID == originalTweet.getUser().getId()) { builder.addScreenName(account.screenName); } - builder.addScreenNames(TwitterUtils.getScreenNames(originalStatus, account.screenName)); + builder.addScreenNames(TwitterUtils.getScreenNames(originalTweet, account.screenName)); String text = builder.buildText(); - int selStart = originalStatus.getUser().getScreenName().length() + 2; // "@" and " " + int selStart = originalTweet.getUser().getScreenName().length() + 2; // "@" and " " PostState.newState().beginTransaction() .insertText(0, text) - .setInReplyToStatusID(originalStatus.getId()) + .setInReplyToStatusID(originalTweet.getId()) .setSelection(selStart, text.length()) .commitWithOpen(activity); } - private void toggleFavorite(MainActivity activity, Account account, Status status, Boolean isFavorited) { - long statusID = status.isRetweet() ? status.getRetweetedStatus().getId() : status.getId(); + private void toggleFavorite(MainActivity activity, Account account, Tweet tweet, Boolean isFavorited) { + long statusID = tweet.getOriginalTweet().getId(); if (isFavorited) { new UnfavoriteTask(TwitterApi.getTwitter(account), statusID, activity).execute(); } else { @@ -317,14 +303,14 @@ public class StatusDetailDialogFragment extends StackableDialogFragment implemen } } - private void toggleRetweet(final MainActivity activity, final Account account, final Status status, final Long retweetID) { + private void toggleRetweet(final MainActivity activity, final Account account, final Tweet tweet, final Long retweetID) { confirm(activity, new Runnable() { @Override public void run() { if (retweetID != -1L) { new DeleteStatusTask(TwitterApi.getTwitter(account), retweetID, activity).execute(); } else { - new RetweetTask(TwitterApi.getTwitter(account), TwitterUtils.getOriginalStatus(status).getId(), activity).execute(); + new RetweetTask(TwitterApi.getTwitter(account), tweet.getOriginalTweet().getId(), activity).execute(); } } }); 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 667578b7..8fcc6c35 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 @@ -34,6 +34,7 @@ import net.lacolaco.smileessence.command.CommandOpenURL; import net.lacolaco.smileessence.command.CommandOpenUserDetail; import net.lacolaco.smileessence.command.CommandSaveAsTemplate; import net.lacolaco.smileessence.entity.Account; +import net.lacolaco.smileessence.entity.Tweet; import net.lacolaco.smileessence.twitter.util.TwitterUtils; import net.lacolaco.smileessence.view.adapter.CustomListAdapter; @@ -71,8 +72,8 @@ public class StatusMenuDialogFragment extends MenuDialogFragment { TwitterUtils.tryGetStatus(account, getStatusID(), new TwitterUtils.StatusCallback() { @Override - public void success(Status status) { - List commands = getCommands(activity, status, account); + public void success(Tweet tweet) { + List commands = getCommands(activity, tweet, account); Command.filter(commands); for (Command command : commands) { adapter.addToBottom(command); @@ -89,41 +90,41 @@ public class StatusMenuDialogFragment extends MenuDialogFragment { // -------------------------- OTHER METHODS -------------------------- - public void addBottomCommands(Activity activity, Status status, Account account, ArrayList commands) { - commands.add(new CommandSaveAsTemplate(activity, TwitterUtils.getOriginalStatusText(status))); + public void addBottomCommands(Activity activity, Tweet tweet, Account account, ArrayList commands) { + commands.add(new CommandSaveAsTemplate(activity, tweet.getOriginalTweet().getText())); //User - for (String screenName : TwitterUtils.getScreenNames(status, null)) { + for (String screenName : TwitterUtils.getScreenNames(tweet, null)) { commands.add(new CommandOpenUserDetail(activity, screenName, account)); } - for (Command command : getHashtagCommands(activity, status)) { + for (Command command : getHashtagCommands(activity, tweet)) { commands.add(command); } // Media - if (status.getURLEntities() != null) { - for (URLEntity urlEntity : status.getURLEntities()) { + if (tweet.getUrls() != null) { + for (URLEntity urlEntity : tweet.getUrls()) { commands.add(new CommandOpenURL(activity, urlEntity.getExpandedURL())); } } - for (MediaEntity mediaEntity : status.getExtendedMediaEntities().length == 0 ? status.getMediaEntities() : status.getExtendedMediaEntities()) { + for (MediaEntity mediaEntity : tweet.getMedia()) { commands.add(new CommandOpenURL(activity, mediaEntity.getMediaURL())); } } - public boolean addMainCommands(Activity activity, Status status, Account account, ArrayList commands) { - return commands.addAll(Command.getStatusCommands(activity, status, account)); + public boolean addMainCommands(Activity activity, Tweet tweet, Account account, ArrayList commands) { + return commands.addAll(Command.getStatusCommands(activity, tweet, account)); } - public List getCommands(Activity activity, Status status, Account account) { + public List getCommands(Activity activity, Tweet tweet, Account account) { ArrayList commands = new ArrayList<>(); - addMainCommands(activity, status, account, commands); - addBottomCommands(activity, status, account, commands); + addMainCommands(activity, tweet, account, commands); + addBottomCommands(activity, tweet, account, commands); return commands; } - private ArrayList getHashtagCommands(Activity activity, Status status) { + private ArrayList getHashtagCommands(Activity activity, Tweet tweet) { ArrayList commands = new ArrayList<>(); - if (status.getHashtagEntities() != null) { - for (HashtagEntity hashtagEntity : status.getHashtagEntities()) { + if (tweet.getHashtags() != null) { + for (HashtagEntity hashtagEntity : tweet.getHashtags()) { commands.add(new CommandOpenHashtagDialog(activity, hashtagEntity)); } } diff --git a/app/src/main/java/net/lacolaco/smileessence/view/dialog/TalkChainDialogFragment.java b/app/src/main/java/net/lacolaco/smileessence/view/dialog/TalkChainDialogFragment.java index 9cd010a9..fa074767 100644 --- a/app/src/main/java/net/lacolaco/smileessence/view/dialog/TalkChainDialogFragment.java +++ b/app/src/main/java/net/lacolaco/smileessence/view/dialog/TalkChainDialogFragment.java @@ -26,24 +26,20 @@ package net.lacolaco.smileessence.view.dialog; import android.app.AlertDialog; import android.app.Dialog; -import android.os.AsyncTask; import android.os.Bundle; import android.view.View; import android.widget.ListView; import net.lacolaco.smileessence.R; import net.lacolaco.smileessence.activity.MainActivity; -import net.lacolaco.smileessence.data.StatusCache; import net.lacolaco.smileessence.entity.Account; -import net.lacolaco.smileessence.logging.Logger; +import net.lacolaco.smileessence.entity.Tweet; import net.lacolaco.smileessence.twitter.TwitterApi; -import net.lacolaco.smileessence.twitter.util.TwitterUtils; +import net.lacolaco.smileessence.twitter.task.GetTalkTask; import net.lacolaco.smileessence.view.adapter.StatusListAdapter; -import net.lacolaco.smileessence.viewmodel.StatusViewModel; -import twitter4j.Status; +import net.lacolaco.smileessence.viewmodel.StatusViewModel; import twitter4j.Twitter; -import twitter4j.TwitterException; public class TalkChainDialogFragment extends StackableDialogFragment { @@ -69,25 +65,20 @@ public class TalkChainDialogFragment extends StackableDialogFragment { public Dialog onCreateDialog(Bundle savedInstanceState) { MainActivity activity = (MainActivity) getActivity(); final Account account = activity.getCurrentAccount(); - + Twitter twitter = TwitterApi.getTwitter(account); View view = getActivity().getLayoutInflater().inflate(R.layout.dialog_talk_list, null); ListView listView = (ListView) view.findViewById(R.id.listview_dialog_talk_list); final StatusListAdapter adapter = new StatusListAdapter(getActivity()); listView.setAdapter(adapter); - TwitterUtils.tryGetStatus(account, getStatusID(), new TwitterUtils.StatusCallback() { - @Override - public void success(Status status) { - adapter.addToTop(new StatusViewModel(status, account)); - adapter.updateForce(); - Twitter twitter = TwitterApi.getTwitter(account); - new GetTalkTask(twitter, account, adapter, status.getInReplyToStatusId()).execute(); - } + new GetTalkTask(twitter, getStatusID()) { @Override - public void error() { - dismiss(); + protected void onProgressUpdate(Tweet... tweets) { + Tweet tweet = tweets[0]; + adapter.addToBottom(new StatusViewModel(tweet)); + adapter.updateForce(); } - }); + }.execute(); return new AlertDialog.Builder(activity) .setTitle(R.string.dialog_title_talk_chain) @@ -95,43 +86,4 @@ public class TalkChainDialogFragment extends StackableDialogFragment { .setCancelable(true) .create(); } - - // -------------------------- INNER CLASSES -------------------------- - - private class GetTalkTask extends AsyncTask { - - private final Twitter twitter; - private final Account account; - private final StatusListAdapter adapter; - private final long inReplyToStatusId; - - public GetTalkTask(Twitter twitter, Account account, StatusListAdapter adapter, long inReplyToStatusId) { - this.twitter = twitter; - this.account = account; - this.adapter = adapter; - this.inReplyToStatusId = inReplyToStatusId; - } - - @Override - protected Void doInBackground(Void... params) { - try { - long id = inReplyToStatusId; - while (id != -1) { - final twitter4j.Status status = twitter.showStatus(id); - if (status != null) { - StatusCache.getInstance().put(status); - adapter.addToBottom(new StatusViewModel(status, account)); - adapter.updateForce(); - id = status.getInReplyToStatusId(); - } else { - break; - } - } - } catch (TwitterException e) { - e.printStackTrace(); - Logger.error(e); - } - return null; - } - } } diff --git a/app/src/main/java/net/lacolaco/smileessence/view/dialog/UserDetailDialogFragment.java b/app/src/main/java/net/lacolaco/smileessence/view/dialog/UserDetailDialogFragment.java index e2e07b80..d38d1677 100644 --- a/app/src/main/java/net/lacolaco/smileessence/view/dialog/UserDetailDialogFragment.java +++ b/app/src/main/java/net/lacolaco/smileessence/view/dialog/UserDetailDialogFragment.java @@ -49,6 +49,8 @@ import net.lacolaco.smileessence.command.Command; import net.lacolaco.smileessence.command.CommandOpenURL; import net.lacolaco.smileessence.data.ImageCache; import net.lacolaco.smileessence.entity.Account; +import net.lacolaco.smileessence.entity.Tweet; +import net.lacolaco.smileessence.entity.User; import net.lacolaco.smileessence.logging.Logger; import net.lacolaco.smileessence.twitter.TwitterApi; import net.lacolaco.smileessence.twitter.task.FollowTask; @@ -66,7 +68,8 @@ import net.lacolaco.smileessence.viewmodel.StatusViewModel; import twitter4j.Paging; import twitter4j.Relationship; import twitter4j.Twitter; -import twitter4j.User; + +import java.util.List; public class UserDetailDialogFragment extends StackableDialogFragment implements View.OnClickListener, PullToRefreshBase.OnRefreshListener2 { @@ -122,7 +125,7 @@ public class UserDetailDialogFragment extends StackableDialogFragment implements break; } case R.id.imageview_user_detail_icon: { - openUrl(user.getBiggerProfileImageURLHttps()); + openUrl(user.getProfileImageUrlOriginal()); break; } case R.id.textview_user_detail_screenname: { @@ -177,11 +180,10 @@ public class UserDetailDialogFragment extends StackableDialogFragment implements } new UserTimelineTask(twitter, getUserID(), paging) { @Override - protected void onPostExecute(twitter4j.Status[] statuses) { - super.onPostExecute(statuses); - for (int i = statuses.length - 1; i >= 0; i--) { - twitter4j.Status status = statuses[i]; - adapter.addToTop(new StatusViewModel(status, currentAccount)); + protected void onPostExecute(List tweets) { + super.onPostExecute(tweets); + for (int i = tweets.size()- 1; i >= 0; i--) { + adapter.addToTop(new StatusViewModel(tweets.get(i))); } updateListView(refreshView.getRefreshableView(), adapter, true); refreshView.onRefreshComplete(); @@ -200,10 +202,10 @@ public class UserDetailDialogFragment extends StackableDialogFragment implements } new UserTimelineTask(twitter, getUserID(), paging) { @Override - protected void onPostExecute(twitter4j.Status[] statuses) { - super.onPostExecute(statuses); - for (twitter4j.Status status : statuses) { - adapter.addToBottom(new StatusViewModel(status, currentAccount)); + protected void onPostExecute(List tweets) { + super.onPostExecute(tweets); + for (Tweet tweet : tweets) { + adapter.addToBottom(new StatusViewModel(tweet)); } updateListView(refreshView.getRefreshableView(), adapter, false); refreshView.onRefreshComplete(); @@ -278,10 +280,10 @@ public class UserDetailDialogFragment extends StackableDialogFragment implements Twitter twitter = TwitterApi.getTwitter(account); new UserTimelineTask(twitter, user.getId()) { @Override - protected void onPostExecute(twitter4j.Status[] statuses) { - super.onPostExecute(statuses); - for (twitter4j.Status status : statuses) { - adapter.addToBottom(new StatusViewModel(status, account)); + protected void onPostExecute(List tweets) { + super.onPostExecute(tweets); + for (Tweet tweet : tweets) { + adapter.addToBottom(new StatusViewModel(tweet)); } adapter.updateForce(); tabHost.getTabWidget().getChildTabViewAt(1).setVisibility(View.VISIBLE); @@ -308,21 +310,21 @@ public class UserDetailDialogFragment extends StackableDialogFragment implements } else { textViewLocate.setText(user.getLocation()); } - if (TextUtils.isEmpty(user.getURL())) { + if (TextUtils.isEmpty(user.getUrl())) { textViewURL.setVisibility(View.GONE); } else { - textViewURL.setText(user.getURL()); + textViewURL.setText(user.getUrl()); } textViewTweetCount.setText(String.valueOf(user.getStatusesCount())); textViewFriendCount.setText(String.valueOf(user.getFriendsCount())); textViewFollowerCount.setText(String.valueOf(user.getFollowersCount())); - textViewFavoriteCount.setText(String.valueOf(user.getFavouritesCount())); + textViewFavoriteCount.setText(String.valueOf(user.getFavoritesCount())); textViewProtected.setVisibility(user.isProtected() ? View.VISIBLE : View.GONE); String htmlDescription = getHtmlDescription(user.getDescription()); textViewDescription.setText(Html.fromHtml(htmlDescription)); textViewDescription.setMovementMethod(LinkMovementMethod.getInstance()); - ImageCache.getInstance().setImageToView(user.getBiggerProfileImageURL(), imageViewIcon); - ImageCache.getInstance().setImageToView(user.getProfileBannerURL(), imageViewHeader); + ImageCache.getInstance().setImageToView(user.getProfileImageUrlOriginal(), imageViewIcon); + ImageCache.getInstance().setImageToView(user.getProfileBannerUrl(), imageViewHeader); MainActivity activity = (MainActivity) getActivity(); adapter = new StatusListAdapter(activity); listViewTimeline.setAdapter(adapter); diff --git a/app/src/main/java/net/lacolaco/smileessence/view/dialog/UserMenuDialogFragment.java b/app/src/main/java/net/lacolaco/smileessence/view/dialog/UserMenuDialogFragment.java index ad1efc89..0883b99e 100644 --- a/app/src/main/java/net/lacolaco/smileessence/view/dialog/UserMenuDialogFragment.java +++ b/app/src/main/java/net/lacolaco/smileessence/view/dialog/UserMenuDialogFragment.java @@ -31,14 +31,13 @@ import net.lacolaco.smileessence.activity.MainActivity; import net.lacolaco.smileessence.command.Command; import net.lacolaco.smileessence.command.CommandSearchOnTwitter; import net.lacolaco.smileessence.entity.Account; +import net.lacolaco.smileessence.entity.User; import net.lacolaco.smileessence.twitter.util.TwitterUtils; import net.lacolaco.smileessence.view.adapter.CustomListAdapter; import java.util.ArrayList; import java.util.List; -import twitter4j.User; - public class UserMenuDialogFragment extends MenuDialogFragment { // ------------------------------ FIELDS ------------------------------ diff --git a/app/src/main/java/net/lacolaco/smileessence/viewmodel/EventViewModel.java b/app/src/main/java/net/lacolaco/smileessence/viewmodel/EventViewModel.java index b8315a49..0eb78e11 100644 --- a/app/src/main/java/net/lacolaco/smileessence/viewmodel/EventViewModel.java +++ b/app/src/main/java/net/lacolaco/smileessence/viewmodel/EventViewModel.java @@ -36,6 +36,7 @@ import com.android.volley.toolbox.NetworkImageView; import net.lacolaco.smileessence.R; import net.lacolaco.smileessence.activity.MainActivity; import net.lacolaco.smileessence.data.ImageCache; +import net.lacolaco.smileessence.entity.Tweet; import net.lacolaco.smileessence.preference.UserPreferenceHelper; import net.lacolaco.smileessence.util.StringUtils; import net.lacolaco.smileessence.util.Themes; @@ -44,7 +45,7 @@ import net.lacolaco.smileessence.view.dialog.UserDetailDialogFragment; import net.lacolaco.smileessence.view.listener.ListItemClickListener; import twitter4j.Status; -import twitter4j.User; +import net.lacolaco.smileessence.entity.User; import java.util.Date; @@ -67,21 +68,21 @@ public class EventViewModel implements IViewModel { this(event, source, null); } - public EventViewModel(EnumEvent event, User source, Status status) { + public EventViewModel(EnumEvent event, User source, Tweet tweet) { this.event = event; this.createdAt = new Date(); this.sourceUserID = source.getId(); this.sourceScreenName = source.getScreenName(); this.sourceName = source.getName(); - this.iconURL = source.getProfileImageURL(); + this.iconURL = source.getProfileImageUrl(); - if (status != null) { + if (tweet != null) { if (event == EnumEvent.RETWEETED) { - this.targetStatusID = status.getRetweetedStatus().getId(); - this.targetText = status.getRetweetedStatus().getText(); + this.targetStatusID = tweet.getRetweetedTweet().getId(); + this.targetText = tweet.getRetweetedTweet().getText(); } else { - this.targetStatusID = status.getId(); - this.targetText = status.getText(); + this.targetStatusID = tweet.getId(); + this.targetText = tweet.getText(); } } else { this.targetStatusID = -1L; diff --git a/app/src/main/java/net/lacolaco/smileessence/viewmodel/MessageViewModel.java b/app/src/main/java/net/lacolaco/smileessence/viewmodel/MessageViewModel.java index bde1b607..7930e410 100644 --- a/app/src/main/java/net/lacolaco/smileessence/viewmodel/MessageViewModel.java +++ b/app/src/main/java/net/lacolaco/smileessence/viewmodel/MessageViewModel.java @@ -35,8 +35,8 @@ import com.android.volley.toolbox.NetworkImageView; import net.lacolaco.smileessence.R; import net.lacolaco.smileessence.activity.MainActivity; import net.lacolaco.smileessence.data.ImageCache; -import net.lacolaco.smileessence.data.UserCache; import net.lacolaco.smileessence.entity.Account; +import net.lacolaco.smileessence.entity.DirectMessage; import net.lacolaco.smileessence.preference.UserPreferenceHelper; import net.lacolaco.smileessence.util.NameStyles; import net.lacolaco.smileessence.util.StringUtils; @@ -46,88 +46,37 @@ import net.lacolaco.smileessence.view.dialog.MessageDetailDialogFragment; import net.lacolaco.smileessence.view.dialog.UserDetailDialogFragment; import net.lacolaco.smileessence.view.listener.ListItemClickListener; -import twitter4j.DirectMessage; - -import java.util.Date; - public class MessageViewModel implements IViewModel { // ------------------------------ FIELDS ------------------------------ public static final String DETAIL_DIALOG = "messageDetail"; - private final long id; - private final long senderID; - private final String senderScreenName; - private final String senderName; - private final String senderIconURL; - private final long recipientId; - private final String recipientScreenName; - private final String text; - private final Date createdAt; + + private final DirectMessage directMessage; private final boolean myMessage; // --------------------------- CONSTRUCTORS --------------------------- - public MessageViewModel(DirectMessage directMessage, Account account) { - id = directMessage.getId(); - UserCache.getInstance().put(directMessage.getSender()); - senderID = directMessage.getSenderId(); - senderScreenName = directMessage.getSenderScreenName(); - senderName = directMessage.getSender().getName(); - senderIconURL = directMessage.getSender().getProfileImageURL(); - recipientId = directMessage.getRecipientId(); - recipientScreenName = directMessage.getRecipientScreenName(); - text = directMessage.getText(); - createdAt = directMessage.getCreatedAt(); - myMessage = isMyMessage(account); + public MessageViewModel(DirectMessage mes) { + directMessage = mes; + //myMessage = isMyMessage(account); + myMessage = true; // :wTODO } // --------------------- GETTER / SETTER METHODS --------------------- - public Date getCreatedAt() { - return createdAt; - } + public DirectMessage getDirectMessage() { + return directMessage; + } private String getFooterText() { - String s = StringUtils.dateToString(getCreatedAt()); + String s = StringUtils.dateToString(directMessage.getCreatedAt()); if (isMyMessage()) { - s = String.format("%s to @%s", s, recipientScreenName); + s = String.format("%s to @%s", s, directMessage.getRecipient().getScreenName()); } return s; } - public long getID() { - return id; - } - - public long getRecipientId() { - return recipientId; - } - - public String getRecipientScreenName() { - return recipientScreenName; - } - - public String getSenderIconURL() { - return senderIconURL; - } - - public long getSenderID() { - return senderID; - } - - public String getSenderName() { - return senderName; - } - - public String getSenderScreenName() { - return senderScreenName; - } - - public String getText() { - return text; - } - public boolean isMyMessage() { return myMessage; } @@ -147,12 +96,12 @@ public class MessageViewModel implements IViewModel { int nameStyle = preferenceHelper.getValue(R.string.key_setting_namestyle, 0); int theme = ((MainActivity) activity).getThemeIndex(); NetworkImageView icon = (NetworkImageView) convertedView.findViewById(R.id.imageview_status_icon); - ImageCache.getInstance().setImageToView(getSenderIconURL(), icon); + ImageCache.getInstance().setImageToView(directMessage.getSender().getProfileImageUrl(), icon); icon.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { UserDetailDialogFragment dialogFragment = new UserDetailDialogFragment(); - dialogFragment.setUserID(senderID); + dialogFragment.setUserID(directMessage.getSender().getId()); DialogHelper.showDialog(activity, dialogFragment); } }); @@ -165,7 +114,7 @@ public class MessageViewModel implements IViewModel { content.setTextSize(textSize); int colorNormal = Themes.getStyledColor(activity, theme, R.attr.color_status_text_normal, 0); content.setTextColor(colorNormal); - content.setText(getText()); + content.setText(directMessage.getText()); TextView footer = (TextView) convertedView.findViewById(R.id.textview_status_footer); footer.setTextSize(textSize - 2); int colorFooter = Themes.getStyledColor(activity, theme, R.attr.color_status_text_footer, 0); @@ -179,7 +128,7 @@ public class MessageViewModel implements IViewModel { @Override public void run() { MessageDetailDialogFragment dialogFragment = new MessageDetailDialogFragment(); - dialogFragment.setMessageID(getID()); + dialogFragment.setMessageID(directMessage.getId()); DialogHelper.showDialog(activity, dialogFragment); } })); @@ -187,10 +136,10 @@ public class MessageViewModel implements IViewModel { } private String getNameString(int nameStyle) { - return NameStyles.getNameString(nameStyle, getSenderScreenName(), getSenderName()); + return NameStyles.getNameString(nameStyle, directMessage.getSender().getScreenName(), directMessage.getSender().getName()); } private boolean isMyMessage(Account account) { - return senderID == account.userID; + return directMessage.getSender().getId() == account.userID; } } 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 b945b088..1013b1a9 100644 --- a/app/src/main/java/net/lacolaco/smileessence/viewmodel/StatusViewModel.java +++ b/app/src/main/java/net/lacolaco/smileessence/viewmodel/StatusViewModel.java @@ -40,8 +40,8 @@ import net.lacolaco.smileessence.R; import net.lacolaco.smileessence.activity.MainActivity; import net.lacolaco.smileessence.data.FavoriteCache; import net.lacolaco.smileessence.data.ImageCache; -import net.lacolaco.smileessence.data.UserCache; import net.lacolaco.smileessence.entity.Account; +import net.lacolaco.smileessence.entity.Tweet; import net.lacolaco.smileessence.preference.UserPreferenceHelper; import net.lacolaco.smileessence.twitter.util.TwitterUtils; import net.lacolaco.smileessence.util.Morse; @@ -56,75 +56,31 @@ import net.lacolaco.smileessence.view.listener.ListItemClickListener; import twitter4j.*; import java.util.ArrayList; -import java.util.Date; import java.util.List; public class StatusViewModel implements IViewModel { - - // ------------------------------ FIELDS ------------------------------ - - private long id; - private long userID; - private String screenName; - private String name; - private String iconURL; - private String text; - private Date createdAt; - private String source; - private boolean isProtected; - private StatusViewModel retweetedStatus; - private UserMentionEntity[] mentions; - private HashtagEntity[] hashtags; - private MediaEntity[] media; - private URLEntity[] urls; - private SymbolEntity[] symbols; + private Tweet tweet; private boolean isMyStatus; private boolean isMention; private boolean isRetweetOfMe; - private ArrayList lastTasks; // internal + private ArrayList lastTasks = new ArrayList<>(); // internal // --------------------------- CONSTRUCTORS --------------------------- - public StatusViewModel(Status status, Account account) { - if (status.isRetweet()) { - retweetedStatus = new StatusViewModel(status.getRetweetedStatus(), account); - } - id = status.getId(); - text = TwitterUtils.replaceURLEntities(status.getText(), status.getURLEntities(), false); - createdAt = status.getCreatedAt(); - source = status.getSource(); - mentions = status.getUserMentionEntities(); - hashtags = status.getHashtagEntities(); - media = status.getMediaEntities(); - urls = status.getURLEntities(); - symbols = status.getSymbolEntities(); - User user = status.getUser(); - UserCache.getInstance().put(user); - userID = user.getId(); - screenName = user.getScreenName(); - name = user.getName(); - iconURL = user.getProfileImageURLHttps(); - isProtected = user.isProtected(); - setMention(isMention(account.screenName)); - setMyStatus(isMyStatus(account.userID)); - setRetweetOfMe(isRetweetOfMe(account.userID)); - - lastTasks = new ArrayList<>(); + public StatusViewModel(Tweet tw) { + tweet = tw; } // --------------------- GETTER / SETTER METHODS --------------------- - public Date getCreatedAt() { - if (isRetweet()) { - return retweetedStatus.createdAt; - } - return createdAt; + public Tweet getTweet() { + return tweet; } private List getEmbeddedStatusIDs() { ArrayList list = new ArrayList<>(); - for (URLEntity url : urls) { + for (URLEntity url : tweet.getUrls()) { Uri uri = Uri.parse(url.getExpandedURL()); if (uri.getHost().equals("twitter.com")) { String[] arr = uri.toString().split("/"); @@ -138,109 +94,25 @@ public class StatusViewModel implements IViewModel { private String getFooterText() { StringBuilder builder = new StringBuilder(); - if (isRetweet()) { - builder.append("(RT: ").append(this.screenName).append(") "); + if (tweet.isRetweet()) { + builder.append("(RT: ").append(tweet.getUser().getScreenName()).append(") "); } - builder.append(StringUtils.dateToString(getCreatedAt())); + builder.append(StringUtils.dateToString(tweet.getCreatedAt())); builder.append(" via "); - builder.append(Html.fromHtml(getSource())); + builder.append(Html.fromHtml(tweet.getSource())); return builder.toString(); } - public HashtagEntity[] getHashtags() { - if (isRetweet()) { - return retweetedStatus.hashtags; - } - return hashtags; - } - - public String getIconURL() { - if (isRetweet()) { - return retweetedStatus.iconURL; - } - return iconURL; - } - - public long getID() { - return id; - } - - public MediaEntity[] getMedia() { - if (isRetweet()) { - return retweetedStatus.media; - } - return media; - } - - public UserMentionEntity[] getMentions() { - if (isRetweet()) { - return retweetedStatus.mentions; - } - return mentions; - } - - public String getName() { - if (isRetweet()) { - return retweetedStatus.name; - } - return name; - } - - public StatusViewModel getOriginal() { - return isRetweet() ? retweetedStatus : this; - } - - public long getOriginalUserID() { - return isRetweet() ? getRetweetedStatus().getUserID() : getUserID(); - } - - public StatusViewModel getRetweetedStatus() { - return retweetedStatus; - } - - public String getScreenName() { - if (isRetweet()) { - return retweetedStatus.screenName; - } - return screenName; - } - - public String getSource() { - if (isRetweet()) { - return retweetedStatus.source; - } - return source; - } - - public SymbolEntity[] getSymbols() { - return symbols; - } - - public String getText() { - if (isRetweet()) { - return retweetedStatus.text; - } - return text; - } - - public URLEntity[] getURLs() { - return urls; - } - - public long getUserID() { - return userID; - } - public boolean isFavorited() { - if (isRetweet()) { - return FavoriteCache.getInstance().get(retweetedStatus.id); + if (tweet.isRetweet()) { + return FavoriteCache.getInstance().get(tweet.getRetweetedTweet().getId()); } - return FavoriteCache.getInstance().get(id); + return FavoriteCache.getInstance().get(tweet.getId()); } public boolean isMention() { - if (isRetweet()) { - return retweetedStatus.isMention; + if (tweet.isRetweet()) { + return tweet.getRetweetedTweet() == null; } return isMention; } @@ -250,8 +122,8 @@ public class StatusViewModel implements IViewModel { } public boolean isMyStatus() { - if (isRetweet()) { - return retweetedStatus.isMyStatus; + if (tweet.isRetweet()) { + return tweet.getRetweetedTweet() == null; } return isMyStatus; } @@ -260,17 +132,6 @@ public class StatusViewModel implements IViewModel { isMyStatus = myStatus; } - public boolean isProtected() { - if (isRetweet()) { - return retweetedStatus.isProtected; - } - return isProtected; - } - - public boolean isRetweet() { - return retweetedStatus != null; - } - public boolean isRetweetOfMe() { return isRetweetOfMe; } @@ -306,7 +167,7 @@ public class StatusViewModel implements IViewModel { int nameStyle = preferenceHelper.getValue(R.string.key_setting_namestyle, 0); int theme = ((MainActivity) activity).getThemeIndex(); NetworkImageView icon = (NetworkImageView) convertedView.findViewById(R.id.imageview_status_icon); - ImageCache.getInstance().setImageToView(getIconURL(), icon); + ImageCache.getInstance().setImageToView(tweet.getUser().getProfileImageUrl(), icon); icon.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { @@ -318,12 +179,12 @@ public class StatusViewModel implements IViewModel { int colorHeader = Themes.getStyledColor(activity, theme, R.attr.color_status_text_header, 0); int colorMineHeader = Themes.getStyledColor(activity, theme, R.attr.color_status_text_mine, 0); header.setTextColor(isMyStatus() ? colorMineHeader : colorHeader); - header.setText(NameStyles.getNameString(nameStyle, getScreenName(), getName())); + header.setText(NameStyles.getNameString(nameStyle, tweet.getUser().getScreenName(), tweet.getUser().getName())); TextView content = (TextView) convertedView.findViewById(R.id.textview_status_text); content.setTextSize(textSize); int colorNormal = Themes.getStyledColor(activity, theme, R.attr.color_status_text_normal, 0); content.setTextColor(colorNormal); - String rawText = getText(); + String rawText = tweet.getText(); if (isReadMorseEnabled((MainActivity) activity) && Morse.isMorse(rawText)) { content.setText(String.format("%s\n(%s)", rawText, Morse.morseToJa(rawText))); } else { @@ -336,7 +197,7 @@ public class StatusViewModel implements IViewModel { footer.setText(getFooterText()); ImageView favorited = (ImageView) convertedView.findViewById(R.id.imageview_status_favorited); favorited.setVisibility(isFavorited() ? View.VISIBLE : View.GONE); - if (isRetweet()) { + if (tweet.isRetweet()) { int colorBgRetweet = Themes.getStyledColor(activity, theme, R.attr.color_status_bg_retweet, 0); convertedView.setBackgroundColor(colorBgRetweet); } else if (isMention()) { @@ -363,8 +224,8 @@ public class StatusViewModel implements IViewModel { for (long id : embeddedStatusIDs) { AsyncTask task = TwitterUtils.tryGetStatus(account, id, new TwitterUtils.StatusCallback() { @Override - public void success(Status status) { - StatusViewModel viewModel = new StatusViewModel(status, account); + public void success(Tweet tweet) { + StatusViewModel viewModel = new StatusViewModel(tweet); View embeddedHolder = viewModel.getView(activity, inflater, null, false); embeddedStatus.addView(embeddedHolder); embeddedStatus.invalidate(); @@ -385,10 +246,10 @@ public class StatusViewModel implements IViewModel { } public boolean isMention(String screenName) { - if (mentions == null) { + if (tweet.getMentions() == null) { return false; } - for (UserMentionEntity mention : mentions) { + for (UserMentionEntity mention : tweet.getMentions()) { if (mention.getScreenName().equals(screenName)) { return true; } @@ -396,27 +257,19 @@ public class StatusViewModel implements IViewModel { return false; } - public boolean isMyStatus(long userID) { - return this.userID == userID; - } - - public boolean isRetweetOfMe(long userID) { - return retweetedStatus != null && retweetedStatus.getUserID() == userID; - } - - private boolean isReadMorseEnabled(MainActivity activity) { + private boolean isReadMorseEnabled(MainActivity activity) { return activity.getUserPreferenceHelper().getValue(R.string.key_setting_read_morse, true); } private void onClick(Activity activity) { StatusDetailDialogFragment fragment = new StatusDetailDialogFragment(); - fragment.setStatusID(getID()); + fragment.setStatusID(tweet.getId()); DialogHelper.showDialog(activity, fragment); } private void onIconClick(Activity activity) { UserDetailDialogFragment dialogFragment = new UserDetailDialogFragment(); - dialogFragment.setUserID(isRetweet() ? getRetweetedStatus().userID : userID); + dialogFragment.setUserID(tweet.getOriginalTweet().getUser().getId()); DialogHelper.showDialog(activity, dialogFragment); } } diff --git a/app/src/main/java/net/lacolaco/smileessence/viewmodel/UserViewModel.java b/app/src/main/java/net/lacolaco/smileessence/viewmodel/UserViewModel.java index 0b8e9ad4..3c25bf31 100644 --- a/app/src/main/java/net/lacolaco/smileessence/viewmodel/UserViewModel.java +++ b/app/src/main/java/net/lacolaco/smileessence/viewmodel/UserViewModel.java @@ -24,7 +24,7 @@ package net.lacolaco.smileessence.viewmodel; -import twitter4j.User; +import net.lacolaco.smileessence.entity.User; public class UserViewModel { @@ -53,13 +53,13 @@ public class UserViewModel { name = user.getName(); description = user.getDescription(); location = user.getLocation(); - url = user.getURL(); - iconURL = user.getBiggerProfileImageURL(); - bannerURL = user.getProfileBannerURL(); + url = user.getUrl(); + iconURL = user.getProfileImageUrlOriginal(); + bannerURL = user.getProfileBannerUrl(); statusesCount = user.getStatusesCount(); friendsCount = user.getFriendsCount(); followersCount = user.getFollowersCount(); - favoritesCount = user.getFavouritesCount(); + favoritesCount = user.getFavoritesCount(); isProtected = user.isProtected(); isVerified = user.isVerified(); } -- cgit v1.2.3