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

Commit 65a9173d authored by Angela Wang's avatar Angela Wang
Browse files

Fix flash notification preview not working for second user issue

When switching to second user and try to preview the flash notification
effect it'll not work. The root cause is the receiver is registered in
system process and the broadcast is sent as second user. Needs to send
the broadcast as system user to let the receiver receive the preview
broadcast.

Bug: 286039180
Test: atest FlashNotificationsPreviewPreferenceControllerTest
Test: switch to second user and test the preview function
Change-Id: I7dd553dac9fd66dab59eaec25849aac9f92989b6
parent 12f8f5ac
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -28,6 +28,7 @@ import android.database.ContentObserver;
import android.net.Uri;
import android.os.Handler;
import android.os.Looper;
import android.os.UserHandle;
import android.provider.Settings;

import androidx.annotation.NonNull;
@@ -81,7 +82,7 @@ public class FlashNotificationsPreviewPreferenceController extends
        if (getPreferenceKey().equals(preference.getKey())) {
            Intent intent = new Intent(ACTION_FLASH_NOTIFICATION_START_PREVIEW);
            intent.putExtra(EXTRA_FLASH_NOTIFICATION_PREVIEW_TYPE, TYPE_SHORT_PREVIEW);
            mContext.sendBroadcast(intent);
            mContext.sendBroadcastAsUser(intent, UserHandle.SYSTEM);
            return true;
        }

+4 −2
Original line number Diff line number Diff line
@@ -27,6 +27,7 @@ import android.app.Dialog;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.os.UserHandle;
import android.view.View;

import androidx.annotation.ColorInt;
@@ -41,6 +42,7 @@ import java.util.Timer;
import java.util.TimerTask;
import java.util.function.Consumer;


/**
 * DialogFragment for Screen flash notification color picker.
 */
@@ -166,14 +168,14 @@ public class ScreenFlashNotificationColorDialogFragment extends DialogFragment i
        Intent intent = new Intent(ACTION_FLASH_NOTIFICATION_START_PREVIEW);
        intent.putExtra(EXTRA_FLASH_NOTIFICATION_PREVIEW_TYPE, TYPE_LONG_PREVIEW);
        intent.putExtra(EXTRA_FLASH_NOTIFICATION_PREVIEW_COLOR, mCurrentColor);
        getContext().sendBroadcast(intent);
        getContext().sendBroadcastAsUser(intent, UserHandle.SYSTEM);
    }

    private void stopPreviewLocked() {
        if (getContext() == null) return;

        Intent stopIntent = new Intent(ACTION_FLASH_NOTIFICATION_STOP_PREVIEW);
        getContext().sendBroadcast(stopIntent);
        getContext().sendBroadcastAsUser(stopIntent, UserHandle.SYSTEM);
        mIsPreview = false;
    }

+3 −3
Original line number Diff line number Diff line
@@ -131,7 +131,7 @@ public class FlashNotificationsPreviewPreferenceControllerTest {
    @Test
    public void testHandlePreferenceTreeClick_invalidPreference() {
        mController.handlePreferenceTreeClick(mock(Preference.class));
        verify(mContext, never()).sendBroadcast(any());
        verify(mContext, never()).sendBroadcastAsUser(any(), any());
    }

    @Test
@@ -139,7 +139,7 @@ public class FlashNotificationsPreviewPreferenceControllerTest {
        mController.handlePreferenceTreeClick(mPreference);

        ArgumentCaptor<Intent> captor = ArgumentCaptor.forClass(Intent.class);
        verify(mContext).sendBroadcast(captor.capture());
        verify(mContext).sendBroadcastAsUser(captor.capture(), any());
        Intent captured = captor.getValue();

        assertThat(captured.getAction()).isEqualTo(ACTION_FLASH_NOTIFICATION_START_PREVIEW);
@@ -150,7 +150,7 @@ public class FlashNotificationsPreviewPreferenceControllerTest {
        mController.handlePreferenceTreeClick(mPreference);

        ArgumentCaptor<Intent> captor = ArgumentCaptor.forClass(Intent.class);
        verify(mContext).sendBroadcast(captor.capture());
        verify(mContext).sendBroadcastAsUser(captor.capture(), any());
        Intent captured = captor.getValue();

        assertThat(captured.getIntExtra(EXTRA_FLASH_NOTIFICATION_PREVIEW_TYPE, TYPE_LONG_PREVIEW))