package org.azavea.otm.ui;
import android.app.Fragment;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import com.joelapenna.foursquared.widget.SegmentedButton;
import org.azavea.lists.InfoList;
import org.azavea.lists.ListObserver;
import org.azavea.lists.NearbyList;
import org.azavea.lists.data.DisplayableModel;
import org.azavea.lists.data.DisplayablePlot;
import org.azavea.otm.App;
import org.azavea.otm.R;
import org.azavea.otm.data.Plot;
import org.azavea.otm.data.User;
import java.util.ArrayList;
public class ListDisplay extends Fragment implements ListObserver {
private ListView listView;
private InfoList infoList;
private ProgressDialog dialog;
private ArrayAdapter<DisplayableModel> adapter;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
super.onCreateView(inflater, container, savedInstanceState);
View view = inflater.inflate(R.layout.list_trees, container, false);
// Create the segmented buttons
SegmentedButton buttons = (SegmentedButton) view.findViewById(R.id.segmented);
buttons.clearButtons();
ArrayList<String> buttonNames = new ArrayList<>();
buttonNames.add(getString(R.string.toggle_nearby));
buttonNames.add(getString(R.string.toggle_recent));
if (App.isPendingEnabled()) {
buttonNames.add(1, getString(R.string.toggle_pending));
}
buttons.addButtons(buttonNames.toArray(new String[buttonNames.size()]));
buttons.setOnClickListener(this::processRadioButtonSelection);
return view;
}
@Override
public void onHiddenChanged(boolean hidden) {
super.onHiddenChanged(hidden);
if (hidden && infoList != null) {
infoList.removeLocationUpdating();
}
}
@Override
public void onPause() {
super.onPause();
infoList.removeLocationUpdating();
}
@Override
public void onResume() {
super.onResume();
listView = (ListView) getActivity().findViewById(R.id.listItems);
dialog = ProgressDialog.show(getActivity(), "", "Loading. Please wait...", true);
infoList = App.getNearbyList(getActivity());
infoList.addObserver(this);
infoList.setupLocationUpdating(getActivity().getApplicationContext());
listView.setOnItemClickListener(getOnClickListener());
processRadioButtonSelection(0);
update();
}
private void processRadioButtonSelection(int index) {
dialog.show();
NearbyList nearbyList = (NearbyList) infoList;
switch (index) {
case 0:
nearbyList.setFilterRecent(false);
nearbyList.setFilterPending(false);
break;
case 1:
nearbyList.setFilterRecent(true);
nearbyList.setFilterPending(false);
break;
case 2:
nearbyList.setFilterRecent(false);
nearbyList.setFilterPending(true);
break;
}
nearbyList.update();
}
public ListView.OnItemClickListener getOnClickListener() {
return (a, v, i, l) -> {
Intent viewPlot = new Intent(getActivity(), TreeInfoDisplay.class);
Plot selectedPlot = ((DisplayablePlot) a.getItemAtPosition(i)).getPlot();
viewPlot.putExtra("plot", selectedPlot.getData().toString());
User user = App.getLoginManager().loggedInUser;
if (user != null) {
viewPlot.putExtra("user", user.getData().toString());
} else {
// extra "user" will be null, which is handled in the
// activity.
}
ListDisplay.this.startActivity(viewPlot);
};
}
@Override
public void update() {
if (getActivity() != null) {
adapter = new ArrayAdapter<>(getActivity(), R.layout.simple_list_item, android.R.id.text1,
infoList.getDisplayValues());
listView.setAdapter(adapter);
adapter.notifyDataSetChanged();
dialog.hide();
}
}
}