[jira] [Commented] (CB-6289) Keyboard for Android
[ https://issues.apache.org/jira/browse/CB-6289?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15879050#comment-15879050 ] ASF GitHub Bot commented on CB-6289: Github user asfgit closed the pull request at: https://github.com/apache/cordova-plugins/pull/15 > Keyboard for Android > > > Key: CB-6289 > URL: https://issues.apache.org/jira/browse/CB-6289 > Project: Apache Cordova > Issue Type: Improvement > Components: Plugin Keyboard > Environment: Android >Reporter: Andrey Kurdyumov >Priority: Minor > Labels: keyboard-plugin > > Please extend the Keyboard plugin to support Android platform. -- This message was sent by Atlassian JIRA (v6.3.15#6346) - To unsubscribe, e-mail: issues-unsubscr...@cordova.apache.org For additional commands, e-mail: issues-h...@cordova.apache.org
[jira] [Commented] (CB-6289) Keyboard for Android
[ https://issues.apache.org/jira/browse/CB-6289?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15733901#comment-15733901 ] ASF GitHub Bot commented on CB-6289: 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! > Keyboard for Android > > > Key: CB-6289 > URL: https://issues.apache.org/jira/browse/CB-6289 > Project: Apache Cordova > Issue Type: Improvement > Components: Plugin Keyboard > Environment: Android >Reporter: Andrey Kurdyumov >Priority: Minor > Labels: keyboard-plugin > > Please extend the Keyboard plugin to support Android platform. -- This message was sent by Atlassian JIRA (v6.3.4#6332) - To unsubscribe, e-mail: issues-unsubscr...@cordova.apache.org For additional commands, e-mail: issues-h...@cordova.apache.org
[jira] [Commented] (CB-6289) Keyboard for Android
[ https://issues.apache.org/jira/browse/CB-6289?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=14956271#comment-14956271 ] ASF GitHub Bot commented on CB-6289: 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 heightRatios = new HashSet(); 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 ``` > Keyboard for Android > > > Key: CB-6289 > URL: https://issues.apache.org/jira/browse/CB-6289 > Project: Apache Cordova > Issue Type: Improvement > Components: Plugins > Environment: Android >Reporter: Andrey Kurdyumov >Priority: Minor > Labels: keyboard-plugin > > Please extend the Keyboard plugin to support Android platform. -- This message was sent by Atlassian JIRA (v6.3.4#6332) - To unsubscribe, e-mail: issues-unsubscr...@cordova.apache.org For additional commands, e-mail: issues-h...@cordova.apache.org
[jira] [Commented] (CB-6289) Keyboard for Android
[ https://issues.apache.org/jira/browse/CB-6289?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanelfocusedCommentId=14386741#comment-14386741 ] ASF GitHub Bot commented on CB-6289: 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` Keyboard for Android Key: CB-6289 URL: https://issues.apache.org/jira/browse/CB-6289 Project:
[jira] [Commented] (CB-6289) Keyboard for Android
[ https://issues.apache.org/jira/browse/CB-6289?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanelfocusedCommentId=14386739#comment-14386739 ] ASF GitHub Bot commented on CB-6289: 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) Keyboard for Android Key: CB-6289 URL: https://issues.apache.org/jira/browse/CB-6289 Project: Apache Cordova Issue Type: Improvement Components: Plugins Environment: Android Reporter: Andrey Kurdyumov Assignee: Andrey Kurdyumov Priority: Minor Labels: keyboard-plugin Please extend the Keyboard plugin to support Android platform. -- This message was sent by Atlassian JIRA (v6.3.4#6332) - To
[jira] [Commented] (CB-6289) Keyboard for Android
[ https://issues.apache.org/jira/browse/CB-6289?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanelfocusedCommentId=14387684#comment-14387684 ] ASF GitHub Bot commented on CB-6289: Github user agrieve commented on a diff in the pull request: https://github.com/apache/cordova-plugins/pull/15#discussion_r2735 --- 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. Keyboard for Android Key: CB-6289 URL:
[jira] [Commented] (CB-6289) Keyboard for Android
[ https://issues.apache.org/jira/browse/CB-6289?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanelfocusedCommentId=14387692#comment-14387692 ] ASF GitHub Bot commented on CB-6289: 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 Keyboard for Android
[jira] [Commented] (CB-6289) Keyboard for Android
[ https://issues.apache.org/jira/browse/CB-6289?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanelfocusedCommentId=14241595#comment-14241595 ] ASF GitHub Bot commented on CB-6289: Github user sandstrom commented on the pull request: https://github.com/apache/cordova-plugins/pull/15#issuecomment-66510570 @clelland @shazron friendly ping! :smile: Keyboard for Android Key: CB-6289 URL: https://issues.apache.org/jira/browse/CB-6289 Project: Apache Cordova Issue Type: Improvement Components: Plugins Environment: Android Reporter: Andrey Kurdyumov Assignee: Andrey Kurdyumov Priority: Minor Labels: keyboard-plugin Please extend the Keyboard plugin to support Android platform. -- This message was sent by Atlassian JIRA (v6.3.4#6332) - To unsubscribe, e-mail: issues-unsubscr...@cordova.apache.org For additional commands, e-mail: issues-h...@cordova.apache.org
[jira] [Commented] (CB-6289) Keyboard for Android
[ https://issues.apache.org/jira/browse/CB-6289?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanelfocusedCommentId=14068382#comment-14068382 ] ASF GitHub Bot commented on CB-6289: 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 kant2...@gmail.com Date: 2014-07-21T10:08:11Z Keyboard plugin on Android Keyboard for Android Key: CB-6289 URL: https://issues.apache.org/jira/browse/CB-6289 Project: Apache Cordova Issue Type: Improvement Components: Plugins Environment: Android Reporter: Andrey Kurdyumov Assignee: Andrey Kurdyumov Priority: Minor Labels: keyboard-plugin Please extend the Keyboard plugin to support Android platform. -- This message was sent by Atlassian JIRA (v6.2#6252)
[jira] [Commented] (CB-6289) Keyboard for Android
[ https://issues.apache.org/jira/browse/CB-6289?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanelfocusedCommentId=13937659#comment-13937659 ] Andrey Kurdyumov commented on CB-6289: -- I actually plan to implement Keyboard API myself on this week. Keyboard for Android Key: CB-6289 URL: https://issues.apache.org/jira/browse/CB-6289 Project: Apache Cordova Issue Type: Improvement Components: Plugins Environment: Android Reporter: Andrey Kurdyumov Priority: Minor Labels: keyboard-plugin Please extend the Keyboard plugin to support Android platform. -- This message was sent by Atlassian JIRA (v6.2#6252)