diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 8b62415d..1ebbdfce 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -31,7 +31,9 @@ + diff --git a/app/src/main/java/org/nuclearfog/twidda/MainActivity.java b/app/src/main/java/org/nuclearfog/twidda/MainActivity.java index f740f767..3e975bac 100644 --- a/app/src/main/java/org/nuclearfog/twidda/MainActivity.java +++ b/app/src/main/java/org/nuclearfog/twidda/MainActivity.java @@ -139,11 +139,8 @@ public class MainActivity extends AppCompatActivity implements OnRefreshListener Uri link = getIntent().getData(); if (link != null) { - String text = link.toString(); - if (text.startsWith("https://")) { - mBrowser = new LinkBrowser(this); - mBrowser.execute(text); - } + mBrowser = new LinkBrowser(this); + mBrowser.execute(link); } } } diff --git a/app/src/main/java/org/nuclearfog/twidda/backend/LinkBrowser.java b/app/src/main/java/org/nuclearfog/twidda/backend/LinkBrowser.java index 56fecfe8..faa5ae95 100644 --- a/app/src/main/java/org/nuclearfog/twidda/backend/LinkBrowser.java +++ b/app/src/main/java/org/nuclearfog/twidda/backend/LinkBrowser.java @@ -1,33 +1,143 @@ package org.nuclearfog.twidda.backend; +import android.annotation.SuppressLint; +import android.app.Dialog; +import android.content.DialogInterface; +import android.content.Intent; +import android.net.Uri; import android.os.AsyncTask; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.Window; +import android.widget.Toast; import org.nuclearfog.twidda.MainActivity; +import org.nuclearfog.twidda.R; +import org.nuclearfog.twidda.backend.items.Tweet; +import org.nuclearfog.twidda.backend.items.TwitterUser; +import org.nuclearfog.twidda.database.DatabaseAdapter; +import org.nuclearfog.twidda.window.TweetDetail; +import org.nuclearfog.twidda.window.UserProfile; import java.lang.ref.WeakReference; +import java.util.regex.Matcher; +import java.util.regex.Pattern; -public class LinkBrowser extends AsyncTask { +public class LinkBrowser extends AsyncTask { + + private static final int GET_USER = 1; + private static final int GET_TWEET = 2; + private static final int FAILURE = 3; private WeakReference ui; + private TwitterEngine mTwitter; + private DatabaseAdapter mData; + private TwitterUser user; + private Tweet tweet; + private LayoutInflater inflater; + private Dialog popup; + public LinkBrowser(MainActivity context) { ui = new WeakReference<>(context); - + popup = new Dialog(context); + mData = new DatabaseAdapter(context); + mTwitter = TwitterEngine.getInstance(context); + inflater = LayoutInflater.from(context); } @Override - protected Void doInBackground(String... links) { - - - return null; + @SuppressLint("InflateParams") + protected void onPreExecute() { + popup.requestWindowFeature(Window.FEATURE_NO_TITLE); + popup.setCanceledOnTouchOutside(false); + if (popup.getWindow() != null) + popup.getWindow().setBackgroundDrawableResource(android.R.color.transparent); + View load = inflater.inflate(R.layout.item_load, null, false); + View cancelButton = load.findViewById(R.id.kill_button); + cancelButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + popup.dismiss(); + } + }); + popup.setOnDismissListener(new DialogInterface.OnDismissListener() { + @Override + public void onDismiss(DialogInterface dialog) { + if (getStatus() == Status.RUNNING) { + Toast.makeText(ui.get(), R.string.abort, Toast.LENGTH_SHORT).show(); + cancel(true); + } + } + }); + popup.setContentView(load); + popup.show(); } @Override - protected void onPostExecute(Void v) { + protected Integer doInBackground(Uri... links) { + try { + String path = links[0].getPath(); + if (path != null) { + Pattern pattern = Pattern.compile("[^\\/\\?]+"); + Matcher matcher = pattern.matcher(path); + if (matcher.find()) { + int start = matcher.start(); + 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); + return GET_TWEET; + } + } + } catch (Exception err) { + Log.e("LinkBrowser", err.getMessage()); + } + return FAILURE; } -} + + @Override + protected void onPostExecute(Integer mode) { + if (ui.get() == null) return; + + popup.dismiss(); + + switch (mode) { + case GET_TWEET: + Intent tweetActivity = new Intent(ui.get(), TweetDetail.class); + tweetActivity.putExtra("username", tweet.getUser().getScreenname()); + tweetActivity.putExtra("userID", tweet.getUser().getId()); + tweetActivity.putExtra("tweetID", tweet.getId()); + ui.get().startActivity(tweetActivity); + break; + + 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; + } + } + + @Override + protected void onCancelled(Integer i) { + popup.dismiss(); + } +} \ No newline at end of file diff --git a/app/src/main/java/org/nuclearfog/twidda/backend/TwitterEngine.java b/app/src/main/java/org/nuclearfog/twidda/backend/TwitterEngine.java index 12b4b4d6..92603805 100644 --- a/app/src/main/java/org/nuclearfog/twidda/backend/TwitterEngine.java +++ b/app/src/main/java/org/nuclearfog/twidda/backend/TwitterEngine.java @@ -264,6 +264,18 @@ public class TwitterEngine { } + /** + * Get User Context + * + * @param name User name + * @return User Object + * @throws TwitterException if Access is unavailable + */ + public TwitterUser getUser(String name) throws TwitterException { + return getUser(twitter.showUser(name)); + } + + /** * Efficient Access of Connection Information * @@ -363,10 +375,10 @@ public class TwitterEngine { * @param text Tweet Text * @param reply In reply to tweet ID * @param path Path to the Media File - * @return uploaded Status + * @throws TwitterException if Access is unavailable */ - public Tweet sendStatus(String text, long reply, @Nullable String[] path) throws TwitterException { + public void sendStatus(String text, long reply, @Nullable String[] path) throws TwitterException { StatusUpdate mStatus = new StatusUpdate(text); if (reply > 0) @@ -382,9 +394,7 @@ public class TwitterEngine { } mStatus.setMediaIds(mIDs); } - - Status currentStat = twitter.tweets().updateStatus(mStatus); - return getTweet(currentStat, null); + twitter.tweets().updateStatus(mStatus); }