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

Commit 85af1353 authored by Tyler Gunn's avatar Tyler Gunn Committed by Android (Google) Code Review
Browse files

Merge "Notify interested parties of D2D availability." into sc-dev

parents e7a94085 638973ef
Loading
Loading
Loading
Loading
+19 −1
Original line number Diff line number Diff line
@@ -38,6 +38,7 @@ public class Communicator implements TransportProtocol.Callback {
     */
    public interface Callback {
        void onMessagesReceived(@NonNull Set<Message> messages);
        void onD2DAvailabilitychanged(boolean isAvailable);
    }

    public static final int MESSAGE_CALL_RADIO_ACCESS_TYPE = 1;
@@ -158,6 +159,7 @@ public class Communicator implements TransportProtocol.Callback {
        Log.i(this, "onNegotiationSuccess: %s negotiated; setting active.",
                protocol.getClass().getSimpleName());
        mIsNegotiated = true;
        notifyD2DStatus(true /* isAvailable */);
    }

    /**
@@ -210,6 +212,7 @@ public class Communicator implements TransportProtocol.Callback {
        if (mActiveTransport == null) {
            // No more protocols, exit.
            Log.i(this, "negotiateNextProtocol: no remaining transports.");
            notifyD2DStatus(false /* isAvailable */);
            return;
        }
        Log.i(this, "negotiateNextProtocol: trying %s",
@@ -224,7 +227,11 @@ public class Communicator implements TransportProtocol.Callback {
    private TransportProtocol getNextCandidateProtocol() {
        TransportProtocol candidateProtocol = null;
        if (mActiveTransport == null) {
            if (mTransportProtocols.size() > 0) {
                candidateProtocol = mTransportProtocols.get(0);
            } else {
                mIsNegotiated = false;
            }
        } else {
            for (int ix = 0; ix < mTransportProtocols.size(); ix++) {
                TransportProtocol protocol = mTransportProtocols.get(ix);
@@ -240,6 +247,17 @@ public class Communicator implements TransportProtocol.Callback {
        return candidateProtocol;
    }

    /**
     * Notifies listeners (okay, {@link com.android.services.telephony.TelephonyConnection} when
     * the availability of D2D communication changes.
     * @param isAvailable {@code true} if D2D is available, {@code false} otherwise.
     */
    private void notifyD2DStatus(boolean isAvailable) {
        if (mCallback != null) {
            mCallback.onD2DAvailabilitychanged(isAvailable);
        }
    }

    public static String messageToString(int messageType) {
        switch (messageType) {
            case MESSAGE_CALL_RADIO_ACCESS_TYPE:
+33 −0
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ package com.android.internal.telephony.d2d;
import static junit.framework.Assert.assertEquals;

import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.verify;
@@ -39,6 +40,7 @@ import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Set;

@@ -76,6 +78,37 @@ public class CommunicatorTest {
        verify(mTransportProtocols.get(1)).startNegotiation();
        assertEquals(mTransportProtocols.get(1), mCommunicator.getActiveTransport());
        mCallback.onNegotiationSuccess(mTransportProtocols.get(1));
        verify(mCommunicatorCallback).onD2DAvailabilitychanged(eq(true));
    }

    /**
     * Verifies that D2D negotiation failed callback is invoked when D2D could not be negotiated.
     */
    @SmallTest
    @Test
    public void testNegotiationFailed() {
        mCommunicator = new Communicator(mTransportProtocols, mCommunicatorCallback);
        mCommunicator.onStateChanged(null, Connection.STATE_ACTIVE);
        verify(mTransportProtocols.get(0)).startNegotiation();
        assertEquals(mTransportProtocols.get(0), mCommunicator.getActiveTransport());
        // Assume negotiation on the first one failed.
        mCallback.onNegotiationFailed(mTransportProtocols.get(0));
        verify(mTransportProtocols.get(1)).startNegotiation();
        assertEquals(mTransportProtocols.get(1), mCommunicator.getActiveTransport());
        // Oops, the second one failed too; not negotiated!
        mCallback.onNegotiationFailed(mTransportProtocols.get(1));
        verify(mCommunicatorCallback).onD2DAvailabilitychanged(eq(false));
    }

    /**
     * Verifies that D2D negotiation failed callback is invoked when no transports are available.
     */
    @SmallTest
    @Test
    public void testNegotiationFailedNoProtocols() {
        mCommunicator = new Communicator(Collections.EMPTY_LIST, mCommunicatorCallback);
        mCommunicator.onStateChanged(null, Connection.STATE_ACTIVE);
        verify(mCommunicatorCallback).onD2DAvailabilitychanged(eq(false));
    }

    /**