package com.vaguehope.onosendai.ui;
import java.util.List;
import android.os.AsyncTask;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.PopupMenu;
import com.vaguehope.onosendai.config.Column;
import com.vaguehope.onosendai.config.InlineMediaStyle;
import com.vaguehope.onosendai.model.ScrollState;
import com.vaguehope.onosendai.storage.DbInterface;
import com.vaguehope.onosendai.storage.DbInterface.Selection;
public class GotoMenu implements OnClickListener {
private static final int MNU_GOTO_BASE_ID = 100;
private final MainActivity mainActivity;
public GotoMenu (final MainActivity mainActivity) {
this.mainActivity = mainActivity;
}
@Override
public void onClick (final View v) {
final PopupMenu mnu = new PopupMenu(this.mainActivity, v);
final List<Column> columns = this.mainActivity.getConf().getColumns();
int i = 0;
for (final Column col : columns) {
final MenuItem menuItem = mnu.getMenu().add(Menu.NONE, MNU_GOTO_BASE_ID + i, Menu.NONE, col.getTitle());
final ScrollState scroll = this.mainActivity.getColumnScroll(col.getId());
new UnreadCountLoaderTask(this.mainActivity.getDb(), col, this.mainActivity.isShowFiltered(), menuItem, scroll)
.executeOnExecutor(this.mainActivity.getLocalEs());
i++;
}
mnu.setOnMenuItemClickListener(new GotoItemClientListener(columns, this.mainActivity));
mnu.show();
}
private static class GotoItemClientListener implements PopupMenu.OnMenuItemClickListener {
private final List<Column> columns;
private final MainActivity mainActivity;
public GotoItemClientListener (final List<Column> columns, final MainActivity mainActivity) {
this.columns = columns;
this.mainActivity = mainActivity;
}
@Override
public boolean onMenuItemClick (final MenuItem item) {
final int page = item.getItemId() - MNU_GOTO_BASE_ID;
if (page >= 0 && page < this.columns.size()) {
this.mainActivity.gotoPage(page);
return true;
}
return false;
}
}
private static class UnreadCountLoaderTask extends AsyncTask<Void, Void, Integer> {
private final DbInterface db;
private final Column column;
private final boolean showFiltered;
private final MenuItem menuItem;
private final ScrollState scroll;
public UnreadCountLoaderTask (final DbInterface db, final Column column, final boolean showFiltered, final MenuItem menuItem, final ScrollState scroll) {
this.db = db;
this.column = column;
this.showFiltered = showFiltered;
this.menuItem = menuItem;
this.scroll = scroll;
}
@Override
public String toString () {
return "unreadCountLoader";
}
@Override
protected Integer doInBackground (final Void... params) {
return this.db.getScrollUpCount(this.column.getId(),
this.showFiltered && this.column.getInlineMediaStyle() != InlineMediaStyle.SEAMLESS ? Selection.ALL : Selection.FILTERED,
this.column.getExcludeColumnIds(),
this.column.getInlineMediaStyle() == InlineMediaStyle.SEAMLESS,
this.scroll);
}
@Override
protected void onPostExecute (final Integer count) {
if (count != 0) this.menuItem.setTitle(this.menuItem.getTitle() + " (" + count + ")");
}
}
}