/*
* Copyright (C) 2014 University of South Florida (sjbarbeau@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.ObaRegion;
import org.onebusaway.android.ui.MaterialListAdapter;
import org.onebusaway.android.ui.MaterialListItem;
import org.onebusaway.android.util.UIUtils;
import android.content.res.TypedArray;
import android.os.Bundle;
import android.support.v4.app.ListFragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import java.util.ArrayList;
import java.util.List;
import edu.usf.cutr.open311client.Open311Manager;
/**
* @author Cagri Cetin
*/
public class ReportTypeListFragment extends ListFragment implements AdapterView.OnItemClickListener {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.report_type_fragment, null, false);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
String reportTypes[];
String reportDesc[];
TypedArray reportIcons;
if (isOpen311Active()) {
reportTypes = getResources().getStringArray(R.array.report_types);
reportDesc = getResources().getStringArray(R.array.report_types_desc);
reportIcons = getResources().obtainTypedArray(R.array.report_types_icons);
} else {
reportTypes = getResources().getStringArray(R.array.report_types_without_open311);
reportDesc = getResources().getStringArray(R.array.report_types_desc_without_open311);
reportIcons = getResources().obtainTypedArray(R.array.report_types_icons_without_open311);
}
Boolean isEmailDefined = isEmailDefined();
List<MaterialListItem> materialListItems = new ArrayList<>();
for (int i = 0; i < reportTypes.length; i++) {
//Don't show the send app feedback section if email is not defined for region
if (!isEmailDefined && getString(R.string.rt_app_feedback).equals(reportTypes[i]))
continue;
MaterialListItem item = new MaterialListItem(reportTypes[i], reportDesc[i], reportIcons.getResourceId(i, -1));
materialListItems.add(item);
}
MaterialListAdapter adapter = new MaterialListAdapter(getActivity(), materialListItems);
setListAdapter(adapter);
getListView().setOnItemClickListener(this);
}
@Override
public void onStart() {
super.onStart();
ObaAnalytics.reportFragmentStart(this);
}
private Boolean isEmailDefined() {
ObaRegion region = Application.get().getCurrentRegion();
return !(region == null || region.getContactEmail() == null);
}
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
MaterialListItem rti = (MaterialListItem) getListView().getItemAtPosition(i);
if (getString(R.string.rt_customer_service).equals(rti.getTitle())) {
goToCustomerServices();
ObaAnalytics.reportEventWithCategory(ObaAnalytics.ObaEventCategory.UI_ACTION.toString(),
getString(R.string.analytics_action_problem),
getString(R.string.analytics_label_customer_service));
} else if (getString(R.string.rt_infrastructure_problem).equals(rti.getTitle())) {
((ReportActivity) getActivity()).createInfrastructureIssueActivity(
getString(R.string.ri_selected_service_stop));
ObaAnalytics.reportEventWithCategory(ObaAnalytics.ObaEventCategory.UI_ACTION.toString(),
getString(R.string.analytics_action_problem),
getString(R.string.analytics_label_stop_problem));
} else if (getString(R.string.rt_stop_problem).equals(rti.getTitle())) {
((ReportActivity) getActivity()).createInfrastructureIssueActivity(
getString(R.string.ri_selected_service_stop));
ObaAnalytics.reportEventWithCategory(ObaAnalytics.ObaEventCategory.UI_ACTION.toString(),
getString(R.string.analytics_action_problem),
getString(R.string.analytics_label_stop_problem));
} else if (getString(R.string.rt_arrival_problem).equals(rti.getTitle())) {
// Report bus stop issue
((ReportActivity) getActivity()).createInfrastructureIssueActivity(
getString(R.string.ri_selected_service_trip));
ObaAnalytics.reportEventWithCategory(ObaAnalytics.ObaEventCategory.UI_ACTION.toString(),
getString(R.string.analytics_action_problem),
getString(R.string.analytics_label_trip_problem));
} else if (getString(R.string.rt_app_feedback).equals(rti.getTitle())) {
// Send App feedback
String email = getString(R.string.ri_app_feedback_email);
String locationString = getActivity().getIntent()
.getStringExtra(BaseReportActivity.LOCATION_STRING);
UIUtils.sendEmail(getActivity(), email, locationString);
ObaAnalytics.reportEventWithCategory(ObaAnalytics.ObaEventCategory.UI_ACTION.toString(),
getString(R.string.analytics_action_problem),
getString(R.string.analytics_label_app_feedback));
if (locationString == null) {
ObaAnalytics.reportEventWithCategory(ObaAnalytics.ObaEventCategory.UI_ACTION.toString(),
getString(R.string.analytics_action_problem),
getString(R.string.analytics_label_app_feedback_without_location));
}
} else if (getString(R.string.rt_ideas).equals(rti.getTitle())) {
// Direct to ideascale website
goToIdeaScale();
ObaAnalytics.reportEventWithCategory(ObaAnalytics.ObaEventCategory.UI_ACTION.toString(),
getString(R.string.analytics_action_problem),
getString(R.string.analytics_label_idea_scale));
}
}
private void goToCustomerServices() {
((ReportActivity) getActivity()).createCustomerServiceFragment();
}
private void goToIdeaScale() {
UIUtils.goToUrl(getActivity(), getString(R.string.ideascale_url));
}
private Boolean isOpen311Active() {
ObaRegion currentRegion = Application.get().getCurrentRegion();
Boolean isOpen311Active = Boolean.FALSE;
if (currentRegion != null) {
isOpen311Active = Open311Manager.isOpen311Exist();
}
return isOpen311Active;
}
}