/*****************************************************************************
* RecommendationsService.java
*****************************************************************************
* Copyright © 2014-2015 VLC authors, VideoLAN and VideoLabs
* Author: Geoffrey Métais
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
*****************************************************************************/
package org.videolan.vlc.gui.tv;
import android.app.IntentService;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Message;
import android.preference.PreferenceManager;
import android.support.v4.app.NotificationCompat;
import android.text.TextUtils;
import org.videolan.vlc.MediaDatabase;
import org.videolan.vlc.MediaLibrary;
import org.videolan.vlc.MediaWrapper;
import org.videolan.vlc.R;
import org.videolan.vlc.VLCApplication;
import org.videolan.vlc.gui.preferences.PreferencesActivity;
import org.videolan.vlc.gui.video.VideoPlayerActivity;
import org.videolan.vlc.util.BitmapUtil;
import org.videolan.vlc.util.WeakHandler;
import java.util.ArrayList;
import java.util.Collections;
public class RecommendationsService extends IntentService {
private static final String TAG = "VLC/RecommendationsService";
private static final int NUM_RECOMMANDATIONS = 3;
private NotificationManager mNotificationManager;
private MediaDatabase mMediaDatabase = MediaDatabase.getInstance();
private Context mContext;
public RecommendationsService() {
super("RecommendationsService");
}
@Override
public void onCreate() {
super.onCreate();
mContext = this;
if (mNotificationManager == null) {
mNotificationManager = (NotificationManager)
VLCApplication.getAppContext().getSystemService(Context.NOTIFICATION_SERVICE);
}
}
@Override
protected void onHandleIntent(Intent intent) {
if (intent != null && !doRecommendations()) {
MediaLibrary.getInstance().addUpdateHandler(mHandler);
MediaLibrary.getInstance().scanMediaItems();
}
}
private void buildRecommendation(MediaWrapper movie, int id, int priority) {
if (movie == null)
return;
//TODO
// if (mBackgroundUri != movie.getBackgroundUri()) {
// extras.putString(EXTRA_BACKGROUND_IMAGE_URL, movie.getBackgroundUri());
// }
// build the recommendation as a Notification object
Notification notification = new NotificationCompat.BigPictureStyle(
new NotificationCompat.Builder(mContext)
.setContentTitle(movie.getTitle())
.setContentText(movie.getDescription())
.setContentInfo(getString(R.string.app_name))
.setPriority(priority)
.setLocalOnly(true)
.setOngoing(true)
.setColor(mContext.getResources().getColor(R.color.orange800))
.setCategory("recommendation")
.setLargeIcon(BitmapUtil.getPicture(movie))
.setSmallIcon(R.drawable.icon)
.setContentIntent(buildPendingIntent(movie, id))
).build();
// post the recommendation to the NotificationManager
mNotificationManager.notify(id, notification);
}
private PendingIntent buildPendingIntent(MediaWrapper mediaWrapper, int id) {
Intent intent = new Intent(mContext, VideoPlayerActivity.class);
intent.setAction(VideoPlayerActivity.PLAY_FROM_VIDEOGRID);
intent.putExtra(VideoPlayerActivity.PLAY_EXTRA_ITEM_LOCATION, mediaWrapper.getUri());
intent.putExtra(VideoPlayerActivity.PLAY_EXTRA_ITEM_TITLE, mediaWrapper.getTitle());
intent.putExtra(VideoPlayerActivity.PLAY_EXTRA_FROM_START, false);
PendingIntent pi = PendingIntent.getActivity(this, id, intent, PendingIntent.FLAG_UPDATE_CURRENT);
return pi;
}
RecommendationsHandler mHandler = new RecommendationsHandler(this);
private class RecommendationsHandler extends WeakHandler<RecommendationsService> {
public RecommendationsHandler(RecommendationsService owner) {
super(owner);
}
@Override
public void handleMessage(Message msg) {
doRecommendations();
}
}
private boolean doRecommendations() {
mNotificationManager.cancelAll();
String last = Uri.decode(PreferenceManager.getDefaultSharedPreferences(mContext).getString(PreferencesActivity.VIDEO_LAST, null));
int id = 0;
if (last != null) {
buildRecommendation(MediaLibrary.getInstance().getMediaItem(last), id, Notification.PRIORITY_HIGH);
}
ArrayList<MediaWrapper> videoList = MediaLibrary.getInstance().getVideoItems();
if (videoList == null || videoList.isEmpty())
return false;
Bitmap pic;
Collections.shuffle(videoList);
for (MediaWrapper mediaWrapper : videoList){
if (TextUtils.equals(mediaWrapper.getLocation(), last))
continue;
pic = mMediaDatabase.getPicture(mediaWrapper.getUri());
if (pic != null && pic.getByteCount() > 4 && mediaWrapper.getTime() == 0) {
buildRecommendation(mediaWrapper, ++id, Notification.PRIORITY_DEFAULT);
}
if (id == NUM_RECOMMANDATIONS)
break;
}
return true;
}
}