package im.zico.wingtwitter.ui;
import android.content.Intent;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Bundle;
import fr.castorflex.android.smoothprogressbar.SmoothProgressBar;
import im.zico.wingtwitter.R;
import im.zico.wingtwitter.WingApp;
import im.zico.wingtwitter.utils.PrefKey;
import im.zico.wingtwitter.utils.PreferencesManager;
import twitter4j.AsyncTwitter;
import twitter4j.ResponseList;
import twitter4j.Status;
import twitter4j.TwitterAdapter;
import twitter4j.TwitterListener;
import twitter4j.User;
import twitter4j.auth.AccessToken;
import twitter4j.auth.RequestToken;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.webkit.CookieManager;
import android.webkit.CookieSyncManager;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Toast;
import android.widget.Toolbar;
/**
* Created by tinyao on 11/29/14.
*/
public class OAuthActivity extends BaseActivity {
private AsyncTwitter asyncTwitter;
private WebView mWebView;
private String requestUrl;
SmoothProgressBar progressBar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_oauth);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setActionBar(toolbar);
getActionBar().setDisplayHomeAsUpEnabled(true);
progressBar = (SmoothProgressBar) findViewById(R.id.loadProgressBar);
asyncTwitter = WingApp.newTwitterInstance();
asyncTwitter.addListener(listener);
CookieSyncManager.createInstance(this);
CookieManager cookieManager = CookieManager.getInstance();
cookieManager.removeAllCookie();
mWebView = (WebView) findViewById(R.id.webview_login);
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.getSettings().setAppCacheEnabled(false);
mWebView.getSettings().setSaveFormData(false);
mWebView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView webView, String url) {
if (url != null && url.startsWith("oauth:///zico.im")) {
handleTwitterCallback(url);
} else if (url.equals("https://twitter.com/")) {
webView.loadUrl(requestUrl);
} else {
webView.loadUrl(url);
}
return true;
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
progressBar.setVisibility(View.INVISIBLE);
}
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
progressBar.setVisibility(View.VISIBLE);
}
});
asyncTwitter.getOAuthRequestTokenAsync("oauth:///zico.im");
}
TwitterListener listener = new TwitterAdapter() {
@Override
public void gotOAuthAccessToken(AccessToken token) {
super.gotOAuthAccessToken(accessToken);
Log.v("logging_in", "this is what the token should be: " + token.getToken());
accessToken = token;
PreferencesManager prefManager = PreferencesManager.getInstance(OAuthActivity.this);
prefManager.setValue(PrefKey.KEY_ACCESSTOKEN, token.getToken());
prefManager.setValue(PrefKey.KEY_TOKENSECRET, token.getTokenSecret());
prefManager.setValue(PrefKey.KEY_USERID, token.getUserId());
prefManager.setValue(PrefKey.KEY_SCREENNAME, token.getScreenName());
asyncTwitter.showUser(token.getUserId());
}
@Override
public void gotOAuthRequestToken(RequestToken token) {
Log.d("DEBUG", "request token got");
if (token != null) {
requestToken = token;
mHandler.sendEmptyMessage(0);
}
super.gotOAuthRequestToken(token);
}
@Override
public void gotUserDetail(User user) {
super.gotUserDetail(user);
PreferencesManager prefManager = PreferencesManager.getInstance(OAuthActivity.this);
prefManager.setValue(PrefKey.KEY_USER_AVATAR_URL, user.getProfileImageURL());
prefManager.setValue(PrefKey.KEY_USER_AVATAR_BIG_URL, user.getBiggerProfileImageURL());
prefManager.setValue(PrefKey.KEY_USER_NAME, user.getName());
prefManager.setValue(PrefKey.KEY_USER_PROFILE_BG_URL, user.getProfileBackgroundImageURL());
prefManager.setValue(PrefKey.KEY_USER_DESC, user.getDescription());
WingApp.resetAsyncTwitter();
mHandler.sendEmptyMessage(1);
Log.d("DEBUG", "User: " + user.getScreenName() + " : " + user.getProfileImageURL());
}
@Override
public void gotHomeTimeline(ResponseList<Status> statuses) {
super.gotHomeTimeline(statuses);
Log.d("DEBUG", "got tweets: " + statuses.size());
}
};
Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
if (msg.what == 0) {
requestUrl = requestToken.getAuthenticationURL();
mWebView.loadUrl(requestUrl);
mWebView.requestFocus(View.FOCUS_UP | View.FOCUS_RIGHT);
} else if (msg.what == 1) {
Toast.makeText(OAuthActivity.this, "Login success, your name is " + accessToken.getScreenName(),
Toast.LENGTH_SHORT).show();
Intent homeIntent = new Intent(OAuthActivity.this, MainActivity.class);
homeIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(homeIntent);
}
super.handleMessage(msg);
}
};
private String verifier;
private RequestToken requestToken;
private AccessToken accessToken;
public void handleTwitterCallback(String url) {
Log.v("twitter_login_activity", "oauth");
verifier = Uri.parse(url).getQueryParameter("oauth_verifier");
asyncTwitter.getOAuthAccessTokenAsync(requestToken, verifier);
}
@Override
protected void onDestroy() {
super.onDestroy();
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(keyCode == KeyEvent.KEYCODE_BACK) {
finishAfterTransition();
return false;
}
return super.onKeyDown(keyCode, event);
}
}