/*******************************************************************************
* 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 android.app.PendingIntent;
import android.appwidget.AppWidgetManager;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.net.Uri;
import android.os.AsyncTask;
import android.view.View;
import android.widget.RemoteViews;
import fr.gotorennes.domain.RelayPark;
import fr.gotorennes.remote.RelayParkService;
public class RelayParkWidgetProvider extends AbstractWidgetProvider {
public static final String SCHEME = "relayParkWidget";
@Override
protected RemoteViews updateRemoteViews(final Context context,
final int appWidgetId) {
final RelayParkService relayParkService = RelayParkService
.getInstance(context);
final RemoteViews views = new RemoteViews(context.getPackageName(),
R.layout.relaypark_appwidget);
SharedPreferences prefs = context.getSharedPreferences(
"fr.gotorennes.RelayParkWidget", 0);
String relayParkName = prefs.getString("relayParkName" + appWidgetId,
null);
if (relayParkName != null) {
AsyncTask<String, Void, RelayPark> task = new AsyncTask<String, Void, RelayPark>() {
@Override
protected RelayPark doInBackground(String... stationId) {
return relayParkService.getRelayPark(stationId[0]);
}
@Override
protected void onPostExecute(RelayPark relayPark) {
if (relayPark == null) {
return;
}
views.setTextViewText(R.id.relayParkName,
relayPark.name);
switch (relayPark.state) {
case 0: // Ouvert
views.setViewVisibility(R.id.relayParkOpen,
View.VISIBLE);
views.setViewVisibility(R.id.relayParkClose,
View.GONE);
views.setViewVisibility(R.id.relayParkFull,
View.GONE);
views.setTextViewText(R.id.available,
String.valueOf(relayPark.available));
views.setTextColor(R.id.available,
relayPark.getColor());
views.setTextViewText(R.id.capacity,
String.valueOf(relayPark.capacity));
break;
case 2: // Complet
views.setViewVisibility(R.id.relayParkOpen,
View.GONE);
views.setViewVisibility(R.id.relayParkClose,
View.GONE);
views.setViewVisibility(R.id.relayParkFull,
View.VISIBLE);
break;
default:
views.setViewVisibility(R.id.relayParkOpen,
View.GONE);
views.setViewVisibility(R.id.relayParkClose,
View.VISIBLE);
views.setViewVisibility(R.id.relayParkFull,
View.GONE);
}
Intent intent = new Intent(context,
RelayParkActivity.class);
intent.putExtra("relayPark", relayPark);
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);
//Update the widget
AppWidgetManager manager = AppWidgetManager.getInstance(context);
manager.updateAppWidget(appWidgetId, views);
}
};
task.execute(relayParkName);
}
return views;
}
@Override
protected String getScheme() {
return SCHEME;
}
@Override
protected int scheduleInMinutes() {
return 10;
}
}