diff options
Diffstat (limited to 'News-Android-App/src/main')
13 files changed, 143 insertions, 66 deletions
diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/PodcastFragment.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/PodcastFragment.java index 3953e08b..269a99cb 100644 --- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/PodcastFragment.java +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/PodcastFragment.java @@ -1,21 +1,24 @@ package de.luhmer.owncloudnewsreader; import android.content.Context; +import android.content.DialogInterface; +import android.graphics.Paint; import android.net.Uri; import android.os.Bundle; import android.support.v4.app.Fragment; +import android.support.v7.app.AlertDialog; import android.util.Log; import android.view.ContextThemeWrapper; -import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import android.widget.Button; +import android.widget.EditText; import android.widget.FrameLayout; import android.widget.ImageButton; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ListView; +import android.widget.NumberPicker; import android.widget.ProgressBar; import android.widget.RelativeLayout; import android.widget.SeekBar; @@ -31,21 +34,24 @@ import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; import java.io.File; +import java.lang.reflect.Field; +import java.util.Arrays; import butterknife.BindView; import butterknife.ButterKnife; import butterknife.OnClick; import de.luhmer.owncloudnewsreader.ListView.PodcastArrayAdapter; import de.luhmer.owncloudnewsreader.ListView.PodcastFeedArrayAdapter; +import de.luhmer.owncloudnewsreader.events.podcast.SpeedPodcast; import de.luhmer.owncloudnewsreader.events.podcast.StartDownloadPodcast; import de.luhmer.owncloudnewsreader.events.podcast.TogglePlayerStateEvent; import de.luhmer.owncloudnewsreader.events.podcast.UpdatePodcastStatusEvent; import de.luhmer.owncloudnewsreader.events.podcast.WindPodcast; -import de.luhmer.owncloudnewsreader.events.podcast.SpeedPodcast; import de.luhmer.owncloudnewsreader.model.MediaItem; import de.luhmer.owncloudnewsreader.model.PodcastFeedItem; import de.luhmer.owncloudnewsreader.model.PodcastItem; import de.luhmer.owncloudnewsreader.services.PodcastDownloadService; +import de.luhmer.owncloudnewsreader.services.PodcastPlaybackService; import de.luhmer.owncloudnewsreader.services.podcast.PlaybackService; import de.luhmer.owncloudnewsreader.view.PodcastSlidingUpPanelLayout; @@ -181,8 +187,6 @@ public class PodcastFragment extends Fragment { tvTo.setText(String.format("%02d:%02d", minutes, seconds)); tvToSlider.setText(String.format("%02d:%02d", minutes, seconds)); - tvPlaybackSpeed.setText(String.format("%.02f", podcast.getSpeed())); - tvTitle.setText(podcast.getTitle()); tvTitleSlider.setText(podcast.getTitle()); @@ -225,6 +229,7 @@ public class PodcastFragment extends Fragment { @BindView(R.id.btn_playPausePodcastSlider) ImageButton btnPlayPausePodcastSlider; @BindView(R.id.btn_nextPodcastSlider) ImageButton btnNextPodcastSlider; @BindView(R.id.btn_previousPodcastSlider) ImageButton btnPreviousPodcastSlider; + @BindView(R.id.btn_podcastSpeed) ImageButton btnPlaybackSpeed; @BindView(R.id.img_feed_favicon) ImageView imgFavIcon; @@ -241,9 +246,6 @@ public class PodcastFragment extends Fragment { @BindView(R.id.pb_progress) ProgressBar pb_progress; @BindView(R.id.pb_progress2) ProgressBar pb_progress2; - @Bind(R.id.tv_playbackSpeed) TextView tvPlaybackSpeed; - @Bind(R.id.buttonSpeedMinus) TextView btnSpeedMinus; - @Bind(R.id.buttonSpeedPlus) TextView btnSpeedPlus; @BindView(R.id.podcastFeedList) ListView /* CardGridView CardListView*/ podcastFeedList; @BindView(R.id.rlPodcast) RelativeLayout rlPodcast; @@ -281,16 +283,8 @@ public class PodcastFragment extends Fragment { }}); } - @OnClick(R.id.buttonSpeedMinus) void speedMinus() { - eventBus.post(new SpeedPodcast() {{ - playbackSpeed = podcast.getSpeed() - 0.1f; - }}); - } - - @OnClick(R.id.buttonSpeedPlus) void speedPlus() { - eventBus.post(new SpeedPodcast() {{ - playbackSpeed = podcast.getSpeed() + 0.1f; - }}); + @OnClick(R.id.btn_podcastSpeed) void openSpeedMenu() { + showPlaybackSpeedPicker(); } PodcastSlidingUpPanelLayout sliding_layout; @@ -332,7 +326,6 @@ public class PodcastFragment extends Fragment { podcastFeedList.setVisibility(View.VISIBLE); sb_progress.setOnSeekBarChangeListener(onSeekBarChangeListener); - tvPlaybackSpeed.setOnEditorActionListener(onEditorActionListener); return view; } @@ -404,20 +397,6 @@ public class PodcastFragment extends Fragment { } }; - private TextView.OnEditorActionListener onEditorActionListener = new TextView.OnEditorActionListener() { - @Override - public boolean onEditorAction(final TextView textView, int i, KeyEvent keyEvent) { - final float pbSpeed = Float.parseFloat(textView.getText().toString()); - if(hasTitleInCache) { - eventBus.post(new SpeedPodcast() {{ - playbackSpeed = pbSpeed; - }}); - } - Log.v(TAG, "playback speed changed: "+pbSpeed); - return true; - } - }; - boolean blockSeekbarUpdate = false; private SeekBar.OnSeekBarChangeListener onSeekBarChangeListener = new SeekBar.OnSeekBarChangeListener() { @@ -444,4 +423,87 @@ public class PodcastFragment extends Fragment { } }; + + private void showPlaybackSpeedPicker() { + final NumberPicker numberPicker = new NumberPicker(getContext()); + //setNumberPickerTextColor(numberPicker, Color.parseColor("#FFFFFF")); + numberPicker.setDescendantFocusability(NumberPicker.FOCUS_BLOCK_DESCENDANTS); + numberPicker.setMinValue(0); + numberPicker.setMaxValue(PodcastPlaybackService.PLAYBACK_SPEEDS.length-1); + numberPicker.setFormatter(new NumberPicker.Formatter() { + @Override + public String format(int i) { + return String.valueOf(PodcastPlaybackService.PLAYBACK_SPEEDS[i]); + } + }); + + if(getActivity() instanceof PodcastFragmentActivity) { + float playbackSpeed = ((PodcastFragmentActivity) getActivity()).getCurrentPlaybackSpeed(); + int position = Arrays.binarySearch(PodcastPlaybackService.PLAYBACK_SPEEDS, playbackSpeed); + numberPicker.setValue(position); + } else { + numberPicker.setValue(3); + } + numberPicker.setWrapSelectorWheel(false); + + + AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(getActivity()); + + // set title + alertDialogBuilder.setTitle(getString(R.string.podcast_playback_speed_dialog_title)); + + // set dialog message + alertDialogBuilder + .setCancelable(false) + .setPositiveButton(getString(android.R.string.ok), new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int id) { + float speed = PodcastPlaybackService.PLAYBACK_SPEEDS[numberPicker.getValue()]; + //Toast.makeText(getActivity(), String.valueOf(speed]), Toast.LENGTH_SHORT).show(); + eventBus.post(new SpeedPodcast(speed)); + dialog.cancel(); + } + }) + .setNegativeButton(getString(android.R.string.cancel), new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int id) { + dialog.cancel(); + } + }) + .setView(numberPicker); + + // create alert dialog + AlertDialog alertDialog = alertDialogBuilder.create(); + + // show it + alertDialog.show(); + } + + + public static boolean setNumberPickerTextColor(NumberPicker numberPicker, int color) + { + final int count = numberPicker.getChildCount(); + for(int i = 0; i < count; i++){ + View child = numberPicker.getChildAt(i); + if(child instanceof EditText){ + try{ + Field selectorWheelPaintField = numberPicker.getClass() + .getDeclaredField("mSelectorWheelPaint"); + selectorWheelPaintField.setAccessible(true); + ((Paint)selectorWheelPaintField.get(numberPicker)).setColor(color); + ((EditText)child).setTextColor(color); + numberPicker.invalidate(); + return true; + } + catch(NoSuchFieldException e){ + Log.w("setNumberPickerTextCol", e); + } + catch(IllegalAccessException e){ + Log.w("setNumberPickerTextCol", e); + } + catch(IllegalArgumentException e){ + Log.w("setNumberPickerTextCol", e); + } + } + } + return false; + } } diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/PodcastFragmentActivity.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/PodcastFragmentActivity.java index 96e5de3e..af9a9910 100644 --- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/PodcastFragmentActivity.java +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/PodcastFragmentActivity.java @@ -613,4 +613,9 @@ public class PodcastFragmentActivity extends AppCompatActivity implements IPlayP public void pausePodcast() { mPodcastPlaybackService.pause(); } + + public float getCurrentPlaybackSpeed() { + return mPodcastPlaybackService.getPlaybackSpeed(); + } + } diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/events/podcast/SpeedPodcast.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/events/podcast/SpeedPodcast.java index 0cd4ac52..c32e970c 100644 --- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/events/podcast/SpeedPodcast.java +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/events/podcast/SpeedPodcast.java @@ -3,6 +3,10 @@ package de.luhmer.owncloudnewsreader.events.podcast; public class SpeedPodcast { + public SpeedPodcast(float playbackSpeed) { + this.playbackSpeed = playbackSpeed; + } + public float playbackSpeed; } diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/services/PodcastPlaybackService.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/services/PodcastPlaybackService.java index 0cd9a9dd..f0c0a2a0 100644 --- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/services/PodcastPlaybackService.java +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/services/PodcastPlaybackService.java @@ -16,9 +16,9 @@ import de.luhmer.owncloudnewsreader.events.podcast.NewPodcastPlaybackListener; import de.luhmer.owncloudnewsreader.events.podcast.PodcastCompletedEvent; import de.luhmer.owncloudnewsreader.events.podcast.RegisterVideoOutput; import de.luhmer.owncloudnewsreader.events.podcast.RegisterYoutubeOutput; +import de.luhmer.owncloudnewsreader.events.podcast.SpeedPodcast; import de.luhmer.owncloudnewsreader.events.podcast.TogglePlayerStateEvent; import de.luhmer.owncloudnewsreader.events.podcast.UpdatePodcastStatusEvent; -import de.luhmer.owncloudnewsreader.events.podcast.SpeedPodcast; import de.luhmer.owncloudnewsreader.events.podcast.WindPodcast; import de.luhmer.owncloudnewsreader.model.MediaItem; import de.luhmer.owncloudnewsreader.model.PodcastItem; @@ -85,6 +85,9 @@ public class PodcastPlaybackService extends Service { private PlaybackService mPlaybackService; + public static final float PLAYBACK_SPEEDS[] = { 0.25f, 0.5f, 0.75f, 1.0f, 1.25f, 1.5f, 1.75f, 2.0f, 2.5f, 3.0f }; + private float currentPlaybackSpeed = 1; + @Override public void onCreate() { @@ -143,6 +146,8 @@ public class PodcastPlaybackService extends Service { podcastNotification.podcastChanged(); sendMediaStatus(); + + mPlaybackService.playbackSpeedChanged(currentPlaybackSpeed); } return Service.START_STICKY; @@ -235,8 +240,10 @@ public class PodcastPlaybackService extends Service { @Subscribe public void onEvent(SpeedPodcast event) { + this.currentPlaybackSpeed = event.playbackSpeed; + if(mPlaybackService != null) { - mPlaybackService.setPlaybackSpeed(event.playbackSpeed); + mPlaybackService.playbackSpeedChanged(currentPlaybackSpeed); } } @@ -258,6 +265,11 @@ public class PodcastPlaybackService extends Service { sendMediaStatus(); } + + public float getPlaybackSpeed() { + return currentPlaybackSpeed; + } + public void sendMediaStatus() { UpdatePodcastStatusEvent audioPodcastEvent; @@ -271,7 +283,7 @@ public class PodcastPlaybackService extends Service { mPlaybackService.getMediaItem().title, mPlaybackService.getVideoType(), mPlaybackService.getMediaItem().itemId, - mPlaybackService.getPlaybackSpeed()); + getPlaybackSpeed()); } eventBus.post(audioPodcastEvent); } diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/services/podcast/MediaPlayerPlaybackService.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/services/podcast/MediaPlayerPlaybackService.java index b4368c05..dab25833 100644 --- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/services/podcast/MediaPlayerPlaybackService.java +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/services/podcast/MediaPlayerPlaybackService.java @@ -2,7 +2,7 @@ package de.luhmer.owncloudnewsreader.services.podcast; import android.content.Context; import android.media.MediaPlayer; -import android.media.PlaybackParams; +import android.os.Build; import android.util.Log; import android.view.SurfaceHolder; import android.view.SurfaceView; @@ -97,14 +97,12 @@ public class MediaPlayerPlaybackService extends PlaybackService { } @Override - public void setPlaybackSpeed(float speed) { - mMediaPlayer.setPlaybackParams(mMediaPlayer.getPlaybackParams().setSpeed(speed)); + public void playbackSpeedChanged(float currentPlaybackSpeed) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + mMediaPlayer.setPlaybackParams(mMediaPlayer.getPlaybackParams().setSpeed(currentPlaybackSpeed)); + } } - @Override - public float getPlaybackSpeed() { - return mMediaPlayer.getPlaybackParams().getSpeed(); - } @Override public void seekTo(double percent) { diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/services/podcast/PlaybackService.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/services/podcast/PlaybackService.java index cb9d5ff4..e0995454 100644 --- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/services/podcast/PlaybackService.java +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/services/podcast/PlaybackService.java @@ -30,9 +30,8 @@ public abstract class PlaybackService { public abstract void destroy(); public abstract void play(); public abstract void pause(); + public abstract void playbackSpeedChanged(float currentPlaybackSpeed); - public void setPlaybackSpeed(float speed) { } - public float getPlaybackSpeed() {return 0; } public void seekTo(double percent) { } public int getCurrentDuration() { return 0; } diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/services/podcast/TTSPlaybackService.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/services/podcast/TTSPlaybackService.java index 430109f6..658baf8e 100644 --- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/services/podcast/TTSPlaybackService.java +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/services/podcast/TTSPlaybackService.java @@ -64,6 +64,11 @@ public class TTSPlaybackService extends PlaybackService implements TextToSpeech. } @Override + public void playbackSpeedChanged(float currentPlaybackSpeed) { + ttsController.setSpeechRate(currentPlaybackSpeed); + } + + @Override public void onInit(int status) { if (status == TextToSpeech.SUCCESS) { /* diff --git a/News-Android-App/src/main/res/drawable-hdpi/ic_slow_motion_video.png b/News-Android-App/src/main/res/drawable-hdpi/ic_slow_motion_video.png Binary files differnew file mode 100644 index 00000000..9fda0a8c --- /dev/null +++ b/News-Android-App/src/main/res/drawable-hdpi/ic_slow_motion_video.png diff --git a/News-Android-App/src/main/res/drawable-mdpi/ic_slow_motion_video.png b/News-Android-App/src/main/res/drawable-mdpi/ic_slow_motion_video.png Binary files differnew file mode 100644 index 00000000..0edc705c --- /dev/null +++ b/News-Android-App/src/main/res/drawable-mdpi/ic_slow_motion_video.png diff --git a/News-Android-App/src/main/res/drawable-xhdpi/ic_slow_motion_video.png b/News-Android-App/src/main/res/drawable-xhdpi/ic_slow_motion_video.png Binary files differnew file mode 100644 index 00000000..2753e19b --- /dev/null +++ b/News-Android-App/src/main/res/drawable-xhdpi/ic_slow_motion_video.png diff --git a/News-Android-App/src/main/res/drawable-xxhdpi/ic_slow_motion_video.png b/News-Android-App/src/main/res/drawable-xxhdpi/ic_slow_motion_video.png Binary files differnew file mode 100644 index 00000000..1c40dfc2 --- /dev/null +++ b/News-Android-App/src/main/res/drawable-xxhdpi/ic_slow_motion_video.png diff --git a/News-Android-App/src/main/res/layout/fragment_podcast.xml b/News-Android-App/src/main/res/layout/fragment_podcast.xml index ba54b897..1b7f1b4d 100644 --- a/News-Android-App/src/main/res/layout/fragment_podcast.xml +++ b/News-Android-App/src/main/res/layout/fragment_podcast.xml @@ -341,27 +341,17 @@ android:scaleType="fitXY" android:contentDescription="@string/content_desc_forward"/> - <Button - android:id="@+id/buttonSpeedMinus" - android:layout_width="43dp" - android:layout_height="wrap_content" - android:text="-" /> - - <EditText - android:id="@+id/tv_playbackSpeed" - android:layout_width="71dp" - android:layout_height="wrap_content" - android:ems="10" - android:inputType="numberDecimal" - android:selectAllOnFocus="true" - android:visibility="visible" - android:focusable="false"/> - - <Button - android:id="@+id/buttonSpeedPlus" - android:layout_width="42dp" - android:layout_height="wrap_content" - android:text="+" /> + <ImageButton + android:id="@+id/btn_podcastSpeed" + android:layout_width="40dp" + android:layout_height="40dp" + android:layout_gravity="center" + android:src="@drawable/ic_slow_motion_video" + android:tint="@color/tintColorLight" + android:background="?attr/selectableItemBackgroundBorderless" + android:scaleType="fitXY" + android:layout_marginLeft="36dp" + android:contentDescription="@string/content_desc_playback_speed"/> </LinearLayout> diff --git a/News-Android-App/src/main/res/values/strings.xml b/News-Android-App/src/main/res/values/strings.xml index 4cb0bd77..55b29314 100644 --- a/News-Android-App/src/main/res/values/strings.xml +++ b/News-Android-App/src/main/res/values/strings.xml @@ -153,6 +153,7 @@ <!-- Podcast --> <string name="no_podcast_selected">No podcast selected</string> <string name="no_chapters_available">No chapters available</string> + <string name="podcast_playback_speed_dialog_title">Playback Speed</string> <!-- Settings for Display --> @@ -270,6 +271,7 @@ <string name="content_desc_none" translatable="false">@null</string> <string name="content_desc_play">play</string> <string name="content_desc_pause">pause</string> + <string name="content_desc_playback_speed">playback speed</string> <string name="content_desc_rewind">rewind</string> <string name="content_desc_forward">forward</string> <string name="content_desc_expand">expand</string> |