org.wheelmap.android.fragment.SearchDialogFragment.java Source code

Java tutorial

Introduction

Here is the source code for org.wheelmap.android.fragment.SearchDialogFragment.java

Source

/*
 * #%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;
    }

}