package net.osmand.plus.base; import android.graphics.Shader.TileMode; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.support.v4.view.MenuItemCompat; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.ExpandableListAdapter; import android.widget.ExpandableListView; import android.widget.ExpandableListView.OnChildClickListener; import net.osmand.plus.OsmandApplication; import net.osmand.plus.R; import net.osmand.plus.activities.OsmandActionBarActivity; public abstract class OsmandExpandableListFragment extends BaseOsmAndFragment implements OnChildClickListener { protected ExpandableListView listView; protected ExpandableListAdapter adapter; @Override public View onCreateView(android.view.LayoutInflater inflater, android.view.ViewGroup container, Bundle savedInstanceState) { View v = createView(inflater, container); listView = (ExpandableListView) v.findViewById(android.R.id.list); listView.setOnChildClickListener(this); if(this.adapter != null) { listView.setAdapter(this.adapter); } return v; } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); getExpandableListView().setBackgroundColor( getResources().getColor( getMyApplication().getSettings().isLightContent() ? R.color.bg_color_light : R.color.bg_color_dark)); } public View createView(android.view.LayoutInflater inflater, android.view.ViewGroup container) { setHasOptionsMenu(true); return inflater.inflate(R.layout.expandable_list, container, false); } public void setAdapter(ExpandableListAdapter a) { this.adapter = a; if(listView != null) { listView.setAdapter(a); } } public ExpandableListAdapter getAdapter() { return adapter; } public void fixBackgroundRepeat(View view) { Drawable bg = view.getBackground(); if (bg != null) { if (bg instanceof BitmapDrawable) { BitmapDrawable bmp = (BitmapDrawable) bg; // bmp.mutate(); // make sure that we aren't sharing state anymore bmp.setTileModeXY(TileMode.REPEAT, TileMode.REPEAT); } } } public ExpandableListView getExpandableListView() { return listView; } public void setListView(ExpandableListView listView) { this.listView = listView; listView.setOnChildClickListener(this); } public MenuItem createMenuItem(Menu m, int id, int titleRes, int iconLight, int iconDark, int menuItemType) { int r = isLightActionBar() ? iconLight : iconDark; MenuItem menuItem = m.add(0, id, 0, titleRes); if (r != 0) { menuItem.setIcon(r); } menuItem.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem item) { return onOptionsItemSelected(item); } }); MenuItemCompat.setShowAsAction(menuItem, menuItemType); return menuItem; } public boolean isLightActionBar() { return ((OsmandApplication) getActivity().getApplication()).getSettings().isLightActionBar(); } public void collapseTrees(final int count) { getActivity().runOnUiThread(new Runnable() { @Override public void run() { synchronized (adapter) { final ExpandableListView expandableListView = getExpandableListView(); for (int i = 0; i < adapter.getGroupCount(); i++) { int cp = adapter.getChildrenCount(i); if (cp < count) { expandableListView.expandGroup(i); } else { expandableListView.collapseGroup(i); } } } } }); } public OsmandActionBarActivity getActionBarActivity() { if (getActivity() instanceof OsmandActionBarActivity) { return (OsmandActionBarActivity) getActivity(); } return null; } }