Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d045c829 authored by Wale Ogunwale's avatar Wale Ogunwale
Browse files

Prevent windows in pinned stack from gaining window focus.

Windows in the pinned stack shouldn't receive input keys, so we prevent
they from gaining window focus so the focus/input keys goes to the stack
below the pinned stack.

Also, cleaned up some code.

Bug: 25580816
Change-Id: Iea1f944d167310233c3dbaea140a4ada568bb815
parent 408d9b17
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -537,6 +537,11 @@ public class ActivityManager {
            return stackId == FREEFORM_WORKSPACE_STACK_ID
                    || stackId == FULLSCREEN_WORKSPACE_STACK_ID || stackId == DOCKED_STACK_ID;
        }

        /** Returns true if the windows in the stack can receive input keys. */
        public static boolean canReceiveKeys(int stackId) {
            return stackId != PINNED_STACK_ID;
        }
    }

    /**
+48 −45
Original line number Diff line number Diff line
@@ -2713,18 +2713,20 @@ public final class ActivityManagerService extends ActivityManagerNative
    }
    final void setFocusedActivityLocked(ActivityRecord r, String reason) {
        if (r != null && mFocusedActivity != r) {
        if (r == null || mFocusedActivity == r) {
            return;
        }
        if (DEBUG_FOCUS) Slog.d(TAG_FOCUS, "setFocusedActivityLocked: r=" + r);
            ActivityRecord last = mFocusedActivity;
        final ActivityRecord last = mFocusedActivity;
        mFocusedActivity = r;
            if (r.task.taskType != ActivityRecord.HOME_ACTIVITY_TYPE
                    && r.task.taskType != ActivityRecord.RECENTS_ACTIVITY_TYPE) {
        if (r.task.isApplicationTask()) {
            if (mCurAppTimeTracker != r.appTimeTracker) {
                // We are switching app tracking.  Complete the current one.
                if (mCurAppTimeTracker != null) {
                    mCurAppTimeTracker.stop();
                        mHandler.obtainMessage(REPORT_TIME_TRACKER_MSG,
                                mCurAppTimeTracker).sendToTarget();
                    mHandler.obtainMessage(
                            REPORT_TIME_TRACKER_MSG, mCurAppTimeTracker).sendToTarget();
                    mStackSupervisor.clearOtherAppTimeTrackers(r.appTimeTracker);
                    mCurAppTimeTracker = null;
                }
@@ -2738,7 +2740,7 @@ public final class ActivityManagerService extends ActivityManagerNative
        } else {
            r.appTimeTracker = null;
        }
            if (r.task != null && r.task.voiceInteractor != null) {
        if (r.task.voiceInteractor != null) {
            startRunningVoiceLocked(r.task.voiceSession, r.info.applicationInfo.uid);
        } else {
            finishRunningVoiceLocked();
@@ -2756,14 +2758,15 @@ public final class ActivityManagerService extends ActivityManagerNative
        applyUpdateLockStateLocked(r);
        if (mFocusedActivity.userId != mLastFocusedUserId) {
            mHandler.removeMessages(FOREGROUND_PROFILE_CHANGED_MSG);
                mHandler.sendMessage(mHandler.obtainMessage(FOREGROUND_PROFILE_CHANGED_MSG,
                        mFocusedActivity.userId, 0));
            mHandler.obtainMessage(
                    FOREGROUND_PROFILE_CHANGED_MSG, mFocusedActivity.userId, 0).sendToTarget();
            mLastFocusedUserId = mFocusedActivity.userId;
        }
        }
        EventLog.writeEvent(EventLogTags.AM_FOCUSED_ACTIVITY,
        EventLogTags.writeAmFocusedActivity(
                mFocusedActivity == null ? -1 : mFocusedActivity.userId,
                mFocusedActivity == null ? "NULL" : mFocusedActivity.shortComponentName);
                mFocusedActivity == null ? "NULL" : mFocusedActivity.shortComponentName,
                reason);
    }
    final void clearFocusedActivity(ActivityRecord r) {
@@ -2779,7 +2782,7 @@ public final class ActivityManagerService extends ActivityManagerNative
                }
            }
            mFocusedActivity = null;
            EventLog.writeEvent(EventLogTags.AM_FOCUSED_ACTIVITY, -1, "NULL");
            EventLogTags.writeAmFocusedActivity(-1, "NULL", "clearFocusedActivity");
        }
    }
+33 −33
Original line number Diff line number Diff line
@@ -54,7 +54,6 @@ import android.app.IActivityController;
import android.app.ResultInfo;
import android.app.ActivityManager.RunningTaskInfo;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.content.pm.PackageManager;
@@ -73,7 +72,6 @@ import android.os.RemoteException;
import android.os.SystemClock;
import android.os.Trace;
import android.os.UserHandle;
import android.provider.Settings;
import android.service.voice.IVoiceInteractionSession;
import android.util.EventLog;
import android.util.Slog;
@@ -2827,8 +2825,11 @@ final class ActivityStack {
    }

    private void adjustFocusedActivityLocked(ActivityRecord r, String reason) {
        if (mStackSupervisor.isFocusedStack(this) && mService.mFocusedActivity == r) {
            ActivityRecord next = topRunningActivityLocked();
        if (!mStackSupervisor.isFocusedStack(this) || mService.mFocusedActivity != r) {
            return;
        }

        final ActivityRecord next = topRunningActivityLocked();
        final String myReason = reason + " adjustFocus";
        if (next != r) {
            if (next != null && StackId.keepFocusInStackIfPossible(mStackId)) {
@@ -2863,7 +2864,6 @@ final class ActivityStack {
            mService.setFocusedActivityLocked(top, myReason);
        }
    }
    }

    private boolean adjustFocusToNextVisibleStackLocked(ActivityStack inStack, String reason) {
        final ActivityStack stack = (inStack != null) ? inStack : getNextVisibleStackLocked();
+1 −1
Original line number Diff line number Diff line
@@ -91,7 +91,7 @@ option java_package com.android.server.am
30042 am_activity_fully_drawn_time (User|1|5),(Token|1|5),(Component Name|3),(time|2|3)

# Activity focused
30043 am_focused_activity (User|1|5),(Component Name|3)
30043 am_focused_activity (User|1|5),(Component Name|3),(Reason|3)

# Stack focus
30044 am_focused_stack (User|1|5),(Focused Stack Id|1|5),(Last Focused Stack Id|1|5),(Reason|3)
+4 −0
Original line number Diff line number Diff line
@@ -269,6 +269,10 @@ class AppWindowToken extends WindowToken {
        return candidate;
    }

    boolean stackCanReceiveKeys() {
        return (windows.size() > 0) ? windows.get(windows.size() - 1).stackCanReceiveKeys() : false;
    }

    boolean isVisible() {
        final int N = allAppWindows.size();
        for (int i=0; i<N; i++) {
Loading