package com.openfarmanager.android.googledrive;
import android.app.Activity;
import android.app.Dialog;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Pair;
import android.view.View;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import com.openfarmanager.android.googledrive.api.Api;
import com.openfarmanager.android.googledrive.model.About;
import com.openfarmanager.android.googledrive.model.Token;
import com.openfarmanager.android.googledrive.model.exceptions.TokenExpiredException;
/**
* author: Vlad Namashko
*/
public class GoogleDriveAuthWindow extends Dialog {
public static final int MSG_SHOW_LOADING_DIALOG = 10000;
public static final int MSG_HIDE_LOADING_DIALOG = 10001;
public static final int MSG_ARG_SUCCESS = 100000;
public static final int MSG_ARG_ERROR = 100001;
private Handler mHandler;
private View mView;
public GoogleDriveAuthWindow(Activity context, final Handler handler) {
super(context, android.R.style.Theme_Black_NoTitleBar_Fullscreen);
mView = context.getLayoutInflater().inflate(R.layout.dialog_google_drive_auth, null);
mHandler = handler;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(mView);
final Api api = new Api();
final WebView webView = (WebView) mView.findViewById(R.id.web_view_auth);
webView.getSettings().setUserAgentString("Mozilla/5.0 (Linux; <Android Version>; <Build Tag etc.>) AppleWebKit/<WebKit Rev> (KHTML, like Gecko) Chrome/<Chrome Rev> Mobile Safari/<WebKit Rev>");
webView.getSettings().setJavaScriptEnabled(true);
webView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(final WebView view, final String url) {
if (url.contains("code=")) {
mHandler.sendEmptyMessage(MSG_SHOW_LOADING_DIALOG);
ThreadPool.sInstance.runAsynk(new Runnable() {
@Override
public void run() {
Message message = mHandler.obtainMessage(MSG_HIDE_LOADING_DIALOG);
try {
Token token = api.getAuthToken(url);
message.obj = new Pair<About, Token>(api.getAbout(token), token) ;
message.arg1 = MSG_ARG_SUCCESS;
} catch (TokenExpiredException e) {
} catch (Exception e) {
message.arg1 = MSG_ARG_ERROR;
}
mHandler.sendMessage(message);
}
});
dismiss();
} else if (url.contains("error=access_denied")) {
webView.loadUrl(api.getAuthCodeUrl());
return true;
}
return super.shouldOverrideUrlLoading(view, url);
}
});
webView.loadUrl(api.getAuthCodeUrl());
}
}