/* * Copyright (C) 2012 Paul Watts (paulcwatts@gmail.com) * * 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. */ package org.onebusaway.android.report.ui; import org.onebusaway.android.R; import org.onebusaway.android.app.Application; import org.onebusaway.android.io.ObaAnalytics; import org.onebusaway.android.io.elements.ObaStop; import org.onebusaway.android.io.request.ObaReportProblemWithStopRequest; import android.content.Context; import android.location.Location; import android.os.Bundle; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentTransaction; import android.support.v7.app.AppCompatActivity; import android.text.TextUtils; import android.util.Log; import android.view.View; import android.view.inputmethod.InputMethodManager; import android.widget.ArrayAdapter; import android.widget.ImageView; import android.widget.Spinner; import android.widget.TextView; import android.widget.Toast; public class ReportStopProblemFragment extends ReportProblemFragmentBase { public static final String STOP_ID = ".StopId"; public static final String STOP_NAME = ".StopName"; public static final String CODE = ".Code"; public static final String USER_COMMENT = ".UserComment"; public static final String TAG = "RprtStopProblemFragment"; public static void show(AppCompatActivity activity, ObaStop stop, Integer containerViewId) { FragmentManager fm = activity.getSupportFragmentManager(); Bundle args = new Bundle(); args.putString(STOP_ID, stop.getId()); // We don't use the stop name map here...we want the actual stop name. args.putString(STOP_NAME, stop.getName()); // Create the list fragment and add it as our sole content. ReportStopProblemFragment content = new ReportStopProblemFragment(); content.setArguments(args); FragmentTransaction ft = fm.beginTransaction(); if (containerViewId == null) { ft.replace(android.R.id.content, content, TAG); } else { ft.replace(containerViewId, content, TAG); } ft.addToBackStack(null); try { ft.commit(); } catch (IllegalStateException e) { Log.e(TAG, "Cannot show ReportStopProblemFragment after onSaveInstanceState has been called"); } } private TextView mUserComment; @Override protected int getLayoutId() { return R.layout.report_stop_problem; } @Override public void onViewCreated(View view, Bundle savedInstanceState) { // The code spinner mCodeView = (Spinner) view.findViewById(R.id.report_problem_code); ArrayAdapter<?> adapter = ArrayAdapter.createFromResource( getActivity(), R.array.report_stop_problem_code, android.R.layout.simple_spinner_item); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); mCodeView.setAdapter(adapter); // Comment mUserComment = (TextView) view.findViewById(R.id.report_problem_comment); if (savedInstanceState != null) { int position = savedInstanceState.getInt(CODE); mCodeView.setSelection(position); CharSequence comment = savedInstanceState.getCharSequence(USER_COMMENT); mUserComment.setText(comment); } SPINNER_TO_CODE = new String[]{ null, ObaReportProblemWithStopRequest.NAME_WRONG, ObaReportProblemWithStopRequest.NUMBER_WRONG, ObaReportProblemWithStopRequest.LOCATION_WRONG, ObaReportProblemWithStopRequest.ROUTE_OR_TRIP_MISSING, ObaReportProblemWithStopRequest.OTHER }; // Dynamically change the color of the small icons setupIconColors(); } private void setupIconColors() { ((ImageView) getActivity().findViewById(R.id.ic_category)).setColorFilter( getResources().getColor(R.color.material_gray)); ((ImageView) getActivity().findViewById(R.id.ic_action_info)).setColorFilter( getResources().getColor(R.color.material_gray)); } @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putInt(CODE, mCodeView.getSelectedItemPosition()); outState.putCharSequence(USER_COMMENT, mUserComment.getText()); } @Override protected void sendReport() { // Hide the soft keyboard. InputMethodManager imm = (InputMethodManager) getActivity().getSystemService( Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(mUserComment.getWindowToken(), 0); if (isReportArgumentsValid()) { ObaAnalytics.reportEventWithCategory(ObaAnalytics.ObaEventCategory.SUBMIT.toString(), getString(R.string.analytics_action_problem), getString(R.string.analytics_label_report_stop_problem)); super.sendReport(); } else { // Show error message if report arguments is not valid Toast.makeText(getActivity(), getString(R.string.report_problem_invalid_argument), Toast.LENGTH_LONG).show(); } } @Override protected ReportLoader createLoader(Bundle args) { String stopId = args.getString(STOP_ID); ObaReportProblemWithStopRequest.Builder builder = new ObaReportProblemWithStopRequest.Builder(getActivity(), stopId); // Code String code = SPINNER_TO_CODE[mCodeView.getSelectedItemPosition()]; if (code != null) { builder.setCode(code); } // Comment CharSequence comment = mUserComment.getText(); if (!TextUtils.isEmpty(comment)) { builder.setUserComment(comment.toString()); } // Location / Location accuracy Location location = Application.getLastKnownLocation(getActivity(), mGoogleApiClient); if (location != null) { builder.setUserLocation(location.getLatitude(), location.getLongitude()); if (location.hasAccuracy()) { builder.setUserLocationAccuracy((int) location.getAccuracy()); } } return new ReportLoader(getActivity(), builder.build()); } }