Extremely rough rip-out-and-replace for the banner

This commit is contained in:
jahorton 2019-03-27 09:17:10 +07:00
parent 75fb17fb90
commit 6da4c78161
9 changed files with 74 additions and 94 deletions

View file

@ -27,8 +27,6 @@ open class InputViewController: UIInputViewController, KeymanWebDelegate {
var globeKeyTapBehaviour = GlobeKeyTapBehaviour.switchToNextKeyboard
var menuBehaviour = MenuBehaviour.showAlways
open var topBarImageView: UIImageView?
var _isSystemKeyboard: Bool
var isSystemKeyboard: Bool {
return _isSystemKeyboard;
@ -45,12 +43,12 @@ open class InputViewController: UIInputViewController, KeymanWebDelegate {
return UIScreen.main.bounds.width < UIScreen.main.bounds.height
}
open class var topBarHeight: Int {
if InputViewController.isPortrait {
return 41
}
return UIDevice.current.userInterfaceIdiom == .phone ? 34 : 39
}
// open class var topBarHeight: Int {
// if InputViewController.isPortrait {
// return 41
// }
// return UIDevice.current.userInterfaceIdiom == .phone ? 34 : 39
// }
open override var hasFullAccess: Bool {
return Storage.shared != nil
@ -62,7 +60,7 @@ open class InputViewController: UIInputViewController, KeymanWebDelegate {
// TODO: Consider deleting this.
private var expandedHeight: CGFloat {
return keymanWeb.keyboardHeight + activeTopBarHeight
return keymanWeb.keyboardHeight //+ activeTopBarHeight
}
public convenience init() {
@ -119,13 +117,6 @@ open class InputViewController: UIInputViewController, KeymanWebDelegate {
keymanWeb.delegate = self
// Fixes debugging issue - views added later are moved to the front.
topBarImageView?.removeFromSuperview()
topBarImageView = UIImageView()
topBarImageView!.translatesAutoresizingMaskIntoConstraints = false
topBarImageView!.backgroundColor = UIColor.gray
baseView.addSubview(topBarImageView!)
baseView.addSubview(keymanWeb.view)
//view = baseView
@ -293,47 +284,20 @@ open class InputViewController: UIInputViewController, KeymanWebDelegate {
baseWidthConstraint.isActive = true
}
public var activeTopBarHeight: CGFloat {
// If 'isSystemKeyboard' is true, always show the top bar.
return isSystemKeyboard ? CGFloat(InputViewController.topBarHeight) : 0
}
// public var activeTopBarHeight: CGFloat {
// // If 'isSystemKeyboard' is true, always show the top bar.
// return isSystemKeyboard ? CGFloat(InputViewController.topBarHeight) : 0
// }
public var kmwHeight: CGFloat {
return keymanWeb.keyboardHeight
}
private func setInnerConstraints() {
let topBar = topBarImageView!
let container = keymanWeb.view!
// Establish a consistent set of constraints for the top bar.
if #available(iOSApplicationExtension 11.0, *) {
topBar.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor).isActive = true
topBar.leftAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leftAnchor).isActive = true
topBar.rightAnchor.constraint(equalTo: view.safeAreaLayoutGuide.rightAnchor).isActive = true
// Allow this one to be broken if/as necessary to resolve layout issues.
let topBarWidthConstraint = topBar.widthAnchor.constraint(equalTo: view.safeAreaLayoutGuide.widthAnchor)
topBarWidthConstraint.priority = .defaultHigh
topBarWidthConstraint.isActive = true
} else {
topBar.topAnchor.constraint(equalTo: view.layoutMarginsGuide.topAnchor).isActive = true
topBar.leftAnchor.constraint(equalTo: view.layoutMarginsGuide.leftAnchor).isActive = true
topBar.rightAnchor.constraint(equalTo: view.layoutMarginsGuide.rightAnchor).isActive = true
// Allow this one to be broken if/as necessary to resolve layout issues.
let topBarWidthConstraint = topBar.widthAnchor.constraint(equalTo: view.layoutMarginsGuide.widthAnchor)
topBarWidthConstraint.priority = .defaultHigh
topBarWidthConstraint.isActive = true
}
topBar.heightAnchor.constraint(equalToConstant: activeTopBarHeight).isActive = true
// Establishes a set of constraints for the keyboard's container, supporting autoresizing of
// the keyboard's WebView via its constraints.
container.topAnchor.constraint(equalTo:topBar.bottomAnchor).isActive = true
if #available(iOSApplicationExtension 11.0, *) {
container.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor).isActive = true
container.bottomAnchor.constraint(equalTo:view.safeAreaLayoutGuide.bottomAnchor).isActive = true
container.leftAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leftAnchor).isActive = true
container.rightAnchor.constraint(equalTo: view.safeAreaLayoutGuide.rightAnchor).isActive = true
@ -344,6 +308,7 @@ open class InputViewController: UIInputViewController, KeymanWebDelegate {
kbdWidthConstraint.isActive = true
} else {
// Fallback on earlier versions
container.topAnchor.constraint(equalTo:view.layoutMarginsGuide.topAnchor).isActive = true
container.bottomAnchor.constraint(equalTo:view.layoutMarginsGuide.bottomAnchor).isActive = true
container.leftAnchor.constraint(equalTo:view.layoutMarginsGuide.leftAnchor).isActive = true
container.rightAnchor.constraint(equalTo:view.layoutMarginsGuide.rightAnchor).isActive = true
@ -355,9 +320,9 @@ open class InputViewController: UIInputViewController, KeymanWebDelegate {
}
// Cannot be met by the in-app keyboard, but helps to 'force' height for the system keyboard.
let portraitHeight = container.heightAnchor.constraint(equalToConstant: keymanWeb.constraintTargetHeight(isPortrait: true))
let portraitHeight = container.heightAnchor.constraint(equalToConstant: keymanWeb.constraintTargetHeight(isPortrait: true) + 40)
portraitHeight.priority = .defaultHigh
let landscapeHeight = container.heightAnchor.constraint(equalToConstant: keymanWeb.constraintTargetHeight(isPortrait: false))
let landscapeHeight = container.heightAnchor.constraint(equalToConstant: keymanWeb.constraintTargetHeight(isPortrait: false) + 40)
landscapeHeight.priority = .defaultHigh
portraitConstraint = portraitHeight

View file

@ -35,10 +35,10 @@ class KeyPreviewView: UIView {
var viewPosX = keyFrame.origin.x - (viewWidth - keyFrame.width) / 2.0
var viewPosY = keyFrame.origin.y - (viewHeight - keyFrame.height)
let tbHeight = Manager.shared.inputViewController.activeTopBarHeight
if Manager.shared.isSystemKeyboard && (viewPosY < -tbHeight) {
adjY = viewPosY + tbHeight
viewPosY = CGFloat(-tbHeight)
//let tbHeight = Manager.shared.inputViewController.activeTopBarHeight
if Manager.shared.isSystemKeyboard /*&& (viewPosY < -tbHeight)*/ {
adjY = viewPosY /*+ tbHeight*/
viewPosY = /*CGFloat(-tbHeight)*/ 0
viewHeight += adjY
} else {
adjY = 0

View file

@ -19,7 +19,7 @@ class KeyboardMenuView: UIView, UITableViewDelegate, UITableViewDataSource, UIGe
private let fontSize: CGFloat
private let xLength: CGFloat
private var adjX: CGFloat = 0
private let topBarHeight: CGFloat
//private let topBarHeight: CGFloat
private var tableView: UITableView?
private let closeButtonTitle: String?
@ -65,7 +65,7 @@ class KeyboardMenuView: UIView, UITableViewDelegate, UITableViewDataSource, UIGe
_inputViewController = inputViewController
self.closeButtonTitle = closeButtonTitle
topBarHeight = inputViewController.activeTopBarHeight
//topBarHeight = inputViewController.activeTopBarHeight
keyFrame = frame
rowHeight = UIDevice.current.userInterfaceIdiom == .phone ? 30 : 60
fontSize = UIDevice.current.userInterfaceIdiom == .phone ? 14 : 21
@ -79,7 +79,7 @@ class KeyboardMenuView: UIView, UITableViewDelegate, UITableViewDataSource, UIGe
let containerWidth = maxWidth - strokeWidth * 2
var containerHeight = CGFloat(tableList.count) * rowHeight
let vHeight = Manager.shared.inputViewController.kmwHeight + topBarHeight
let vHeight = Manager.shared.inputViewController.kmwHeight //+ topBarHeight
let bY = Manager.shared.inputViewController.kmwHeight - (keyFrame.origin.y + baseHeight)
if containerHeight + baseHeight > vHeight - bY {
@ -91,7 +91,7 @@ class KeyboardMenuView: UIView, UITableViewDelegate, UITableViewDataSource, UIGe
let viewWidth = maxWidth
let viewHeight = baseHeight + containerHeight + strokeWidth
var viewPosX = keyFrame.origin.x - (viewWidth - keyFrame.size.width) / 2.0
let viewPosY = (keyFrame.origin.y + topBarHeight) - (viewHeight - keyFrame.size.height)
let viewPosY = (keyFrame.origin.y /*+ topBarHeight*/) - (viewHeight - keyFrame.size.height)
if viewPosX < 0 {
if (keyFrame.origin.x - borderRadius * 1.0) < 0 {

View file

@ -169,7 +169,8 @@ extension KeymanWebViewController {
}
func setOskHeight(_ height: Int) {
webView?.evaluateJavaScript("setOskHeight(\(height));", completionHandler: nil)
let h = height - 40
webView?.evaluateJavaScript("setOskHeight(\(h));", completionHandler: nil)
}
func setPopupVisible(_ visible: Bool) {
@ -455,7 +456,7 @@ extension KeymanWebViewController: KeymanWebDelegate {
func showKeyPreview(_ view: KeymanWebViewController, keyFrame: CGRect, preview: String) {
if UIDevice.current.userInterfaceIdiom == .pad
|| (Util.isSystemKeyboard && Manager.shared.inputViewController.activeTopBarHeight == 0)
|| (Util.isSystemKeyboard /*&& Manager.shared.inputViewController.activeTopBarHeight == 0*/)
|| isSubKeysMenuVisible {
return
}

View file

@ -58,10 +58,10 @@ class SubKeysView: UIView {
}
let kbHeight = Manager.shared.inputViewController.kmwHeight
let tbHeight = Manager.shared.inputViewController.activeTopBarHeight
//let tbHeight = Manager.shared.inputViewController.activeTopBarHeight
var maxContainerHeight = (screenHeight - kbHeight) + keyFrame.origin.y - strokeWidth
if isSystemKeyboard {
maxContainerHeight = keyFrame.origin.y + tbHeight - strokeWidth
maxContainerHeight = keyFrame.origin.y /*+ tbHeight*/ - strokeWidth
}
var columns = Int((screenWidth - marginX) / (maxButtonSize.width + marginX))
@ -93,9 +93,9 @@ class SubKeysView: UIView {
var viewPosY = keyFrame.origin.y - (viewHeight - keyFrame.size.height)
adjX = 0
adjY = 0
if isSystemKeyboard && (viewPosY < -tbHeight) {
adjY = viewPosY + tbHeight
viewPosY = -tbHeight
if isSystemKeyboard /*&& (viewPosY < -tbHeight)*/ {
adjY = viewPosY /*+ tbHeight*/
viewPosY = /*-tbHeight*/ 0
viewHeight += adjY
}

View file

@ -31,15 +31,27 @@
function init() {
var kmw=window['keyman'];
kmw.init({'app':device,'fonts':'fonts/'});
kmw['util']['setOption']('attachType','manual');
kmw['oninserttext'] = insertText;
kmw['showKeyboardList'] = menuKeyDown;
kmw['hideKeyboard'] = hideKeyboard;
kmw['getOskHeight'] = getOskHeight;
kmw['getOskWidth'] = getOskWidth;
kmw['beepKeyboard'] = beepKeyboard;
kmw['setActiveElement']('ta');
// We could convert to relying on the promise, but the underlying input element
// tends to show a bit due to the delay when we do so.
kmw.init({'app':device,'fonts':'fonts/'});//.then(function() {
kmw['util']['setOption']('attachType','manual');
kmw['oninserttext'] = insertText;
kmw['showKeyboardList'] = menuKeyDown;
kmw['hideKeyboard'] = hideKeyboard;
kmw['getOskHeight'] = getOskHeight;
kmw['getOskWidth'] = getOskWidth;
kmw['beepKeyboard'] = beepKeyboard;
kmw['setActiveElement']('ta');
kmw.osk.banner.setOptions({
'persistentBanner': true,
'imagePath': 'keyboard_icon.png' // Need to route the actual banner image here. This is very temp.
});
// // TODO: Delete this. Useful for rough exploratory testing - can show suggestion bar here with this.
// kmw.osk.banner.setBanner('suggestion')
// kmw.osk.banner.activeBanner.updateSuggestions([{displayAs: 'a'}, {displayAs: 'b'}, {displayAs: 'c'}])
//});
}
function setDeviceType(deviceType) {

View file

@ -47,23 +47,23 @@ class KeyboardViewController: InputViewController {
}
func setupTopBarImage(isPortrait: Bool) {
if isPortrait {
topBarImageView?.image = #imageLiteral(resourceName: "banner-Portrait.png")
return
}
// iPad
if UIDevice.current.userInterfaceIdiom != UIUserInterfaceIdiom.phone {
topBarImageView?.image = #imageLiteral(resourceName: "banner-Landscape.png")
return
}
// iPhone
let screenRect = UIScreen.main.bounds
if CGFloat.maximum(screenRect.height, screenRect.width) >= 568.0 {
topBarImageView?.image = #imageLiteral(resourceName: "banner-Landscape-568h.png")
} else {
topBarImageView?.image = #imageLiteral(resourceName: "banner-Landscape.png")
}
// if isPortrait {
// topBarImageView?.image = #imageLiteral(resourceName: "banner-Portrait.png")
// return
// }
//
// // iPad
// if UIDevice.current.userInterfaceIdiom != UIUserInterfaceIdiom.phone {
// topBarImageView?.image = #imageLiteral(resourceName: "banner-Landscape.png")
// return
// }
//
// // iPhone
// let screenRect = UIScreen.main.bounds
// if CGFloat.maximum(screenRect.height, screenRect.width) >= 568.0 {
// topBarImageView?.image = #imageLiteral(resourceName: "banner-Landscape-568h.png")
// } else {
// topBarImageView?.image = #imageLiteral(resourceName: "banner-Landscape.png")
// }
}
}

View file

@ -114,12 +114,14 @@ namespace com.keyman.osk {
super(0);
}
console.log("Loading img with src '" + imagePath + "'");
this.img = document.createElement('img');
this.img.setAttribute('src', imagePath);
let ds = this.img.style;
ds.width = '100%';
ds.height = '100%';
this.getDiv().appendChild(this.img);
console.log("Image loaded.");
}
/**

View file

@ -330,11 +330,11 @@ div.android #keytip {background-color:#f00;}
height: 100% !important;
}
.kmw-embedded .ios.kmw-osk-frame {top:0 !important;bottom:initial !important; width:100% !important;}
.kmw-embedded .ios.kmw-osk-frame {bottom:0 !important; width:100% !important;}
.kmw-embedded .ios.kmw-osk-frame {position: absolute !important;}
.kmw-embedded .ios.kmw-osk-frame .kmw-key-layer-group {position: absolute !important; top: 0 !important; bottom: initial !important;}
.kmw-embedded .ios.kmw-osk-frame .kmw-key-layer-group {position: absolute !important; /*top: 0 !important;*/ bottom: 0 !important;}
.kmw-embedded .ios.kmw-osk-frame .kmw-key-layer {position: absolute !important; top: 0 !important; bottom: initial !important;}