package com.common.utils.social;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.text.TextUtils;
import android.view.View;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import com.common.utils.Common;
import com.common.utils.R;
import org.scribe.builder.ServiceBuilder;
import org.scribe.builder.api.LinkedInApi;
import org.scribe.model.OAuthRequest;
import org.scribe.model.Response;
import org.scribe.model.Token;
import org.scribe.model.Verb;
import org.scribe.model.Verifier;
import org.scribe.oauth.OAuthService;
/**
* Created by Sanjay on 12/30/2014.
*/
@SuppressWarnings("DefaultFileTemplate")
public class LinkedInActivity extends Activity {
private static final String OAUTH_CALLBACK_SCHEME = "x-oauthflow-linkedin";
private static final String OAUTH_CALLBACK_HOST = "callback";
private static final String OAUTH_CALLBACK_URL = OAUTH_CALLBACK_SCHEME
+ "://" + OAUTH_CALLBACK_HOST;
private static final String PROTECTED_RESOURCE_URL = "http://api.linkedin.com/v1/people/~:(id,first-name,last-name,email-address,skills)?format=json";
private static OAuthService oas_linkedin;
private static Token requestToken;
private static String authURL;
private final long startTime = 5 * 1000;
private final long intervalTime = 5 * 1000;
private ProgressDialog progress;
private String APIKEY = "";
private String APISECRET = "";
// ,skill:(name)
private int eventType;
private CountDownTimer countDownTimer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.asn_activity_oauth);
View view = findViewById(R.id.progress_container);
view.setVisibility(View.GONE);
Intent intent = getIntent();
APIKEY = intent.getStringExtra("APIKEY");
APISECRET = intent.getStringExtra("APISECRET");
if (TextUtils.isEmpty(APIKEY) || TextUtils.isEmpty(APISECRET)) {
Common.showAlertDialog(this, "Linkedin", "Please pass APIKEY and APISECRET in intent extras", true);
setResult(RESULT_CANCELED);
finish();
} else {
progress = new ProgressDialog(this);
progress.setTitle("Loading...");
progress.setMessage("Please Wait...");
progress.show();
new OauthStart().execute();
}
}
private class OauthStart extends AsyncTask<Void, Void, WebView> {
@Override
protected WebView doInBackground(Void... params) {
System.out.println("001 OauthStart doInBackground");
oas_linkedin = new ServiceBuilder().provider(LinkedInApi.class)
.apiKey(APIKEY).apiSecret(APISECRET)
.callback(OAUTH_CALLBACK_URL).build();
requestToken = oas_linkedin.getRequestToken();
authURL = oas_linkedin.getAuthorizationUrl(requestToken);
return (WebView) findViewById(R.id.web_view);
}
@Override
protected void onPostExecute(final WebView result) {
System.out.println("001 OauthStart onPostExecute-->" + result);
result.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
System.out
.println("001 OauthStart onPostExecute shouldOverrideUrlLoading-->" + url);
if (url.startsWith(OAUTH_CALLBACK_URL)) {
System.out
.println("001 OauthStart onPostExecute shouldOverrideUrlLoading IN IF-->" + url);
new OauthEnd().execute(url);
return true;
}
System.out.println("view:" + view);
countDownTimer = new MyCountDownTimer(startTime,
intervalTime);
countDownTimer.start();
return super.shouldOverrideUrlLoading(view, url);
}
});
result.loadUrl(authURL);
System.out.println("001 OauthStart onPostExecute after load");
// first dialog close
super.onPostExecute(result);
}
}
private class OauthEnd extends AsyncTask<String, Void, Void> {
@Override
protected void onPreExecute() {
if (progress != null) {
progress.dismiss();
}
super.onPreExecute();
}
@Override
protected Void doInBackground(String... params) {
System.out.println("001 OauthEnd doInBackground-->" + params[0]);
String url = params[0];
if (url.contains("user_refused")) {
setResult(RESULT_CANCELED);
finish();
} else {
final Uri uri = Uri.parse(url);
final String verifier = uri.getQueryParameter("oauth_verifier");
final Verifier v = new Verifier(verifier);
System.out.println("hp Verifier>>>> " + v.getValue());
final Token accessToken = oas_linkedin.getAccessToken(requestToken,
v);
final OAuthRequest request = new OAuthRequest(Verb.GET,
PROTECTED_RESOURCE_URL);
oas_linkedin.signRequest(accessToken, request);
Response response = request.send();
// TODO JSON response in intent RESPONSE
Intent intent = new Intent();
intent.putExtra("RESPONSE", response.getBody());
setResult(RESULT_OK, intent);
finish();
}
return null;
}
}
// private class XmlWorker extends AsyncTask<Response, Void, Void> {
//
// @Override
// protected Void doInBackground(Response... params) {
// System.out.println("001 XmlWorker doInBackground");
// // START XML PROCESSING
// // TODO: I know this whole place is ugly and should be refactored
// // into their own method
// Log.e("XML Output", "XML response : " + params[0].getBody());
//
//
// try {
// JSONObject personJson = new JSONObject(params[0].getBody());
// Utils.setPrefrences(LinkedInLogin.this, Utils.EMAILID, personJson.getString("emailAddress"));
// Utils.setPrefrences(LinkedInLogin.this, Utils.FIRSTNAME, personJson.getString("firstName"));
// Utils.setPrefrences(LinkedInLogin.this, Utils.LINKEDINID, personJson.getString("id"));
// Utils.setPrefrences(LinkedInLogin.this, Utils.LASTNAME, personJson.getString("lastName"));
// JSONObject skillsJson = personJson.getJSONObject("skills");
// JSONArray skillsArray = skillsJson.getJSONArray("values");
//
// String personSkills;
// StringBuilder sbSkills = new StringBuilder();
// if (skillsArray != null && skillsArray.length() > 0) {
// for (int i = 0; i < skillsArray.length(); i++) {
// sbSkills.append(skillsArray.getJSONObject(i).getJSONObject("skill").getString("name") + ",");
// }
//
// personSkills = sbSkills.toString();
//
// if (personSkills.length() > 0
// && personSkills.charAt(personSkills.length() - 1) == ',') {
// personSkills = personSkills.substring(0, personSkills.length() - 1);
// }
// Utils.setPrefrences(LinkedInLogin.this, Utils.SKILLS, personSkills);
// }
//
//
// } catch (Exception e) {
// e.printStackTrace();
// }
//
// return null;
// }
//
// @Override
// protected void onPostExecute(Void result) {
// System.out.println("001 XmlWorker onPostExecute");
// Intent intent = new Intent(LinkedInLogin.this, MainAct.class);
// intent.putExtra("isSocial", "Linkedin");
// startActivity(intent);
// super.onPostExecute(result);
// }
// }
public class MyCountDownTimer extends CountDownTimer {
public MyCountDownTimer(long millisInFuture, long countDownInterval) {
super(millisInFuture, countDownInterval);
}
@Override
public void onFinish() {
if (progress != null) {
progress.dismiss();
}
}
@Override
public void onTick(long millisUntilFinished) {
}
}
}