parent
1c1abd11d0
commit
2a2eef26bc
|
@ -9,7 +9,7 @@ android {
|
||||||
minSdkVersion 16
|
minSdkVersion 16
|
||||||
targetSdkVersion 28
|
targetSdkVersion 28
|
||||||
versionCode 1
|
versionCode 1
|
||||||
versionName '1.2.2'
|
versionName '1.3'
|
||||||
vectorDrawables.useSupportLibrary = true
|
vectorDrawables.useSupportLibrary = true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -33,11 +33,6 @@
|
||||||
android:host="*.twitter.com"
|
android:host="*.twitter.com"
|
||||||
android:scheme="https" />
|
android:scheme="https" />
|
||||||
|
|
||||||
<data
|
|
||||||
android:host="*.twitter.com"
|
|
||||||
android:pathPattern="\\/.*?.*"
|
|
||||||
android:scheme="https" />
|
|
||||||
|
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
</activity>
|
</activity>
|
||||||
|
|
||||||
|
|
|
@ -112,8 +112,8 @@ public class MainActivity extends AppCompatActivity implements OnRefreshListener
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onResume() {
|
protected void onStart() {
|
||||||
super.onResume();
|
super.onStart();
|
||||||
if (!settings.getLogin()) {
|
if (!settings.getLogin()) {
|
||||||
Intent i = new Intent(this, LoginPage.class);
|
Intent i = new Intent(this, LoginPage.class);
|
||||||
startActivityForResult(i, LOGIN);
|
startActivityForResult(i, LOGIN);
|
||||||
|
@ -146,14 +146,14 @@ public class MainActivity extends AppCompatActivity implements OnRefreshListener
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onPause() {
|
protected void onStop() {
|
||||||
if (home != null && home.getStatus() == RUNNING) {
|
if (home != null && home.getStatus() == RUNNING) {
|
||||||
home.cancel(true);
|
home.cancel(true);
|
||||||
}
|
}
|
||||||
if (mBrowser != null && mBrowser.getStatus() == RUNNING) {
|
if (mBrowser != null && mBrowser.getStatus() == RUNNING) {
|
||||||
mBrowser.cancel(true);
|
mBrowser.cancel(true);
|
||||||
}
|
}
|
||||||
super.onPause();
|
super.onStop();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -15,10 +15,8 @@ import android.widget.Toast;
|
||||||
import org.nuclearfog.twidda.MainActivity;
|
import org.nuclearfog.twidda.MainActivity;
|
||||||
import org.nuclearfog.twidda.R;
|
import org.nuclearfog.twidda.R;
|
||||||
import org.nuclearfog.twidda.backend.items.Tweet;
|
import org.nuclearfog.twidda.backend.items.Tweet;
|
||||||
import org.nuclearfog.twidda.backend.items.TwitterUser;
|
|
||||||
import org.nuclearfog.twidda.database.DatabaseAdapter;
|
import org.nuclearfog.twidda.database.DatabaseAdapter;
|
||||||
import org.nuclearfog.twidda.window.TweetDetail;
|
import org.nuclearfog.twidda.window.TweetDetail;
|
||||||
import org.nuclearfog.twidda.window.UserProfile;
|
|
||||||
|
|
||||||
import java.lang.ref.WeakReference;
|
import java.lang.ref.WeakReference;
|
||||||
import java.util.regex.Matcher;
|
import java.util.regex.Matcher;
|
||||||
|
@ -26,22 +24,15 @@ import java.util.regex.Pattern;
|
||||||
|
|
||||||
import twitter4j.TwitterException;
|
import twitter4j.TwitterException;
|
||||||
|
|
||||||
public class LinkBrowser extends AsyncTask<Uri, Void, Integer> {
|
public class LinkBrowser extends AsyncTask<Uri, Void, Void> {
|
||||||
|
|
||||||
private static final int NO_MATCH = 0;
|
|
||||||
private static final int GET_USER = 1;
|
|
||||||
private static final int GET_TWEET = 2;
|
|
||||||
private static final int FAILURE = 3;
|
|
||||||
|
|
||||||
private WeakReference<MainActivity> ui;
|
private WeakReference<MainActivity> ui;
|
||||||
private TwitterEngine mTwitter;
|
private TwitterEngine mTwitter;
|
||||||
private DatabaseAdapter mData;
|
private DatabaseAdapter mData;
|
||||||
private TwitterUser user;
|
|
||||||
private Tweet tweet;
|
private Tweet tweet;
|
||||||
private LayoutInflater inflater;
|
private LayoutInflater inflater;
|
||||||
private Dialog popup;
|
private Dialog popup;
|
||||||
|
private String errMsg;
|
||||||
private String errMsg = "";
|
|
||||||
|
|
||||||
public LinkBrowser(MainActivity context) {
|
public LinkBrowser(MainActivity context) {
|
||||||
ui = new WeakReference<>(context);
|
ui = new WeakReference<>(context);
|
||||||
|
@ -82,78 +73,61 @@ public class LinkBrowser extends AsyncTask<Uri, Void, Integer> {
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Integer doInBackground(Uri... links) {
|
protected Void doInBackground(Uri... links) {
|
||||||
try {
|
try {
|
||||||
String path = links[0].getPath();
|
String path = links[0].getPath();
|
||||||
if (path != null) {
|
if (path != null) {
|
||||||
|
Pattern linkPattern = Pattern.compile("\\/@?[\\w_]+\\/status\\/\\d{1,20}");
|
||||||
|
Matcher linkMatch = linkPattern.matcher(path);
|
||||||
|
if (linkMatch.matches()) {
|
||||||
|
Pattern idPattern = Pattern.compile("\\d{1,20}");
|
||||||
|
Matcher idMatcher = idPattern.matcher(path);
|
||||||
|
|
||||||
Pattern pattern = Pattern.compile("[^\\/\\?]+");
|
if (idMatcher.find()) {
|
||||||
Matcher matcher = pattern.matcher(path);
|
int start = idMatcher.start();
|
||||||
|
int end = idMatcher.end();
|
||||||
|
String idString = path.substring(start, end);
|
||||||
|
long tweetId = Long.parseLong(idString);
|
||||||
|
|
||||||
if (matcher.find()) {
|
tweet = mData.getStatus(tweetId);
|
||||||
int start = matcher.start();
|
if (tweet == null)
|
||||||
int end = matcher.end();
|
|
||||||
if (!matcher.find()) {
|
|
||||||
String username = path.substring(start, end);
|
|
||||||
user = mTwitter.getUser(username);
|
|
||||||
mData.storeUser(user);
|
|
||||||
return GET_USER;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (matcher.find()) {
|
|
||||||
int start = matcher.start();
|
|
||||||
int end = matcher.end();
|
|
||||||
String id = path.substring(start, end);
|
|
||||||
long tweetId = Long.parseLong(id);
|
|
||||||
tweet = mTwitter.getStatus(tweetId);
|
tweet = mTwitter.getStatus(tweetId);
|
||||||
return GET_TWEET;
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (TwitterException err) {
|
} catch (TwitterException err) {
|
||||||
errMsg = err.getErrorMessage();
|
errMsg = err.getErrorMessage();
|
||||||
return FAILURE;
|
|
||||||
} catch (Exception err) {
|
} catch (Exception err) {
|
||||||
Log.e("LinkBrowser", err.getMessage());
|
Log.e("LinkBrowser", err.getMessage());
|
||||||
return FAILURE;
|
|
||||||
}
|
}
|
||||||
return NO_MATCH;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onPostExecute(Integer mode) {
|
protected void onPostExecute(Void mode) {
|
||||||
if (ui.get() == null) return;
|
if (ui.get() == null) return;
|
||||||
|
|
||||||
popup.dismiss();
|
popup.dismiss();
|
||||||
|
|
||||||
switch (mode) {
|
if (tweet != null) {
|
||||||
case GET_TWEET:
|
|
||||||
Intent tweetActivity = new Intent(ui.get(), TweetDetail.class);
|
Intent tweetActivity = new Intent(ui.get(), TweetDetail.class);
|
||||||
tweetActivity.putExtra("username", tweet.getUser().getScreenname());
|
tweetActivity.putExtra("username", tweet.getUser().getScreenname());
|
||||||
tweetActivity.putExtra("userID", tweet.getUser().getId());
|
tweetActivity.putExtra("userID", tweet.getUser().getId());
|
||||||
tweetActivity.putExtra("tweetID", tweet.getId());
|
tweetActivity.putExtra("tweetID", tweet.getId());
|
||||||
ui.get().startActivity(tweetActivity);
|
ui.get().startActivity(tweetActivity);
|
||||||
break;
|
} else {
|
||||||
|
if (errMsg == null) {
|
||||||
case GET_USER:
|
|
||||||
Intent userActivity = new Intent(ui.get(), UserProfile.class);
|
|
||||||
userActivity.putExtra("username", user.getScreenname());
|
|
||||||
userActivity.putExtra("userID", user.getId());
|
|
||||||
ui.get().startActivity(userActivity);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case FAILURE:
|
|
||||||
if (errMsg.isEmpty()) {
|
|
||||||
Toast.makeText(ui.get(), R.string.site_load_failure, Toast.LENGTH_LONG).show();
|
Toast.makeText(ui.get(), R.string.site_load_failure, Toast.LENGTH_LONG).show();
|
||||||
} else {
|
} else {
|
||||||
Toast.makeText(ui.get(), errMsg, Toast.LENGTH_LONG).show();
|
Toast.makeText(ui.get(), errMsg, Toast.LENGTH_LONG).show();
|
||||||
}
|
}
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCancelled(Integer i) {
|
protected void onCancelled(Void v) {
|
||||||
popup.dismiss();
|
popup.dismiss();
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -97,8 +97,8 @@ public class TweetDetail extends AppCompatActivity implements OnClickListener,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
protected void onResume() {
|
protected void onStart() {
|
||||||
super.onResume();
|
super.onStart();
|
||||||
if (mStat == null) {
|
if (mStat == null) {
|
||||||
TimelineAdapter answerAdapter = new TimelineAdapter(this);
|
TimelineAdapter answerAdapter = new TimelineAdapter(this);
|
||||||
answerAdapter.toggleImage(settings.loadImages());
|
answerAdapter.toggleImage(settings.loadImages());
|
||||||
|
@ -113,10 +113,10 @@ public class TweetDetail extends AppCompatActivity implements OnClickListener,
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onPause() {
|
protected void onStop() {
|
||||||
if (mStat != null && mStat.getStatus() == RUNNING)
|
if (mStat != null && mStat.getStatus() == RUNNING)
|
||||||
mStat.cancel(true);
|
mStat.cancel(true);
|
||||||
super.onPause();
|
super.onStop();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -102,8 +102,8 @@ public class UserProfile extends AppCompatActivity implements OnRefreshListener,
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onResume() {
|
protected void onStart() {
|
||||||
super.onResume();
|
super.onStart();
|
||||||
if (mProfile == null) {
|
if (mProfile == null) {
|
||||||
TimelineAdapter homeTl = new TimelineAdapter(this);
|
TimelineAdapter homeTl = new TimelineAdapter(this);
|
||||||
homeTl.setColor(settings.getHighlightColor(), settings.getFontColor());
|
homeTl.setColor(settings.getHighlightColor(), settings.getFontColor());
|
||||||
|
@ -124,10 +124,10 @@ public class UserProfile extends AppCompatActivity implements OnRefreshListener,
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onPause() {
|
protected void onStop() {
|
||||||
if (mProfile != null && mProfile.getStatus() == RUNNING)
|
if (mProfile != null && mProfile.getStatus() == RUNNING)
|
||||||
mProfile.cancel(true);
|
mProfile.cancel(true);
|
||||||
super.onPause();
|
super.onStop();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -38,8 +38,7 @@
|
||||||
android:id="@+id/img_preview"
|
android:id="@+id/img_preview"
|
||||||
android:layout_width="@dimen/tweet_button_size"
|
android:layout_width="@dimen/tweet_button_size"
|
||||||
android:layout_height="@dimen/tweet_button_size"
|
android:layout_height="@dimen/tweet_button_size"
|
||||||
android:layout_marginStart="@dimen/tweet_icon_margin"
|
android:contentDescription="@string/image_preview"
|
||||||
android:layout_marginLeft="@dimen/tweet_icon_margin"
|
|
||||||
android:visibility="invisible"
|
android:visibility="invisible"
|
||||||
app:srcCompat="@drawable/preview" />
|
app:srcCompat="@drawable/preview" />
|
||||||
|
|
||||||
|
@ -49,6 +48,7 @@
|
||||||
android:layout_height="@dimen/tweet_button_size"
|
android:layout_height="@dimen/tweet_button_size"
|
||||||
android:layout_marginStart="@dimen/tweet_icon_margin"
|
android:layout_marginStart="@dimen/tweet_icon_margin"
|
||||||
android:layout_marginLeft="@dimen/tweet_icon_margin"
|
android:layout_marginLeft="@dimen/tweet_icon_margin"
|
||||||
|
android:contentDescription="@string/add_image"
|
||||||
app:srcCompat="@drawable/image" />
|
app:srcCompat="@drawable/image" />
|
||||||
|
|
||||||
<ImageView
|
<ImageView
|
||||||
|
@ -57,6 +57,7 @@
|
||||||
android:layout_height="@dimen/tweet_button_size"
|
android:layout_height="@dimen/tweet_button_size"
|
||||||
android:layout_marginStart="@dimen/tweet_icon_margin"
|
android:layout_marginStart="@dimen/tweet_icon_margin"
|
||||||
android:layout_marginLeft="@dimen/tweet_icon_margin"
|
android:layout_marginLeft="@dimen/tweet_icon_margin"
|
||||||
|
android:contentDescription="@string/send_tweet"
|
||||||
app:srcCompat="@drawable/tweet" />
|
app:srcCompat="@drawable/tweet" />
|
||||||
|
|
||||||
<ImageView
|
<ImageView
|
||||||
|
@ -65,6 +66,7 @@
|
||||||
android:layout_height="@dimen/tweet_button_size"
|
android:layout_height="@dimen/tweet_button_size"
|
||||||
android:layout_marginStart="@dimen/tweet_icon_margin"
|
android:layout_marginStart="@dimen/tweet_icon_margin"
|
||||||
android:layout_marginLeft="@dimen/tweet_icon_margin"
|
android:layout_marginLeft="@dimen/tweet_icon_margin"
|
||||||
|
android:contentDescription="@string/tweet_close"
|
||||||
app:srcCompat="@drawable/cross" />
|
app:srcCompat="@drawable/cross" />
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
|
@ -86,4 +86,8 @@
|
||||||
<string name="tweet_processing">processing..</string>
|
<string name="tweet_processing">processing..</string>
|
||||||
<string name="tweet_loading">loading..</string>
|
<string name="tweet_loading">loading..</string>
|
||||||
<string name="site_load_failure">error while loading site!</string>
|
<string name="site_load_failure">error while loading site!</string>
|
||||||
|
<string name="image_preview">Image preview</string>
|
||||||
|
<string name="add_image">add new image</string>
|
||||||
|
<string name="send_tweet">send Tweet</string>
|
||||||
|
<string name="tweet_close">close tweet</string>
|
||||||
</resources>
|
</resources>
|
Loading…
Reference in New Issue