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

Commit 0387ddc4 authored by Pengquan Meng's avatar Pengquan Meng Committed by android-build-merger
Browse files

Merge "Remove timeout event for WaitingState"

am: 7ae0ef96

Change-Id: I87114d9ed460ad29d0c00555d81cde155a8aff48
parents 2fea71e2 7ae0ef96
Loading
Loading
Loading
Loading
+1 −43
Original line number Diff line number Diff line
@@ -26,7 +26,6 @@ import android.app.BroadcastOptions;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.app.PendingIntent.CanceledException;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
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. */
    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;

    /** 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. */
    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. */
    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
                    InboundSmsTracker inboundSmsTracker = (InboundSmsTracker) msg.obj;
                    if (processMessagePart(inboundSmsTracker)) {
                        sendMessage(EVENT_UPDATE_TRACKER, inboundSmsTracker);
                        transitionTo(mWaitingState);
                    } else {
                        // 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.
     */
    private class WaitingState extends State {
        private InboundSmsTracker mTracker;

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

        @Override
@@ -520,26 +504,12 @@ public abstract class InboundSmsHandler extends StateMachine {
            // Before moving to idle state, set wakelock timeout to WAKE_LOCK_TIMEOUT milliseconds
            // to give any receivers time to take their own wake locks
            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
        public boolean processMessage(Message msg) {
            log("WaitingState.processMessage:" + msg.what);
            switch (msg.what) {
                case EVENT_UPDATE_TRACKER:
                    mTracker = (InboundSmsTracker) msg.obj;
                    return HANDLED;

                case EVENT_BROADCAST_SMS:
                    // defer until the current broadcast completes
                    deferMessage(msg);
@@ -555,18 +525,6 @@ public abstract class InboundSmsHandler extends StateMachine {
                    // not ready to return to idle; ignore
                    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:
                    // parent state handles the other message types
                    return NOT_HANDLED;
+0 −25
Original line number Diff line number Diff line
@@ -47,7 +47,6 @@ import android.os.UserHandle;
import android.os.UserManager;
import android.provider.Telephony;
import android.support.test.filters.FlakyTest;
import android.support.test.filters.LargeTest;
import android.support.test.filters.MediumTest;
import android.test.mock.MockContentResolver;

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

        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());
    }
}