package org.getlantern.firetweet.extension.twitlonger;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.getlantern.firetweet.Firetweet;
import org.getlantern.firetweet.extension.twitlonger.TwitLonger.TwitLongerException;
import org.getlantern.firetweet.extension.twitlonger.TwitLonger.TwitLongerResponse;
import org.getlantern.firetweet.model.ParcelableStatus;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
import android.text.Html;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.widget.ImageButton;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;
public class TwitLongerReaderActivity extends Activity implements Constants, OnClickListener {
private TextView mPreview;
private ImageButton mActionButton;
private ProgressBar mProgress;
private String mResult, mUser;
private ParcelableStatus mStatus;
private TwitLongerReaderTask mTwitLongerPostTask;
private static final Pattern PATTERN_TWITLONGER = Pattern.compile(
"((tl\\.gd|www.twitlonger.com\\/show)\\/([\\w\\d]+))", Pattern.CASE_INSENSITIVE);
private static final int GROUP_TWITLONGER_ID = 3;
@Override
public void onClick(final View view) {
switch (view.getId()) {
case R.id.action: {
if (mResult == null) {
if (mStatus == null) return;
if (mTwitLongerPostTask != null) {
mTwitLongerPostTask.cancel(true);
}
final Matcher m = PATTERN_TWITLONGER.matcher(mStatus.text_html);
if (m.find()) {
mTwitLongerPostTask = new TwitLongerReaderTask(m.group(GROUP_TWITLONGER_ID));
mTwitLongerPostTask.execute();
}
} else {
if (mUser == null || mResult == null) return;
final Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_TEXT, "@" + mUser + ": " + mResult);
startActivity(Intent.createChooser(intent, getString(R.string.share)));
}
break;
}
}
}
@Override
protected void onCreate(final Bundle savedInstanceState) {
requestWindowFeature(Window.FEATURE_NO_TITLE);
super.onCreate(savedInstanceState);
final Intent intent = getIntent();
final Uri data = intent.getData();
final String action = intent.getAction();
setContentView(R.layout.main);
mPreview = (TextView) findViewById(R.id.text);
mActionButton = (ImageButton) findViewById(R.id.action);
mProgress = (ProgressBar) findViewById(R.id.progress);
mResult = savedInstanceState != null ? savedInstanceState.getString(Firetweet.EXTRA_TEXT) : null;
mUser = savedInstanceState != null ? savedInstanceState.getString(Firetweet.EXTRA_USER) : null;
if (mResult == null || mUser == null) {
if (Firetweet.INTENT_ACTION_EXTENSION_OPEN_STATUS.equals(action)) {
mStatus = Firetweet.getStatusFromIntent(getIntent());
if (mStatus == null || mStatus.text_html == null) {
finish();
return;
}
mUser = mStatus.user_screen_name;
mPreview.setText(Html.fromHtml(mStatus.text_html));
final Matcher m = PATTERN_TWITLONGER.matcher(mStatus.text_html);
mActionButton.setEnabled(m.find());
} else if (Intent.ACTION_VIEW.equals(action) && data != null) {
mPreview.setText(data.toString());
final Matcher m = PATTERN_TWITLONGER.matcher(data.toString());
if (m.find()) {
if (mTwitLongerPostTask != null) {
mTwitLongerPostTask.cancel(true);
}
mTwitLongerPostTask = new TwitLongerReaderTask(m.group(GROUP_TWITLONGER_ID));
mTwitLongerPostTask.execute();
} else {
finish();
return;
}
}
} else {
mPreview.setText(mResult);
}
}
@Override
protected void onSaveInstanceState(final Bundle outState) {
outState.putString(Firetweet.EXTRA_TEXT, mResult);
outState.putString(Firetweet.EXTRA_USER, mUser);
super.onSaveInstanceState(outState);
}
public final class TwitLongerReaderTask extends AsyncTask<Void, Void, Object> {
private final String id;
public TwitLongerReaderTask(final String id) {
this.id = id;
}
@Override
protected Object doInBackground(final Void... args) {
final TwitLonger tl = new TwitLonger(TWITLONGER_APP_NAME, TWITLONGER_API_KEY);
try {
return tl.readPost(id);
} catch (final TwitLongerException e) {
return e;
}
}
@Override
protected void onPostExecute(final Object result) {
mProgress.setVisibility(View.GONE);
mActionButton.setVisibility(View.VISIBLE);
mActionButton.setImageResource(result instanceof TwitLongerResponse ? R.drawable.ic_menu_share
: R.drawable.ic_menu_send);
if (result instanceof TwitLongerResponse) {
mResult = ((TwitLongerResponse) result).content;
if (mStatus == null) {
mUser = ((TwitLongerResponse) result).user;
}
mPreview.setText(mResult);
} else if (result instanceof TwitLongerException) {
Toast.makeText(TwitLongerReaderActivity.this,
getString(R.string.error_message, ((TwitLongerException) result).getMessage()),
Toast.LENGTH_LONG).show();
} else {
Toast.makeText(TwitLongerReaderActivity.this, R.string.error_unknown_error, Toast.LENGTH_LONG).show();
}
super.onPostExecute(result);
}
@Override
protected void onPreExecute() {
mProgress.setVisibility(View.VISIBLE);
mActionButton.setVisibility(View.GONE);
super.onPreExecute();
}
}
}