public class OAuthActivity extends Activity {
private static final String OAUTH_URI = "https://instagram.com/oauth/authorize/";
public static final String INTENT_KEY_USERNAME = "username";
public static final String INTENT_KEY_PASSWORD = "password";
public static final String INTENT_KEY_REGISTER_DATA = "registerData";
private RegisterData mRegisterData;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_oauth);
init();
}
@SuppressLint("SetJavaScriptEnabled")
private void init() {
mRegisterData = (RegisterData) getIntent().getSerializableExtra(INTENT_KEY_REGISTER_DATA);
WebView myWebView = (WebView) findViewById(R.id.webview);
WebSettings webSettings = myWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
myWebView.addJavascriptInterface(new MyBridge(OAuthActivity.this), "bridge");
myWebView.setWebViewClient(new MyWebViewClient());
myWebView.loadUrl(getOAuthUrl());
}
private String getOAuthUrl() {
StringBuilder builder = new StringBuilder();
builder.append(OAUTH_URI);
builder.append("?client_id=" + mRegisterData.getClientId());
builder.append("&redirect_uri=" + Uri.encode(mRegisterData.getRedirectUri()));
builder.append("&response_type=" + mRegisterData.getReponseCode());
String url = builder.toString();
System.out.println("====== getOAuthUrl ====" + url);
return url;
}
private class MyWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
System.out.println("====== shouldOverrideUrlLoading url ====" + url);
if (Uri.parse(url).getHost().equals(Uri.parse(mRegisterData.getRedirectUri()).getHost())) {
String error = Uri.parse(url).getQueryParameter("error");
handleReturnCode(error);
CookieSyncManager.createInstance(OAuthActivity.this);
CookieManager cookieManager = CookieManager.getInstance();
cookieManager.removeAllCookie();
return true;
} else {
return false;
}
}
@Override
public void onPageFinished(WebView view, String url) {
if (url.contains("login")) {
view.addJavascriptInterface(new MyBridge(OAuthActivity.this), "bridge");
String javascript = "javascript: document.getElementsByClassName(\"button-green\")[0].onclick = function() {\n" +
" var username = document.getElementById(\"id_username\").value;\n" +
" var password = document.getElementById(\"id_password\").value;\n" +
" bridge.saveData(username, password);\n" +
" };";
view.loadUrl(javascript);
}
super.onPageFinished(view, url);
}
}
private void handleReturnCode(String error) {
System.out.println("====== handleReturnCode error ====" + error);
Intent intent = new Intent();
if (error == null) {
intent.putExtra(INTENT_KEY_USERNAME, MyBridge.getUsername());
intent.putExtra(INTENT_KEY_PASSWORD, MyBridge.getPassword());
setResult(RESULT_OK, intent);
} else {
setResult(RESULT_CANCELED, intent);
}
finish();
}
}