/* * #%L * Wheelmap - App * %% * Copyright (C) 2011 - 2012 Michal Harakal - Michael Kroez - Sozialhelden e.V. * %% * Wheelmap App based on the Wheelmap Service by Sozialhelden e.V. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS-IS" BASIS * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * #L% */ package org.wheelmap.android.fragment; import org.wheelmap.android.app.WheelmapApp; import org.wheelmap.android.model.CategoryOrNodeType; import org.wheelmap.android.model.Extra; import org.wheelmap.android.online.R; import android.app.AlertDialog; import android.app.Dialog; import android.app.SearchManager; import android.content.DialogInterface; import android.content.DialogInterface.OnClickListener; import android.os.Bundle; import android.support.v4.app.DialogFragment; import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.View; import android.view.inputmethod.EditorInfo; import android.widget.AdapterView; import android.widget.EditText; import android.widget.Spinner; import android.widget.TextView; import android.widget.TextView.OnEditorActionListener; import android.widget.AdapterView.OnItemSelectedListener; import de.akquinet.android.androlog.Log; public class SearchDialogFragment extends DialogFragment implements OnItemSelectedListener, OnClickListener, OnEditorActionListener { public final static String TAG = SearchDialogFragment.class.getSimpleName(); private EditText mKeywordText; private int mCategorySelected = Extra.UNKNOWN; private int mNodeTypeSelected = Extra.UNKNOWN; private float mDistance = Extra.UNKNOWN; private boolean mEnableBoundingBoxSearch = false; private Spinner mCategorySpinner; private Spinner mDistanceSpinner; public interface OnSearchDialogListener { public void onSearch(Bundle bundle); } public final static SearchDialogFragment newInstance(boolean showDistance, boolean showMapHint) { SearchDialogFragment dialog = new SearchDialogFragment(); Bundle b = new Bundle(); b.putBoolean(Extra.SHOW_DISTANCE, showDistance); b.putBoolean(Extra.SHOW_MAP_HINT, showMapHint); dialog.setArguments(b); return dialog; } @Override public Dialog onCreateDialog(Bundle savedInstanceState) { AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); View view = createView(); builder.setView(view); bindViews(view); Dialog d = builder.create(); return d; } protected View createView() { LayoutInflater inflater = LayoutInflater.from(getActivity()); View v = inflater.inflate(R.layout.fragment_dialog_search_combined, null); return v; } @SuppressWarnings("unchecked") protected void bindViews(View v) { mKeywordText = (EditText) v.findViewById(R.id.search_keyword); mKeywordText.setOnEditorActionListener(this); } @Override public void onResume() { super.onResume(); } private View mapHintContainer; private View distanceContainer; protected void setSearchMode(boolean enableBoundingBoxSearch) { Log.d(TAG, "enableBoundingBoxSearch = " + enableBoundingBoxSearch); mEnableBoundingBoxSearch = enableBoundingBoxSearch; mapHintContainer.setEnabled(mEnableBoundingBoxSearch); distanceContainer.setEnabled(!mEnableBoundingBoxSearch); } @Override public void onItemSelected(AdapterView<?> adapterView, View view, int position, long id) { if (adapterView == mCategorySpinner) { CategoryOrNodeType search = (CategoryOrNodeType) adapterView .getAdapter().getItem(position); switch (search.type) { case CATEGORY: mCategorySelected = search.id; break; case NODETYPE: mNodeTypeSelected = search.id; break; } } else if (adapterView == mDistanceSpinner) { String distance = (String) adapterView.getItemAtPosition(position); try { mDistance = Float.valueOf(distance); } catch (NumberFormatException e) { mDistance = Extra.UNKNOWN; } } } @Override public void onNothingSelected(AdapterView<?> parent) { } protected void sendSearchInstructions() { Bundle b = createSearchBundle(); WheelmapApp app = (WheelmapApp) this.getActivity().getApplicationContext(); app.setSaved(true); OnSearchDialogListener listener = (OnSearchDialogListener) getTargetFragment(); listener.onSearch(b); } protected Bundle createSearchBundle() { Bundle bundle = new Bundle(); String keyword = mKeywordText.getText().toString(); if (keyword.length() > 0) { bundle.putString(SearchManager.QUERY, keyword); } return bundle; } @Override public void onClick(DialogInterface dialog, int which) { sendSearchInstructions(); dismiss(); } @Override public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { if (EditorInfo.IME_ACTION_DONE == actionId) { sendSearchInstructions(); dismiss(); return true; } return false; } }