package com.thomasdh.roosterpgplus.Fragments; import android.os.Bundle; import android.preference.PreferenceManager; import android.support.v4.view.ViewPager; import android.support.v4.widget.SwipeRefreshLayout; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.TextView; import com.thomasdh.roosterpgplus.Adapters.AnimatedPagerAdapter; import com.thomasdh.roosterpgplus.CustomUI.DefaultSpinner; import com.thomasdh.roosterpgplus.Data.RoosterBuilder; import com.thomasdh.roosterpgplus.Data.RoosterInfo; import com.thomasdh.roosterpgplus.Helpers.Apache.BasicNameValuePair; import com.thomasdh.roosterpgplus.Helpers.Apache.NameValuePair; import com.thomasdh.roosterpgplus.Helpers.FragmentTitle; import com.thomasdh.roosterpgplus.Models.Lesuur; import com.thomasdh.roosterpgplus.Models.Lokaal; import com.thomasdh.roosterpgplus.R; import com.thomasdh.roosterpgplus.Settings.Constants; import org.apache.commons.lang3.StringUtils; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import fj.data.Array; import lombok.Getter; import lombok.Setter; @FragmentTitle(title = R.string.action_bar_dropdown_lokalenrooster) public class LokalenRoosterFragment extends RoosterViewFragment implements AdapterView.OnItemSelectedListener, RoosterBuilder.BuilderFunctions { private static final String CHOSEN_LOKAAL_KEY = "lastChosenLokaal"; private static final Long MIN_REFRESH_WAIT_TIME = (long) 3600000; @Getter @Setter private Lokaal lokaal; @Getter @Setter private ArrayList<Lokaal> lokalen; private DefaultSpinner lokaalSpinner; @Override public String getAnalyticsTitle() { return Constants.ANALYTICS_FRAGMENT_LOKROOSTER; } //region Lifecycle @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { super.onCreateView(inflater, container, savedInstanceState); setRootView(inflater.inflate(R.layout.fragment_main_lokaal, container, false)); viewPager = (ViewPager) getRootView().findViewById(R.id.rooster_viewPager); viewPager.setAdapter(new AnimatedPagerAdapter()); swipeRefreshLayout = (SwipeRefreshLayout) getRootView().findViewById(R.id.rooster_swiperefresh); setupSwipeRefreshLayout(); lokaalSpinner = (DefaultSpinner) getRootView().findViewById(R.id.main_fragment_spinner_lokaal); RoosterInfo.getLokalen(getContext(), this::onLokalenLoaded); return getRootView(); } void onLokalenLoaded(Object lok) { if(lok == null) return; lokalen = (ArrayList<Lokaal>) lok; String[] lokaalNamen = Array.iterableArray(lokalen).map(Lokaal::getNaam).array(String[].class); String[] lokaalCodes = Array.iterableArray(lokalen).map(Lokaal::getCode).array(String[].class); ArrayAdapter<String> lokaalAdapter = new ArrayAdapter<>(getContext(), R.layout.spinner_title, lokaalNamen); lokaalAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); lokaalSpinner.setAdapter(lokaalAdapter); lokaalSpinner.setOnItemSelectedListener(this); String lastChosenLokaal = PreferenceManager.getDefaultSharedPreferences(getContext()).getString(CHOSEN_LOKAAL_KEY, null); if(lastChosenLokaal == null || !Arrays.asList(lokaalCodes).contains(lastChosenLokaal)) return; int lokaalIndex = Arrays.asList(lokaalCodes).indexOf(lastChosenLokaal); setLokaal(lokalen.get(lokaalIndex)); lokaalSpinner.setSelection(lokaalIndex); } @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { setLokaal(getLokalen().get(position)); PreferenceManager.getDefaultSharedPreferences(getContext()).edit().putString(CHOSEN_LOKAAL_KEY, getLokaal().getCode()).commit(); loadRooster(); } @Override public void onNothingSelected(AdapterView<?> parent) {} //endregion //region Statemanagement @Override public boolean canLoadRooster() { return getLokaal() != null; } @Override public List<NameValuePair> getURLQuery(List<NameValuePair> query) { query.add(new BasicNameValuePair("lokaal", getLokaal().getCode())); return query; } @Override public LoadType getLoadType() { Long lastLoad = RoosterInfo.getLoad("lokaal"+getLokaal()+getWeek(), getContext()); if(lastLoad == null || lastLoad == 0) { return LoadType.ONLINE; } else if(System.currentTimeMillis() > lastLoad + MIN_REFRESH_WAIT_TIME) { return LoadType.NEWONLINE; } else { return LoadType.OFFLINE; } } @Override public long getLoad() { return RoosterInfo.getLoad("lokaal"+getLokaal()+getWeek(), getContext()); } @Override public void setLoad() { RoosterInfo.setLoad("lokaal"+getLokaal()+getWeek(), System.currentTimeMillis(), getContext()); } //endregion //region Rooster @Override public RoosterBuilder buildRooster(int urenCount) { return super.buildRooster(urenCount) .setBuilderFunctions(this); } @Override public View fillLesView(Lesuur lesuur, View lesView, LayoutInflater inflater) { SimpleDateFormat format = new SimpleDateFormat("HH:mm"); TextView vakTextView = (TextView) lesView.findViewById(R.id.rooster_vak); TextView leraarTextView = (TextView) lesView.findViewById(R.id.rooster_leraar); TextView lokaalTextView = (TextView) lesView.findViewById(R.id.rooster_lokaal); TextView tijdenTextView = (TextView) lesView.findViewById(R.id.rooster_tijden); vakTextView.setText(lesuur.vak); leraarTextView.setText(StringUtils.join(lesuur.leraren, " & ")); lokaalTextView.setText(StringUtils.join(lesuur.klassen, " & ")); String times = format.format(lesuur.lesStart) + " - " + format.format(lesuur.lesEind); tijdenTextView.setText(times); return lesView; } //endregion }