package de.tum.in.tumcampusapp.activities; import android.app.SearchManager; import android.content.Intent; import android.os.Bundle; import android.support.v4.view.ViewPager; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.Spinner; import android.widget.SpinnerAdapter; import android.widget.TextView; import org.json.JSONException; import java.util.Collections; import java.util.Comparator; import java.util.List; import de.tum.in.tumcampusapp.R; import de.tum.in.tumcampusapp.activities.generic.ActivityForLoadingInBackground; import de.tum.in.tumcampusapp.adapters.StudyRoomsPagerAdapter; import de.tum.in.tumcampusapp.auxiliary.NetUtils; import de.tum.in.tumcampusapp.auxiliary.Utils; import de.tum.in.tumcampusapp.managers.StudyRoomGroupManager; import de.tum.in.tumcampusapp.models.tumcabe.StudyRoom; import de.tum.in.tumcampusapp.models.tumcabe.StudyRoomGroup; /** * Shows information about reservable study rooms. */ public class StudyRoomsActivity extends ActivityForLoadingInBackground<Void, Void> implements AdapterView .OnItemSelectedListener { private List<StudyRoomGroup> mStudyRoomGroupList; private int mSelectedStudyRoomGroupId = -1; private ViewPager mViewPager; private StudyRoomsPagerAdapter mSectionsPagerAdapter; public StudyRoomsActivity() { super(R.layout.activity_study_rooms); } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mViewPager = (ViewPager) findViewById(R.id.pager); } @Override /** * Setup for switching study room locations via action bar */ protected void onStart() { super.onStart(); startLoading(); } private void selectCurrentSpinnerItem(Spinner spinner) { for (int i = 0; i < mStudyRoomGroupList.size(); i++) { StudyRoomGroup s = mStudyRoomGroupList.get(i); if (mSelectedStudyRoomGroupId == -1 || mSelectedStudyRoomGroupId == s.id) { mSelectedStudyRoomGroupId = s.id; spinner.setSelection(i); return; } } } private static void sortStudyRoomsByOccupation(List<StudyRoom> studyRooms) { Collections.sort(studyRooms, new Comparator<StudyRoom>() { @Override public int compare(StudyRoom lhs, StudyRoom rhs) { return lhs.occupiedTill.compareTo(rhs.occupiedTill); } }); } private Spinner getStudyRoomGroupsSpinner() { // Adapter for drop-down navigation SpinnerAdapter adapterCafeterias = new ArrayAdapter<StudyRoomGroup>(this, R.layout.simple_spinner_item_actionbar, android.R.id.text1, mStudyRoomGroupList) { final LayoutInflater inflater = (LayoutInflater) getContext() .getSystemService(LAYOUT_INFLATER_SERVICE); @Override public View getDropDownView(int position, View convertView, ViewGroup parent) { View v = inflater.inflate(R.layout.simple_spinner_dropdown_item_actionbar, parent, false); StudyRoomGroup studyRoomGroup = getItem(position); TextView name = (TextView) v.findViewById(android.R.id.text1); // Set name TextView details = (TextView) v.findViewById(android.R.id.text2); // Set detail if (studyRoomGroup != null) { name.setText(studyRoomGroup.name); details.setText(studyRoomGroup.details); } return v; } }; Spinner spinner = (Spinner) findViewById(R.id.spinnerToolbar); spinner.setAdapter(adapterCafeterias); spinner.setOnItemSelectedListener(this); return spinner; } private boolean hasGotStudyRoomGroups() { return mStudyRoomGroupList != null && !mStudyRoomGroupList.isEmpty(); } private void showCorrectErrorLayout() { if (NetUtils.isConnected(this)) { showErrorLayout(); } else { showNoInternetLayout(); } } /** * A new study room group has been selected -> Switch. * * @param parent the parent view * @param pos index of the new selection * @param id id of the selected item */ @Override public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) { mSelectedStudyRoomGroupId = mStudyRoomGroupList.get(pos).id; if (mSectionsPagerAdapter == null) { setupViewPagerAdapter(mSelectedStudyRoomGroupId); } else { changeViewPagerAdapter(mSelectedStudyRoomGroupId); } } private void changeViewPagerAdapter(int mSelectedStudyRoomGroupId) { mViewPager.setAdapter(null); //unset the adapter for updating mSectionsPagerAdapter.setStudyRoomGroupId(this, mSelectedStudyRoomGroupId); mViewPager.setAdapter(mSectionsPagerAdapter); } private void setupViewPagerAdapter(int mSelectedStudyRoomGroupId) { mSectionsPagerAdapter = new StudyRoomsPagerAdapter(getSupportFragmentManager()); changeViewPagerAdapter(mSelectedStudyRoomGroupId); } @Override public void onNothingSelected(AdapterView<?> adapterView) { // } public void goToRoomFinder(View view) { String link = ((TextView) view).getText().toString(); String roomCode = link.substring(link.indexOf(' ') + 1, link.length()); Intent findStudyRoomIntent = new Intent(); findStudyRoomIntent.putExtra(SearchManager.QUERY, roomCode); findStudyRoomIntent.setClass(this, RoomFinderActivity.class); startActivity(findStudyRoomIntent); } @Override protected Void onLoadInBackground(Void... arg) { StudyRoomGroupManager sm = new StudyRoomGroupManager(this); try { sm.downloadFromExternal(); } catch (JSONException e) { Utils.log(e); // No error handling here } return null; } @Override protected void onLoadFinished(Void result) { StudyRoomGroupManager studyRoomGroupManager = new StudyRoomGroupManager(this); mStudyRoomGroupList = studyRoomGroupManager.getStudyRoomGroupsFromCursor (studyRoomGroupManager.getAllFromDb()); for (StudyRoomGroup group : mStudyRoomGroupList) { sortStudyRoomsByOccupation(group.rooms); } if (hasGotStudyRoomGroups()) { Spinner spinner = getStudyRoomGroupsSpinner(); selectCurrentSpinnerItem(spinner); } else { showCorrectErrorLayout(); } showLoadingEnded(); } }