diff --git a/src/com/android/settings/connecteddevice/audiosharing/AudioSharingJoinHandlerActivity.java b/src/com/android/settings/connecteddevice/audiosharing/AudioSharingJoinHandlerActivity.java index 82c099d6cdc..908d8126547 100644 --- a/src/com/android/settings/connecteddevice/audiosharing/AudioSharingJoinHandlerActivity.java +++ b/src/com/android/settings/connecteddevice/audiosharing/AudioSharingJoinHandlerActivity.java @@ -16,7 +16,9 @@ package com.android.settings.connecteddevice.audiosharing; +import android.content.Intent; import android.os.Bundle; +import android.util.Log; import com.android.settings.SettingsActivity; import com.android.settingslib.bluetooth.BluetoothUtils; @@ -34,6 +36,23 @@ public class AudioSharingJoinHandlerActivity extends SettingsActivity { } } + @Override + protected void onNewIntent(Intent intent) { + super.onNewIntent(intent); + if (!Flags.promoteAudioSharingForSecondAutoConnectedLeaDevice() + || !BluetoothUtils.isAudioSharingUIAvailable(this)) { + finish(); + } + if (intent != null) { + Log.d(TAG, "onNewIntent = " + intent); + getSupportFragmentManager().getFragments().stream().filter( + frag -> frag instanceof AudioSharingJoinHandlerDashboardFragment) + .findFirst().ifPresent( + frag -> ((AudioSharingJoinHandlerDashboardFragment) frag) + .handleDeviceConnectedFromIntent(intent)); + } + } + @Override protected boolean isToolbarEnabled() { return false; diff --git a/src/com/android/settings/connecteddevice/audiosharing/AudioSharingJoinHandlerDashboardFragment.java b/src/com/android/settings/connecteddevice/audiosharing/AudioSharingJoinHandlerDashboardFragment.java index ff7dab6205f..3cb634998b8 100644 --- a/src/com/android/settings/connecteddevice/audiosharing/AudioSharingJoinHandlerDashboardFragment.java +++ b/src/com/android/settings/connecteddevice/audiosharing/AudioSharingJoinHandlerDashboardFragment.java @@ -17,11 +17,16 @@ package com.android.settings.connecteddevice.audiosharing; import android.content.Context; +import android.content.Intent; +import android.util.Log; +import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import androidx.annotation.VisibleForTesting; import com.android.settings.R; import com.android.settings.dashboard.DashboardFragment; +import com.android.settingslib.utils.ThreadUtils; public class AudioSharingJoinHandlerDashboardFragment extends DashboardFragment { private static final String TAG = "AudioSharingJoinHandlerFrag"; @@ -49,7 +54,26 @@ public class AudioSharingJoinHandlerDashboardFragment extends DashboardFragment super.onAttach(context); mController = use(AudioSharingJoinHandlerController.class); if (mController != null) { + Log.d(TAG, "onAttach, init controller"); mController.init(this); } } + + /** Handle just connected device via intent. */ + public void handleDeviceConnectedFromIntent(@NonNull Intent intent) { + var unused = + ThreadUtils.postOnBackgroundThread( + () -> { + if (mController != null) { + Log.d(TAG, "handleDeviceConnectedFromIntent"); + mController.handleDeviceConnectedFromIntent(intent); + } + }); + } + + /** Test only: set mock controllers for the {@link AudioSharingJoinHandlerDashboardFragment} */ + @VisibleForTesting + void setController(AudioSharingJoinHandlerController controller) { + mController = controller; + } } diff --git a/tests/robotests/src/com/android/settings/connecteddevice/audiosharing/AudioSharingJoinHandlerActivityTest.java b/tests/robotests/src/com/android/settings/connecteddevice/audiosharing/AudioSharingJoinHandlerActivityTest.java index db43e460bb1..f34cf94fe54 100644 --- a/tests/robotests/src/com/android/settings/connecteddevice/audiosharing/AudioSharingJoinHandlerActivityTest.java +++ b/tests/robotests/src/com/android/settings/connecteddevice/audiosharing/AudioSharingJoinHandlerActivityTest.java @@ -18,20 +18,27 @@ package com.android.settings.connecteddevice.audiosharing; import static com.google.common.truth.Truth.assertThat; +import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothStatusCodes; +import android.content.Intent; import android.os.Bundle; import android.platform.test.annotations.DisableFlags; import android.platform.test.annotations.EnableFlags; import android.platform.test.flag.junit.SetFlagsRule; +import androidx.fragment.app.FragmentManager; + import com.android.settings.testutils.shadow.ShadowBluetoothAdapter; import com.android.settingslib.flags.Flags; +import com.google.common.collect.ImmutableList; + import org.junit.Before; import org.junit.Rule; import org.junit.Test; @@ -66,9 +73,9 @@ public class AudioSharingJoinHandlerActivityTest { } @Test - @DisableFlags(Flags.FLAG_PROMOTE_AUDIO_SHARING_FOR_SECOND_AUTO_CONNECTED_LEA_DEVICE) + @DisableFlags({Flags.FLAG_ENABLE_LE_AUDIO_SHARING, + Flags.FLAG_PROMOTE_AUDIO_SHARING_FOR_SECOND_AUTO_CONNECTED_LEA_DEVICE}) public void onCreate_flagOff_finish() { - mSetFlagsRule.disableFlags(Flags.FLAG_ENABLE_LE_AUDIO_SHARING); mActivity.onCreate(new Bundle()); verify(mActivity).finish(); } @@ -91,4 +98,26 @@ public class AudioSharingJoinHandlerActivityTest { public void isValidFragment_returnsFalse() { assertThat(mActivity.isValidFragment("")).isFalse(); } + + @Test + @DisableFlags({Flags.FLAG_ENABLE_LE_AUDIO_SHARING, + Flags.FLAG_PROMOTE_AUDIO_SHARING_FOR_SECOND_AUTO_CONNECTED_LEA_DEVICE}) + public void onNewIntent_flagOff_finish() { + Intent intent = new Intent(); + mActivity.onNewIntent(intent); + } + + @Test + @EnableFlags({Flags.FLAG_ENABLE_LE_AUDIO_SHARING, + Flags.FLAG_PROMOTE_AUDIO_SHARING_FOR_SECOND_AUTO_CONNECTED_LEA_DEVICE}) + public void onNewIntent_flagOn_handleDeviceConnectedFromIntent() { + FragmentManager fragmentManager = mock(FragmentManager.class); + AudioSharingJoinHandlerDashboardFragment fragment = mock( + AudioSharingJoinHandlerDashboardFragment.class); + when(mActivity.getSupportFragmentManager()).thenReturn(fragmentManager); + when(fragmentManager.getFragments()).thenReturn(ImmutableList.of(fragment)); + Intent intent = new Intent(); + mActivity.onNewIntent(intent); + verify(fragment).handleDeviceConnectedFromIntent(intent); + } } diff --git a/tests/robotests/src/com/android/settings/connecteddevice/audiosharing/AudioSharingJoinHandlerDashboardFragmentTest.java b/tests/robotests/src/com/android/settings/connecteddevice/audiosharing/AudioSharingJoinHandlerDashboardFragmentTest.java index 3fd27b10b11..3d0ee5bdaa8 100644 --- a/tests/robotests/src/com/android/settings/connecteddevice/audiosharing/AudioSharingJoinHandlerDashboardFragmentTest.java +++ b/tests/robotests/src/com/android/settings/connecteddevice/audiosharing/AudioSharingJoinHandlerDashboardFragmentTest.java @@ -18,15 +18,26 @@ package com.android.settings.connecteddevice.audiosharing; import static com.google.common.truth.Truth.assertThat; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; + +import android.content.Intent; + import com.android.settings.R; import org.junit.Before; +import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; +import org.mockito.junit.MockitoJUnit; +import org.mockito.junit.MockitoRule; import org.robolectric.RobolectricTestRunner; @RunWith(RobolectricTestRunner.class) public class AudioSharingJoinHandlerDashboardFragmentTest { + @Rule + public final MockitoRule mocks = MockitoJUnit.rule(); + private AudioSharingJoinHandlerDashboardFragment mFragment; @Before @@ -49,4 +60,14 @@ public class AudioSharingJoinHandlerDashboardFragmentTest { public void getMetricsCategory_returnsCorrectCategory() { assertThat(mFragment.getMetricsCategory()).isEqualTo(0); } + + @Test + public void handleDeviceConnectedFromIntent() { + AudioSharingJoinHandlerController controller = mock( + AudioSharingJoinHandlerController.class); + mFragment.setController(controller); + Intent intent = new Intent(); + mFragment.handleDeviceConnectedFromIntent(intent); + verify(controller).handleDeviceConnectedFromIntent(intent); + } }