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

Commit 7ae0ef96 authored by Pengquan Meng's avatar Pengquan Meng Committed by Gerrit Code Review
Browse files

Merge "Remove timeout event for WaitingState"

parents 61f96a7e af480a71
Loading
Loading
Loading
Loading
+1 −43
Original line number Original line Diff line number Diff line
@@ -26,7 +26,6 @@ import android.app.BroadcastOptions;
import android.app.Notification;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.app.PendingIntent;
import android.app.PendingIntent.CanceledException;
import android.content.BroadcastReceiver;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.ComponentName;
import android.content.ContentResolver;
import android.content.ContentResolver;
@@ -146,7 +145,7 @@ public abstract class InboundSmsHandler extends StateMachine {
    /** Sent on exit from {@link WaitingState} to return to idle after sending all broadcasts. */
    /** Sent on exit from {@link WaitingState} to return to idle after sending all broadcasts. */
    private static final int EVENT_RETURN_TO_IDLE = 4;
    private static final int EVENT_RETURN_TO_IDLE = 4;


    /** Release wakelock after {@link mWakeLockTimeout} when returning to idle state. */
    /** Release wakelock after {@link #mWakeLockTimeout} when returning to idle state. */
    private static final int EVENT_RELEASE_WAKELOCK = 5;
    private static final int EVENT_RELEASE_WAKELOCK = 5;


    /** Sent by {@link SmsBroadcastUndelivered} after cleaning the raw table. */
    /** Sent by {@link SmsBroadcastUndelivered} after cleaning the raw table. */
@@ -158,17 +157,6 @@ public abstract class InboundSmsHandler extends StateMachine {
    /** New SMS received as an AsyncResult. */
    /** New SMS received as an AsyncResult. */
    public static final int EVENT_INJECT_SMS = 8;
    public static final int EVENT_INJECT_SMS = 8;


    /** Update tracker object; used only in waiting state */
    private static final int EVENT_UPDATE_TRACKER = 9;

    /** Timeout in case state machine is stuck in a state for too long; used only in waiting
     * state */
    private static final int EVENT_STATE_TIMEOUT = 10;

    /** Timeout duration for EVENT_STATE_TIMEOUT (5 minutes) */
    @VisibleForTesting
    public static final int STATE_TIMEOUT = 5 * 60 * 1000;

    /** Wakelock release delay when returning to idle state. */
    /** Wakelock release delay when returning to idle state. */
    private static final int WAKELOCK_TIMEOUT = 3000;
    private static final int WAKELOCK_TIMEOUT = 3000;


@@ -461,7 +449,6 @@ public abstract class InboundSmsHandler extends StateMachine {
                    // if any broadcasts were sent, transition to waiting state
                    // if any broadcasts were sent, transition to waiting state
                    InboundSmsTracker inboundSmsTracker = (InboundSmsTracker) msg.obj;
                    InboundSmsTracker inboundSmsTracker = (InboundSmsTracker) msg.obj;
                    if (processMessagePart(inboundSmsTracker)) {
                    if (processMessagePart(inboundSmsTracker)) {
                        sendMessage(EVENT_UPDATE_TRACKER, inboundSmsTracker);
                        transitionTo(mWaitingState);
                        transitionTo(mWaitingState);
                    } else {
                    } else {
                        // if event is sent from SmsBroadcastUndelivered.broadcastSms(), and
                        // if event is sent from SmsBroadcastUndelivered.broadcastSms(), and
@@ -505,13 +492,10 @@ public abstract class InboundSmsHandler extends StateMachine {
     * {@link IdleState} after any deferred {@link #EVENT_BROADCAST_SMS} messages are handled.
     * {@link IdleState} after any deferred {@link #EVENT_BROADCAST_SMS} messages are handled.
     */
     */
    private class WaitingState extends State {
    private class WaitingState extends State {
        private InboundSmsTracker mTracker;


        @Override
        @Override
        public void enter() {
        public void enter() {
            if (DBG) log("entering Waiting state");
            if (DBG) log("entering Waiting state");
            mTracker = null;
            sendMessageDelayed(EVENT_STATE_TIMEOUT, STATE_TIMEOUT);
        }
        }


        @Override
        @Override
@@ -520,26 +504,12 @@ public abstract class InboundSmsHandler extends StateMachine {
            // Before moving to idle state, set wakelock timeout to WAKE_LOCK_TIMEOUT milliseconds
            // Before moving to idle state, set wakelock timeout to WAKE_LOCK_TIMEOUT milliseconds
            // to give any receivers time to take their own wake locks
            // to give any receivers time to take their own wake locks
            setWakeLockTimeout(WAKELOCK_TIMEOUT);
            setWakeLockTimeout(WAKELOCK_TIMEOUT);
            if (VDBG) {
                if (hasMessages(EVENT_STATE_TIMEOUT)) {
                    log("exiting Waiting state: removing EVENT_STATE_TIMEOUT from message queue");
                }
                if (hasMessages(EVENT_UPDATE_TRACKER)) {
                    log("exiting Waiting state: removing EVENT_UPDATE_TRACKER from message queue");
                }
            }
            removeMessages(EVENT_STATE_TIMEOUT);
            removeMessages(EVENT_UPDATE_TRACKER);
        }
        }


        @Override
        @Override
        public boolean processMessage(Message msg) {
        public boolean processMessage(Message msg) {
            log("WaitingState.processMessage:" + msg.what);
            log("WaitingState.processMessage:" + msg.what);
            switch (msg.what) {
            switch (msg.what) {
                case EVENT_UPDATE_TRACKER:
                    mTracker = (InboundSmsTracker) msg.obj;
                    return HANDLED;

                case EVENT_BROADCAST_SMS:
                case EVENT_BROADCAST_SMS:
                    // defer until the current broadcast completes
                    // defer until the current broadcast completes
                    deferMessage(msg);
                    deferMessage(msg);
@@ -555,18 +525,6 @@ public abstract class InboundSmsHandler extends StateMachine {
                    // not ready to return to idle; ignore
                    // not ready to return to idle; ignore
                    return HANDLED;
                    return HANDLED;


                case EVENT_STATE_TIMEOUT:
                    // stuck in WaitingState for too long; drop the message and exit this state
                    if (mTracker != null) {
                        log("WaitingState.processMessage: EVENT_STATE_TIMEOUT; dropping message");
                        dropSms(new SmsBroadcastReceiver(mTracker));
                    } else {
                        log("WaitingState.processMessage: EVENT_STATE_TIMEOUT; mTracker is null "
                                + "- sending EVENT_BROADCAST_COMPLETE");
                        sendMessage(EVENT_BROADCAST_COMPLETE);
                    }
                    return HANDLED;

                default:
                default:
                    // parent state handles the other message types
                    // parent state handles the other message types
                    return NOT_HANDLED;
                    return NOT_HANDLED;
+0 −25
Original line number Original line Diff line number Diff line
@@ -47,7 +47,6 @@ import android.os.UserHandle;
import android.os.UserManager;
import android.os.UserManager;
import android.provider.Telephony;
import android.provider.Telephony;
import android.support.test.filters.FlakyTest;
import android.support.test.filters.FlakyTest;
import android.support.test.filters.LargeTest;
import android.support.test.filters.MediumTest;
import android.support.test.filters.MediumTest;
import android.test.mock.MockContentResolver;
import android.test.mock.MockContentResolver;


@@ -782,28 +781,4 @@ public class GsmInboundSmsHandlerTest extends TelephonyTest {


        verifySmsIntentBroadcasts(0);
        verifySmsIntentBroadcasts(0);
    }
    }

    @FlakyTest
    @Ignore
    @Test
    @LargeTest
    public void testWaitingStateTimeout() throws Exception {
        transitionFromStartupToIdle();

        // send new SMS to state machine and verify that triggers SMS_DELIVER_ACTION
        mGsmInboundSmsHandler.sendMessage(InboundSmsHandler.EVENT_NEW_SMS,
                new AsyncResult(null, mSmsMessage, null));
        waitForMs(100);

        ArgumentCaptor<Intent> intentArgumentCaptor = ArgumentCaptor.forClass(Intent.class);
        verify(mContext, times(1)).sendBroadcast(
                intentArgumentCaptor.capture());
        assertEquals(Telephony.Sms.Intents.SMS_DELIVER_ACTION,
                intentArgumentCaptor.getAllValues().get(0).getAction());
        assertEquals("WaitingState", getCurrentState().getName());

        waitForMs(InboundSmsHandler.STATE_TIMEOUT + 300);

        assertEquals("IdleState", getCurrentState().getName());
    }
}
}