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

Commit 71aae0b6 authored by Xia Wang's avatar Xia Wang
Browse files

Fix state transition verification.

When there is connectivity state change, the network states could be broadcasted multiple times.
The state transition should consider that.

Bug: 13277256
Change-Id: I3d400900a0e2454f9d198629f1c062cbb15bdcd8
parent dcd1a102
Loading
Loading
Loading
Loading
+20 −13
Original line number Diff line number Diff line
@@ -101,9 +101,10 @@ public class NetworkState {
    }

    /*
     * Transition from CONNECTED -> DISCONNECTED:
     *    CONNECTED->DISCONNECTING->DISCONNECTED
     * return false if any state transition is not valid and save a message in mReason
     * Verifies state transition from CONNECTED->...-> DISCONNECTED.
     *
     * returns false if initial state or target state is not correct, or if there is
     * any transition from DISCONNECTING/DISCONNECTED -> CONNECTED.
     */
    public boolean transitToDisconnection () {
        mReason = "states: " + printStates();
@@ -120,13 +121,13 @@ public class NetworkState {
        for (int i = 1; i < mStateDepository.size() - 1; i++) {
            State preState = mStateDepository.get(i-1);
            State curState = mStateDepository.get(i);
            if ((preState == State.CONNECTED) && ((curState == State.DISCONNECTING) ||
            if (preState == curState) {
                continue;
            } else if ((preState == State.CONNECTED) && ((curState == State.DISCONNECTING) ||
                    (curState == State.DISCONNECTED))) {
                continue;
            } else if ((preState == State.DISCONNECTING) && (curState == State.DISCONNECTED)) {
                continue;
            } else if ((preState == State.DISCONNECTED) && (curState == State.DISCONNECTED)) {
                continue;
            } else {
                mReason += " Transition state from " + preState.toString() + " to " +
                        curState.toString() + " is not valid.";
@@ -136,7 +137,12 @@ public class NetworkState {
        return true;
    }

    // DISCONNECTED->CONNECTING->CONNECTED
    /*
     * Verifies state transition from DISCONNECTED->...-> CONNECTED.
     *
     * returns false if initial state or target state is not correct, or if there is
     * any transition from CONNECED -> DISCONNECTED.
     */
    public boolean transitToConnection() {
        mReason = "states: " + printStates();
        if (mStateDepository.get(0) != State.DISCONNECTED) {
@@ -152,13 +158,14 @@ public class NetworkState {
        for (int i = 1; i < mStateDepository.size(); i++) {
            State preState = mStateDepository.get(i-1);
            State curState = mStateDepository.get(i);
            if (preState == curState) {
                continue;
            }
            if ((preState == State.DISCONNECTED) && ((curState == State.CONNECTING) ||
                    (curState == State.CONNECTED) || (curState == State.DISCONNECTED))) {
                    (curState == State.CONNECTED))) {
                continue;
             } else if ((preState == State.CONNECTING) && (curState == State.CONNECTED)) {
                 continue;
            } else if ((preState == State.CONNECTED) && (curState == State.CONNECTED)) {
                continue;
             } else {
                mReason += " Transition state from " + preState.toString() + " to " +
                        curState.toString() + " is not valid.";