diff --git a/app/src/main/java/org/nuclearfog/twidda/activity/TweetActivity.java b/app/src/main/java/org/nuclearfog/twidda/activity/TweetActivity.java index 7a4f4f73..acf7b182 100644 --- a/app/src/main/java/org/nuclearfog/twidda/activity/TweetActivity.java +++ b/app/src/main/java/org/nuclearfog/twidda/activity/TweetActivity.java @@ -200,7 +200,6 @@ public class TweetActivity extends AppCompatActivity implements OnClickListener, @Override public boolean onCreateOptionsMenu(Menu m) { getMenuInflater().inflate(R.menu.tweet, m); - AppStyles.setMenuIconColor(m, settings.getIconColor()); return super.onCreateOptionsMenu(m); } @@ -253,45 +252,37 @@ public class TweetActivity extends AppCompatActivity implements OnClickListener, @Override public void onClick(View v) { - // answer to the tweet - if (v.getId() == R.id.tweet_answer) { - if (tweet != null) { + if (tweet != null) { + // answer to the tweet + if (v.getId() == R.id.tweet_answer) { String tweetPrefix = tweet.getUser().getScreenname() + " "; Intent tweetPopup = new Intent(this, TweetPopup.class); tweetPopup.putExtra(KEY_TWEETPOPUP_REPLYID, tweetId); tweetPopup.putExtra(KEY_TWEETPOPUP_TEXT, tweetPrefix); startActivity(tweetPopup); } - } - // show user retweeting this tweet - else if (v.getId() == R.id.tweet_retweet) { - if (tweet != null) { + // show user retweeting this tweet + else if (v.getId() == R.id.tweet_retweet) { Intent userList = new Intent(this, UserDetail.class); userList.putExtra(KEY_USERDETAIL_ID, tweet.getId()); userList.putExtra(KEY_USERDETAIL_MODE, USERLIST_RETWEETS); startActivity(userList); } - } - // open profile of the tweet author - else if (v.getId() == R.id.profileimage_detail) { - if (tweet != null) { + // open profile of the tweet author + else if (v.getId() == R.id.profileimage_detail) { Intent profile = new Intent(getApplicationContext(), UserProfile.class); profile.putExtra(UserProfile.KEY_PROFILE_DATA, tweet.getUser()); startActivity(profile); } - } - // open replied tweet - else if (v.getId() == R.id.answer_reference_detail) { - if (tweet != null) { + // open replied tweet + else if (v.getId() == R.id.answer_reference_detail) { Intent answerIntent = new Intent(getApplicationContext(), TweetActivity.class); answerIntent.putExtra(KEY_TWEET_ID, tweet.getReplyId()); answerIntent.putExtra(KEY_TWEET_NAME, tweet.getReplyName()); startActivity(answerIntent); } - } - // open tweet location coordinates - else if (v.getId() == R.id.tweet_location_coordinate) { - if (tweet != null) { + // open tweet location coordinates + else if (v.getId() == R.id.tweet_location_coordinate) { Intent locationIntent = new Intent(Intent.ACTION_VIEW); locationIntent.setData(Uri.parse("geo:" + tweet.getLocationCoordinates())); try { @@ -300,10 +291,8 @@ public class TweetActivity extends AppCompatActivity implements OnClickListener, Toast.makeText(getApplicationContext(), R.string.error_no_card_app, LENGTH_SHORT).show(); } } - } - // open tweet media - else if (v.getId() == R.id.tweet_media_attach) { - if (tweet != null) { + // open tweet media + else if (v.getId() == R.id.tweet_media_attach) { Intent mediaIntent = new Intent(this, MediaViewer.class); mediaIntent.putExtra(KEY_MEDIA_LINK, tweet.getMediaLinks()); switch (tweet.getMediaType()) { @@ -331,21 +320,19 @@ public class TweetActivity extends AppCompatActivity implements OnClickListener, statusAsync = new TweetAction(this, tweet); // retweet this tweet if (v.getId() == R.id.tweet_retweet) { - if (tweet.retweeted()) { + if (tweet.retweeted()) statusAsync.execute(Action.UNRETWEET); - } else { + else statusAsync.execute(Action.RETWEET); - } Toast.makeText(this, R.string.info_loading, LENGTH_SHORT).show(); return true; } // favorite the tweet else if (v.getId() == R.id.tweet_favorit) { - if (tweet.favored()) { + if (tweet.favored()) statusAsync.execute(Action.UNFAVORITE); - } else { + else statusAsync.execute(Action.FAVORITE); - } Toast.makeText(this, R.string.info_loading, LENGTH_SHORT).show(); return true; } @@ -536,13 +523,16 @@ public class TweetActivity extends AppCompatActivity implements OnClickListener, */ public void onError(@NonNull EngineException error, long tweetId) { ErrorHandler.handleFailure(this, error); - if (error.resourceNotFound()) { + if (tweet == null) { + finish(); + } else if (error.resourceNotFound()) { Intent returnData = new Intent(); + // if tweet is an embedded tweet, get parent tweet ID + if (tweet.getParentTweet() != null) + tweetId = tweet.getParentTweet().getId(); returnData.putExtra(INTENT_TWEET_REMOVED_ID, tweetId); setResult(RETURN_TWEET_CHANGED, returnData); finish(); - } else if (tweet == null) { - finish(); } } } \ No newline at end of file diff --git a/app/src/main/java/org/nuclearfog/twidda/adapter/FragmentAdapter.java b/app/src/main/java/org/nuclearfog/twidda/adapter/FragmentAdapter.java index 7ec27bda..bd84ec7d 100644 --- a/app/src/main/java/org/nuclearfog/twidda/adapter/FragmentAdapter.java +++ b/app/src/main/java/org/nuclearfog/twidda/adapter/FragmentAdapter.java @@ -154,7 +154,7 @@ public class FragmentAdapter extends FragmentStatePagerAdapter { * setup adapter for tweet page to show replies of a tweet * * @param tweetId ID of the tweet - * @param replyName screen name of the author + * @param replyName screen name of the author, needed to search for answers */ public void setupTweetPage(long tweetId, String replyName) { Bundle param = new Bundle(); diff --git a/app/src/main/java/org/nuclearfog/twidda/backend/items/Tweet.java b/app/src/main/java/org/nuclearfog/twidda/backend/items/Tweet.java index bff7b156..477c277f 100644 --- a/app/src/main/java/org/nuclearfog/twidda/backend/items/Tweet.java +++ b/app/src/main/java/org/nuclearfog/twidda/backend/items/Tweet.java @@ -38,7 +38,7 @@ public class Tweet implements Serializable { private String source; private User user; - private Tweet embedded; + private Tweet embedded, parent; private long replyID; private long replyUserId; @@ -111,7 +111,7 @@ public class Tweet implements Serializable { else replyName = ""; if (status.getRetweetedStatus() != null) - embedded = new Tweet(status.getRetweetedStatus()); + embedded = new Tweet(status.getRetweetedStatus(), this); else embedded = null; @@ -147,6 +147,17 @@ public class Tweet implements Serializable { } } + /** + * create an embedded tweet with reference to its parent + * + * @param status embedded tweet + * @param parent parent tweet retweeting this tweet + */ + private Tweet(Status status, Tweet parent) { + this(status); + this.parent = parent; + } + /** * Tweet constructor for database tweets * @@ -242,13 +253,23 @@ public class Tweet implements Serializable { /** * get embedded Tweet * - * @return tweet + * @return tweet retweeted by this tweet */ @Nullable public Tweet getEmbeddedTweet() { return embedded; } + /** + * get parent Tweet + * + * @return parent tweet, retweeting this tweet + */ + @Nullable + public Tweet getParentTweet() { + return parent; + } + /** * name of replied user * diff --git a/app/src/main/java/org/nuclearfog/twidda/backend/utils/AppStyles.java b/app/src/main/java/org/nuclearfog/twidda/backend/utils/AppStyles.java index be2799bf..41b3e3b8 100644 --- a/app/src/main/java/org/nuclearfog/twidda/backend/utils/AppStyles.java +++ b/app/src/main/java/org/nuclearfog/twidda/backend/utils/AppStyles.java @@ -203,7 +203,14 @@ public final class AppStyles { tArray.recycle(); } - + /** + * create tab icons with TextView + * + * @param tabLayout TabLayout to set the icons + * @param settings settings instance + * @param array Array of drawable resources to set the icons + * @return array of TextViews + */ public static TextView[] createTabIcon(TabLayout tabLayout, GlobalSettings settings, @ArrayRes int array) { Context context = tabLayout.getContext(); TypedArray tArray = context.getResources().obtainTypedArray(array); diff --git a/app/src/main/res/layout/icon_profile_tab.xml b/app/src/main/res/layout/icon_profile_tab.xml index d5d94b1c..c36d2966 100644 --- a/app/src/main/res/layout/icon_profile_tab.xml +++ b/app/src/main/res/layout/icon_profile_tab.xml @@ -1,16 +1,16 @@ + android:orientation="vertical" + tools:ignore="UseCompoundDrawables"> + android:layout_height="@dimen/icon_profile_size" /> + \ No newline at end of file diff --git a/app/src/main/res/layout/page_settings.xml b/app/src/main/res/layout/page_settings.xml index e14f92c0..24813787 100644 --- a/app/src/main/res/layout/page_settings.xml +++ b/app/src/main/res/layout/page_settings.xml @@ -131,7 +131,8 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center_horizontal" - android:orientation="horizontal"> + android:orientation="horizontal" + android:baselineAligned="false">