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

Commit f7e9cd57 authored by Miranda Kephart's avatar Miranda Kephart
Browse files

Release screenshot WindowContext when process ends

Bug: 176600157
Fix: 176600157
Test: manual -- reproducible by taking a screenshot several times
(5-10) in quick succession, and observing crash in logs. Crash no
longer occurs when we release the WindowContext when the screenshot
process is destroyed.

Change-Id: I33047ffb03867f65b591a1b43f6a56d49093fc0e
parent 19d37240
Loading
Loading
Loading
Loading
+10 −2
Original line number Diff line number Diff line
@@ -38,6 +38,7 @@ import android.app.ActivityOptions;
import android.app.ExitTransitionCoordinator;
import android.app.ExitTransitionCoordinator.ExitTransitionCallbacks;
import android.app.Notification;
import android.app.WindowContext;
import android.content.ComponentName;
import android.content.Context;
import android.content.pm.ActivityInfo;
@@ -165,7 +166,7 @@ public class ScreenshotController {
    // From WizardManagerHelper.java
    private static final String SETTINGS_SECURE_USER_SETUP_COMPLETE = "user_setup_complete";

    private final Context mContext;
    private final WindowContext mContext;
    private final ScreenshotNotificationsController mNotificationsController;
    private final ScreenshotSmartActions mScreenshotSmartActions;
    private final UiEventLogger mUiEventLogger;
@@ -240,7 +241,7 @@ public class ScreenshotController {
        final DisplayManager dm = requireNonNull(context.getSystemService(DisplayManager.class));
        final Display display = dm.getDisplay(DEFAULT_DISPLAY);
        final Context displayContext = context.createDisplayContext(display);
        mContext = displayContext.createWindowContext(TYPE_SCREENSHOT, null);
        mContext = (WindowContext) displayContext.createWindowContext(TYPE_SCREENSHOT, null);
        mWindowManager = mContext.getSystemService(WindowManager.class);

        mAccessibilityManager = AccessibilityManager.getInstance(mContext);
@@ -351,6 +352,13 @@ public class ScreenshotController {
        }
    }

    /**
     * Release the constructed window context.
     */
    void releaseContext() {
        mContext.release();
    }

    /**
     * Update resources on configuration change. Reinflate for theme/color changes.
     */
+3 −0
Original line number Diff line number Diff line
@@ -123,6 +123,9 @@ public class TakeScreenshotService extends Service {
    @Override
    public void onDestroy() {
        super.onDestroy();
        if (mScreenshot != null) {
            mScreenshot.releaseContext();
        }
        if (DEBUG_SERVICE) {
            Log.d(TAG, "onDestroy");
        }