package com.sweetzpot.stravazpot.authenticaton.ui;
import android.annotation.TargetApi;
import android.content.Intent;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.webkit.WebResourceRequest;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import com.sweetzpot.stravazpot.R;
public class StravaLoginActivity extends AppCompatActivity {
public static final String EXTRA_LOGIN_URL = "StravaLoginActivity.EXTRA_LOGIN_URL";
public static final String EXTRA_REDIRECT_URL = "StravaLoginActivity.EXTRA_REDIRECT_URL";
public static final String RESULT_CODE = "StravaLoginActivity.RESULT_CODE";
private WebView loginWebview;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_strava_login);
loginWebview = (WebView) findViewById(R.id.login_webview);
configureWebViewClient();
loadLoginURL();
}
private void configureWebViewClient() {
loginWebview.setWebViewClient(new WebViewClient(){
@SuppressWarnings("deprecation")
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
return handleUrl(Uri.parse(url)) || super.shouldOverrideUrlLoading(view, url);
}
@TargetApi(Build.VERSION_CODES.N)
@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
final Uri uri = request.getUrl();
return handleUrl(uri) || super.shouldOverrideUrlLoading(view, request);
}
private boolean handleUrl(Uri uri) {
String redirectURL = getIntent().getStringExtra(EXTRA_REDIRECT_URL);
if(uri.toString().startsWith(redirectURL)) {
String code = uri.getQueryParameter("code");
return makeResult(code);
}
return false;
}
private boolean makeResult(String code) {
if(code != null && !code.isEmpty()) {
Intent result = new Intent();
result.putExtra(RESULT_CODE, code);
setResult(RESULT_OK, result);
finish();
return true;
}
finish();
return false;
}
});
}
private void loadLoginURL() {
String loginURL = getIntent().getStringExtra(EXTRA_LOGIN_URL);
loginWebview.loadUrl(loginURL);
}
}