package com.easylinkedin;
import org.json.JSONException;
import org.json.JSONObject;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.Dialog;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.webkit.WebSettings;
import android.webkit.WebSettings.RenderPriority;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import com.easylinkedin.interfaces.EasyLinkedInConstants;
import com.easylinkedin.webservices.AccessTokenWebService;
import com.interfaces.DownloadObserver;
import com.utils.DialogBuilder;
public class EasyLinkedInAuthActivity extends Activity {
private WebView _WebView = null;
private Dialog _Dialog = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.linkedin_auth_activity);
initViews();
setUpViews();
}
private void initViews() {
_WebView = (WebView) findViewById(R.id.LinkedInAuthActivity_web_view);
}
private void setUpViews() {
String url = getOauthUrl(EasyLinkedIn.get_ConsumerKey(),
EasyLinkedIn.get_CallBackUrl(), EasyLinkedIn.get_State(),
EasyLinkedIn.get_Scope());
configureWebView(_WebView.getSettings());
_WebView.setWebViewClient(new MyClient());
_WebView.loadUrl(url);
}
class MyClient extends WebViewClient {
@Override
public void onLoadResource(WebView view, String url) {
super.onLoadResource(view, url);
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
Log.d("Check", url);
Uri uri = Uri.parse(url);
Uri callBackUri = Uri.parse(EasyLinkedIn.get_CallBackUrl());
String host = uri.getHost();
String callBackHost = callBackUri.getHost();
if (host.equals(callBackHost)) {
view.stopLoading();
String code = uri.getQueryParameter("code");
AccessTokenWebService webservice = new AccessTokenWebService(
EasyLinkedInAuthActivity.this,
accessTokenDownloadObserver, getAccessTokenUrl(code,
EasyLinkedIn.get_CallBackUrl(),
EasyLinkedIn.get_ConsumerKey(),
EasyLinkedIn.get_ConsumerSecretKey()),
new JSONObject());
webservice.execute();
Log.d("Check", code);
}
return super.shouldOverrideUrlLoading(view, url);
}
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
goneWebView();
showDialog();
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
showWebView();
dismissDialog();
}
}
@SuppressWarnings("deprecation")
@SuppressLint("SetJavaScriptEnabled")
private void configureWebView(WebSettings webSettings) {
webSettings.setJavaScriptEnabled(true);
webSettings.setPluginsEnabled(true);
webSettings.setRenderPriority(RenderPriority.HIGH);
}
private void showDialog() {
_Dialog = DialogBuilder.BuildDialog(this);
_Dialog.show();
}
private void dismissDialog() {
_Dialog.dismiss();
}
private void showWebView() {
_WebView.setVisibility(WebView.VISIBLE);
}
private void goneWebView() {
_WebView.setVisibility(WebView.GONE);
}
public String getOauthUrl(String consumerKey, String redirectUri,
String state, String scope) {
return String
.format(EasyLinkedInConstants.SERVER_NAME
+ "uas/oauth2/authorization?response_type=code&client_id=%s&state=%s&redirect_uri=%s&scope=%s",
consumerKey, state, redirectUri, scope);
}
public String getAccessTokenUrl(String authorizeCode, String redirectUri,
String consumerKey, String consumerSecretKey) {
return String
.format(EasyLinkedInConstants.SERVER_NAME
+ "uas/oauth2/accessToken?grant_type=authorization_code&code=%s&redirect_uri=%s&client_id=%s&client_secret=%s",
authorizeCode, redirectUri, consumerKey,
consumerSecretKey);
}
private DownloadObserver accessTokenDownloadObserver = new DownloadObserver() {
@Override
public void onDownloadingStart() {
showDialog();
}
@Override
public void onDownloadingComplete(Object data) {
Log.d("Check", data.toString());
try {
JSONObject jsonData = new JSONObject(data.toString());
EasyLinkedIn
.getSharedPreferenceEditor()
.putString(EasyLinkedIn.EASY_LINKED_IN_ACCESS_TOKEN,
jsonData.getString("access_token")).commit();
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
dismissDialog();
finish();
EasyLinkedIn.authCallback.onSucess("Success");
}
@Override
public void onDownloadFailure(Object errorData) {
dismissDialog();
finish();
EasyLinkedIn.authCallback.onSucess("Fail");
}
};
}