package nliveroid.nlr.main;
import twitter4j.TwitterException;
import twitter4j.auth.AccessToken;
import twitter4j.auth.OAuthAuthorization;
import twitter4j.auth.RequestToken;
import twitter4j.conf.ConfigurationContext;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Color;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.Window;
import android.widget.FrameLayout;
public class TwitterAccount extends Activity {
public static RequestToken _req = null;
public static OAuthAuthorization _oauth = null;
private boolean finishOK;
private ProgressDialog p;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
FrameLayout parent = new FrameLayout(this);
parent.setBackgroundColor(Color.parseColor("#00000000"));
setContentView(parent);
final Activity me = this;
//Twitterの認証画面から発行されるIntentからUriを取得
Uri uri = getIntent().getData();//初回は必ずnull
AccessToken token = null;
if(NLiveRoid.isDebugMode)Log.d("URL ", " URLAAAAAAAAAAAA " + uri);
//戻ってきた時の処理
if(uri != null && (uri.toString().startsWith("http://nliveroid-tutorial.appspot.com/")
||uri.toString().startsWith("https://nliveroid-tutorial.appspot.com/")
||uri.toString().startsWith("callback://nliveroid-tutorial.appspot.com")
||uri.toString().startsWith("Callback://nliveroid-tutorial.appspot.com"))){
//oauth_verifierを取得する
String verifier = uri.getQueryParameter("oauth_verifier");
try {
//AccessTokenオブジェクトを取得
if(verifier == null){
MyToast.customToastShow(this, "Twitter認証に失敗しました:05");
Intent topTab = new Intent(this,TopTabs.class);
startActivity(topTab);
finish(true);
return;
}
token = _oauth.getOAuthAccessToken(_req, verifier);
} catch (TwitterException e) {
e.printStackTrace();
MyToast.customToastShow(this, "HOMEキー又は起動履歴からNLiveRoidへ御戻り下さい");
finish();
return;
}
if(token != null){
NLiveRoid app = (NLiveRoid)getApplicationContext();
if(app == null||app.getDefaultMap() == null ){
MyToast.customToastShow(this,"設定の保存に失敗");
if(PrimitiveSetting.getACT()!= null)PrimitiveSetting.getACT().setTwitterSummary(false);
}else {//暗号化して保存
app.getDefaultMap().put("twitter_token", token.getToken());
app.getDefaultMap().put("twitter_secret", token.getTokenSecret());
app.updateAccountFile();
if(PrimitiveSetting.getACT()!= null)PrimitiveSetting.getACT().setTwitterSummary(true);
MyToast.customToastShow(this, "Twitter認証成功\nHOMEキー又は起動履歴からNLiveRoidに御戻り下さい");
finish(true);
}
}else{
MyToast.customToastShow(this, "Twitter認証に失敗しました:01");
if(PrimitiveSetting.getACT()!= null)PrimitiveSetting.getACT().setTwitterSummary(false);
finish();
}
}else{//既に設定されている||初回の処理
final NLiveRoid app = (NLiveRoid)getApplicationContext();
if (app.getDefaultMap() != null && app.getDefaultMap().get("twitter_token") != null
&&!app.getDefaultMap().get("twitter_token").equals("null")
&&app.getDefaultMap().get("twitter_token").replaceAll("<<T_SPLIT>>", "").length()>2) {//既に設定されている
//既に設定されている場合削除するか?
new AlertDialog.Builder(this)
.setMessage("このアプリに保存されたTwitter認証情報を削除しますか?\n完全に連携を解除するにはここで情報削除後、\nブラウザ等でTwitter側のNLiveRoidの連携を解除して下さい")
.setPositiveButton("YES", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
app.getDefaultMap().put("twitter_token", null);
app.getDefaultMap().put("twitter_secret", null);
finish(true);
}
}).setNegativeButton("CANCEL", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
finish();
}
}).setOnCancelListener(new DialogInterface.OnCancelListener() {
@Override
public void onCancel(DialogInterface dialog) {
finish();
}
}).create().show();
return;
}
p = new ProgressDialog(this);
p.setMessage("ブラウザを起動します");
p.show();
final Activity ACT = this;
new AsyncTask<Void,Void,Integer>(){
@Override
protected Integer doInBackground(Void... params) {
//Twitetr4Jの設定を読み込む
twitter4j.conf.Configuration conf = ConfigurationContext.getInstance();
//Oauth認証オブジェクト作成
_oauth = new OAuthAuthorization(conf);
//Oauth認証オブジェクトにconsumerKeyとconsumerSecretを設定
_oauth.setOAuthConsumer("pNxWQdK6hY3AUk9nbEMLQ", "FE4hdC1vW4PkDjJJdBl5bkxx0rm7CSGzeOkTk5rItk");
_oauth.setOAuthAccessToken(null); // これをやらないと下記getOAuthRequestToken()で例外が発生する
//アプリの認証オブジェクト作成
try {
_req = _oauth.getOAuthRequestToken("Callback://nliveroid-tutorial.appspot.com/");
} catch (TwitterException e) {
e.printStackTrace();
return -1;
}
if(_req != null){
String _uri;
_uri = _req.getAuthorizationURL();
if(NLiveRoid.isDebugMode)Log.d("NLiveRoid","_req URL" + _uri);
startActivityForResult(new Intent(Intent.ACTION_VIEW , Uri.parse(_uri)), CODE.REQUEST_TWITTERBROWSER);
}else{
return -2;
}
return 0;
}
@Override
protected void onPostExecute(Integer arg){
if(arg == -1){
MyToast.customToastShow(ACT, "Twitter認証に失敗しました:02");
if(PrimitiveSetting.getACT()!= null)PrimitiveSetting.getACT().setTwitterSummary(false);
finish();
}else if(arg == -2){
MyToast.customToastShow(ACT, "Twitter認証に失敗しました:03");
if(PrimitiveSetting.getACT()!= null)PrimitiveSetting.getACT().setTwitterSummary(false);
finish();
}else if(arg == 0){
finishOK = true;
finish();
}
}
}.execute();
}
}
@Override
public void onResume(){
super.onResume();
if(finishOK)finish();
}
public void finish(boolean isPrimitiveFinish){
if(isPrimitiveFinish&&PrimitiveSetting.getACT() != null)PrimitiveSetting.getACT().finish();//TopTabsが蹴られる
super.finish();
}
@Override
public void onWindowFocusChanged(boolean isFocus){
if(p != null && p.isShowing()){
p.cancel();
}
}
}