package com.gettingmobile.goodnews.actions;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.database.sqlite.SQLiteDatabase;
import android.view.LayoutInflater;
import android.view.ViewGroup;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.Spinner;
import com.gettingmobile.android.app.DialogFactory;
import com.gettingmobile.android.app.actions.AbstractAction;
import com.gettingmobile.android.app.actions.ActionContext;
import com.gettingmobile.goodnews.Application;
import com.gettingmobile.goodnews.R;
import com.gettingmobile.goodnews.sync.SyncService;
import com.gettingmobile.google.reader.ElementId;
import com.gettingmobile.google.reader.ItemRequestSpecification;
import com.gettingmobile.google.reader.db.ItemRequestSpecificationDatabaseAdapter;
public final class FetchOldArticlesAction extends AbstractAction<Application> {
private final ElementId streamId;
public FetchOldArticlesAction(ElementId streamId) {
this.streamId = streamId;
}
@Override
public boolean onFired(final ActionContext<? extends Application> actionContext) {
final ViewGroup view = (ViewGroup) LayoutInflater.from(
actionContext.getActivity()).inflate(R.layout.fetch_old, null);
prepareDialog(actionContext.getApp(), view);
new AlertDialog.Builder(actionContext.getActivity()).
setTitle(R.string.fetch_old_title).
setView(view).
setNegativeButton(R.string.cancel, null).
setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
processDialog(actionContext.getApp(), actionContext.getActivity(), view);
dialogInterface.dismiss();
}
}).
show();
return true;
}
private void prepareDialog(Application app, ViewGroup view) {
/*
* set default max ages
*/
final int defaultAgeInDays = app.getSettings().getFetchOldMaxAge();
final int[] agesInDays = view.getContext().getResources().getIntArray(R.array.fetch_old_max_age_choice_values);
int index = 0;
while (index < agesInDays.length && defaultAgeInDays > agesInDays[index]) {
++index;
}
if (index > agesInDays.length)
index = agesInDays.length - 1;
final Spinner maxAgeSpinner = (Spinner) view.findViewById(R.id.max_age);
maxAgeSpinner.setSelection(index);
/*
* set default max count
*/
final EditText maxCountTextEdit = (EditText) view.findViewById(R.id.max_count);
maxCountTextEdit.setText(Integer.toString(app.getSettings().getFetchOldMaxCount()));
}
private void processDialog(Application app, Activity activity, ViewGroup view) {
/*
* get max ages
*/
final Spinner maxAgeSpinner = (Spinner) view.findViewById(R.id.max_age);
final int[] agesInDays = view.getContext().getResources().getIntArray(R.array.fetch_old_max_age_choice_values);
final int ageInDays = agesInDays[maxAgeSpinner.getSelectedItemPosition()];
app.getSettings().setFetchOldMaxAge(ageInDays);
/*
* get max count
*/
final EditText maxCountTextEdit = (EditText) view.findViewById(R.id.max_count);
final String maxCountStr = maxCountTextEdit.getText().toString();
final int maxCount = (maxCountStr != null && maxCountStr.length() > 0) ? Integer.parseInt(maxCountStr) : 0;
app.getSettings().setFetchOldMaxCount(maxCount);
/*
* persist the request
*/
final SQLiteDatabase db = app.getDbHelper().getDatabase();
db.beginTransaction();
try {
new ItemRequestSpecificationDatabaseAdapter().insertOrUpdate(db,
new ItemRequestSpecification(streamId, ageInDays, maxCount));
db.setTransactionSuccessful();
} finally {
db.endTransaction();
}
/*
* sync now?
*/
final CheckBox syncCheckBox = (CheckBox) view.findViewById(R.id.sync);
if (syncCheckBox.isChecked()) try {
final SyncService syncService = app.getSyncService().getService();
syncService.startFullSync();
} catch (IllegalStateException ex) {
if (!activity.isFinishing()) {
DialogFactory.showConfirmationDialog(activity,
R.string.fetch_old_title, R.string.fetch_old_sync_already_running, R.string.close);
}
}
}
}