summaryrefslogtreecommitdiff
path: root/core
diff options
context:
space:
mode:
Diffstat (limited to 'core')
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/receiver/PlayerWidget.java6
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/service/PlayerWidgetJobService.java35
-rw-r--r--core/src/main/res/layout/player_widget.xml61
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