/*******************************************************************************
* BBC News Reader
* Released under the BSD License. See README or LICENSE.
* Copyright (c) 2011, Digital Lizard (Oscar Key, Thomas Boby)
* All rights reserved.
******************************************************************************/
package com.digitallizard.bbcnewsreader.widget;
import android.app.AlertDialog;
import android.app.Dialog;
import android.appwidget.AppWidgetManager;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.os.Bundle;
import android.widget.AbsListView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import com.actionbarsherlock.app.SherlockActivity;
import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuItem;
import com.digitallizard.bbcnewsreader.R;
import com.digitallizard.bbcnewsreader.ReaderActivity;
import com.digitallizard.bbcnewsreader.data.DatabaseHandler;
public class WidgetConfigActivity extends SherlockActivity {
ListView listView;
String[] enabledCategoriesNames;
SharedPreferences settings;
int widgetId;
private Dialog appNotRunDialog;
void closeAppNotRunDialog() {
appNotRunDialog = null; // destroy the dialog
// end the program
this.setResult(RESULT_CANCELED);
this.finish();
}
void showAppNotRunDialog() {
// only show the error dialog if one isn't already visible
if (appNotRunDialog == null) {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("Before using the widget, please first enable some categories by launching the main app.");
builder.setCancelable(false);
builder.setPositiveButton("Close", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
closeAppNotRunDialog();
}
});
appNotRunDialog = builder.create();
appNotRunDialog.show();
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
// inflate the menu
getSupportMenuInflater().inflate(R.menu.category_chooser_menu, menu);
return true; // we have made the menu so we can return true
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == R.id.categoryChooserMenuItemSave) {
// store the selected category
String chosenCategory = enabledCategoriesNames[listView.getCheckedItemPosition()];
Editor editor = settings.edit();
editor.putString(ReaderWidget.PREF_KEY_CATEGORY + widgetId, chosenCategory);
editor.commit();
// update the widget
Intent intent = new Intent(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
int[] widgetIds = { widgetId };
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, widgetIds);
sendBroadcast(intent);
// send a successful result
Intent successResult = new Intent();
successResult.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, widgetId);
setResult(RESULT_OK, successResult);
finish(); // end the activity and send the result
return true;
}
else {
return super.onOptionsItemSelected(item);
}
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.setContentView(R.layout.widget_config);
widgetId = getIntent().getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID);
// if the activity is cancelled
Intent cancelResult = new Intent();
cancelResult.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, widgetId);
setResult(RESULT_CANCELED, cancelResult);
// connect to the database and retrieve the enabled categories
DatabaseHandler database = new DatabaseHandler(this);
String[][] enabledCategories = database.getEnabledCategories();
// if no categories were enabled, do not allow the user to proceed
if (enabledCategories == null || enabledCategories[0].length == 0) {
showAppNotRunDialog();
return; // bail here
}
enabledCategoriesNames = enabledCategories[1];
// set up the list view
listView = (ListView) this.findViewById(R.id.widgetCategoryChoiceListView);
listView.setAdapter(new ArrayAdapter<String>(this, R.layout.category_chooser_selectable_item, enabledCategoriesNames));
listView.setChoiceMode(AbsListView.CHOICE_MODE_SINGLE);
// find the id of the current item and enable it
settings = getSharedPreferences(ReaderActivity.PREFS_FILE_NAME, MODE_PRIVATE);
String enabledCategory = settings.getString(ReaderWidget.PREF_KEY_CATEGORY + widgetId, ReaderWidget.DEFAULT_CATEGORY);
int enabledCategoryId = 0;
for (int i = 0; i < enabledCategoriesNames.length; i++) {
if (enabledCategoriesNames[i].equals(enabledCategory)) {
enabledCategoryId = i;
}
}
listView.setItemChecked(enabledCategoryId, true);
}
}