package org.wheelmap.android.activity.profile;
import android.content.pm.ActivityInfo;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.CookieManager;
import android.webkit.CookieSyncManager;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.ProgressBar;
import org.wheelmap.android.modules.ICredentials;
import org.wheelmap.android.modules.UserCredentials;
import org.wheelmap.android.online.BuildConfig;
import org.wheelmap.android.online.R;
import org.wheelmap.android.utils.Constants;
import org.wheelmap.android.utils.UtilsMisc;
/**
*
* Created by timfreiheit on 30.10.15.
*/
public class LoginWebActivity extends AppCompatActivity {
WebView webView;
ProgressBar progress;
private ICredentials mCredentials;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mCredentials = new UserCredentials(this);
if (UtilsMisc.isTablet(getApplicationContext())) {
UtilsMisc.showAsPopup(this);
}else{
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
setContentView(R.layout.webview);
View content = findViewById(R.id.content);
content.setMinimumHeight((int)UtilsMisc.dbToPx(getResources(), 200));
content.setMinimumWidth((int)UtilsMisc.dbToPx(getResources(), 200));
progress = (ProgressBar) findViewById(R.id.progress);
webView = (WebView) findViewById(R.id.webview);
if (UtilsMisc.isTablet(getApplicationContext())) {
ViewGroup.LayoutParams params = webView.getLayoutParams();
params.height = ViewGroup.LayoutParams.WRAP_CONTENT;
webView.setLayoutParams(params);
}
webView.getSettings().setUserAgentString(BuildConfig.APPLICATION_ID);
webView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
webView.getSettings().setJavaScriptEnabled(true);
webView.clearCache(true);
CookieSyncManager.createInstance(this);
CookieManager cookieManager = CookieManager.getInstance();
cookieManager.removeAllCookie();
webView.setWebViewClient(mWebViewClient);
String url = BuildConfig.API_BASE_URL + Constants.Api.LOGIN;
if (!BuildConfig.API_BASE_URL.startsWith("http")) {
url = "http://" + url;
}
webView.loadUrl(url);
if(getSupportActionBar() != null){
getSupportActionBar().setDisplayShowTitleEnabled(true);
getSupportActionBar().setHomeButtonEnabled(true);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
setTitle(R.string.login_activity_title);
}
@Override
public void onBackPressed() {
if(webView.canGoBack()){
webView.goBack();
return;
}
super.onBackPressed();
}
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
switch (id) {
case android.R.id.home:
finish();
return true;
}
return true;
}
private void handleLoginInformationFromUri(Uri uri) {
if (saveUserCredentials(uri)) {
setResult(RESULT_OK);
} else {
setResult(RESULT_CANCELED);
}
finish();
}
private boolean saveUserCredentials(Uri uri){
String email = uri.getQueryParameter("email");
String token = uri.getQueryParameter("token");
email = email != null ? email : "";
if (TextUtils.isEmpty(token)) {
return false;
}
mCredentials.save(token, email);
return true;
}
private WebViewClient mWebViewClient = new WebViewClient(){
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
progress.setVisibility(View.VISIBLE);
super.onPageStarted(view, url, favicon);
}
@Override
public void onPageFinished(WebView view, String url) {
progress.setVisibility(View.GONE);
super.onPageFinished(view, url);
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
Uri uri = Uri.parse(url);
if (uri.getScheme().equalsIgnoreCase(Constants.Api.SCHEMA_WHEELMAP)) {
handleLoginInformationFromUri(uri);
return true;
}
return super.shouldOverrideUrlLoading(view, url);
}
};
}