Loading src/java/com/android/internal/telephony/d2d/Communicator.java +19 −1 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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 */); } /** Loading Loading @@ -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", Loading @@ -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); Loading @@ -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: Loading tests/telephonytests/src/com/android/internal/telephony/d2d/CommunicatorTest.java +33 −0 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading Loading @@ -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)); } /** Loading Loading
src/java/com/android/internal/telephony/d2d/Communicator.java +19 −1 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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 */); } /** Loading Loading @@ -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", Loading @@ -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); Loading @@ -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: Loading
tests/telephonytests/src/com/android/internal/telephony/d2d/CommunicatorTest.java +33 −0 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading Loading @@ -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)); } /** Loading