package de.blau.android.propertyeditor;
import android.content.Context;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import de.blau.android.App;
import de.blau.android.R;
import de.blau.android.osm.OsmElement;
import de.blau.android.osm.OsmElement.ElementType;
import de.blau.android.presets.Preset;
import de.blau.android.presets.Preset.PresetClickHandler;
import de.blau.android.presets.Preset.PresetGroup;
import de.blau.android.presets.Preset.PresetItem;
import de.blau.android.propertyeditor.PresetFragment.OnPresetSelectedListener;
import de.blau.android.util.BaseFragment;
public class RecentPresetsFragment extends BaseFragment {
private static final String DEBUG_TAG = RecentPresetsFragment.class.getSimpleName();
private OnPresetSelectedListener mListener;
private OsmElement element;
private Preset[] presets;
private boolean enabled = true;
/**
*/
static public RecentPresetsFragment newInstance(OsmElement element) {
RecentPresetsFragment f = new RecentPresetsFragment();
Bundle args = new Bundle();
args.putSerializable("element", element);
f.setArguments(args);
// f.setShowsDialog(true);
return f;
}
@Override
public void onAttachToContext(Context context) {
Log.d(DEBUG_TAG, "onAttachToContext");
try {
mListener = (OnPresetSelectedListener) context;
} catch (ClassCastException e) {
throw new ClassCastException(context.toString() + " must implement OnPresetSelectedListener");
}
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d(DEBUG_TAG, "onCreate");
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
LinearLayout presetsLayout = (LinearLayout) inflater.inflate(R.layout.recentpresets_view,null);
element = (OsmElement) getArguments().getSerializable("element");
presets = App.getCurrentPresets(getActivity());
View v = getRecentPresetsView(presetsLayout, element, presets);
if (v != null) {
presetsLayout.addView(v);
presetsLayout.setVisibility(View.VISIBLE);
}
return presetsLayout;
}
private View getRecentPresetsView(final LinearLayout presetLayout, final OsmElement element, final Preset[] presets) {
View v = null;
if (presets != null && presets.length >= 1 && element != null) {
// check if any of the presets has a MRU
boolean mruFound = false;
for (Preset p:presets) {
if (p!=null) {
if (p.hasMRU()) {
mruFound = true;
break;
}
}
}
if (mruFound) {
final ElementType filterType = element.getType();
final PresetClickHandler presetClickHandler = new PresetClickHandler() {
@Override
public void onItemClick(PresetItem item) {
if (!enabled) {
return;
}
Log.d(DEBUG_TAG, "normal click");
mListener.onPresetSelected(item);
recreateRecentPresetView(presetLayout);
}
@Override
public boolean onItemLongClick(PresetItem item) {
if (!enabled) {
return true;
}
Log.d(DEBUG_TAG, "long click");
removePresetFromMRU(presetLayout, item);
return true;
}
@Override
public void onGroupClick(PresetGroup group) {
// should not have groups
}
@Override
public boolean onGroupLongClick(PresetGroup group) {
return false;
}
};
v = presets[0].getRecentPresetView(getActivity(), presets, presetClickHandler, filterType); //TODO this should really be a call of a static method, all MRUs get added to this view
v.setId(R.id.recentPresets);
} else {
Log.d(DEBUG_TAG,"getRecentPresetsView no MRU found!");
}
} else {
Log.d(DEBUG_TAG,"getRecentPresetsView problem with presets or element " + element);
}
return v;
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
Log.d(DEBUG_TAG, "onSaveInstanceState");
}
@Override
public void onPause() {
super.onPause();
Log.d(DEBUG_TAG, "onPause");
}
@Override
public void onStop() {
super.onStop();
Log.d(DEBUG_TAG, "onStop");
}
@Override
public void onDestroyView() {
super.onDestroyView();
Log.d(DEBUG_TAG, "onDestroyView");
}
@Override
public void onDestroy() {
super.onDestroy();
Log.d(DEBUG_TAG, "onDestroy");
}
/**
* Removes a preset from the MRU
* @param item the preset to apply
*/
private void removePresetFromMRU(LinearLayout presetLayout, PresetItem item) {
//
Preset[] presets = App.getCurrentPresets(getActivity());
if (presets != null) {
for (Preset p:presets) {
if (p.contains(item)) {
p.removeRecentlyUsed(item);
break;
}
}
}
recreateRecentPresetView(presetLayout);
}
public void recreateRecentPresetView() {
recreateRecentPresetView((LinearLayout) getOurView());
}
private void recreateRecentPresetView(LinearLayout presetLayout) {
Log.d(DEBUG_TAG,"recreateRecentPresetView");
presetLayout.removeAllViews();
View v = getRecentPresetsView(presetLayout, element, presets);
if (v != null) {
presetLayout.addView(v);
presetLayout.setVisibility(View.VISIBLE);
} else {
}
presetLayout.invalidate();
}
/**
* Return the view we have our rows in and work around some android craziness
* @return
*/
private View getOurView() {
// android.support.v4.app.NoSaveStateFrameLayout
View v = getView();
if (v != null) {
if ( v.getId() == R.id.recentpresets_layout) {
Log.d(DEBUG_TAG,"got correct view in getView");
return v;
} else {
v = v.findViewById(R.id.recentpresets_layout);
if (v == null) {
Log.d(DEBUG_TAG,"didn't find R.id.recentpresets_layoutt");
} else {
Log.d(DEBUG_TAG,"Found R.id.recentpresets_layout");
}
return v;
}
} else {
Log.d(DEBUG_TAG,"got null view in getView");
}
return null;
}
void enable() {
enabled = true;
}
void disable() {
enabled = false;
}
}