From 7df66b4762ff51e394b8db03dfffe888bdba0a67 Mon Sep 17 00:00:00 2001 From: Po Lu Date: Wed, 3 Apr 2024 20:29:10 +0800 Subject: Better align Emacs window management with Android task lifecycles * java/org/gnu/emacs/EmacsActivity.java (onCreate): Permit overriding by child classes. (onDestroy): Minor stylistic adjustments. (getAttachmentToken): New function. * java/org/gnu/emacs/EmacsMultitaskActivity.java (onCreate) (getAttachmentToken): New functions. * java/org/gnu/emacs/EmacsWindow.java (EmacsWindow): : New variables. (onActivityDetached): Remove redundant isFinishing argument. (reparentTo): Reset the foregoing fields before registering with the window manager. * java/org/gnu/emacs/EmacsWindowManager.java (EmacsWindowManager): Rename from EmacsWindowAttachmentManager. (WindowConsumer): New function getAttachmentToken. (isWindowEligible): New function. (registerWindowConsumer, registerWindow, removeWindowConsumer) (detachWindow): Implement a new window management strategy on API 29 and subsequent releases where both varieties of toplevel window are permanently, except when reparented, bound to the activities to which they attach, and Emacs establishes at strategic junctures whether those activities remain present. (getTaskToken, pruneWindows): New functions. --- java/org/gnu/emacs/EmacsMultitaskActivity.java | 38 ++++++++++++++++++++++---- 1 file changed, 33 insertions(+), 5 deletions(-) (limited to 'java/org/gnu/emacs/EmacsMultitaskActivity.java') diff --git a/java/org/gnu/emacs/EmacsMultitaskActivity.java b/java/org/gnu/emacs/EmacsMultitaskActivity.java index 7229e34496e..10963ecfd3f 100644 --- a/java/org/gnu/emacs/EmacsMultitaskActivity.java +++ b/java/org/gnu/emacs/EmacsMultitaskActivity.java @@ -19,11 +19,39 @@ along with GNU Emacs. If not, see . */ package org.gnu.emacs; -/* This class only exists because EmacsActivity is already defined as - an activity, and the system wants a new class in order to define a - new activity. */ +import android.content.Intent; + +import android.os.Bundle; + +/* In large measure, this class only exists because EmacsActivity is + already defined as an activity, and the system requires that every + new activity be defined by a new class. */ public final class EmacsMultitaskActivity extends EmacsActivity { - -} + /* Token provided by the creator. */ + private long activityToken; + + @Override + public final void + onCreate (Bundle savedInstanceState) + { + Intent intent; + String token; + + intent = getIntent (); + token = EmacsWindowManager.ACTIVITY_TOKEN; + + if (intent != null) + activityToken = intent.getLongExtra (token, -2); + + super.onCreate (savedInstanceState); + } + + @Override + public final long + getAttachmentToken () + { + return activityToken; + } +}; -- cgit v1.3