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

Commit 65ac7619 authored by Jeff Sharkey's avatar Jeff Sharkey
Browse files

Add timeout to StrictMode flash.

Consider an app that requests that a StrictMode border be shown, and
then immediately crashes.  We'd end up showing the bars indefinitely,
which is a terrible UX.

This CL enqueues a second message to tear down the bars if nobody
asks for them to be taken down within 1 second.

Test: manual app that crashed after showing violation bars
Bug: 37787765
Change-Id: I45d2078d0dcaa94e8f24087d028f5f06d12c4349
parent a9c185f6
Loading
Loading
Loading
Loading
+11 −2
Original line number Diff line number Diff line
@@ -158,6 +158,7 @@ import android.os.Trace;
import android.os.UserHandle;
import android.os.WorkSource;
import android.provider.Settings;
import android.text.format.DateUtils;
import android.util.ArraySet;
import android.util.DisplayMetrics;
import android.util.EventLog;
@@ -3596,8 +3597,16 @@ public class WindowManagerService extends IWindowManager.Stub
    // only allow disables from pids which have count on, etc.
    @Override
    public void showStrictModeViolation(boolean on) {
        int pid = Binder.getCallingPid();
        mH.sendMessage(mH.obtainMessage(H.SHOW_STRICT_MODE_VIOLATION, on ? 1 : 0, pid));
        final int pid = Binder.getCallingPid();
        if (on) {
            // Show the visualization, and enqueue a second message to tear it
            // down if we don't hear back from the app.
            mH.sendMessage(mH.obtainMessage(H.SHOW_STRICT_MODE_VIOLATION, 1, pid));
            mH.sendMessageDelayed(mH.obtainMessage(H.SHOW_STRICT_MODE_VIOLATION, 0, pid),
                    DateUtils.SECOND_IN_MILLIS);
        } else {
            mH.sendMessage(mH.obtainMessage(H.SHOW_STRICT_MODE_VIOLATION, 0, pid));
        }
    }

    private void showStrictModeViolation(int arg, int pid) {