package de.tum.in.tumcampusapp.activities; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.ArrayAdapter; import android.widget.ListView; import android.widget.TextView; import com.google.common.base.Optional; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import java.util.HashMap; import java.util.Map; import de.tum.in.tumcampusapp.R; import de.tum.in.tumcampusapp.activities.generic.ActivityForLoadingInBackground; import de.tum.in.tumcampusapp.auxiliary.NetUtils; import de.tum.in.tumcampusapp.auxiliary.Utils; import de.tum.in.tumcampusapp.managers.CacheManager; /** * Activity to fetch and display the curricula of different study programs. */ public class CurriculaActivity extends ActivityForLoadingInBackground<Void, Optional<JSONArray>> implements OnItemClickListener { public static final String NAME = "name"; public static final String URL = "url"; public static final String CURRICULA_URL = "https://tumcabe.in.tum.de/Api/curricula"; private Map<String, String> options; private ArrayAdapter<String> arrayAdapter; private NetUtils net; public CurriculaActivity() { super(R.layout.activity_curricula); } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); net = new NetUtils(this); // Sets the adapter ListView list = (ListView) this.findViewById(R.id.activity_curricula_list_view); arrayAdapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1); list.setAdapter(arrayAdapter); list.setOnItemClickListener(this); // Fetch all curricula from webservice via parent async class this.startLoading(); } @Override protected Optional<JSONArray> onLoadInBackground(Void... arg) { return net.downloadJsonArray(CURRICULA_URL, CacheManager.VALIDITY_ONE_MONTH, false); } @Override protected void onLoadFinished(Optional<JSONArray> jsonData) { if (!jsonData.isPresent()) { if (NetUtils.isConnected(this)) { showErrorLayout(); } else { showNoInternetLayout(); } return; } JSONArray arr = jsonData.get(); try { options = new HashMap<>(); for (int i = 0; i < arr.length(); i++) { JSONObject item = arr.getJSONObject(i); arrayAdapter.add(item.getString("name")); options.put(item.getString("name"), item.getString("url")); } } catch (JSONException e) { Utils.log(e); } showLoadingEnded(); } /** * Handle click on curricula item * * @param parent Containing listView * @param view Item view * @param pos Index of item * @param id Id of item */ @Override public void onItemClick(AdapterView<?> parent, View view, int pos, long id) { String curriculumName = ((TextView) view).getText().toString(); // Puts URL and name into an intent and starts the detail view Intent intent = new Intent(this, CurriculaDetailsActivity.class); intent.putExtra(URL, options.get(curriculumName)); intent.putExtra(NAME, curriculumName); this.startActivity(intent); } }