package net.basilwang;
import java.util.List;
import net.basilwang.dao.SemesterService;
import net.basilwang.entity.Semester;
import net.basilwang.listener.AddSubMenuListener;
import net.basilwang.listener.ShowTipListener;
import net.basilwang.utils.PreferenceUtils;
import net.basilwang.utils.TipUtils;
import android.content.Context;
import android.preference.PreferenceManager;
import android.view.View;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.Spinner;
import net.basilwang.R;
import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuItem;
import com.actionbarsherlock.view.MenuItem.OnActionExpandListener;
import com.actionbarsherlock.view.SubMenu;
public class AddSubMenu implements ShowTipListener {
private SubMenu sub;
private Context context;
private AddSubMenuListener listener;
private int tipPhotoId;
private String preferKey;
public void initSub(Menu menu) {
sub = menu.addSubMenu("下载设置");
sub.getItem()
.setIcon(R.drawable.btn_download_setting)
.setActionView(R.layout.collapsible_spinner)
.setShowAsAction(
MenuItem.SHOW_AS_ACTION_ALWAYS
| MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW);
}
public void setSubMenuItemListener(
final OnItemSelectedListener spinnerListener,
final View.OnClickListener buttonListener) {
SubMenuListener menuListener = new SubMenuListener(spinnerListener,
buttonListener);
sub.getItem().setOnActionExpandListener(menuListener);
}
public AddSubMenu(Menu menu, Context context, AddSubMenuListener listener) {
this.context = context;
initSub(menu);
this.listener = listener;
}
public SubMenu getSubMenu() {
return sub;
}
public void setTipPhotoAndPreferKey(int tipPhotoId, String key) {
this.tipPhotoId = tipPhotoId;
this.preferKey = key;
}
@Override
public void showTipIfNecessary() {
int tip = PreferenceManager.getDefaultSharedPreferences(context)
.getInt(preferKey, 0);
if (tip == 0) {
TipUtils.showTipIfNecessary(context, tipPhotoId, this);
}
}
@Override
public void dismissTip() {
PreferenceUtils.modifyIntValueInPreferences(context, preferKey, 1);
}
private class SubMenuListener implements OnActionExpandListener {
private final OnItemSelectedListener spinnerListener;
private final View.OnClickListener buttonListener;
public SubMenuListener(final OnItemSelectedListener spinnerListener,
final View.OnClickListener buttonListener) {
this.spinnerListener = spinnerListener;
this.buttonListener = buttonListener;
}
public void initSpinner(MenuItem item) {
Spinner semester = (Spinner) item.getActionView().findViewById(
R.id.semester_spinner);
SemesterArrayAdapter semesterAdapter = new SemesterArrayAdapter(
context, R.layout.semester_spinner_textview);
semesterAdapter
.setDropDownViewResource(android.R.layout.select_dialog_item);
semester.setAdapter(semesterAdapter);
semester.setOnItemSelectedListener(spinnerListener);
if (listener.getSpinnerDefaultPosition() != -1) {
setSpinnerSelectedPosition(semester,
listener.getSpinnerDefaultPosition());
}
}
public void setSpinnerSelectedPosition(Spinner spinner, int position) {
spinner.setSelection(position);
}
public void initButton(MenuItem item) {
Button download = (Button) item.getActionView().findViewById(
R.id.download_semester_button);
download.setOnClickListener(buttonListener);
}
public boolean onMenuItemActionExpand(MenuItem item) {
initSpinner(item);
initButton(item);
showTipIfNecessary();
return true;
}
@Override
public boolean onMenuItemActionCollapse(MenuItem arg0) {
return true;
}
}
private class SemesterArrayAdapter extends ArrayAdapter<String> {
private SemesterService semesterService;
private String[] semesters;
public SemesterArrayAdapter(Context context, int textViewResourceId) {
super(context, textViewResourceId);
semesterService = new SemesterService(context);
List<Semester> listSemester = semesterService.getSemesters();
if (listSemester.size() > 0) {
semesters = new String[listSemester.size()];
for (int i = 0; i < semesters.length; i++) {
semesters[i] = listSemester.get(i).getName();
}
} else {
semesters = new String[] { "请添加帐号、" };
}
}
@Override
public int getCount() {
return semesters.length;
}
@Override
public String getItem(int position) {
return semesters[position].replace("|", "第") + "学期";
}
@Override
public long getItemId(int index) {
return index;
}
}
}