Wednesday, October 28, 2015

How to extend webview in an android cordova 4 (cordova 5) project and add decimal point keyboard button on old Samsung devices

I came across this issue working on Petrol Spy and there was no working solution for the latest android cordova version

YourProject.java - this is your activity

package com.pineconesoft.yourproject;

import org.apache.cordova.CordovaActivity;
import org.apache.cordova.CordovaWebViewEngine;
import org.apache.cordova.CordovaPreferences;
import org.apache.cordova.engine.SystemWebViewEngine;

import android.os.Bundle;
import android.view.Window;
import android.view.WindowManager;
import android.os.Build;
import android.graphics.Color;

public class YourProject extends CordovaActivity
{
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        super.init();
        // Load your application
        loadUrl(launchUrl);

        // Below are my custom changes

        // Change navigation bar color
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
          Window window = getWindow();
          window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
          window.setStatusBarColor(Color.parseColor("#FF4C4F4F"));
        }
        // That should help remove black blinking when opening keyboard
        getWindow().getDecorView().setBackgroundColor(Color.WHITE);
    }

    // custom webview
    @Override
    protected CordovaWebViewEngine makeWebViewEngine() {
        return new SystemWebViewEngine(new YourProjectWebView(this), preferences);
    }
}


YourProjectWebView.java

package com.pineconesoft.yourproject;

import android.view.inputmethod.EditorInfo;
import android.text.InputType;
import android.view.inputmethod.InputConnection;
import android.content.Context;

import org.apache.cordova.engine.SystemWebView;
import android.util.AttributeSet;
 
public class YourProjectWebView extends SystemWebView {

    public YourProjectWebView(Context context) {
        this(context, null);
    }

    public YourProjectWebView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    // this is to add decimal point to numeric input keyboard on older samsung devices (Samsung s3 or sIII).
    // Test at http://developer.samsung.com/remotetestlab/rtlDeviceList.action
    @Override
public InputConnection onCreateInputConnection(EditorInfo outAttrs) {
    InputConnection connection = super.onCreateInputConnection(outAttrs);
    if ((outAttrs.inputType & InputType.TYPE_CLASS_NUMBER) == InputType.TYPE_CLASS_NUMBER)
    {
        outAttrs.inputType |= InputType.TYPE_NUMBER_FLAG_DECIMAL;
    }
    return connection;
}
}