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

Commit b5d94e29 authored by Jack Yu's avatar Jack Yu
Browse files

Fixed emergency alert not showing up issue

After receiving a out-of-bound geo-targeting
emergency alert, the device is not able to display
any kind of emergency alert anymore.

Fixed by properly handling out-of-bound alert so
state machine can properly return back to idle
state.

Bug: 139501531
Test: Manual
Change-Id: If32f8475cd45be01226758e2565c0008d0715e95
parent 3213d68b
Loading
Loading
Loading
Loading
+2 −0
Original line number Original line Diff line number Diff line
@@ -181,6 +181,8 @@ public class CellBroadcastHandler extends WakeLockStateMachine {
            logd("Device location is outside the broadcast area "
            logd("Device location is outside the broadcast area "
                    + CbGeoUtils.encodeGeometriesToString(broadcastArea));
                    + CbGeoUtils.encodeGeometriesToString(broadcastArea));
        }
        }

        sendMessage(EVENT_BROADCAST_NOT_REQUIRED);
    }
    }


    /**
    /**
+20 −3
Original line number Original line Diff line number Diff line
@@ -51,6 +51,9 @@ public abstract class WakeLockStateMachine extends StateMachine {
    /** Release wakelock after a short timeout when returning to idle state. */
    /** Release wakelock after a short timeout when returning to idle state. */
    static final int EVENT_RELEASE_WAKE_LOCK = 3;
    static final int EVENT_RELEASE_WAKE_LOCK = 3;


    /** Broadcast not required due to geo-fencing check */
    static final int EVENT_BROADCAST_NOT_REQUIRED = 4;

    @UnsupportedAppUsage
    @UnsupportedAppUsage
    protected Phone mPhone;
    protected Phone mPhone;


@@ -152,13 +155,14 @@ public abstract class WakeLockStateMachine extends StateMachine {
        @Override
        @Override
        public void exit() {
        public void exit() {
            mWakeLock.acquire();
            mWakeLock.acquire();
            if (DBG) log("acquired wakelock, leaving Idle state");
            if (DBG) log("Idle: acquired wakelock, leaving Idle state");
        }
        }


        @Override
        @Override
        public boolean processMessage(Message msg) {
        public boolean processMessage(Message msg) {
            switch (msg.what) {
            switch (msg.what) {
                case EVENT_NEW_SMS_MESSAGE:
                case EVENT_NEW_SMS_MESSAGE:
                    log("Idle: new cell broadcast message");
                    // transition to waiting state if we sent a broadcast
                    // transition to waiting state if we sent a broadcast
                    if (handleSmsMessage(msg)) {
                    if (handleSmsMessage(msg)) {
                        transitionTo(mWaitingState);
                        transitionTo(mWaitingState);
@@ -166,9 +170,14 @@ public abstract class WakeLockStateMachine extends StateMachine {
                    return HANDLED;
                    return HANDLED;


                case EVENT_RELEASE_WAKE_LOCK:
                case EVENT_RELEASE_WAKE_LOCK:
                    log("Idle: release wakelock");
                    releaseWakeLock();
                    releaseWakeLock();
                    return HANDLED;
                    return HANDLED;


                case EVENT_BROADCAST_NOT_REQUIRED:
                    log("Idle: broadcast not required");
                    return HANDLED;

                default:
                default:
                    return NOT_HANDLED;
                    return NOT_HANDLED;
            }
            }
@@ -184,19 +193,27 @@ public abstract class WakeLockStateMachine extends StateMachine {
        public boolean processMessage(Message msg) {
        public boolean processMessage(Message msg) {
            switch (msg.what) {
            switch (msg.what) {
                case EVENT_NEW_SMS_MESSAGE:
                case EVENT_NEW_SMS_MESSAGE:
                    log("deferring message until return to idle");
                    log("Waiting: deferring message until return to idle");
                    deferMessage(msg);
                    deferMessage(msg);
                    return HANDLED;
                    return HANDLED;


                case EVENT_BROADCAST_COMPLETE:
                case EVENT_BROADCAST_COMPLETE:
                    log("broadcast complete, returning to idle");
                    log("Waiting: broadcast complete, returning to idle");
                    transitionTo(mIdleState);
                    transitionTo(mIdleState);
                    return HANDLED;
                    return HANDLED;


                case EVENT_RELEASE_WAKE_LOCK:
                case EVENT_RELEASE_WAKE_LOCK:
                    log("Waiting: release wakelock");
                    releaseWakeLock();
                    releaseWakeLock();
                    return HANDLED;
                    return HANDLED;


                case EVENT_BROADCAST_NOT_REQUIRED:
                    log("Waiting: broadcast not required");
                    if (mReceiverCount.get() == 0) {
                        transitionTo(mIdleState);
                    }
                    return HANDLED;

                default:
                default:
                    return NOT_HANDLED;
                    return NOT_HANDLED;
            }
            }