/* * Copyright (C) 2009 - 2013 Niall 'Rivernile' Scott * * This software is provided 'as-is', without any express or implied * warranty. In no event will the authors or contributors be held liable for * any damages arising from the use of this software. * * The aforementioned copyright holder(s) hereby grant you a * non-transferrable right to use this software for any purpose (including * commercial applications), and to modify it and redistribute it, subject to * the following conditions: * * 1. This notice may not be removed or altered from any file it appears in. * * 2. Any modifications made to this software, except those defined in * clause 3 of this agreement, must be released under this license, and * the source code of any modifications must be made available on a * publically accessible (and locateable) website, or sent to the * original author of this software. * * 3. Software modifications that do not alter the functionality of the * software but are simply adaptations to a specific environment are * exempt from clause 2. */ package uk.org.rivernile.edinburghbustracker.android.fragments.general; import android.app.Activity; import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; import uk.org.rivernile.edinburghbustracker.android.R; import uk.org.rivernile.edinburghbustracker.android.SettingsDatabase; /** * This Fragment allows the user to add or edit a currently saved favourite * bus stop. It will change its title and action depending on whether the bus * stop is already saved in the database. * * @author Niall Scott */ public class AddEditFavouriteStopFragment extends Fragment implements View.OnClickListener { /** The stopCode argument key. */ public static final String ARG_STOPCODE = "stopCode"; /** The stopName argument key. */ public static final String ARG_STOPNAME = "stopName"; private String stopCode; private String stopName; private EditText edit; private Button btnOkay; private boolean editing; private SettingsDatabase sd; /** * Create a new instance of AddEditFavouriteStopFragment. * * @param stopCode The bus stop code to add or edit as a favourite. * @param stopName The name for this bus stop which is pre-populated in the * EditText field. * @return A new instance of this Fragment. */ public static AddEditFavouriteStopFragment newInstance( final String stopCode, final String stopName) { final AddEditFavouriteStopFragment f = new AddEditFavouriteStopFragment(); final Bundle b = new Bundle(); b.putString(ARG_STOPCODE, stopCode); b.putString(ARG_STOPNAME, stopName); f.setArguments(b); return f; } /** * {@inheritDoc} */ @Override public void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); final Bundle args = getArguments(); // Make sure that arguments exist. If they don't, throw an exception. if(args == null) throw new IllegalStateException("There were no " + "arguments supplied to AddEditFavouriteStopsFragment."); final Activity activity = getActivity(); sd = SettingsDatabase.getInstance(activity.getApplicationContext()); // Get the arguments. stopCode = args.getString(ARG_STOPCODE); stopName = args.getString(ARG_STOPNAME); // Check that the stopCode exists. if(stopCode == null || stopCode.length() == 0) throw new IllegalArgumentException("The stopCode must not be " + "null or blank."); // If the stopName doesn't exist, try to get the existing name from // the settings database. if(stopName == null || stopName.length() == 0) stopName = sd.getNameForStop(stopCode); // Check to see if it already exists. editing = sd.getFavouriteStopExists(stopCode); // Set the appropriate title. if(editing) { activity.setTitle(getString(R.string.addeditstop_title_edit) + " " + stopCode); } else { activity.setTitle(getString(R.string.addeditstop_title_add) + " " + stopCode); } } /** * {@inheritDoc} */ @Override public View onCreateView(final LayoutInflater inflater, final ViewGroup container, final Bundle savedInstanceState) { // Inflate the View from the XML resource. final View v = inflater.inflate(R.layout.addeditfavouritestop, container, false); // Get the UI elements. edit = (EditText)v.findViewById(R.id.addeditstop_edit_stopname); btnOkay = (Button)v.findViewById(R.id.addeditstop_button_ok); final Button btnCancel = (Button)v.findViewById( R.id.addeditstop_button_cancel); btnOkay.setOnClickListener(this); btnCancel.setOnClickListener(this); if (savedInstanceState == null && stopName != null) { edit.setText(stopName); edit.setSelection(stopName.length()); } return v; } /** * {@inheritDoc} */ @Override public void onClick(final View v) { final Activity activity = getActivity(); if(v == btnOkay) { final String s = edit.getText().toString().trim(); // The stop name is an empty string. Alert the user that this is // not allowed. if(s.length() == 0) { Toast.makeText(activity, R.string.addeditstop_error_blankstopname, Toast.LENGTH_LONG).show(); return; } // Whether we add or edit depends on whether the favourite stop // already exists. if(editing) { sd.modifyFavouriteStop(stopCode, s); } else { sd.insertFavouriteStop(stopCode, s); } } // For both confirming and cancelling, the Activity needs to finish. activity.finish(); } }