Merge "Close panel when media stop" into rvc-dev

This commit is contained in:
tim peng
2020-03-19 06:08:05 +00:00
committed by Android (Google) Code Review
5 changed files with 59 additions and 3 deletions

View File

@@ -33,6 +33,7 @@ import android.graphics.drawable.Drawable;
import android.media.MediaMetadata;
import android.media.session.MediaController;
import android.media.session.MediaSessionManager;
import android.media.session.PlaybackState;
import android.net.Uri;
import android.text.TextUtils;
import android.util.Log;
@@ -66,12 +67,11 @@ public class MediaOutputPanel implements PanelContent, LocalMediaManager.DeviceC
private final Context mContext;
private final String mPackageName;
private PanelContentCallback mCallback;
private boolean mIsCustomizedButtonUsed = true;
@VisibleForTesting
LocalMediaManager mLocalMediaManager;
private PanelContentCallback mCallback;
private boolean mIsCustomizedButtonUsed = true;
private MediaSessionManager mMediaSessionManager;
private MediaController mMediaController;
@@ -255,5 +255,12 @@ public class MediaOutputPanel implements PanelContent, LocalMediaManager.DeviceC
mCallback.onHeaderChanged();
}
}
@Override
public void onPlaybackStateChanged(PlaybackState state) {
if (mCallback != null && state.getState() != PlaybackState.STATE_PLAYING) {
mCallback.forceClose();
}
}
};
}

View File

@@ -32,4 +32,9 @@ public interface PanelContentCallback {
* a group
*/
void onHeaderChanged();
/**
* It will be called when panel requests to close itself.
*/
void forceClose();
}

View File

@@ -433,5 +433,16 @@ public class PanelFragment extends Fragment {
mHeaderSubtitle.setText(mPanel.getSubTitle());
});
}
@Override
public void forceClose() {
mPanelClosedKey = PanelClosedKeys.KEY_OTHERS;
getFragmentActivity().finish();
}
@VisibleForTesting
FragmentActivity getFragmentActivity() {
return getActivity();
}
}
}

View File

@@ -22,6 +22,7 @@ import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.any;
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;
@@ -30,6 +31,7 @@ import android.content.Context;
import android.media.MediaMetadata;
import android.media.session.MediaController;
import android.media.session.MediaSessionManager;
import android.media.session.PlaybackState;
import android.net.Uri;
import com.android.settings.R;
@@ -67,6 +69,8 @@ public class MediaOutputPanelTest {
private LocalMediaManager mLocalMediaManager;
@Mock
private PanelContentCallback mCallback;
@Mock
private PlaybackState mPlaybackState;
private MediaOutputPanel mPanel;
private Context mContext;
@@ -259,4 +263,19 @@ public class MediaOutputPanelTest {
verify(mCallback).onHeaderChanged();
}
@Test
public void onPlaybackStateChanged_stateFromPlayingToStopped_verifyCallForceClose() {
mPanel.onStart();
verify(mMediaController).registerCallback(mControllerCbs.capture());
final MediaController.Callback controllerCallbacks = mControllerCbs.getValue();
when(mPlaybackState.getState()).thenReturn(PlaybackState.STATE_PLAYING);
controllerCallbacks.onPlaybackStateChanged(mPlaybackState);
verify(mCallback, never()).forceClose();
when(mPlaybackState.getState()).thenReturn(PlaybackState.STATE_STOPPED);
controllerCallbacks.onPlaybackStateChanged(mPlaybackState);
verify(mCallback).forceClose();
}
}

View File

@@ -23,6 +23,7 @@ import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import android.app.settings.SettingsEnums;
import android.content.Context;
@@ -236,4 +237,17 @@ public class PanelFragmentTest {
assertThat(headerTitle.getText()).isEqualTo(TITLE2);
assertThat(headerSubtitle.getText()).isEqualTo(SUBTITLE2);
}
@Test
public void forceClose_verifyFinish() {
initFakeActivity();
verify(mFakePanelContent).registerCallback(mPanelContentCbs.capture());
final PanelContentCallback panelContentCallbacks = spy(mPanelContentCbs.getValue());
when(((PanelFragment.LocalPanelCallback) panelContentCallbacks).getFragmentActivity())
.thenReturn(mActivity);
panelContentCallbacks.forceClose();
verify(mActivity).finish();
}
}