diff options
Diffstat (limited to 'core')
3 files changed, 92 insertions, 10 deletions
diff --git a/core/src/main/java/de/danoeh/antennapod/core/receiver/PlayerWidget.java b/core/src/main/java/de/danoeh/antennapod/core/receiver/PlayerWidget.java index 2e592bdf5..9e9663205 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/receiver/PlayerWidget.java +++ b/core/src/main/java/de/danoeh/antennapod/core/receiver/PlayerWidget.java @@ -16,6 +16,9 @@ public class PlayerWidget extends AppWidgetProvider { public static final String PREFS_NAME = "PlayerWidgetPrefs"; private static final String KEY_ENABLED = "WidgetEnabled"; public static final String KEY_WIDGET_COLOR = "widget_color"; + public static final String KEY_WIDGET_SKIP = "widget_skip"; + public static final String KEY_WIDGET_FAST_FORWARD = "widget_fast_forward"; + public static final String KEY_WIDGET_REWIND = "widget_rewind"; public static final int DEFAULT_COLOR = 0x00262C31; @Override @@ -52,6 +55,9 @@ public class PlayerWidget extends AppWidgetProvider { for (int appWidgetId : appWidgetIds) { SharedPreferences prefs = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE); prefs.edit().remove(KEY_WIDGET_COLOR + appWidgetId).apply(); + prefs.edit().remove(KEY_WIDGET_REWIND + appWidgetId).apply(); + prefs.edit().remove(KEY_WIDGET_FAST_FORWARD + appWidgetId).apply(); + prefs.edit().remove(KEY_WIDGET_SKIP + appWidgetId).apply(); } super.onDeleted(context, appWidgetIds); } diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/PlayerWidgetJobService.java b/core/src/main/java/de/danoeh/antennapod/core/service/PlayerWidgetJobService.java index 74735a264..5af05b6d2 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/service/PlayerWidgetJobService.java +++ b/core/src/main/java/de/danoeh/antennapod/core/service/PlayerWidgetJobService.java @@ -102,9 +102,10 @@ public class PlayerWidgetJobService extends SafeJobIntentService { ComponentName playerWidget = new ComponentName(this, PlayerWidget.class); AppWidgetManager manager = AppWidgetManager.getInstance(this); int[] widgetIds = manager.getAppWidgetIds(playerWidget); - RemoteViews views = new RemoteViews(getPackageName(), R.layout.player_widget); final PendingIntent startMediaPlayer = PendingIntent.getActivity(this, R.id.pending_intent_player_activity, PlaybackService.getPlayerActivityIntent(this), PendingIntent.FLAG_UPDATE_CURRENT); + RemoteViews views; + views = new RemoteViews(getPackageName(), R.layout.player_widget); boolean nothingPlaying = false; Playable media; @@ -119,6 +120,7 @@ public class PlayerWidgetJobService extends SafeJobIntentService { if (media != null) { views.setOnClickPendingIntent(R.id.layout_left, startMediaPlayer); + views.setOnClickPendingIntent(R.id.imgvCover, startMediaPlayer); try { Bitmap icon; @@ -155,11 +157,18 @@ public class PlayerWidgetJobService extends SafeJobIntentService { if (status == PlayerStatus.PLAYING) { views.setImageViewResource(R.id.butPlay, R.drawable.ic_av_pause_white_48dp); views.setContentDescription(R.id.butPlay, getString(R.string.pause_label)); + views.setImageViewResource(R.id.butPlayExtended, R.drawable.ic_av_pause_white_48dp); + views.setContentDescription(R.id.butPlayExtended, getString(R.string.pause_label)); } else { views.setImageViewResource(R.id.butPlay, R.drawable.ic_av_play_white_48dp); views.setContentDescription(R.id.butPlay, getString(R.string.play_label)); + views.setImageViewResource(R.id.butPlayExtended, R.drawable.ic_av_play_white_48dp); + views.setContentDescription(R.id.butPlayExtended, getString(R.string.play_label)); } - views.setOnClickPendingIntent(R.id.butPlay, createMediaButtonIntent()); + views.setOnClickPendingIntent(R.id.butPlay, + createMediaButtonIntent(KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE)); + views.setOnClickPendingIntent(R.id.butPlayExtended, + createMediaButtonIntent(KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE)); } else { nothingPlaying = true; } @@ -168,16 +177,20 @@ public class PlayerWidgetJobService extends SafeJobIntentService { // start the app if they click anything views.setOnClickPendingIntent(R.id.layout_left, startMediaPlayer); views.setOnClickPendingIntent(R.id.butPlay, startMediaPlayer); + views.setOnClickPendingIntent(R.id.butPlayExtended, + createMediaButtonIntent(KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE)); views.setViewVisibility(R.id.txtvProgress, View.GONE); views.setViewVisibility(R.id.txtvTitle, View.GONE); views.setViewVisibility(R.id.txtNoPlaying, View.VISIBLE); views.setImageViewResource(R.id.imgvCover, R.mipmap.ic_launcher_round); views.setImageViewResource(R.id.butPlay, R.drawable.ic_av_play_white_48dp); + views.setImageViewResource(R.id.butPlayExtended, R.drawable.ic_av_play_white_48dp); } if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN) { for (int id : widgetIds) { Bundle options = manager.getAppWidgetOptions(id); + SharedPreferences prefs = getSharedPreferences(PlayerWidget.PREFS_NAME, Context.MODE_PRIVATE); int minWidth = options.getInt(AppWidgetManager.OPTION_APPWIDGET_MIN_WIDTH); int columns = getCellsForSize(minWidth); if (columns < 3) { @@ -185,8 +198,18 @@ public class PlayerWidgetJobService extends SafeJobIntentService { } else { views.setViewVisibility(R.id.layout_center, View.VISIBLE); } + boolean showRewind = prefs.getBoolean(PlayerWidget.KEY_WIDGET_REWIND + id, false); + boolean showFastForward = prefs.getBoolean(PlayerWidget.KEY_WIDGET_FAST_FORWARD + id, false); + boolean showSkip = prefs.getBoolean(PlayerWidget.KEY_WIDGET_SKIP + id, false); + + if (showRewind || showSkip || showFastForward) { + views.setInt(R.id.extendedButtonsContainer, "setVisibility", View.VISIBLE); + views.setInt(R.id.butPlay, "setVisibility", View.GONE); + views.setInt(R.id.butRew, "setVisibility", showRewind ? View.VISIBLE : View.GONE); + views.setInt(R.id.butFastForward, "setVisibility", showFastForward ? View.VISIBLE : View.GONE); + views.setInt(R.id.butSkip, "setVisibility", showSkip ? View.VISIBLE : View.GONE); + } - SharedPreferences prefs = getSharedPreferences(PlayerWidget.PREFS_NAME, Context.MODE_PRIVATE); int backgroundColor = prefs.getInt(PlayerWidget.KEY_WIDGET_COLOR + id, PlayerWidget.DEFAULT_COLOR); views.setInt(R.id.widgetLayout, "setBackgroundColor", backgroundColor); @@ -200,13 +223,13 @@ public class PlayerWidgetJobService extends SafeJobIntentService { /** * Creates an intent which fakes a mediabutton press */ - private PendingIntent createMediaButtonIntent() { - KeyEvent event = new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE); + private PendingIntent createMediaButtonIntent(int eventCode) { + KeyEvent event = new KeyEvent(KeyEvent.ACTION_DOWN, eventCode); Intent startingIntent = new Intent(getBaseContext(), MediaButtonReceiver.class); startingIntent.setAction(MediaButtonReceiver.NOTIFY_BUTTON_RECEIVER); startingIntent.putExtra(Intent.EXTRA_KEY_EVENT, event); - return PendingIntent.getBroadcast(this, 0, startingIntent, 0); + return PendingIntent.getBroadcast(this, eventCode, startingIntent, 0); } private String getProgressString(int position, int duration, float speed) { diff --git a/core/src/main/res/layout/player_widget.xml b/core/src/main/res/layout/player_widget.xml index 8e38d7f6e..ab42e4cb4 100644 --- a/core/src/main/res/layout/player_widget.xml +++ b/core/src/main/res/layout/player_widget.xml @@ -27,7 +27,7 @@ <LinearLayout android:id="@+id/layout_left" - android:layout_width="0dp" + android:layout_width="match_parent" android:layout_height="match_parent" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" @@ -59,7 +59,7 @@ android:maxLines="3" android:text="@string/no_media_playing_label" android:textColor="@color/white" - android:textSize="@dimen/text_size_medium" + android:textSize="16sp" android:textStyle="bold" /> <TextView @@ -67,8 +67,9 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:maxLines="1" + android:ellipsize="end" android:textColor="@color/white" - android:textSize="@dimen/text_size_medium" + android:textSize="16sp" android:textStyle="bold" android:visibility="gone" /> @@ -78,9 +79,61 @@ android:layout_height="wrap_content" android:layout_marginTop="4dp" android:textColor="@color/white" + android:textSize="14sp" android:visibility="gone" /> + + <LinearLayout + android:id="@+id/extendedButtonsContainer" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:orientation="horizontal" + android:visibility="gone"> + + <ImageButton + android:id="@+id/butRew" + android:layout_width="36dp" + android:layout_height="36dp" + android:background="?android:attr/selectableItemBackground" + android:contentDescription="@string/rewind_label" + android:layout_marginRight="2dp" + android:layout_marginEnd="2dp" + android:scaleType="fitXY" + android:src="@drawable/ic_av_fast_rewind_white_48dp"/> + + <ImageButton + android:id="@+id/butPlayExtended" + android:layout_width="36dp" + android:layout_height="36dp" + android:background="?android:attr/selectableItemBackground" + android:contentDescription="@string/play_label" + android:layout_marginRight="2dp" + android:layout_marginEnd="2dp" + android:scaleType="fitXY" + android:src="@drawable/ic_av_play_white_48dp"/> + + <ImageButton + android:id="@+id/butFastForward" + android:layout_width="36dp" + android:layout_height="36dp" + android:background="?android:attr/selectableItemBackground" + android:contentDescription="@string/fast_forward_label" + android:layout_marginRight="2dp" + android:layout_marginEnd="2dp" + android:scaleType="fitXY" + android:src="@drawable/ic_av_fast_forward_white_48dp"/> + + <ImageButton + android:id="@+id/butSkip" + android:layout_width="36dp" + android:layout_height="36dp" + android:background="?android:attr/selectableItemBackground" + android:contentDescription="@string/skip_episode_label" + android:layout_marginRight="2dp" + android:layout_marginEnd="2dp" + android:scaleType="fitXY" + android:src="@drawable/ic_av_skip_white_24dp"/> + </LinearLayout> </LinearLayout> </LinearLayout> </RelativeLayout> - </FrameLayout>
\ No newline at end of file |