package com.marverenic.music.widget;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.support.annotation.ColorInt;
import android.support.annotation.Nullable;
import android.support.v4.content.ContextCompat;
import android.widget.RemoteViews;
import com.marverenic.music.R;
import com.marverenic.music.activity.MainActivity;
import com.marverenic.music.model.Song;
import com.marverenic.music.utils.MediaStyleHelper;
import rx.Observable;
import timber.log.Timber;
import static android.view.KeyEvent.KEYCODE_MEDIA_NEXT;
import static android.view.KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE;
import static android.view.KeyEvent.KEYCODE_MEDIA_PREVIOUS;
public class CompactWidget extends BaseWidget {
@Override
protected void onUpdate(Context context) {
Observable.just(createBaseView(context))
.flatMap(views -> mPlayerController.getNowPlaying().take(1)
.map(song -> setSong(context, views, song)))
.flatMap(views -> mPlayerController.isPlaying().take(1)
.map(isPlaying -> setPlaying(views, isPlaying)))
.subscribe(views -> updateAllInstances(context, views),
throwable -> Timber.e(throwable, "Failed to update widget"));
}
private RemoteViews createBaseView(Context context) {
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget_compact);
Intent launcherIntent = MainActivity.newNowPlayingIntent(context);
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, launcherIntent, 0);
views.setOnClickPendingIntent(R.id.widget_compact_container, pendingIntent);
views.setOnClickPendingIntent(R.id.widget_next,
MediaStyleHelper.getActionIntent(context, KEYCODE_MEDIA_NEXT));
views.setOnClickPendingIntent(R.id.widget_play_pause,
MediaStyleHelper.getActionIntent(context, KEYCODE_MEDIA_PLAY_PAUSE));
views.setOnClickPendingIntent(R.id.widget_previous,
MediaStyleHelper.getActionIntent(context, KEYCODE_MEDIA_PREVIOUS));
@ColorInt int buttonColor = ContextCompat.getColor(context, R.color.widget_button);
views.setInt(R.id.widget_next, "setColorFilter", buttonColor);
views.setInt(R.id.widget_play_pause, "setColorFilter", buttonColor);
views.setInt(R.id.widget_previous, "setColorFilter", buttonColor);
return views;
}
private static RemoteViews setSong(Context context, RemoteViews views, @Nullable Song song) {
if (song == null) {
String defaultSongName = context.getString(R.string.nothing_playing);
views.setTextViewText(R.id.widget_compact_title, defaultSongName);
views.setTextViewText(R.id.widget_compact_detail, "");
} else {
views.setTextViewText(R.id.widget_compact_title, song.getSongName());
views.setTextViewText(R.id.widget_compact_detail,
song.getArtistName() + " – " + song.getAlbumName());
}
return views;
}
private static RemoteViews setPlaying(RemoteViews views, boolean isPlaying) {
views.setImageViewResource(R.id.widget_play_pause,
(isPlaying)
? R.drawable.ic_pause_36dp
: R.drawable.ic_play_arrow_36dp);
return views;
}
}