From 8768144c9107945cfaf56ed4db771c3def8d00de Mon Sep 17 00:00:00 2001 From: ByteHamster Date: Tue, 13 Apr 2021 22:48:01 +0200 Subject: Don't handle play image resource in PlaybackController --- .../antennapod/activity/MediaplayerActivity.java | 8 +++-- .../antennapod/fragment/AudioPlayerFragment.java | 7 ++-- .../fragment/ExternalPlayerFragment.java | 7 ++-- .../java/de/danoeh/antennapod/view/PlayButton.java | 38 ++++++++++++++++++++++ app/src/main/res/layout/audioplayer_fragment.xml | 2 +- .../main/res/layout/external_player_fragment.xml | 2 +- app/src/main/res/layout/videoplayer_activity.xml | 2 +- 7 files changed, 54 insertions(+), 12 deletions(-) create mode 100644 app/src/main/java/de/danoeh/antennapod/view/PlayButton.java (limited to 'app') diff --git a/app/src/main/java/de/danoeh/antennapod/activity/MediaplayerActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/MediaplayerActivity.java index 1fcc3512d..1eec762e9 100644 --- a/app/src/main/java/de/danoeh/antennapod/activity/MediaplayerActivity.java +++ b/app/src/main/java/de/danoeh/antennapod/activity/MediaplayerActivity.java @@ -17,6 +17,7 @@ import android.widget.TextView; import com.bumptech.glide.Glide; +import de.danoeh.antennapod.view.PlayButton; import org.apache.commons.lang3.StringUtils; import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; @@ -72,7 +73,7 @@ public abstract class MediaplayerActivity extends CastEnabledActivity implements SeekBar sbPosition; private ImageButton butRev; private TextView txtvRev; - private ImageButton butPlay; + private PlayButton butPlay; private ImageButton butFF; private TextView txtvFF; private ImageButton butSkip; @@ -123,8 +124,8 @@ public abstract class MediaplayerActivity extends CastEnabledActivity implements } @Override - public ImageButton getPlayButton() { - return butPlay; + protected void updatePlayButtonShowsPlay(boolean showPlay) { + butPlay.setIsShowPlay(showPlay); } @Override @@ -513,6 +514,7 @@ public abstract class MediaplayerActivity extends CastEnabledActivity implements txtvRev.setText(NumberFormat.getInstance().format(UserPreferences.getRewindSecs())); } butPlay = findViewById(R.id.butPlay); + butPlay.setIsVideoScreen(true); butFF = findViewById(R.id.butFF); txtvFF = findViewById(R.id.txtvFF); if (txtvFF != null) { diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/AudioPlayerFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/AudioPlayerFragment.java index e0ce2880c..392ef4d07 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/AudioPlayerFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/AudioPlayerFragment.java @@ -50,6 +50,7 @@ import de.danoeh.antennapod.dialog.VariableSpeedDialog; import de.danoeh.antennapod.menuhandler.FeedItemMenuHandler; import de.danoeh.antennapod.view.ChapterSeekBar; import de.danoeh.antennapod.ui.common.PlaybackSpeedIndicatorView; +import de.danoeh.antennapod.view.PlayButton; import io.reactivex.Maybe; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.disposables.Disposable; @@ -82,7 +83,7 @@ public class AudioPlayerFragment extends Fragment implements private ChapterSeekBar sbPosition; private ImageButton butRev; private TextView txtvRev; - private ImageButton butPlay; + private PlayButton butPlay; private ImageButton butFF; private TextView txtvFF; private ImageButton butSkip; @@ -379,8 +380,8 @@ public class AudioPlayerFragment extends Fragment implements } @Override - public ImageButton getPlayButton() { - return butPlay; + protected void updatePlayButtonShowsPlay(boolean showPlay) { + butPlay.setIsShowPlay(showPlay); } @Override diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/ExternalPlayerFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/ExternalPlayerFragment.java index d77935910..d1c34a434 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/ExternalPlayerFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/ExternalPlayerFragment.java @@ -24,6 +24,7 @@ import de.danoeh.antennapod.core.service.playback.PlaybackService; import de.danoeh.antennapod.core.service.playback.PlayerStatus; import de.danoeh.antennapod.core.util.playback.Playable; import de.danoeh.antennapod.core.util.playback.PlaybackController; +import de.danoeh.antennapod.view.PlayButton; import io.reactivex.Maybe; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.disposables.Disposable; @@ -40,7 +41,7 @@ public class ExternalPlayerFragment extends Fragment { private ImageView imgvCover; private TextView txtvTitle; - private ImageButton butPlay; + private PlayButton butPlay; private TextView feedName; private ProgressBar progressBar; private PlaybackController controller; @@ -103,8 +104,8 @@ public class ExternalPlayerFragment extends Fragment { } @Override - public ImageButton getPlayButton() { - return butPlay; + protected void updatePlayButtonShowsPlay(boolean showPlay) { + butPlay.setIsShowPlay(showPlay); } @Override diff --git a/app/src/main/java/de/danoeh/antennapod/view/PlayButton.java b/app/src/main/java/de/danoeh/antennapod/view/PlayButton.java new file mode 100644 index 000000000..b8ee667f7 --- /dev/null +++ b/app/src/main/java/de/danoeh/antennapod/view/PlayButton.java @@ -0,0 +1,38 @@ +package de.danoeh.antennapod.view; + +import android.content.Context; +import android.util.AttributeSet; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.appcompat.widget.AppCompatImageButton; +import de.danoeh.antennapod.R; +import de.danoeh.antennapod.ui.common.ThemeUtils; + +public class PlayButton extends AppCompatImageButton { + private boolean isVideoScreen; + + public PlayButton(@NonNull Context context) { + super(context); + } + + public PlayButton(@NonNull Context context, @Nullable AttributeSet attrs) { + super(context, attrs); + } + + public PlayButton(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + } + + public void setIsVideoScreen(boolean isVideoScreen) { + this.isVideoScreen = isVideoScreen; + } + + public void setIsShowPlay(boolean showPlay) { + setContentDescription(getContext().getString(showPlay ? R.string.play_label : R.string.pause_label)); + if (isVideoScreen) { + setImageResource(showPlay ? R.drawable.ic_av_play_white_80dp : R.drawable.ic_av_pause_white_80dp); + } else { + setImageResource(ThemeUtils.getDrawableFromAttr(getContext(), showPlay ? R.attr.av_play : R.attr.av_pause)); + } + } +} diff --git a/app/src/main/res/layout/audioplayer_fragment.xml b/app/src/main/res/layout/audioplayer_fragment.xml index 743a15c85..73e8ec5e3 100644 --- a/app/src/main/res/layout/audioplayer_fragment.xml +++ b/app/src/main/res/layout/audioplayer_fragment.xml @@ -138,7 +138,7 @@ android:layout_height="wrap_content" android:layout_marginBottom="24dp"> - - - Date: Wed, 14 Apr 2021 22:22:58 +0200 Subject: Added animated play button Drawables need to be defined in the app module, which has the vector compat library enabled. When enabling the library for the core module, the app breaks on API 19. --- .../fragment/ExternalPlayerFragment.java | 1 - .../java/de/danoeh/antennapod/view/PlayButton.java | 28 +++++++++++++++++----- .../main/res/drawable/ic_animate_pause_play.xml | 27 +++++++++++++++++++++ app/src/main/res/drawable/ic_animate_play.xml | 14 +++++++++++ .../main/res/drawable/ic_animate_play_pause.xml | 27 +++++++++++++++++++++ app/src/main/res/values/svg.xml | 5 ++++ 6 files changed, 95 insertions(+), 7 deletions(-) create mode 100644 app/src/main/res/drawable/ic_animate_pause_play.xml create mode 100644 app/src/main/res/drawable/ic_animate_play.xml create mode 100644 app/src/main/res/drawable/ic_animate_play_pause.xml create mode 100644 app/src/main/res/values/svg.xml (limited to 'app') diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/ExternalPlayerFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/ExternalPlayerFragment.java index d1c34a434..37f372383 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/ExternalPlayerFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/ExternalPlayerFragment.java @@ -6,7 +6,6 @@ import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import android.widget.ImageButton; import android.widget.ImageView; import android.widget.ProgressBar; import android.widget.TextView; diff --git a/app/src/main/java/de/danoeh/antennapod/view/PlayButton.java b/app/src/main/java/de/danoeh/antennapod/view/PlayButton.java index b8ee667f7..691a15ca2 100644 --- a/app/src/main/java/de/danoeh/antennapod/view/PlayButton.java +++ b/app/src/main/java/de/danoeh/antennapod/view/PlayButton.java @@ -5,11 +5,13 @@ import android.util.AttributeSet; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.widget.AppCompatImageButton; +import androidx.vectordrawable.graphics.drawable.AnimatedVectorDrawableCompat; import de.danoeh.antennapod.R; import de.danoeh.antennapod.ui.common.ThemeUtils; public class PlayButton extends AppCompatImageButton { - private boolean isVideoScreen; + private boolean isShowPlay = true; + private boolean isVideoScreen = false; public PlayButton(@NonNull Context context) { super(context); @@ -28,11 +30,25 @@ public class PlayButton extends AppCompatImageButton { } public void setIsShowPlay(boolean showPlay) { - setContentDescription(getContext().getString(showPlay ? R.string.play_label : R.string.pause_label)); - if (isVideoScreen) { - setImageResource(showPlay ? R.drawable.ic_av_play_white_80dp : R.drawable.ic_av_pause_white_80dp); - } else { - setImageResource(ThemeUtils.getDrawableFromAttr(getContext(), showPlay ? R.attr.av_play : R.attr.av_pause)); + if (this.isShowPlay != showPlay) { + this.isShowPlay = showPlay; + setContentDescription(getContext().getString(showPlay ? R.string.play_label : R.string.pause_label)); + if (isVideoScreen) { + setImageResource(showPlay ? R.drawable.ic_av_play_white_80dp : R.drawable.ic_av_pause_white_80dp); + } else if (!isShown()) { + setImageResource(ThemeUtils.getDrawableFromAttr(getContext(), + showPlay ? R.attr.av_play : R.attr.av_pause)); + } else if (showPlay) { + AnimatedVectorDrawableCompat drawable = AnimatedVectorDrawableCompat.create( + getContext(), R.drawable.ic_animate_pause_play); + setImageDrawable(drawable); + drawable.start(); + } else { + AnimatedVectorDrawableCompat drawable = AnimatedVectorDrawableCompat.create( + getContext(), R.drawable.ic_animate_play_pause); + setImageDrawable(drawable); + drawable.start(); + } } } } diff --git a/app/src/main/res/drawable/ic_animate_pause_play.xml b/app/src/main/res/drawable/ic_animate_pause_play.xml new file mode 100644 index 000000000..cc68279cd --- /dev/null +++ b/app/src/main/res/drawable/ic_animate_pause_play.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/ic_animate_play.xml b/app/src/main/res/drawable/ic_animate_play.xml new file mode 100644 index 000000000..3c0a5ef1d --- /dev/null +++ b/app/src/main/res/drawable/ic_animate_play.xml @@ -0,0 +1,14 @@ + + + + + + diff --git a/app/src/main/res/drawable/ic_animate_play_pause.xml b/app/src/main/res/drawable/ic_animate_play_pause.xml new file mode 100644 index 000000000..8e4f65b5e --- /dev/null +++ b/app/src/main/res/drawable/ic_animate_play_pause.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + diff --git a/app/src/main/res/values/svg.xml b/app/src/main/res/values/svg.xml new file mode 100644 index 000000000..6fd4ff0c4 --- /dev/null +++ b/app/src/main/res/values/svg.xml @@ -0,0 +1,5 @@ + + + M 8 5 L 8 12 L 19 12 L 19 12 M 8 19 L 8 12 L 19 12 L 19 12 + M 5 6 L 5 10 L 19 10 L 19 6 M 5 18 L 5 14 L 19 14 L 19 18 + -- cgit v1.2.3