package com.pennapps.labs.pennmobile; import android.os.Bundle; import android.support.v4.app.ListFragment; import android.support.v4.widget.SwipeRefreshLayout; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ListView; import android.widget.RelativeLayout; import android.widget.TextView; import com.pennapps.labs.pennmobile.adapters.LaundryMachineAdapter; import com.pennapps.labs.pennmobile.api.Labs; import com.pennapps.labs.pennmobile.classes.LaundryRoom; import com.pennapps.labs.pennmobile.classes.LaundryMachine; import java.util.Arrays; import java.util.LinkedList; import java.util.List; import butterknife.Bind; import butterknife.ButterKnife; import rx.functions.Action1; public class LaundryMachineTab extends ListFragment { private Labs mLabs; private MainActivity mActivity; private LaundryRoom laundryRoom; @Bind(R.id.loadingPanel) RelativeLayout loadingPanel; @Bind(R.id.no_results) TextView no_results; SwipeRefreshLayout swipeRefreshLayout; private List<LaundryMachine> machines; private ListView mListView; private boolean wash; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mLabs = MainActivity.getLabsInstance(); mActivity = (MainActivity) getActivity(); laundryRoom = getArguments().getParcelable(getString(R.string.laundry)); wash = getArguments().getInt(getString(R.string.laundry_position), 0) == 0; } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); mListView = getListView(); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = inflater.inflate(R.layout.laundry_machine_tab, container, false); ButterKnife.bind(this, v); swipeRefreshLayout = (SwipeRefreshLayout) v.findViewById(R.id.laundry_machine_swiperefresh); swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { @Override public void onRefresh() { getMachines(); } }); swipeRefreshLayout.setColorSchemeResources(R.color.color_accent, R.color.color_primary); if (getArguments() != null && getArguments().getParcelableArray(getString(R.string.laundry_machine_intent)) != null) { LaundryMachine[] array = (LaundryMachine[])getArguments() .getParcelableArray(getString(R.string.laundry_machine_intent)); if (array != null) { machines = new LinkedList<>(Arrays.asList(array)); } else { machines = new LinkedList<>(); } } if (machines == null || machines.isEmpty()) { getMachines(); } else { v.findViewById(R.id.loadingPanel).setVisibility(View.GONE); setMachines(machines, laundryRoom); } return v; } private void getMachines() { mLabs.laundryMachines(laundryRoom.hall_no) .subscribe(new Action1<List<LaundryMachine>>() { @Override public void call(final List<LaundryMachine> machines) { mActivity.runOnUiThread(new Runnable() { @Override public void run() { if (loadingPanel != null) { loadingPanel.setVisibility(View.GONE); } try { setMachines(machines, laundryRoom); swipeRefreshLayout.setRefreshing(false); } catch (NullPointerException ignore) { //it has gone to another page. } } }); } }, new Action1<Throwable>() { @Override public void call(Throwable throwable) { mActivity.runOnUiThread(new Runnable() { @Override public void run() { if (loadingPanel != null) { loadingPanel.setVisibility(View.GONE); } if (no_results != null) { no_results.setVisibility(View.VISIBLE); } try { swipeRefreshLayout.setRefreshing(false); } catch (NullPointerException ignore) { //it has gone to another page } } }); } }); } private void setMachines(List<LaundryMachine> machines, LaundryRoom laundryRoom) { this.machines = machines; LinkedList<LaundryMachine> filtered = new LinkedList<>(); String type; if (wash) { type = getString(R.string.laundry_washer_textview); } else { type = getString(R.string.laundry_dryer_textview); } for (LaundryMachine machine: machines) { if(machine.machine_type.contains(type)){ filtered.add(machine); } } LaundryMachineAdapter adapter = new LaundryMachineAdapter(mActivity, filtered, wash, laundryRoom); mListView.setAdapter(adapter); } public List<LaundryMachine> returnMachines() { return machines; } @Override public void onDestroyView() { super.onDestroyView(); getActivity().setTitle(R.string.laundry); ButterKnife.unbind(this); } }