/*
* Copyright (C) 2015 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.dialog;
import org.onebusaway.android.R;
import org.onebusaway.android.io.ObaAnalytics;
import org.onebusaway.android.io.elements.ObaAgency;
import org.onebusaway.android.io.elements.ObaAgencyWithCoverage;
import org.onebusaway.android.io.request.ObaAgenciesWithCoverageRequest;
import org.onebusaway.android.io.request.ObaAgenciesWithCoverageResponse;
import org.onebusaway.android.report.ui.BaseReportActivity;
import org.onebusaway.android.util.ArrayAdapter;
import org.onebusaway.android.util.UIUtils;
import android.content.Context;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.DialogFragment;
import android.support.v4.app.LoaderManager;
import android.support.v4.content.AsyncTaskLoader;
import android.support.v4.content.Loader;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.widget.ImageButton;
import android.widget.ListView;
import android.widget.TextView;
import java.util.Arrays;
public class CustomerServiceDialog extends DialogFragment implements
LoaderManager.LoaderCallbacks<ObaAgenciesWithCoverageResponse> {
private ListView mListView;
private ObaAgenciesWithCoverageResponse mResponse;
private Adapter mAdapter;
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
getLoaderManager().initLoader(0, null, this);
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.report_issue_customer_service, null, false);
mListView = (ListView) view.findViewById(R.id.list);
getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE);
return view;
}
@Override
public Loader<ObaAgenciesWithCoverageResponse> onCreateLoader(int id, Bundle args) {
return new AgenciesLoader(getActivity());
}
@Override
public void onLoadFinished(Loader<ObaAgenciesWithCoverageResponse> loader, ObaAgenciesWithCoverageResponse data) {
// Create our generic adapter
mResponse = data;
mAdapter = new Adapter(getActivity());
mListView.setAdapter(mAdapter);
//Process the list check phone & email
mAdapter.setData(Arrays.asList(data.getAgencies()));
}
@Override
public void onLoaderReset(Loader<ObaAgenciesWithCoverageResponse> loader) {
mListView.setAdapter(null);
mAdapter = null;
}
private class Adapter extends ArrayAdapter<ObaAgencyWithCoverage> {
Adapter(Context context) {
super(context, R.layout.report_issue_customer_service_item);
}
@Override
protected void initView(View view, ObaAgencyWithCoverage coverage) {
final ObaAgency agency = mResponse.getAgency(coverage.getId());
TextView text1 = (TextView) view.findViewById(R.id.ricsi_text);
text1.setText(agency.getName());
ImageButton phoneButton = (ImageButton) view.findViewById(R.id.ricsi_phone);
phoneButton.setColorFilter(getActivity().getResources().
getColor(R.color.navdrawer_icon_tint_selected));
ImageButton webButton = (ImageButton) view.findViewById(R.id.ricsi_web);
webButton.setColorFilter(getActivity().getResources().
getColor(R.color.navdrawer_icon_tint_selected));
ImageButton emailButton = (ImageButton) view.findViewById(R.id.ricsi_email);
emailButton.setColorFilter(getActivity().getResources().
getColor(R.color.navdrawer_icon_tint_selected));
if (TextUtils.isEmpty(agency.getEmail())) {
emailButton.setVisibility(View.INVISIBLE);
} else {
emailButton.setVisibility(View.VISIBLE);
emailButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String locationString = getActivity().getIntent().
getStringExtra(BaseReportActivity.LOCATION_STRING);
UIUtils.sendEmail(getActivity(), agency.getEmail(), locationString);
ObaAnalytics.reportEventWithCategory(ObaAnalytics.ObaEventCategory.UI_ACTION.toString(),
agency.getName() + "_" + getString(R.string.analytics_action_customer_service),
getString(R.string.analytics_label_customer_service_email));
if (locationString == null) {
ObaAnalytics.reportEventWithCategory(ObaAnalytics.ObaEventCategory.UI_ACTION.toString(),
agency.getName() + "_" + getString(R.string.analytics_action_customer_service),
getString(R.string.analytics_label_customer_service_email_without_location));
}
}
});
}
if (TextUtils.isEmpty(agency.getUrl())) {
webButton.setVisibility(View.INVISIBLE);
} else {
webButton.setVisibility(View.VISIBLE);
webButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
UIUtils.goToUrl(getActivity(), agency.getUrl());
ObaAnalytics.reportEventWithCategory(ObaAnalytics.ObaEventCategory.UI_ACTION.toString(),
agency.getName() + "_" + getString(R.string.analytics_action_customer_service),
getString(R.string.analytics_label_customer_service_web));
}
});
}
if (TextUtils.isEmpty(agency.getPhone())) {
phoneButton.setVisibility(View.INVISIBLE);
} else {
phoneButton.setVisibility(View.VISIBLE);
phoneButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
UIUtils.goToPhoneDialer(getActivity(), "tel:" + agency.getPhone());
ObaAnalytics.reportEventWithCategory(ObaAnalytics.ObaEventCategory.UI_ACTION.toString(),
agency.getName() + "_" + getString(R.string.analytics_action_customer_service),
getString(R.string.analytics_label_customer_service_phone));
}
});
}
}
}
private final static class AgenciesLoader
extends AsyncTaskLoader<ObaAgenciesWithCoverageResponse> {
AgenciesLoader(Context context) {
super(context);
}
@Override
public void onStartLoading() {
forceLoad();
}
@Override
public ObaAgenciesWithCoverageResponse loadInBackground() {
return ObaAgenciesWithCoverageRequest.newRequest(getContext()).call();
}
}
}