/**
* Copyright (C) 2013 Romain Guefveneu.
*
* This file is part of naonedbus.
*
* Naonedbus 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, or
* (at your option) any later version.
*
* Naonedbus 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 net.naonedbus.activity.widgetconfigure;
import java.util.ArrayList;
import java.util.List;
import net.naonedbus.R;
import net.naonedbus.appwidget.HoraireWidgetProvider;
import net.naonedbus.bean.Favori;
import net.naonedbus.manager.impl.FavoriManager;
import net.naonedbus.widget.adapter.impl.FavoriArrayAdapter;
import android.app.ListActivity;
import android.appwidget.AppWidgetManager;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.ContextThemeWrapper;
import android.view.View;
import android.widget.ListView;
/**
* @author romain.guefveneu
*
*/
public abstract class WidgetConfigureActivity extends ListActivity {
private static final String PREFS_NAME = "net.naonedbus.activity.WidgetProvider";
private static final String PREF_PREFIX_KEY = "widgetFavoriId";
private int mAppWidgetId = AppWidgetManager.INVALID_APPWIDGET_ID;
private LoadFavoris mLoadFavoris;
private View mListView;
private View mProgress;
private View mMessage;
public WidgetConfigureActivity() {
}
@Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.dialog_widgets_favoris);
mListView = findViewById(android.R.id.list);
mProgress = findViewById(android.R.id.progress);
mMessage = findViewById(android.R.id.message);
// If the user closes window, don't create the widget
setResult(RESULT_CANCELED);
// Find widget id from launching intent
final Intent intent = getIntent();
final Bundle extras = intent.getExtras();
if (extras != null) {
mAppWidgetId = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID);
}
// If they gave us an intent without the widget id, just bail.
if (mAppWidgetId == AppWidgetManager.INVALID_APPWIDGET_ID) {
finish();
}
doLoadFavoris();
}
/**
* Configures the created widget
*
* @param context
*/
public void configureWidget(final Context context) {
final AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
getWidgetProvider().updateAppWidget(context, appWidgetManager, mAppWidgetId);
}
@Override
protected void onListItemClick(final ListView l, final View v, final int position, final long id) {
super.onListItemClick(l, v, position, id);
// Récupérer l'id du favori sélectionné
final Favori item = (Favori) l.getItemAtPosition(position);
// Stocker dans les préférences l'id du favori associé à l'id du widget
final SharedPreferences.Editor prefs = this.getSharedPreferences(PREFS_NAME, 0).edit();
prefs.putInt(PREF_PREFIX_KEY + mAppWidgetId, item.getId());
prefs.commit();
// Valider la création du widget
final Intent resultValue = new Intent();
resultValue.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, mAppWidgetId);
setResult(RESULT_OK, resultValue);
configureWidget(getApplicationContext());
finish();
}
/**
* Lancer le chargement des favoris
*/
protected void doLoadFavoris() {
if (mLoadFavoris == null || mLoadFavoris.getStatus().equals(AsyncTask.Status.FINISHED)) {
mLoadFavoris = (LoadFavoris) new LoadFavoris().execute();
}
}
/**
* Classe de chargement des favoris
*
* @author romain.guefveneu
*
*/
private class LoadFavoris extends AsyncTask<Void, Void, FavoriArrayAdapter> {
@Override
protected FavoriArrayAdapter doInBackground(final Void... params) {
final FavoriManager favoriManager = FavoriManager.getInstance();
final List<Favori> items = new ArrayList<Favori>();
final Context context = new ContextThemeWrapper(getApplicationContext(), R.style.Theme_Acapulco_Dark);
final FavoriArrayAdapter adapter = new FavoriArrayAdapter(context, items, false);
items.addAll(favoriManager.getFull(context.getContentResolver()));
return adapter;
}
@Override
protected void onPostExecute(final FavoriArrayAdapter result) {
super.onPostExecute(result);
if (result.isEmpty()) {
mProgress.setVisibility(View.GONE);
mMessage.setVisibility(View.VISIBLE);
} else {
mProgress.setVisibility(View.GONE);
mListView.setVisibility(View.VISIBLE);
}
setListAdapter(result);
}
}
/**
* Récupérer l'id d'un favori à partir d'un id de widget
*
* @param context
* @param appWidgetId
* @return
*/
public static int getFavoriIdFromWidget(final Context context, final int appWidgetId) {
final SharedPreferences prefs = context.getSharedPreferences(PREFS_NAME, 0);
return prefs.getInt(PREF_PREFIX_KEY + appWidgetId, -1);
}
/**
* Supprimer la configuration d'un widget
*
* @param context
* @param appWidgetId
*/
public static void removeWidgetId(final Context context, final long appWidgetId) {
final SharedPreferences.Editor editor = context.getSharedPreferences(PREFS_NAME, 0).edit();
editor.remove(PREF_PREFIX_KEY + appWidgetId);
editor.commit();
}
/**
* Doit retourner le bon widgetprovider
*
* @return
*/
protected abstract HoraireWidgetProvider getWidgetProvider();
}