From 97355881a855c5d2503f7e518c1e30fc03f88d4e Mon Sep 17 00:00:00 2001 From: Matej Drobnič Date: Thu, 22 May 2025 23:54:13 +0200 Subject: Better support for foldable devices (#982) * Add AndroidX WindowManager unfortunately, this seems to be the only way to get fold state, native Android APIs are internal. To add this, we need to update some dependencies, raise java version and raise compile SDK. * adds separate layouts and separate layout settings for folded and unfolded state of the device. The affected settings are: + the margin bottom settings + the horizontal margin settings + the keyboard height settings * Update shell.nix --- srcs/juloo.keyboard2/Keyboard2.java | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) (limited to 'srcs/juloo.keyboard2/Keyboard2.java') diff --git a/srcs/juloo.keyboard2/Keyboard2.java b/srcs/juloo.keyboard2/Keyboard2.java index 9e54aaf..9ce78f1 100644 --- a/srcs/juloo.keyboard2/Keyboard2.java +++ b/srcs/juloo.keyboard2/Keyboard2.java @@ -43,6 +43,8 @@ public class Keyboard2 extends InputMethodService private Config _config; + private FoldStateTracker _foldStateTracker; + /** Layout currently visible before it has been modified. */ KeyboardData current_layout_unmodified() { @@ -111,13 +113,22 @@ public class Keyboard2 extends InputMethodService SharedPreferences prefs = DirectBootAwarePreferences.get_shared_preferences(this); _handler = new Handler(getMainLooper()); _keyeventhandler = new KeyEventHandler(this.new Receiver()); - Config.initGlobalConfig(prefs, getResources(), _keyeventhandler); + _foldStateTracker = new FoldStateTracker(this); + Config.initGlobalConfig(prefs, getResources(), _keyeventhandler, _foldStateTracker.isUnfolded()); prefs.registerOnSharedPreferenceChangeListener(this); _config = Config.globalConfig(); _keyboardView = (Keyboard2View)inflate_view(R.layout.keyboard); _keyboardView.reset(); Logs.set_debug_logs(getResources().getBoolean(R.bool.debug_logs)); ClipboardHistoryService.on_startup(this, _keyeventhandler); + _foldStateTracker.setChangedCallback(() -> { refresh_config(); }); + } + + @Override + public void onDestroy() { + super.onDestroy(); + + _foldStateTracker.close(); } private List getEnabledSubtypes(InputMethodManager imm) @@ -234,7 +245,7 @@ public class Keyboard2 extends InputMethodService private void refresh_config() { int prev_theme = _config.theme; - _config.refresh(getResources()); + _config.refresh(getResources(), _foldStateTracker.isUnfolded()); refreshSubtypeImm(); // Refreshing the theme config requires re-creating the views if (prev_theme != _config.theme) -- cgit v1.2.3