mirror of
https://github.com/samsonjs/media.git
synced 2026-03-25 09:25:53 +00:00
Implement equals/hashCode for CommandButton
#minor-release PiperOrigin-RevId: 540274932
This commit is contained in:
parent
d0eda433ea
commit
3d674fa2f3
3 changed files with 227 additions and 2 deletions
|
|
@ -19,12 +19,14 @@ import static androidx.media3.common.util.Assertions.checkArgument;
|
|||
import static androidx.media3.common.util.Assertions.checkNotNull;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.text.TextUtils;
|
||||
import androidx.annotation.DrawableRes;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.media3.common.Bundleable;
|
||||
import androidx.media3.common.Player;
|
||||
import androidx.media3.common.util.UnstableApi;
|
||||
import androidx.media3.common.util.Util;
|
||||
import com.google.common.base.Objects;
|
||||
import com.google.errorprone.annotations.CanIgnoreReturnValue;
|
||||
import java.util.List;
|
||||
|
||||
|
|
@ -194,6 +196,27 @@ public final class CommandButton implements Bundleable {
|
|||
this.isEnabled = enabled;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(@Nullable Object obj) {
|
||||
if (this == obj) {
|
||||
return true;
|
||||
}
|
||||
if (!(obj instanceof CommandButton)) {
|
||||
return false;
|
||||
}
|
||||
CommandButton button = (CommandButton) obj;
|
||||
return Objects.equal(sessionCommand, button.sessionCommand)
|
||||
&& playerCommand == button.playerCommand
|
||||
&& iconResId == button.iconResId
|
||||
&& TextUtils.equals(displayName, button.displayName)
|
||||
&& isEnabled == button.isEnabled;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return Objects.hashCode(sessionCommand, playerCommand, iconResId, displayName, isEnabled);
|
||||
}
|
||||
|
||||
// Bundleable implementation.
|
||||
|
||||
private static final String FIELD_SESSION_COMMAND = Util.intToStringMaxRadix(0);
|
||||
|
|
|
|||
|
|
@ -0,0 +1,202 @@
|
|||
/*
|
||||
* Copyright 2023 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package androidx.media3.session;
|
||||
|
||||
import static androidx.media3.session.CommandButton.CREATOR;
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
|
||||
import android.os.Bundle;
|
||||
import androidx.media3.common.Player;
|
||||
import androidx.test.ext.junit.runners.AndroidJUnit4;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
|
||||
/** Tests for {@link CommandButton}. */
|
||||
@RunWith(AndroidJUnit4.class)
|
||||
public class CommandButtonTest {
|
||||
|
||||
@Test
|
||||
public void equals() {
|
||||
assertThat(
|
||||
new CommandButton.Builder()
|
||||
.setDisplayName("button")
|
||||
.setIconResId(R.drawable.media3_notification_small_icon)
|
||||
.setPlayerCommand(Player.COMMAND_SEEK_TO_NEXT)
|
||||
.build())
|
||||
.isEqualTo(
|
||||
new CommandButton.Builder()
|
||||
.setDisplayName("button")
|
||||
.setIconResId(R.drawable.media3_notification_small_icon)
|
||||
.setPlayerCommand(Player.COMMAND_SEEK_TO_NEXT)
|
||||
.build());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void equals_minimalDifference_notEqual() {
|
||||
CommandButton button =
|
||||
new CommandButton.Builder()
|
||||
.setDisplayName("button")
|
||||
.setIconResId(R.drawable.media3_notification_small_icon)
|
||||
.setPlayerCommand(Player.COMMAND_SEEK_TO_NEXT)
|
||||
.build();
|
||||
|
||||
assertThat(button).isEqualTo(CREATOR.fromBundle(button.toBundle()));
|
||||
assertThat(button)
|
||||
.isNotEqualTo(
|
||||
new CommandButton.Builder()
|
||||
.setDisplayName("button2")
|
||||
.setIconResId(R.drawable.media3_notification_small_icon)
|
||||
.setPlayerCommand(Player.COMMAND_SEEK_TO_NEXT)
|
||||
.build());
|
||||
assertThat(button)
|
||||
.isNotEqualTo(
|
||||
new CommandButton.Builder()
|
||||
.setPlayerCommand(Player.COMMAND_SEEK_TO_PREVIOUS)
|
||||
.setDisplayName("button")
|
||||
.setIconResId(R.drawable.media3_notification_small_icon)
|
||||
.build());
|
||||
assertThat(button)
|
||||
.isNotEqualTo(
|
||||
new CommandButton.Builder()
|
||||
.setIconResId(R.drawable.media3_notification_play)
|
||||
.setDisplayName("button")
|
||||
.setPlayerCommand(Player.COMMAND_SEEK_TO_NEXT)
|
||||
.build());
|
||||
assertThat(button)
|
||||
.isNotEqualTo(
|
||||
new CommandButton.Builder()
|
||||
.setEnabled(true)
|
||||
.setDisplayName("button")
|
||||
.setIconResId(R.drawable.media3_notification_small_icon)
|
||||
.setPlayerCommand(Player.COMMAND_SEEK_TO_NEXT)
|
||||
.build());
|
||||
assertThat(button)
|
||||
.isNotEqualTo(
|
||||
new CommandButton.Builder()
|
||||
.setSessionCommand(new SessionCommand(Player.COMMAND_PLAY_PAUSE))
|
||||
.setDisplayName("button")
|
||||
.setIconResId(R.drawable.media3_notification_small_icon)
|
||||
.build());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void equals_differenceInExtras_ignored() {
|
||||
CommandButton.Builder builder =
|
||||
new CommandButton.Builder()
|
||||
.setDisplayName("button")
|
||||
.setPlayerCommand(Player.COMMAND_SEEK_TO_NEXT)
|
||||
.setIconResId(R.drawable.media3_notification_small_icon);
|
||||
CommandButton button1 = builder.build();
|
||||
Bundle extras2 = new Bundle();
|
||||
extras2.putInt("something", 0);
|
||||
Bundle extras3 = new Bundle();
|
||||
extras3.putInt("something", 1);
|
||||
extras3.putInt("something2", 2);
|
||||
|
||||
assertThat(button1).isEqualTo(builder.setExtras(extras2).build());
|
||||
assertThat(builder.setExtras(extras2).build()).isEqualTo(builder.setExtras(extras3).build());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void equals_differencesInSessionCommand_notEqual() {
|
||||
assertThat(
|
||||
new CommandButton.Builder()
|
||||
.setSessionCommand(new SessionCommand(Player.COMMAND_PLAY_PAUSE))
|
||||
.setDisplayName("button")
|
||||
.setIconResId(R.drawable.media3_notification_play)
|
||||
.build())
|
||||
.isNotEqualTo(
|
||||
new CommandButton.Builder()
|
||||
.setSessionCommand(new SessionCommand(Player.COMMAND_SEEK_BACK))
|
||||
.setDisplayName("button")
|
||||
.setIconResId(R.drawable.media3_notification_play)
|
||||
.build());
|
||||
assertThat(
|
||||
new CommandButton.Builder()
|
||||
.setSessionCommand(new SessionCommand(Player.COMMAND_PLAY_PAUSE))
|
||||
.setDisplayName("button")
|
||||
.setIconResId(R.drawable.media3_notification_play)
|
||||
.build())
|
||||
.isNotEqualTo(
|
||||
new CommandButton.Builder()
|
||||
.setSessionCommand(new SessionCommand("customAction", Bundle.EMPTY))
|
||||
.setDisplayName("button")
|
||||
.setIconResId(R.drawable.media3_notification_play)
|
||||
.build());
|
||||
assertThat(
|
||||
new CommandButton.Builder()
|
||||
.setSessionCommand(new SessionCommand("customAction", Bundle.EMPTY))
|
||||
.setDisplayName("button")
|
||||
.setIconResId(R.drawable.media3_notification_play)
|
||||
.build())
|
||||
.isNotEqualTo(
|
||||
new CommandButton.Builder()
|
||||
.setSessionCommand(new SessionCommand("customAction2", Bundle.EMPTY))
|
||||
.setDisplayName("button")
|
||||
.setIconResId(R.drawable.media3_notification_play)
|
||||
.build());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void equals_differenceInSessionCommandExtras_ignored() {
|
||||
Bundle extras = new Bundle();
|
||||
extras.putString("key", "value");
|
||||
assertThat(
|
||||
new CommandButton.Builder()
|
||||
.setSessionCommand(new SessionCommand("customAction", Bundle.EMPTY))
|
||||
.setDisplayName("button")
|
||||
.setIconResId(R.drawable.media3_notification_play)
|
||||
.build())
|
||||
.isEqualTo(
|
||||
new CommandButton.Builder()
|
||||
.setExtras(extras)
|
||||
.setSessionCommand(new SessionCommand("customAction", extras))
|
||||
.setDisplayName("button")
|
||||
.setIconResId(R.drawable.media3_notification_play)
|
||||
.build());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void hashCode_equalButtons_sameHashcode() {
|
||||
assertThat(
|
||||
new CommandButton.Builder()
|
||||
.setDisplayName("button")
|
||||
.setIconResId(R.drawable.media3_notification_small_icon)
|
||||
.setPlayerCommand(Player.COMMAND_SEEK_TO_NEXT)
|
||||
.build()
|
||||
.hashCode())
|
||||
.isEqualTo(
|
||||
new CommandButton.Builder()
|
||||
.setDisplayName("button")
|
||||
.setIconResId(R.drawable.media3_notification_small_icon)
|
||||
.setPlayerCommand(Player.COMMAND_SEEK_TO_NEXT)
|
||||
.build()
|
||||
.hashCode());
|
||||
assertThat(
|
||||
new CommandButton.Builder()
|
||||
.setIconResId(R.drawable.media3_notification_small_icon)
|
||||
.setPlayerCommand(Player.COMMAND_SEEK_TO_NEXT)
|
||||
.build()
|
||||
.hashCode())
|
||||
.isNotEqualTo(
|
||||
new CommandButton.Builder()
|
||||
.setDisplayName("button")
|
||||
.setIconResId(R.drawable.media3_notification_small_icon)
|
||||
.setPlayerCommand(Player.COMMAND_SEEK_TO_NEXT)
|
||||
.build()
|
||||
.hashCode());
|
||||
}
|
||||
}
|
||||
|
|
@ -445,7 +445,7 @@ public class DefaultMediaNotificationProviderTest {
|
|||
DefaultMediaNotificationProvider.COMMAND_KEY_COMPACT_VIEW_INDEX, -1);
|
||||
CommandButton commandButton2 =
|
||||
new CommandButton.Builder()
|
||||
.setDisplayName("displayName")
|
||||
.setDisplayName("displayName2")
|
||||
.setIconResId(R.drawable.media3_icon_circular_play)
|
||||
.setSessionCommand(new SessionCommand("action1", Bundle.EMPTY))
|
||||
.setExtras(commandButtonBundle2)
|
||||
|
|
@ -456,7 +456,7 @@ public class DefaultMediaNotificationProviderTest {
|
|||
int[] compactViewIndices =
|
||||
defaultMediaNotificationProvider.addNotificationActions(
|
||||
mediaSession,
|
||||
ImmutableList.of(commandButton1, commandButton2),
|
||||
/* mediaButtons= */ ImmutableList.of(commandButton1, commandButton2),
|
||||
notificationBuilder,
|
||||
mockActionFactory);
|
||||
mediaSession.release();
|
||||
|
|
|
|||
Loading…
Reference in a new issue