/*******************************************************************************
* Copyright (c) 2011 Michel DAVID mimah35-at-gmail.com
*
* 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 3 of the License.
*
* 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, see <http://www.gnu.org/licenses/>.
******************************************************************************/
package fr.gotorennes;
import java.util.List;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.Bitmap;
import android.net.Uri;
import android.widget.RemoteViews;
import fr.gotorennes.domain.Arret;
import fr.gotorennes.domain.Circuit;
import fr.gotorennes.domain.Ligne;
import fr.gotorennes.domain.Station;
import fr.gotorennes.persistence.BusDao;
import fr.gotorennes.remote.BusStationService;
public class BusStopWidgetProvider extends AbstractWidgetProvider {
public static final String SCHEME = "busStopWidget";
private static BusDao busDao;
public static BusStationService busStationService;
@Override
protected RemoteViews updateRemoteViews(Context context, int appWidgetId) {
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.busstop_appwidget);
if (busDao == null) {
try {
busDao = BusDao.getInstance(context, null);
}
catch (Throwable e) {
return views;
}
}
if (busStationService == null) {
busStationService = BusStationService.getInstance(context);
}
SharedPreferences prefs = context.getSharedPreferences("fr.gotorennes.BusStopWidget", 0);
long idStation = prefs.getLong("idStation" + appWidgetId, 0);
long idLigne = prefs.getLong("idLigne" + appWidgetId, 0);
int sens = prefs.getInt("sens" + appWidgetId, 0);
if (idStation != 0 && idLigne != 0) {
Station station = busDao.getStation(idStation);
if (station != null) {
views.setTextViewText(R.id.stopName, station.nom);
}
Bitmap icon = busStationService.getBitmapIcon(context, idLigne);
if (icon != null) {
views.setImageViewBitmap(R.id.lineIcon, icon);
}
Ligne ligne = busDao.getLigne(idLigne);
List<Arret> passages = busDao.getProchainsPassages(idStation, ligne.id, ligne.isLigneDeNuit(), sens);
if (!passages.isEmpty()) {
Circuit circuit = busDao.getCircuitByIdTrajet(passages.get(0).idTrajet);
views.setTextViewText(R.id.directionName, context.getString(R.string.vers) + circuit.nom);
views.setTextViewText(R.id.nextStopTime, passages.get(0).getDepart());
views.setTextViewText(R.id.nextStopTimeInMinutes, context.getString(R.string.dans) + passages.get(0).getDureeAvantDepart( ligne.isLigneDeNuit(), context.getResources() ));
Intent intent = new Intent(context, BusTripActivity.class);
intent.putExtra("station", station);
intent.putExtra("ligne", ligne);
intent.putExtra("arret", passages.get(0));
intent.setData(Uri.withAppendedPath(Uri.parse(SCHEME + "://widget/id/"), String.valueOf(appWidgetId)));
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);
views.setOnClickPendingIntent(R.id.widget, pendingIntent);
if (passages.size() > 1) {
views.setTextViewText(R.id.nextNextStopTime, passages.get(1).getDepart());
} else {
views.setTextViewText(R.id.nextNextStopTime, "");
}
} else {
views.setTextViewText(R.id.nextStopTime, "--");
views.setTextViewText(R.id.nextNextStopTime, "");
views.setTextViewText(R.id.nextStopTimeInMinutes, "");
}
Arret passagePrecedent = busDao.getPassagePrecedent(idStation, ligne.id, ligne.isLigneDeNuit(), sens);
if(passagePrecedent != null) {
views.setTextViewText(R.id.previousStopTime, passagePrecedent.getDepart());
}
else {
views.setTextViewText(R.id.previousStopTime, "");
}
}
return views;
}
@Override
protected String getScheme() {
return SCHEME;
}
@Override
protected int scheduleInMinutes() {
return 1;
}
}