package info.justaway;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import butterknife.ButterKnife;
import butterknife.Bind;
import butterknife.OnClick;
import info.justaway.model.AccessTokenManager;
import info.justaway.model.TwitterManager;
import info.justaway.model.UserIconManager;
import info.justaway.util.MessageUtil;
import info.justaway.util.ThemeUtil;
import info.justaway.widget.FontelloButton;
import twitter4j.Twitter;
import twitter4j.TwitterException;
import twitter4j.User;
import twitter4j.auth.AccessToken;
import twitter4j.auth.RequestToken;
public class SignInActivity extends Activity {
private static final String STATE_REQUEST_TOKEN = "request_token";
private RequestToken mRequestToken;
@Bind(R.id.start_oauth_button) FontelloButton mStartOauthButton;
@Bind(R.id.connect_with_twitter) TextView mConnectWithTwitter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ThemeUtil.setTheme(this);
setContentView(R.layout.activity_signin);
ButterKnife.bind(this);
Intent intent = getIntent();
if (intent.getBooleanExtra("add_account", false)) {
mStartOauthButton.setVisibility(View.GONE);
mConnectWithTwitter.setVisibility(View.GONE);
startOAuth();
return;
}
// バックグランドプロセスが死んでいるとonNewIntentでなくonCreateからoauth_verifierが来る
if (savedInstanceState != null) {
mRequestToken = (RequestToken) savedInstanceState.get(STATE_REQUEST_TOKEN);
if (mRequestToken != null) {
if (intent.getData() != null) {
String oauth_verifier = intent.getData().getQueryParameter("oauth_verifier");
if (oauth_verifier != null && !oauth_verifier.isEmpty()) {
mStartOauthButton.setVisibility(View.GONE);
mConnectWithTwitter.setVisibility(View.GONE);
MessageUtil.showProgressDialog(this, getString(R.string.progress_process));
new VerifyOAuthTask().execute(oauth_verifier);
}
}
}
}
}
@SuppressWarnings("NullableProblems")
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
if (mRequestToken != null) {
outState.putSerializable(STATE_REQUEST_TOKEN, mRequestToken);
}
}
@SuppressWarnings("NullableProblems")
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
mRequestToken = (RequestToken) savedInstanceState.getSerializable(STATE_REQUEST_TOKEN);
}
// @Override
// protected void onResume() {
// super.onResume();
//
// /**
// * 初回認証後バックキーで終了して「最近使ったアプリ」から復帰するとここに来る
// */
// if (JustawayApplication.getApplication().hasAccessToken()) {
// Intent intent = new Intent(this, MainActivity.class);
// startActivity(intent);
// finish();
// }
// }
@Override
public void onNewIntent(Intent intent) {
if (intent == null || intent.getData() == null
|| !intent.getData().toString().startsWith(getString(R.string.twitter_callback_url))) {
return;
}
String oauth_verifier = intent.getData().getQueryParameter("oauth_verifier");
if (oauth_verifier == null || oauth_verifier.isEmpty()) {
return;
}
MessageUtil.showProgressDialog(this, getString(R.string.progress_process));
new VerifyOAuthTask().execute(oauth_verifier);
}
private void successOAuth() {
Intent intent = new Intent(this, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);
finish();
}
private class VerifyOAuthTask extends AsyncTask<String, Void, User> {
@Override
protected User doInBackground(String... params) {
try {
Twitter twitter = TwitterManager.getTwitterInstance();
AccessToken accessToken = twitter.getOAuthAccessToken(mRequestToken, params[0]);
AccessTokenManager.setAccessToken(accessToken);
twitter.setOAuthAccessToken(accessToken);
return twitter.verifyCredentials();
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
@Override
protected void onPostExecute(User user) {
MessageUtil.dismissProgressDialog();
if (user != null) {
UserIconManager.addUserIconMap(user);
MessageUtil.showToast(R.string.toast_sign_in_success);
successOAuth();
}
}
}
@OnClick(R.id.start_oauth_button)
void startOAuth() {
MessageUtil.showProgressDialog(this, getString(R.string.progress_process));
AsyncTask<Void, Void, RequestToken> task = new AsyncTask<Void, Void, RequestToken>() {
@Override
protected RequestToken doInBackground(Void... params) {
try {
Twitter twitter = TwitterManager.getTwitterInstance();
return twitter.getOAuthRequestToken(getString(R.string.twitter_callback_url));
} catch (TwitterException e) {
e.printStackTrace();
return null;
}
}
@Override
protected void onPostExecute(RequestToken token) {
MessageUtil.dismissProgressDialog();
if (token == null) {
MessageUtil.showToast(R.string.toast_connection_failure);
return;
}
final String url = token.getAuthorizationURL();
if (url == null) {
MessageUtil.showToast(R.string.toast_get_authorization_url_failure);
return;
}
mRequestToken = token;
mStartOauthButton.setVisibility(View.GONE);
mConnectWithTwitter.setVisibility(View.GONE);
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(intent);
}
};
task.execute();
}
}