package org.holoeverywhere.demo.fragments;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import org.holoeverywhere.app.Activity;
import org.holoeverywhere.app.DialogFragment;
import org.holoeverywhere.app.Fragment;
import org.holoeverywhere.app.ListFragment;
import org.holoeverywhere.demo.DemoActivity;
import org.holoeverywhere.demo.fragments.dialogs.DialogsFragment;
import org.holoeverywhere.demo.fragments.lists.ListsFragment;
import org.holoeverywhere.demo.fragments.menus.MenusFragments;
import org.holoeverywhere.demo.fragments.pickers.PickersFragment;
import org.holoeverywhere.demo.fragments.tabber.TabsFragment;
import org.holoeverywhere.demo.widget.DemoAdapter;
import org.holoeverywhere.demo.widget.DemoItem;
import org.holoeverywhere.widget.ListView;
import org.holoeverywhere.widget.Toast;
public class OtherFragment extends ListFragment {
private OtherAdapter mAdapter;
public void addItem(CharSequence label, Class<? extends Fragment> clazz) {
addItem(label, new FragmentListener(clazz));
}
public void addItem(CharSequence label, Intent activityIntent) {
addItem(label, new ActivityListener(activityIntent));
}
public void addItem(CharSequence label, OnOtherItemClickListener listener) {
addItem(label, listener, false);
}
private void addItem(CharSequence label, OnOtherItemClickListener listener,
boolean longClickable) {
OtherItem item = new OtherItem();
item.label = label;
item.listener = listener;
item.longClickable = longClickable;
addItem(item);
}
public void addItem(DemoItem item) {
mAdapter.add(item);
}
public void addItemActivity(CharSequence label, Class<? extends Activity> clazz) {
addItem(label, new ActivityListener(clazz));
}
public void addItemWithLongClick(CharSequence label, OnOtherItemClickListener listener) {
addItem(label, listener, true);
}
protected CharSequence getTitle() {
return "Other";
}
protected void onHandleData() {
addItem("Lists", ListsFragment.class);
addItem("Dialogs", DialogsFragment.class);
addItem("Pickers", PickersFragment.class);
addItem("Menus", MenusFragments.class);
addItem("Font Palette", FontPalette.class);
addItem("Toast", new OnOtherItemClickListener() {
@Override
public void onClick(OtherItem otherItem) {
Toast.makeText(getSupportActivity(), "Toast example", Toast.LENGTH_SHORT).show();
}
});
addItem("Addon: Tabber", TabsFragment.class);
}
protected void onPrepareListView(ListView list) {
}
@Override
public void onResume() {
super.onResume();
final CharSequence title = getTitle();
if (title != null) {
getSupportActionBar().setSubtitle(title);
}
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
mAdapter = new OtherAdapter(getSupportActivity());
onHandleData();
boolean handleLongClick = false;
for (int i = 0; i < mAdapter.getCount(); i++) {
if (mAdapter.getItem(i).longClickable) {
handleLongClick = true;
break;
}
}
ListView list = getListView();
onPrepareListView(list);
setListAdapter(mAdapter);
list.setOnItemClickListener(mAdapter);
if (handleLongClick) {
list.setOnItemLongClickListener(mAdapter);
}
}
public static interface OnOtherItemClickListener {
public void onClick(OtherItem otherItem);
}
private static final class OtherAdapter extends DemoAdapter {
public OtherAdapter(Context context) {
super(context);
}
}
public static final class OtherItem extends DemoItem {
public OnOtherItemClickListener listener;
private boolean processLongClick = false;
@Override
public void onClick() {
if (listener != null && !longClickable) {
listener.onClick(this);
}
}
@Override
public boolean onLongClick() {
if (listener != null && longClickable && !processLongClick) {
processLongClick = true;
listener.onClick(this);
processLongClick = false;
return true;
}
return super.onLongClick();
}
}
private final class ActivityListener implements OnOtherItemClickListener {
private Intent mIntent;
public ActivityListener(Class<? extends Activity> clazz) {
this(new Intent(getSupportActivity(), clazz));
}
public ActivityListener(Intent intent) {
mIntent = intent;
}
@Override
public void onClick(OtherItem otherItem) {
startActivity(mIntent);
}
}
private final class FragmentListener implements OnOtherItemClickListener {
private Class<? extends Fragment> mClass;
public FragmentListener(Class<? extends Fragment> clazz) {
mClass = clazz;
}
@Override
public void onClick(OtherItem otherItem) {
Fragment fragment = Fragment.instantiate(mClass);
if (fragment instanceof DialogFragment) {
((DialogFragment) fragment).show(getSupportActivity());
} else {
((DemoActivity) getSupportActivity()).addonSlider()
.obtainSliderMenu().replaceFragment(fragment);
}
}
}
}