From 9e4658d4053b9c47a4933b95330092fa09a04f73 Mon Sep 17 00:00:00 2001 From: sspanak Date: Sat, 22 Feb 2025 14:16:36 +0200 Subject: [PATCH] the main View is now explicitly destroyed when shutting down --- .../java/io/github/sspanak/tt9/ime/MainViewHandler.java | 6 +++--- .../main/java/io/github/sspanak/tt9/ime/TraditionalT9.java | 2 ++ .../main/java/io/github/sspanak/tt9/ui/main/MainView.java | 6 +++++- .../io/github/sspanak/tt9/ui/main/ResizableMainView.java | 6 +++++- 4 files changed, 15 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/io/github/sspanak/tt9/ime/MainViewHandler.java b/app/src/main/java/io/github/sspanak/tt9/ime/MainViewHandler.java index 015d6144..65db41f4 100644 --- a/app/src/main/java/io/github/sspanak/tt9/ime/MainViewHandler.java +++ b/app/src/main/java/io/github/sspanak/tt9/ime/MainViewHandler.java @@ -52,13 +52,13 @@ abstract public class MainViewHandler extends HotkeyHandler { protected void cleanUp() { - if (mainView != null) { - mainView.removeListeners(); - } if (orientationListener != null) { orientationListener.stop(); orientationListener = null; } + if (mainView != null) { + mainView.destroy(); + } } diff --git a/app/src/main/java/io/github/sspanak/tt9/ime/TraditionalT9.java b/app/src/main/java/io/github/sspanak/tt9/ime/TraditionalT9.java index 661d2f12..2911ae13 100644 --- a/app/src/main/java/io/github/sspanak/tt9/ime/TraditionalT9.java +++ b/app/src/main/java/io/github/sspanak/tt9/ime/TraditionalT9.java @@ -49,6 +49,8 @@ public class TraditionalT9 extends MainViewHandler { @Override public View onCreateInputView() { + // This may get called even when not switching IMEs, but we can't reuse the previous view + // because it will cause: "IllegalStateException: The specified child already has a parent" mainView.forceCreate(); initTray(); statusBar.setText(mInputMode); diff --git a/app/src/main/java/io/github/sspanak/tt9/ui/main/MainView.java b/app/src/main/java/io/github/sspanak/tt9/ui/main/MainView.java index 17685b75..fdef818a 100644 --- a/app/src/main/java/io/github/sspanak/tt9/ui/main/MainView.java +++ b/app/src/main/java/io/github/sspanak/tt9/ui/main/MainView.java @@ -43,8 +43,12 @@ public class MainView { return true; } - public void forceCreate() { + public void destroy() { main = null; + } + + public void forceCreate() { + destroy(); if (!create()) { Logger.w(getClass().getSimpleName(), "Invalid MainView setting. Creating default."); main = new MainLayoutSmall(tt9); diff --git a/app/src/main/java/io/github/sspanak/tt9/ui/main/ResizableMainView.java b/app/src/main/java/io/github/sspanak/tt9/ui/main/ResizableMainView.java index d59533e0..08eb2825 100644 --- a/app/src/main/java/io/github/sspanak/tt9/ui/main/ResizableMainView.java +++ b/app/src/main/java/io/github/sspanak/tt9/ui/main/ResizableMainView.java @@ -51,12 +51,16 @@ public class ResizableMainView extends MainView implements View.OnAttachStateCha return true; } - public void removeListeners() { + + @Override + public void destroy() { if (main != null && main.getView() != null) { main.getView().removeOnAttachStateChangeListener(this); } + super.destroy(); } + @Override public void onViewAttachedToWindow(@NonNull View v) { setHeight(height, heightSmall, heightNumpad); } @Override public void onViewDetachedFromWindow(@NonNull View v) {}