package com.gettingmobile.goodnews.util;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.DialogInterface.OnMultiChoiceClickListener;
import android.database.sqlite.SQLiteDatabase;
import com.gettingmobile.android.util.ApiLevel;
import com.gettingmobile.goodnews.Application;
import com.gettingmobile.goodnews.R;
import com.gettingmobile.google.reader.ElementId;
import com.gettingmobile.google.reader.Item;
import com.gettingmobile.google.reader.ItemState;
import com.gettingmobile.google.reader.Tag;
import com.gettingmobile.google.reader.db.ItemTagChangeDatabaseAdapter;
import com.gettingmobile.google.reader.db.TagDatabaseAdapter;
import java.util.List;
public final class TagSelectionDialogBuilder implements OnMultiChoiceClickListener {
private final Activity activity;
private final Application app;
private final Item item;
private final ElementId[] tagIds;
private final String[] tagTitles;
private final boolean[] tagSelections;
private final ItemTagChangeDatabaseAdapter itemTagChangeAdapter;
public TagSelectionDialogBuilder(
Activity activity, Item item, ItemTagChangeDatabaseAdapter itemTagChangeAdapter) {
this.activity = activity;
this.app = (Application) activity.getApplication();
this.item = itemTagChangeAdapter.adjustItemTags(item);
this.itemTagChangeAdapter = itemTagChangeAdapter;
/*
* init label list
*/
final SQLiteDatabase db = app.getDbHelper().getDatabase();
final List<Tag> tags =
TagFilter.filterSpecialTags(app.getSettings(), new TagDatabaseAdapter().readUserLabelsIgnoreFolders(db));
final int offset = 3;
tagIds = new ElementId[tags.size() + offset];
tagTitles = new String[tags.size() + offset];
tagSelections = new boolean[tags.size() + offset];
for (int i = offset; i < tagIds.length; ++i) {
final Tag tag = tags.get(i - offset);
tagIds[i] = tag.getId();
tagTitles[i] = tag.getTitle();
tagSelections[i] = item.hasTag(tag.getId());
}
tagIds[0] = ItemState.READ.getId();
tagTitles[0] = app.getString(R.string.tag_read);
tagSelections[0] = item.isRead();
tagIds[1] = app.getSettings().getLabelReadListId();
tagTitles[1] = Tag.getTitleById(tagIds[1]);
tagSelections[1] = item.hasTag(tagIds[1]);
tagIds[2] = ItemState.STARRED.getId();
tagTitles[2] = app.getString(R.string.tag_starred);
tagSelections[2] = item.hasTag(tagIds[2]);
}
protected AlertDialog showDialog(Activity parent) {
final AlertDialog.Builder b = new AlertDialog.Builder(parent);
b.setTitle(R.string.select_item_tags);
b.setNeutralButton(app.getString(R.string.close), null);
b.setMultiChoiceItems(tagTitles, tagSelections, this);
final AlertDialog dlg = b.create();
dlg.show();
return dlg;
}
public void show() {
if (ApiLevel.isAtLeast(ApiLevel.V_2_1)) {
showDialog(activity);
} else {
TagSelectionActivity.start(this, activity);
}
}
@Override
public void onClick(DialogInterface dialog, int which, boolean isChecked) {
final ElementId tagId = tagIds[which];
if (ItemState.READ.getId().equals(tagId)) {
itemTagChangeAdapter.markItemRead(item, isChecked);
} else {
if (isChecked) {
itemTagChangeAdapter.addItemTag(item, tagId);
} else {
itemTagChangeAdapter.removeItemTag(item, tagId);
}
}
}
}