You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@cordova.apache.org by kant2002 <gi...@git.apache.org> on 2014/07/21 12:22:55 UTC

[GitHub] cordova-plugins pull request: CB-6289 Keyboard plugin on Android

GitHub user kant2002 opened a pull request:

    https://github.com/apache/cordova-plugins/pull/15

    CB-6289 Keyboard plugin on Android

    Created basic implementation of Keyboard plugin for Android.

You can merge this pull request into a Git repository by running:

    $ git pull https://github.com/kant2002/cordova-plugins CB-6289

Alternatively you can review and apply these changes as the patch at:

    https://github.com/apache/cordova-plugins/pull/15.patch

To close this pull request, make a commit to your master/trunk branch
with (at least) the following in the commit message:

    This closes #15
    
----
commit 41ffe35cab3e472ab69558288560131bf0857cef
Author: Andrey Kurdyumov <ka...@gmail.com>
Date:   2014-07-21T10:08:11Z

    Keyboard plugin on Android

----


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at infrastructure@apache.org or file a JIRA ticket
with INFRA.
---

[GitHub] cordova-plugins pull request: CB-6289 Keyboard plugin on Android

Posted by kant2002 <gi...@git.apache.org>.
Github user kant2002 commented on a diff in the pull request:

    https://github.com/apache/cordova-plugins/pull/15#discussion_r27401690
  
    --- Diff: keyboard/src/android/Keyboard.java ---
    @@ -0,0 +1,124 @@
    +/*
    +       Licensed to the Apache Software Foundation (ASF) under one
    +       or more contributor license agreements.  See the NOTICE file
    +       distributed with this work for additional information
    +       regarding copyright ownership.  The ASF licenses this file
    +       to you under the Apache License, Version 2.0 (the
    +       "License"); you may not use this file except in compliance
    +       with the License.  You may obtain a copy of the License at
    +
    +         http://www.apache.org/licenses/LICENSE-2.0
    +
    +       Unless required by applicable law or agreed to in writing,
    +       software distributed under the License is distributed on an
    +       "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +       KIND, either express or implied.  See the License for the
    +       specific language governing permissions and limitations
    +       under the License.
    +*/
    +package org.apache.cordova.labs.keyboard; 
    +
    +import org.apache.cordova.CallbackContext;
    +import org.apache.cordova.CordovaInterface;
    +import org.apache.cordova.CordovaPlugin;
    +import org.apache.cordova.CordovaWebView;
    +import org.apache.cordova.LOG;
    +import org.json.JSONArray;
    +import org.json.JSONException;
    +
    +import android.app.Activity;
    +import android.content.Context;
    +import android.graphics.Rect;
    +import android.util.DisplayMetrics;
    +import android.view.View;
    +import android.view.ViewTreeObserver.OnGlobalLayoutListener;
    +import android.view.inputmethod.InputMethodManager;
    +
    +public class Keyboard extends CordovaPlugin {
    +    /**
    +    * Delta height of the visible area, to be treated as keyboard opening.
    +    */
    +    private final static int MinHeghtDelta = 100;
    +    private static final String TAG = "Keyboard";
    +
    +    public void initialize(CordovaInterface cordova, CordovaWebView webView) {
    +        super.initialize(cordova, webView);
    +        
    +        Activity activity = cordova.getActivity();
    +        DisplayMetrics metrics = new DisplayMetrics();
    +        activity.getWindowManager().getDefaultDisplay().getMetrics(metrics);
    +        final float density = metrics.density;
    +        
    +        final CordovaWebView appView = webView;
    +        
    +        final View rootView = activity.getWindow().getDecorView().findViewById(android.R.id.content).getRootView();
    +        OnGlobalLayoutListener list = new OnGlobalLayoutListener() {
    +            int previousHeightDifference = 0;
    +            
    +            @Override
    +            public void onGlobalLayout() {
    +                LOG.d(TAG, "Entering global layout notification");
    +                
    +            	Rect visibleRect = new Rect();
    +                //r will be populated with the coordinates of your view that area still visible.
    +                rootView.getWindowVisibleDisplayFrame(visibleRect);
    +
    +                int visibleHeight = visibleRect.bottom - visibleRect.top;
    +                int viewHeight = rootView.getRootView().getHeight();
    +                int heightDifference = (int)((viewHeight - visibleHeight) / density);
    +                if (heightDifference > MinHeghtDelta 
    +                    && heightDifference != previousHeightDifference) {
    +                    // If the height of the view is bigger then 
    +                    // visible area by delta, then assume that keyboard
    +                    // is shown on the screen.
    +                    appView.sendJavascript("Keyboard.isVisible = true; if (Keyboard.onshow) Keyboard.onshow();");
    --- End diff --
    
    Could you give me a bit of insight between the differences between `setKeepCallback(true)` and `setKeepCallback(false)`. Are there any benefit from having keeping callback? I don't closely follow design decisions in the Cordova lately, so cant make rational decision.


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at infrastructure@apache.org or file a JIRA ticket
with INFRA.
---

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@cordova.apache.org
For additional commands, e-mail: dev-help@cordova.apache.org


[GitHub] cordova-plugins pull request: CB-6289 Keyboard plugin on Android

Posted by agrieve <gi...@git.apache.org>.
Github user agrieve commented on a diff in the pull request:

    https://github.com/apache/cordova-plugins/pull/15#discussion_r27393052
  
    --- Diff: keyboard/src/android/Keyboard.java ---
    @@ -0,0 +1,124 @@
    +/*
    +       Licensed to the Apache Software Foundation (ASF) under one
    +       or more contributor license agreements.  See the NOTICE file
    +       distributed with this work for additional information
    +       regarding copyright ownership.  The ASF licenses this file
    +       to you under the Apache License, Version 2.0 (the
    +       "License"); you may not use this file except in compliance
    +       with the License.  You may obtain a copy of the License at
    +
    +         http://www.apache.org/licenses/LICENSE-2.0
    +
    +       Unless required by applicable law or agreed to in writing,
    +       software distributed under the License is distributed on an
    +       "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +       KIND, either express or implied.  See the License for the
    +       specific language governing permissions and limitations
    +       under the License.
    +*/
    +package org.apache.cordova.labs.keyboard; 
    +
    +import org.apache.cordova.CallbackContext;
    +import org.apache.cordova.CordovaInterface;
    +import org.apache.cordova.CordovaPlugin;
    +import org.apache.cordova.CordovaWebView;
    +import org.apache.cordova.LOG;
    +import org.json.JSONArray;
    +import org.json.JSONException;
    +
    +import android.app.Activity;
    +import android.content.Context;
    +import android.graphics.Rect;
    +import android.util.DisplayMetrics;
    +import android.view.View;
    +import android.view.ViewTreeObserver.OnGlobalLayoutListener;
    +import android.view.inputmethod.InputMethodManager;
    +
    +public class Keyboard extends CordovaPlugin {
    +    /**
    +    * Delta height of the visible area, to be treated as keyboard opening.
    +    */
    +    private final static int MinHeghtDelta = 100;
    +    private static final String TAG = "Keyboard";
    +
    +    public void initialize(CordovaInterface cordova, CordovaWebView webView) {
    +        super.initialize(cordova, webView);
    +        
    +        Activity activity = cordova.getActivity();
    +        DisplayMetrics metrics = new DisplayMetrics();
    +        activity.getWindowManager().getDefaultDisplay().getMetrics(metrics);
    +        final float density = metrics.density;
    +        
    +        final CordovaWebView appView = webView;
    +        
    +        final View rootView = activity.getWindow().getDecorView().findViewById(android.R.id.content).getRootView();
    +        OnGlobalLayoutListener list = new OnGlobalLayoutListener() {
    +            int previousHeightDifference = 0;
    +            
    +            @Override
    +            public void onGlobalLayout() {
    +                LOG.d(TAG, "Entering global layout notification");
    +                
    +            	Rect visibleRect = new Rect();
    +                //r will be populated with the coordinates of your view that area still visible.
    +                rootView.getWindowVisibleDisplayFrame(visibleRect);
    +
    +                int visibleHeight = visibleRect.bottom - visibleRect.top;
    +                int viewHeight = rootView.getRootView().getHeight();
    +                int heightDifference = (int)((viewHeight - visibleHeight) / density);
    +                if (heightDifference > MinHeghtDelta 
    +                    && heightDifference != previousHeightDifference) {
    +                    // If the height of the view is bigger then 
    +                    // visible area by delta, then assume that keyboard
    +                    // is shown on the screen.
    +                    appView.sendJavascript("Keyboard.isVisible = true; if (Keyboard.onshow) Keyboard.onshow();");
    --- End diff --
    
    sendJavascript is deprecated. You should use PluginResults here with `setKeepCallback(true)` (allows you to send native->JS at any time after the initial call from JS)


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at infrastructure@apache.org or file a JIRA ticket
with INFRA.
---

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@cordova.apache.org
For additional commands, e-mail: dev-help@cordova.apache.org


[GitHub] cordova-plugins pull request: CB-6289 Keyboard plugin on Android

Posted by anchann <gi...@git.apache.org>.
Github user anchann commented on the pull request:

    https://github.com/apache/cordova-plugins/pull/15#issuecomment-147935881
  
    I just ended up implementing this by adopting the ionic version of the keyboard plugin (which seems to be the inspiration for this PR as well). Was going to try to contribute back, but seeing as there's already a PR for this feature, not going to. Still, I feel that my implementation is ever so slightly cleaner, as it does not assume any keyboard size threshold, so pasting it below in case the author wants to adopt.
    
    ```
    public class Keyboard extends CordovaPlugin {
    	public void initialize(CordovaInterface cordova, CordovaWebView webView) {
    		super.initialize(cordova, webView);
    
    		final CordovaWebView appView = webView;
    
    		final View rootView = cordova.getActivity().getWindow().getDecorView().findViewById(android.R.id.content).getRootView();
    		OnGlobalLayoutListener listener = new OnGlobalLayoutListener() {
    			double heightRatioWithKeyboard = 0;
    			double heightRatioWithoutKeyboard = 0;
    			Set<Double> heightRatios = new HashSet<Double>();
    
    			double lastHeightRatio = 0;
    
    			@Override
    			public void onGlobalLayout() {
    				Rect r = new Rect();
    				//r will be populated with the coordinates of your view that area still visible.
    				rootView.getWindowVisibleDisplayFrame(r);
    
    				int currTotalHeight = rootView.getRootView().getHeight();
    				int currUsableHeight = (r.bottom - r.top);
    				double currHeightRatio = ((double)currUsableHeight) / currTotalHeight;
    
    				if (!heightRatios.contains(currHeightRatio)) {
    					heightRatios.add(currHeightRatio);
    					heightRatioWithKeyboard = Collections.min(heightRatios);
    					heightRatioWithoutKeyboard = Collections.max(heightRatios);
    				}
    
    				if (heightRatios.size() >= 2 && currHeightRatio != lastHeightRatio) {
    					if (currHeightRatio == heightRatioWithoutKeyboard) {
    						appView.sendJavascript("window.Keyboard.fireOnHide();");
    					}
    					else if (currHeightRatio == heightRatioWithKeyboard) {
    						appView.sendJavascript("window.Keyboard.fireOnShow();");
    					}
    				}
    
    				lastHeightRatio = currHeightRatio;
    			 }
    		};
    
    		// fire once to get the initial ratio
    		listener.onGlobalLayout();
    
    		rootView.getViewTreeObserver().addOnGlobalLayoutListener(listener);
    	}
    
    	// the rest is unchanged
    ```


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at infrastructure@apache.org or file a JIRA ticket
with INFRA.
---

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@cordova.apache.org
For additional commands, e-mail: dev-help@cordova.apache.org


[GitHub] cordova-plugins pull request: CB-6289 Keyboard plugin on Android

Posted by agrieve <gi...@git.apache.org>.
Github user agrieve commented on a diff in the pull request:

    https://github.com/apache/cordova-plugins/pull/15#discussion_r27393159
  
    --- Diff: keyboard/src/android/Keyboard.java ---
    @@ -0,0 +1,124 @@
    +/*
    +       Licensed to the Apache Software Foundation (ASF) under one
    +       or more contributor license agreements.  See the NOTICE file
    +       distributed with this work for additional information
    +       regarding copyright ownership.  The ASF licenses this file
    +       to you under the Apache License, Version 2.0 (the
    +       "License"); you may not use this file except in compliance
    +       with the License.  You may obtain a copy of the License at
    +
    +         http://www.apache.org/licenses/LICENSE-2.0
    +
    +       Unless required by applicable law or agreed to in writing,
    +       software distributed under the License is distributed on an
    +       "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +       KIND, either express or implied.  See the License for the
    +       specific language governing permissions and limitations
    +       under the License.
    +*/
    +package org.apache.cordova.labs.keyboard; 
    +
    +import org.apache.cordova.CallbackContext;
    +import org.apache.cordova.CordovaInterface;
    +import org.apache.cordova.CordovaPlugin;
    +import org.apache.cordova.CordovaWebView;
    +import org.apache.cordova.LOG;
    +import org.json.JSONArray;
    +import org.json.JSONException;
    +
    +import android.app.Activity;
    +import android.content.Context;
    +import android.graphics.Rect;
    +import android.util.DisplayMetrics;
    +import android.view.View;
    +import android.view.ViewTreeObserver.OnGlobalLayoutListener;
    +import android.view.inputmethod.InputMethodManager;
    +
    +public class Keyboard extends CordovaPlugin {
    +    /**
    +    * Delta height of the visible area, to be treated as keyboard opening.
    +    */
    +    private final static int MinHeghtDelta = 100;
    +    private static final String TAG = "Keyboard";
    +
    +    public void initialize(CordovaInterface cordova, CordovaWebView webView) {
    +        super.initialize(cordova, webView);
    +        
    +        Activity activity = cordova.getActivity();
    +        DisplayMetrics metrics = new DisplayMetrics();
    +        activity.getWindowManager().getDefaultDisplay().getMetrics(metrics);
    +        final float density = metrics.density;
    +        
    +        final CordovaWebView appView = webView;
    +        
    +        final View rootView = activity.getWindow().getDecorView().findViewById(android.R.id.content).getRootView();
    +        OnGlobalLayoutListener list = new OnGlobalLayoutListener() {
    +            int previousHeightDifference = 0;
    +            
    +            @Override
    +            public void onGlobalLayout() {
    +                LOG.d(TAG, "Entering global layout notification");
    +                
    +            	Rect visibleRect = new Rect();
    +                //r will be populated with the coordinates of your view that area still visible.
    +                rootView.getWindowVisibleDisplayFrame(visibleRect);
    +
    +                int visibleHeight = visibleRect.bottom - visibleRect.top;
    +                int viewHeight = rootView.getRootView().getHeight();
    +                int heightDifference = (int)((viewHeight - visibleHeight) / density);
    +                if (heightDifference > MinHeghtDelta 
    +                    && heightDifference != previousHeightDifference) {
    +                    // If the height of the view is bigger then 
    +                    // visible area by delta, then assume that keyboard
    +                    // is shown on the screen.
    +                    appView.sendJavascript("Keyboard.isVisible = true; if (Keyboard.onshow) Keyboard.onshow();");
    +                }
    +                else if (heightDifference != previousHeightDifference 
    +                         && (previousHeightDifference - heightDifference) > MinHeghtDelta){
    +                    // If the difference between visible and view area dropped by the delta
    +                    // then assume that this means that keyboard is hidden.
    +                    appView.sendJavascript("Keyboard.isVisible = false; if (Keyboard.onhide) Keyboard.onhide();");
    --- End diff --
    
    Rather than calling an `onhide` function, I'd suggest you wire this up to fire a window event via `cordova.fireWindowEvent`


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at infrastructure@apache.org or file a JIRA ticket
with INFRA.
---

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@cordova.apache.org
For additional commands, e-mail: dev-help@cordova.apache.org


[GitHub] cordova-plugins pull request: CB-6289 Keyboard plugin on Android

Posted by sandstrom <gi...@git.apache.org>.
Github user sandstrom commented on the pull request:

    https://github.com/apache/cordova-plugins/pull/15#issuecomment-66510570
  
    @clelland @shazron friendly ping! :smile: 


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at infrastructure@apache.org or file a JIRA ticket
with INFRA.
---

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@cordova.apache.org
For additional commands, e-mail: dev-help@cordova.apache.org


[GitHub] cordova-plugins pull request: CB-6289 Keyboard plugin on Android

Posted by agrieve <gi...@git.apache.org>.
Github user agrieve commented on a diff in the pull request:

    https://github.com/apache/cordova-plugins/pull/15#discussion_r27444603
  
    --- Diff: keyboard/src/android/Keyboard.java ---
    @@ -0,0 +1,124 @@
    +/*
    +       Licensed to the Apache Software Foundation (ASF) under one
    +       or more contributor license agreements.  See the NOTICE file
    +       distributed with this work for additional information
    +       regarding copyright ownership.  The ASF licenses this file
    +       to you under the Apache License, Version 2.0 (the
    +       "License"); you may not use this file except in compliance
    +       with the License.  You may obtain a copy of the License at
    +
    +         http://www.apache.org/licenses/LICENSE-2.0
    +
    +       Unless required by applicable law or agreed to in writing,
    +       software distributed under the License is distributed on an
    +       "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +       KIND, either express or implied.  See the License for the
    +       specific language governing permissions and limitations
    +       under the License.
    +*/
    +package org.apache.cordova.labs.keyboard; 
    +
    +import org.apache.cordova.CallbackContext;
    +import org.apache.cordova.CordovaInterface;
    +import org.apache.cordova.CordovaPlugin;
    +import org.apache.cordova.CordovaWebView;
    +import org.apache.cordova.LOG;
    +import org.json.JSONArray;
    +import org.json.JSONException;
    +
    +import android.app.Activity;
    +import android.content.Context;
    +import android.graphics.Rect;
    +import android.util.DisplayMetrics;
    +import android.view.View;
    +import android.view.ViewTreeObserver.OnGlobalLayoutListener;
    +import android.view.inputmethod.InputMethodManager;
    +
    +public class Keyboard extends CordovaPlugin {
    +    /**
    +    * Delta height of the visible area, to be treated as keyboard opening.
    +    */
    +    private final static int MinHeghtDelta = 100;
    +    private static final String TAG = "Keyboard";
    +
    +    public void initialize(CordovaInterface cordova, CordovaWebView webView) {
    +        super.initialize(cordova, webView);
    +        
    +        Activity activity = cordova.getActivity();
    +        DisplayMetrics metrics = new DisplayMetrics();
    +        activity.getWindowManager().getDefaultDisplay().getMetrics(metrics);
    +        final float density = metrics.density;
    +        
    +        final CordovaWebView appView = webView;
    +        
    +        final View rootView = activity.getWindow().getDecorView().findViewById(android.R.id.content).getRootView();
    +        OnGlobalLayoutListener list = new OnGlobalLayoutListener() {
    +            int previousHeightDifference = 0;
    +            
    +            @Override
    +            public void onGlobalLayout() {
    +                LOG.d(TAG, "Entering global layout notification");
    +                
    +            	Rect visibleRect = new Rect();
    +                //r will be populated with the coordinates of your view that area still visible.
    +                rootView.getWindowVisibleDisplayFrame(visibleRect);
    +
    +                int visibleHeight = visibleRect.bottom - visibleRect.top;
    +                int viewHeight = rootView.getRootView().getHeight();
    +                int heightDifference = (int)((viewHeight - visibleHeight) / density);
    +                if (heightDifference > MinHeghtDelta 
    +                    && heightDifference != previousHeightDifference) {
    +                    // If the height of the view is bigger then 
    +                    // visible area by delta, then assume that keyboard
    +                    // is shown on the screen.
    +                    appView.sendJavascript("Keyboard.isVisible = true; if (Keyboard.onshow) Keyboard.onshow();");
    --- End diff --
    
    The main technical reason to not use sendJavascript is because on Android it's implemented using `eval()`, and depending on the user's Content-Security-Policy, `eval` may not work.
    
    `setKeepCallback(false)` is the default, which means you can call the `exec`'s success or failure callback only once.  `setKeepCallback(true)` allows you to call success/failure multiple times (so long as each time you also call `setKeepCallback(true)`). To go even further:
    - By waiting for an initial `exec()` to come in, you won't ever send a message to JS before it's ready to receive one.
    - You don't need to export an extra symbol just to be called by the native code
    - On Android, PluginResults are more efficient than sendJavascript


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at infrastructure@apache.org or file a JIRA ticket
with INFRA.
---

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@cordova.apache.org
For additional commands, e-mail: dev-help@cordova.apache.org


[GitHub] cordova-plugins pull request: CB-6289 Keyboard plugin on Android

Posted by kant2002 <gi...@git.apache.org>.
Github user kant2002 commented on a diff in the pull request:

    https://github.com/apache/cordova-plugins/pull/15#discussion_r27401502
  
    --- Diff: keyboard/src/android/Keyboard.java ---
    @@ -0,0 +1,124 @@
    +/*
    +       Licensed to the Apache Software Foundation (ASF) under one
    +       or more contributor license agreements.  See the NOTICE file
    +       distributed with this work for additional information
    +       regarding copyright ownership.  The ASF licenses this file
    +       to you under the Apache License, Version 2.0 (the
    +       "License"); you may not use this file except in compliance
    +       with the License.  You may obtain a copy of the License at
    +
    +         http://www.apache.org/licenses/LICENSE-2.0
    +
    +       Unless required by applicable law or agreed to in writing,
    +       software distributed under the License is distributed on an
    +       "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +       KIND, either express or implied.  See the License for the
    +       specific language governing permissions and limitations
    +       under the License.
    +*/
    +package org.apache.cordova.labs.keyboard; 
    +
    +import org.apache.cordova.CallbackContext;
    +import org.apache.cordova.CordovaInterface;
    +import org.apache.cordova.CordovaPlugin;
    +import org.apache.cordova.CordovaWebView;
    +import org.apache.cordova.LOG;
    +import org.json.JSONArray;
    +import org.json.JSONException;
    +
    +import android.app.Activity;
    +import android.content.Context;
    +import android.graphics.Rect;
    +import android.util.DisplayMetrics;
    +import android.view.View;
    +import android.view.ViewTreeObserver.OnGlobalLayoutListener;
    +import android.view.inputmethod.InputMethodManager;
    +
    +public class Keyboard extends CordovaPlugin {
    +    /**
    +    * Delta height of the visible area, to be treated as keyboard opening.
    +    */
    +    private final static int MinHeghtDelta = 100;
    +    private static final String TAG = "Keyboard";
    +
    +    public void initialize(CordovaInterface cordova, CordovaWebView webView) {
    +        super.initialize(cordova, webView);
    +        
    +        Activity activity = cordova.getActivity();
    +        DisplayMetrics metrics = new DisplayMetrics();
    +        activity.getWindowManager().getDefaultDisplay().getMetrics(metrics);
    +        final float density = metrics.density;
    +        
    +        final CordovaWebView appView = webView;
    +        
    +        final View rootView = activity.getWindow().getDecorView().findViewById(android.R.id.content).getRootView();
    +        OnGlobalLayoutListener list = new OnGlobalLayoutListener() {
    +            int previousHeightDifference = 0;
    +            
    +            @Override
    +            public void onGlobalLayout() {
    +                LOG.d(TAG, "Entering global layout notification");
    +                
    +            	Rect visibleRect = new Rect();
    +                //r will be populated with the coordinates of your view that area still visible.
    +                rootView.getWindowVisibleDisplayFrame(visibleRect);
    +
    +                int visibleHeight = visibleRect.bottom - visibleRect.top;
    +                int viewHeight = rootView.getRootView().getHeight();
    +                int heightDifference = (int)((viewHeight - visibleHeight) / density);
    +                if (heightDifference > MinHeghtDelta 
    +                    && heightDifference != previousHeightDifference) {
    +                    // If the height of the view is bigger then 
    +                    // visible area by delta, then assume that keyboard
    +                    // is shown on the screen.
    +                    appView.sendJavascript("Keyboard.isVisible = true; if (Keyboard.onshow) Keyboard.onshow();");
    +                }
    +                else if (heightDifference != previousHeightDifference 
    +                         && (previousHeightDifference - heightDifference) > MinHeghtDelta){
    +                    // If the difference between visible and view area dropped by the delta
    +                    // then assume that this means that keyboard is hidden.
    +                    appView.sendJavascript("Keyboard.isVisible = false; if (Keyboard.onhide) Keyboard.onhide();");
    --- End diff --
    
    It is a bit deprecated code. In the iOS version there function `Keyboard.fireOnShow` which will basically do 
    
         Keyboard.isVisible = true; 
         if (Keyboard.onshow) {
             Keyboard.onshow();
         }
    
    What if I change to `Keyboard.fireOnShow();` and `Keyboard.fireOnHide()` and then call `cordova.fireWindowEvent(...)` from both of that functions. Will simultaneously make these events available on the iOS too.


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at infrastructure@apache.org or file a JIRA ticket
with INFRA.
---

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@cordova.apache.org
For additional commands, e-mail: dev-help@cordova.apache.org


[GitHub] cordova-plugins issue #15: CB-6289 Keyboard plugin on Android

Posted by shazron <gi...@git.apache.org>.
Github user shazron commented on the issue:

    https://github.com/apache/cordova-plugins/pull/15
  
    It's been so long -- If this is still relevant, please let me know or either close this PR. Thanks!


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at infrastructure@apache.org or file a JIRA ticket
with INFRA.
---

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@cordova.apache.org
For additional commands, e-mail: dev-help@cordova.apache.org


[GitHub] cordova-plugins pull request #15: CB-6289 Keyboard plugin on Android

Posted by asfgit <gi...@git.apache.org>.
Github user asfgit closed the pull request at:

    https://github.com/apache/cordova-plugins/pull/15


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at infrastructure@apache.org or file a JIRA ticket
with INFRA.
---

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@cordova.apache.org
For additional commands, e-mail: dev-help@cordova.apache.org


[GitHub] cordova-plugins pull request: CB-6289 Keyboard plugin on Android

Posted by sandstrom <gi...@git.apache.org>.
Github user sandstrom commented on the pull request:

    https://github.com/apache/cordova-plugins/pull/15#issuecomment-71672888
  
    @clelland @shazron sorry for the prodding, but is there any chance you can take a look at this?


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at infrastructure@apache.org or file a JIRA ticket
with INFRA.
---

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@cordova.apache.org
For additional commands, e-mail: dev-help@cordova.apache.org


[GitHub] cordova-plugins pull request: CB-6289 Keyboard plugin on Android

Posted by agrieve <gi...@git.apache.org>.
Github user agrieve commented on a diff in the pull request:

    https://github.com/apache/cordova-plugins/pull/15#discussion_r27444435
  
    --- Diff: keyboard/src/android/Keyboard.java ---
    @@ -0,0 +1,124 @@
    +/*
    +       Licensed to the Apache Software Foundation (ASF) under one
    +       or more contributor license agreements.  See the NOTICE file
    +       distributed with this work for additional information
    +       regarding copyright ownership.  The ASF licenses this file
    +       to you under the Apache License, Version 2.0 (the
    +       "License"); you may not use this file except in compliance
    +       with the License.  You may obtain a copy of the License at
    +
    +         http://www.apache.org/licenses/LICENSE-2.0
    +
    +       Unless required by applicable law or agreed to in writing,
    +       software distributed under the License is distributed on an
    +       "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +       KIND, either express or implied.  See the License for the
    +       specific language governing permissions and limitations
    +       under the License.
    +*/
    +package org.apache.cordova.labs.keyboard; 
    +
    +import org.apache.cordova.CallbackContext;
    +import org.apache.cordova.CordovaInterface;
    +import org.apache.cordova.CordovaPlugin;
    +import org.apache.cordova.CordovaWebView;
    +import org.apache.cordova.LOG;
    +import org.json.JSONArray;
    +import org.json.JSONException;
    +
    +import android.app.Activity;
    +import android.content.Context;
    +import android.graphics.Rect;
    +import android.util.DisplayMetrics;
    +import android.view.View;
    +import android.view.ViewTreeObserver.OnGlobalLayoutListener;
    +import android.view.inputmethod.InputMethodManager;
    +
    +public class Keyboard extends CordovaPlugin {
    +    /**
    +    * Delta height of the visible area, to be treated as keyboard opening.
    +    */
    +    private final static int MinHeghtDelta = 100;
    +    private static final String TAG = "Keyboard";
    +
    +    public void initialize(CordovaInterface cordova, CordovaWebView webView) {
    +        super.initialize(cordova, webView);
    +        
    +        Activity activity = cordova.getActivity();
    +        DisplayMetrics metrics = new DisplayMetrics();
    +        activity.getWindowManager().getDefaultDisplay().getMetrics(metrics);
    +        final float density = metrics.density;
    +        
    +        final CordovaWebView appView = webView;
    +        
    +        final View rootView = activity.getWindow().getDecorView().findViewById(android.R.id.content).getRootView();
    +        OnGlobalLayoutListener list = new OnGlobalLayoutListener() {
    +            int previousHeightDifference = 0;
    +            
    +            @Override
    +            public void onGlobalLayout() {
    +                LOG.d(TAG, "Entering global layout notification");
    +                
    +            	Rect visibleRect = new Rect();
    +                //r will be populated with the coordinates of your view that area still visible.
    +                rootView.getWindowVisibleDisplayFrame(visibleRect);
    +
    +                int visibleHeight = visibleRect.bottom - visibleRect.top;
    +                int viewHeight = rootView.getRootView().getHeight();
    +                int heightDifference = (int)((viewHeight - visibleHeight) / density);
    +                if (heightDifference > MinHeghtDelta 
    +                    && heightDifference != previousHeightDifference) {
    +                    // If the height of the view is bigger then 
    +                    // visible area by delta, then assume that keyboard
    +                    // is shown on the screen.
    +                    appView.sendJavascript("Keyboard.isVisible = true; if (Keyboard.onshow) Keyboard.onshow();");
    +                }
    +                else if (heightDifference != previousHeightDifference 
    +                         && (previousHeightDifference - heightDifference) > MinHeghtDelta){
    +                    // If the difference between visible and view area dropped by the delta
    +                    // then assume that this means that keyboard is hidden.
    +                    appView.sendJavascript("Keyboard.isVisible = false; if (Keyboard.onhide) Keyboard.onhide();");
    --- End diff --
    
    ugh, yeah, should be fixed up on iOS as well too I suppose. There's no reason to use a single callback rather than an event. Events are much more flexible / normal.


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at infrastructure@apache.org or file a JIRA ticket
with INFRA.
---

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@cordova.apache.org
For additional commands, e-mail: dev-help@cordova.apache.org