package de.blau.android.propertyeditor; import java.util.ArrayList; import android.annotation.SuppressLint; import android.app.Activity; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.v4.app.DialogFragment; import android.support.v7.app.AlertDialog; import android.support.v7.app.AlertDialog.Builder; import android.support.v7.app.AppCompatDialog; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.widget.LinearLayout; import de.blau.android.App; import de.blau.android.R; import de.blau.android.osm.OsmElement; 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.ThemeUtils; public class PresetSearchResultsFragment extends DialogFragment { private static final String DEBUG_TAG = PresetSearchResultsFragment.class.getSimpleName(); private OnPresetSelectedListener mListener; private OsmElement element; private ArrayList<PresetItem> presets; private boolean enabled = true; /** */ static public PresetSearchResultsFragment newInstance(ArrayList<PresetItem>searchResults) { PresetSearchResultsFragment f = new PresetSearchResultsFragment(); Bundle args = new Bundle(); args.putSerializable("searchResults", searchResults); f.setArguments(args); // f.setShowsDialog(true); return f; } @Override public void onAttach(Activity activity) { super.onAttach(activity); Log.d(DEBUG_TAG, "onAttach"); try { mListener = (OnPresetSelectedListener) activity; } catch (ClassCastException e) { throw new ClassCastException(activity.toString() + " must implement OnPresetSelectedListener"); } } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Log.d(DEBUG_TAG, "onCreate"); } @NonNull @SuppressWarnings("unchecked") @SuppressLint("InflateParams") @Override public AppCompatDialog onCreateDialog(Bundle savedInstanceState) { final LayoutInflater inflater = ThemeUtils.getLayoutInflater(getActivity()); Builder builder = new AlertDialog.Builder(getActivity()); builder.setTitle(R.string.search_results_title); // inflater needs to be got from a themed view or else all our custom stuff will not style correctly LinearLayout presetsLayout = (LinearLayout) inflater.inflate(R.layout.preset_search_results_view,null); presets = (ArrayList<PresetItem>) getArguments().getSerializable("searchResults"); View v = getResultsView(presetsLayout, presets); if (v != null) { builder.setView(v); } return builder.create(); } private View getResultsView(final LinearLayout presetLayout, final ArrayList<PresetItem> presets) { View v = null; if (presets != null && presets.size() >= 1 ) { final PresetClickHandler presetClickHandler = new PresetClickHandler() { @Override public void onItemClick(PresetItem item) { if (!enabled) { return; } Log.d(DEBUG_TAG, "normal click"); mListener.onPresetSelected(item); dismiss(); } @Override public void onGroupClick(PresetGroup group) { // should not have groups } @Override public boolean onItemLongClick(PresetItem item) { return false; } @Override public boolean onGroupLongClick(PresetGroup group) { return false; } }; Preset[] currentPresets = App.getCurrentPresets(getActivity()); if (!(currentPresets != null && currentPresets.length > 0)) { return null; } PresetGroup results = new Preset().new PresetGroup(null, "search results", null); for (PresetItem p: presets) { if (p != null ) { results.addElement(p); } } v = results.getGroupView(getActivity(), presetClickHandler, null, null); // v.setBackgroundColor(getResources().getColor(R.color.tagedit_field_bg)); int padding = ThemeUtils.getDimensionFromAttribute(getActivity(), R.attr.dialogPreferredPadding); v.setPadding(padding - Preset.SPACING, Preset.SPACING, padding- Preset.SPACING, padding); } else { Log.d(DEBUG_TAG,"getResultsView problem"); } 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"); } /** * Return the view we have our rows in and work around some android craziness * @return */ public 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; } }