layout fix, fixed bug when opening tweet link
This commit is contained in:
parent
ef92109438
commit
e1aaa2fbf7
|
@ -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();
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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>
|
||||
|
||||
|
|
|
@ -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>
|
||||
|
|
Loading…
Reference in New Issue