layout fix, fixed bug when opening tweet link

This commit is contained in:
nuclearfog 2022-09-04 21:25:47 +02:00
parent ef92109438
commit e1aaa2fbf7
No known key found for this signature in database
GPG Key ID: AA0271FBE406DB98
7 changed files with 138 additions and 90 deletions

View File

@ -46,12 +46,15 @@ public class TweetUpdater extends AsyncTask<TweetUpdate, Void, Void> {
// upload media file and save media ID
mediaIds[pos] = twitter.uploadMedia(mediaUpdates[pos]);
}
// fixme error when upoading video
// upload tweet
if (!isCancelled()) {
twitter.uploadTweet(update, mediaIds);
}
} catch (TwitterException twException) {
this.twException = twException;
} catch (InterruptedException e) {
// ignore
} finally {
// close inputstreams
update.close();

View File

@ -1,12 +1,22 @@
package org.nuclearfog.twidda.ui.activities;
import static android.widget.Toast.LENGTH_SHORT;
import static org.nuclearfog.twidda.ui.activities.SearchActivity.KEY_SEARCH_QUERY;
import static org.nuclearfog.twidda.ui.activities.TweetActivity.KEY_TWEET_ID;
import static org.nuclearfog.twidda.ui.activities.TweetActivity.KEY_TWEET_NAME;
import static org.nuclearfog.twidda.ui.activities.TweetActivity.LINK_PATTERN;
import android.content.ActivityNotFoundException;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.text.method.ScrollingMovementMethod;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
@ -15,6 +25,8 @@ import androidx.appcompat.widget.Toolbar;
import com.squareup.picasso.Picasso;
import org.nuclearfog.tag.Tagger;
import org.nuclearfog.tag.Tagger.OnTagClickListener;
import org.nuclearfog.textviewtool.LinkAndScrollMovement;
import org.nuclearfog.twidda.R;
import org.nuclearfog.twidda.backend.api.TwitterException;
import org.nuclearfog.twidda.backend.async.MetricsLoader;
@ -29,6 +41,7 @@ import org.nuclearfog.twidda.model.User;
import java.io.Serializable;
import java.text.NumberFormat;
import java.util.List;
import jp.wasabeef.picasso.transformations.RoundedCornersTransformation;
@ -37,7 +50,7 @@ import jp.wasabeef.picasso.transformations.RoundedCornersTransformation;
*
* @author nuclearfog
*/
public class MetricsActivity extends AppCompatActivity {
public class MetricsActivity extends AppCompatActivity implements OnClickListener, OnTagClickListener {
/**
* key used for tweet information
@ -58,8 +71,8 @@ public class MetricsActivity extends AppCompatActivity {
private TextView replycount;
private TextView quoteCount;
private TextView videoViews;
private long tweetId;
@Nullable
private Tweet tweet;
@Override
@ -101,14 +114,13 @@ public class MetricsActivity extends AppCompatActivity {
}
AppStyles.setTheme(root, settings.getBackgroundColor());
AppStyles.setProgressColor(loading, settings.getHighlightColor());
tweetText.setMovementMethod(ScrollingMovementMethod.getInstance());
tweetText.setMovementMethod(LinkAndScrollMovement.getInstance());
toolbar.setTitle(R.string.title_metrics);
Serializable data = getIntent().getSerializableExtra(KEY_METRICS_TWEET);
if (data instanceof Tweet) {
Tweet tweet = (Tweet) data;
tweet = (Tweet) data;
User author = tweet.getAuthor();
tweetId = tweet.getId();
if (settings.imagesEnabled() && !author.getImageUrl().isEmpty()) {
String profileImageUrl = author.getImageUrl();
if (!author.hasDefaultProfileImage())
@ -128,18 +140,62 @@ public class MetricsActivity extends AppCompatActivity {
}
username.setText(author.getUsername());
screenname.setText(author.getScreenname());
tweetText.setText(Tagger.makeText(tweet.getText(),settings.getHighlightColor()));
tweetText.setText(Tagger.makeTextWithLinks(tweet.getText(),settings.getHighlightColor(), this));
created.setText(StringTools.formatCreationTime(getResources(), tweet.getTimestamp()));
}
profile.setOnClickListener(this);
}
@Override
protected void onStart() {
super.onStart();
if (metricsAsync == null) {
if (metricsAsync == null && tweet != null) {
metricsAsync = new MetricsLoader(this);
metricsAsync.execute(tweetId);
metricsAsync.execute(tweet.getId());
}
}
@Override
public void onClick(View v) {
if (v.getId() == R.id.metrics_profile) {
if (tweet != null) {
Intent profile = new Intent(getApplicationContext(), ProfileActivity.class);
profile.putExtra(ProfileActivity.KEY_PROFILE_DATA, tweet.getAuthor());
startActivity(profile);
}
}
}
@Override
public void onTagClick(String tag) {
Intent intent = new Intent(this, SearchActivity.class);
intent.putExtra(KEY_SEARCH_QUERY, tag);
startActivity(intent);
}
@Override
public void onLinkClick(String tag) {
Uri link = Uri.parse(tag);
// open tweet link
if (LINK_PATTERN.matcher(link.getScheme() + "://" + link.getHost() + link.getPath()).matches()) {
List<String> segments = link.getPathSegments();
Intent intent = new Intent(this, TweetActivity.class);
intent.putExtra(KEY_TWEET_ID, Long.parseLong(segments.get(2)));
intent.putExtra(KEY_TWEET_NAME, segments.get(0));
startActivity(intent);
}
// open link in browser
else {
Intent intent = new Intent(Intent.ACTION_VIEW, link);
try {
startActivity(intent);
} catch (ActivityNotFoundException err) {
Toast.makeText(this, R.string.error_connection_failed, LENGTH_SHORT).show();
}
}
}

View File

@ -68,6 +68,7 @@ import org.nuclearfog.twidda.ui.dialogs.ConfirmDialog.OnConfirmListener;
import java.text.NumberFormat;
import java.text.SimpleDateFormat;
import java.util.List;
import jp.wasabeef.picasso.transformations.RoundedCornersTransformation;
@ -448,36 +449,24 @@ public class ProfileActivity extends AppCompatActivity implements OnClickListene
@Override
public void onLinkClick(final String tag) {
String shortLink;
// remove query from link if exists
int cut = tag.indexOf('?');
if (cut > 0) {
shortLink = tag.substring(0, cut);
} else {
shortLink = tag;
}
// link points to a tweet
if (LINK_PATTERN.matcher(shortLink).matches()) {
try {
String name = shortLink.substring(20, shortLink.indexOf('/', 20));
long id = Long.parseLong(shortLink.substring(shortLink.lastIndexOf('/') + 1));
Intent intent = new Intent(this, TweetActivity.class);
intent.putExtra(KEY_TWEET_ID, id);
intent.putExtra(KEY_TWEET_NAME, name);
startActivity(intent);
return;
} catch (Exception err) {
err.printStackTrace();
// open link in browser if an error occurs
}
public void onLinkClick(String tag) {
Uri link = Uri.parse(tag);
// open tweet link
if (LINK_PATTERN.matcher(link.getScheme() + "://" + link.getHost() + link.getPath()).matches()) {
List<String> segments = link.getPathSegments();
Intent intent = new Intent(this, TweetActivity.class);
intent.putExtra(KEY_TWEET_ID, Long.parseLong(segments.get(2)));
intent.putExtra(KEY_TWEET_NAME, segments.get(0));
startActivity(intent);
}
// open link in browser
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(tag));
try {
startActivity(intent);
} catch (ActivityNotFoundException err) {
Toast.makeText(this, R.string.error_connection_failed, LENGTH_SHORT).show();
else {
Intent intent = new Intent(Intent.ACTION_VIEW, link);
try {
startActivity(intent);
} catch (ActivityNotFoundException err) {
Toast.makeText(this, R.string.error_connection_failed, LENGTH_SHORT).show();
}
}
}

View File

@ -64,6 +64,7 @@ import org.nuclearfog.twidda.ui.fragments.TweetFragment;
import java.text.NumberFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.regex.Pattern;
import jp.wasabeef.picasso.transformations.RoundedCornersTransformation;
@ -585,38 +586,29 @@ public class TweetActivity extends AppCompatActivity implements OnClickListener,
* @param tag link string
*/
@Override
public void onLinkClick(final String tag) {
String shortLink = tag;
int cut = shortLink.indexOf('?');
if (cut > 0) {
shortLink = shortLink.substring(0, cut);
}
// check if the link if from a tweet
if (LINK_PATTERN.matcher(shortLink).matches()) {
try {
String name = shortLink.substring(20, shortLink.indexOf('/', 20));
long id = Long.parseLong(shortLink.substring(shortLink.lastIndexOf('/') + 1));
Intent intent = new Intent(this, TweetActivity.class);
intent.putExtra(KEY_TWEET_ID, id);
intent.putExtra(KEY_TWEET_NAME, name);
startActivity(intent);
return;
} catch (Exception err) {
err.printStackTrace();
// if an error occurs, open link in browser
}
public void onLinkClick(String tag) {
Uri link = Uri.parse(tag);
// check if the link points to another tweet
if (LINK_PATTERN.matcher(link.getScheme() + "://" + link.getHost() + link.getPath()).matches()) {
List<String> segments = link.getPathSegments();
Intent intent = new Intent(this, TweetActivity.class);
intent.putExtra(KEY_TWEET_ID, Long.parseLong(segments.get(2)));
intent.putExtra(KEY_TWEET_NAME, segments.get(0));
startActivity(intent);
}
// open link in browser or preview
if (settings.linkPreviewEnabled()) {
linkPreview.show(tag);
} else {
// open link in a browser
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse(tag));
try {
startActivity(intent);
} catch (ActivityNotFoundException err) {
Toast.makeText(this, R.string.error_connection_failed, LENGTH_SHORT).show();
else {
if (settings.linkPreviewEnabled()) {
linkPreview.show(tag);
} else {
// open link in a browser
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(link);
try {
startActivity(intent);
} catch (ActivityNotFoundException err) {
Toast.makeText(this, R.string.error_connection_failed, LENGTH_SHORT).show();
}
}
}
}

View File

@ -34,6 +34,8 @@ import org.nuclearfog.twidda.ui.activities.TweetActivity;
import org.nuclearfog.twidda.ui.dialogs.ConfirmDialog;
import org.nuclearfog.twidda.ui.dialogs.ConfirmDialog.OnConfirmListener;
import java.util.List;
/**
* Fragment class to show a list of directmessages
*
@ -103,22 +105,20 @@ public class MessageFragment extends ListFragment implements OnMessageClickListe
@Override
public void onLinkClick(final String tag) {
String shortLink = tag;
int cut = shortLink.indexOf('?');
if (cut > 0) {
shortLink = shortLink.substring(0, cut);
}
if (LINK_PATTERN.matcher(shortLink).matches()) {
String name = shortLink.substring(20, shortLink.indexOf('/', 20));
long id = Long.parseLong(shortLink.substring(shortLink.lastIndexOf('/') + 1));
public void onLinkClick(String tag) {
Uri link = Uri.parse(tag);
// open tweet link
if (LINK_PATTERN.matcher(link.getScheme() + "://" + link.getHost() + link.getPath()).matches()) {
List<String> segments = link.getPathSegments();
Intent intent = new Intent(requireContext(), TweetActivity.class);
intent.putExtra(KEY_TWEET_ID, id);
intent.putExtra(KEY_TWEET_NAME, name);
intent.putExtra(KEY_TWEET_ID, Long.parseLong(segments.get(2)));
intent.putExtra(KEY_TWEET_NAME, segments.get(0));
startActivity(intent);
} else {
}
// open link in browser
else {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse(tag));
intent.setData(link);
try {
startActivity(intent);
} catch (ActivityNotFoundException err) {

View File

@ -101,7 +101,8 @@
android:visibility="gone"
android:drawablePadding="@dimen/metrics_padding_drawable_big"
android:layout_margin="@dimen/metrics_item_margin"
android:textSize="@dimen/metrics_textsize_big"/>
android:textSize="@dimen/metrics_textsize_big"
android:gravity="end"/>
<TextView
android:id="@+id/metrics_retweets"
@ -110,7 +111,8 @@
android:visibility="gone"
android:drawablePadding="@dimen/metrics_padding_drawable_big"
android:layout_margin="@dimen/metrics_item_margin"
android:textSize="@dimen/metrics_textsize_big"/>
android:textSize="@dimen/metrics_textsize_big"
android:gravity="end"/>
<TextView
android:id="@+id/metrics_favorits"
@ -119,7 +121,8 @@
android:visibility="gone"
android:drawablePadding="@dimen/metrics_padding_drawable_big"
android:layout_margin="@dimen/metrics_item_margin"
android:textSize="@dimen/metrics_textsize_big"/>
android:textSize="@dimen/metrics_textsize_big"
android:gravity="end"/>
<TextView
android:id="@+id/metrics_replies"
@ -128,7 +131,8 @@
android:visibility="gone"
android:drawablePadding="@dimen/metrics_padding_drawable_big"
android:layout_margin="@dimen/metrics_item_margin"
android:textSize="@dimen/metrics_textsize_big"/>
android:textSize="@dimen/metrics_textsize_big"
android:gravity="end"/>
<TextView
android:id="@+id/metrics_quotes"
@ -137,7 +141,8 @@
android:visibility="gone"
android:drawablePadding="@dimen/metrics_padding_drawable_big"
android:layout_margin="@dimen/metrics_item_margin"
android:textSize="@dimen/metrics_textsize_big"/>
android:textSize="@dimen/metrics_textsize_big"
android:gravity="end"/>
<TextView
android:id="@+id/metrics_link_count"
@ -146,7 +151,8 @@
android:visibility="gone"
android:drawablePadding="@dimen/metrics_padding_drawable_big"
android:layout_margin="@dimen/metrics_item_margin"
android:textSize="@dimen/metrics_textsize_big"/>
android:textSize="@dimen/metrics_textsize_big"
android:gravity="end"/>
<TextView
android:id="@+id/metrics_profile_count"
@ -155,7 +161,8 @@
android:visibility="gone"
android:drawablePadding="@dimen/metrics_padding_drawable_big"
android:layout_margin="@dimen/metrics_item_margin"
android:textSize="@dimen/metrics_textsize_big"/>
android:textSize="@dimen/metrics_textsize_big"
android:gravity="end"/>
<TextView
android:id="@+id/metrics_video_clicks"
@ -164,7 +171,8 @@
android:visibility="gone"
android:drawablePadding="@dimen/metrics_padding_drawable_big"
android:layout_margin="@dimen/metrics_item_margin"
android:textSize="@dimen/metrics_textsize_big"/>
android:textSize="@dimen/metrics_textsize_big"
android:gravity="end"/>
</LinearLayout>

View File

@ -143,7 +143,7 @@
<dimen name="metrics_textsize_small">12sp</dimen>
<dimen name="metrics_textsize_normal">18sp</dimen>
<dimen name="metrics_textsize_big">20sp</dimen>
<integer name="metrics_text_max_lines">5</integer>
<integer name="metrics_text_max_lines">8</integer>
<!--dimens of popup_tweet.xml-->
<dimen name="tweetpopup_margin_layout">10dp</dimen>