All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.sdklite.sphere.hybrid.HybridWebChromeClient Maven / Gradle / Ivy

package com.sdklite.sphere.hybrid;

import java.util.Locale;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.text.TextUtils;
import android.webkit.ConsoleMessage;
import android.webkit.JsPromptResult;
import android.webkit.JsResult;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.widget.TextView;
import android.widget.Toast;

import com.sdklite.sphere.logging.Logger;
import com.sdklite.sphere.logging.LoggerFactory;

/**
 * The hybrid web chrome client
 *
 * @author johnsonlee
 * @since 1.0.0
 */
public class HybridWebChromeClient extends WebChromeClient {

    static final Logger logger = LoggerFactory.getLogger("HybridWebChromeClient");

    public HybridWebChromeClient(final HybridWebView view) {
    }

    @Override
    public void onProgressChanged(final WebView view, final int newProgress) {
        final Context context = view.getContext();
        if (context instanceof Activity) {
            ((Activity) context).setProgress(newProgress);
        }
    }

    @Override
    public void onReceivedTitle(final WebView view, final String title) {
        final Context context = view.getContext();
        if (context instanceof Activity) {
            ((Activity) context).setTitle(title);
        }
    }

    @Override
    public void onCloseWindow(final WebView window) {
        final Context context = window.getContext();
        if (context instanceof Activity) {
            ((Activity) context).finish();
        }
    }

    @Override
    public boolean onJsAlert(final WebView view, final String url,
            final String message, final JsResult result) {
        final Context context = view.getContext();
        Toast.makeText(context, message, Toast.LENGTH_LONG).show();
        result.confirm();
        return true;
    }

    @Override
    public boolean onJsConfirm(final WebView view, final String url,
            final String message, final JsResult result) {
        new AlertDialog.Builder(view.getContext())
                .setTitle(android.R.string.dialog_alert_title)
                .setMessage(message)
                .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(final DialogInterface dialog, final int which) {
                        result.confirm();
                    }
                })
                .setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(final DialogInterface dialog, final int which) {
                        result.cancel();
                    }
                }).create().show();
        return true;
    }

    @Override
    public boolean onJsPrompt(final WebView view, final String url,
            final String message, final String defaultValue,
            final JsPromptResult result) {
        final TextView input = new TextView(view.getContext());
        if (!TextUtils.isEmpty(defaultValue)) {
            input.setText(defaultValue);
        }

        new AlertDialog.Builder(view.getContext())
                .setTitle(message)
                .setView(input)
                .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(final DialogInterface dialog, final int which) {
                        result.confirm(input.getText().toString());
                    }
                })
                .setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(final DialogInterface dialog, final int which) {
                        result.cancel();
                    }
                }).create().show();
        return true;
    }

    @Override
    public void onConsoleMessage(final String message, final int lineNumber, final String sourceID) {
        final Locale locale = Locale.getDefault();
        logger.info(String.format(locale, "%s#%d: %s", sourceID, lineNumber, message));
    }

    @Override
    public boolean onConsoleMessage(final ConsoleMessage consoleMessage) {
        final Locale locale = Locale.getDefault();
        final String message = consoleMessage.message();
        final int lineNumber = consoleMessage.lineNumber();
        final String sourceID = consoleMessage.sourceId();
        final String msg = String.format(locale, "%s#%d: %s", sourceID, lineNumber, message);

        switch (consoleMessage.messageLevel()) {
        case DEBUG:
            logger.debug(msg);
            break;
        case ERROR:
            logger.error(msg);
            break;
        case LOG:
            logger.info(msg);
            break;
        case TIP:
            logger.trace(msg);
            break;
        case WARNING:
            logger.warn(msg);
            break;
        }

        return true;
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy