package protocol.vk.api;
import android.app.*;
import android.content.Context;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.view.*;
import android.webkit.*;
import android.widget.*;
public class VkDialog extends Dialog {
public static final float[] DIMENSIONS_LANDSCAPE = {20, 60};
public static final float[] DIMENSIONS_PORTRAIT = {40, 60};
static final FrameLayout.LayoutParams FILL = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT,
ViewGroup.LayoutParams.FILL_PARENT);
static final int MARGIN = 4;
static final int PADDING = 2;
private String mUrl;
private VkApp.VkDialogListener mListener;
private ProgressDialog mSpinner;
private WebView mWebView;
private LinearLayout mContent;
public VkDialog(Context context, String url, VkApp.VkDialogListener listener) {
super(context);
mUrl = url;
mListener = listener;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
mSpinner = new ProgressDialog(getContext());
mSpinner.requestWindowFeature(Window.FEATURE_NO_TITLE);
mSpinner.setMessage("Loading...");
mContent = new LinearLayout(getContext());
mContent.setOrientation(LinearLayout.VERTICAL);
setUpWebView();
Display display = getWindow().getWindowManager().getDefaultDisplay();
final float scale = getContext().getResources().getDisplayMetrics().density;
float[] dimensions = (display.getWidth() < display.getHeight()) ? DIMENSIONS_PORTRAIT : DIMENSIONS_LANDSCAPE;
addContentView(mContent, new FrameLayout.LayoutParams(
display.getWidth() - (int) (dimensions[0] * scale + 0.5f),
display.getHeight() - (int) (dimensions[1] * scale + 0.5f)));
}
private void setUpWebView() {
mWebView = new WebView(getContext());
mWebView.setVerticalScrollBarEnabled(false);
mWebView.setHorizontalScrollBarEnabled(false);
mWebView.setWebViewClient(new VkWebViewClient());
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.loadUrl(mUrl);
mWebView.setLayoutParams(FILL);
mContent.addView(mWebView);
}
private class VkWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
//Log.d(Constants.DEBUG_TAG, "Redirecting URL " + url);
jimm.modules.DebugLog.println("redirect to " + url);
if (url.startsWith(VkApp.CALLBACK_URL) & (!url.contains("error"))) {
//Log.d(Constants.DEBUG_TAG,"url contains callback url");
mListener.onComplete(url);
VkDialog.this.dismiss();
return true;
} else if (url.contains("error")) {
VkDialog.this.dismiss();
return false;
} else {
//Log.d(Constants.DEBUG_TAG,"url not contains callback url");
view.loadUrl(url);
return true;
}
}
@Override
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
//Log.d(Constants.DEBUG_TAG, "Page error: " + description);
super.onReceivedError(view, errorCode, description, failingUrl);
mListener.onError(description);
VkDialog.this.dismiss();
}
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
//Log.d(Constants.DEBUG_TAG, "Loading URL: " + url);
super.onPageStarted(view, url, favicon);
if (url.contains("error")) {
VkDialog.this.dismiss();
return;
} else if (url.contains("access_token")) {
VkDialog.this.dismiss();
mListener.onComplete(url);
return;
}
mSpinner.show();
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
mSpinner.dismiss();
}
}
}