package de.tum.in.tumcampusapp.activities.generic; import android.os.Bundle; import android.preference.PreferenceManager; import android.support.v4.widget.SwipeRefreshLayout; import de.tum.in.tumcampusapp.auxiliary.Const; import de.tum.in.tumcampusapp.auxiliary.Utils; import de.tum.in.tumcampusapp.tumonline.TUMOnlineConst; import de.tum.in.tumcampusapp.tumonline.TUMOnlineRequest; import de.tum.in.tumcampusapp.tumonline.TUMOnlineRequestFetchListener; /** * Generic class which handles all basic tasks to communicate with TUMOnline. It * implements the {@link TUMOnlineRequestFetchListener} in order to receive data from * TUMOnline and implements a rich user feedback with error progress and token * related layouts. */ public abstract class ActivityForAccessingTumOnline<T> extends ProgressActivity implements TUMOnlineRequestFetchListener<T> { /** * The method which should be invoked by the TumOnlineFetcher */ private final TUMOnlineConst<T> method; /** * Default layouts for user interaction */ protected TUMOnlineRequest<T> requestHandler; /** * Standard constructor for ActivityForAccessingTumOnline. * The given layout must include a progress_layout, failed_layout, no_token_layout and an error_layout. * If the Activity should support Pull-To-Refresh it can also contain a * {@link SwipeRefreshLayout} named ptr_layout * * @param method A identifier specifying what kind of data should be fetched from TumOnline * @param layoutId Resource id of the xml layout that should be used to inflate the activity */ public ActivityForAccessingTumOnline(TUMOnlineConst<T> method, int layoutId) { super(layoutId); this.method = method; } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestHandler = new TUMOnlineRequest<>(method, this, true); } /** * Starts fetching data from TumOnline in background * {@link #onFetch(T)} gets called if data was fetched successfully. * If an error occurred it is handled by {@link ActivityForAccessingTumOnline}. */ protected void requestFetch() { requestFetch(false); } /** * Starts fetching data from TumOnline in background * {@link #onFetch(T)} gets called if data was fetched successfully. * If an error occurred it is handled by {@link ActivityForAccessingTumOnline}. * * @param force Force reload of content */ void requestFetch(boolean force) { String accessToken = PreferenceManager.getDefaultSharedPreferences(this).getString(Const.ACCESS_TOKEN, null); if (accessToken == null) { showNoTokenLayout(); } else { Utils.logv("TUMOnline token is <" + accessToken + ">"); showLoadingStart(); requestHandler.setForce(force); requestHandler.fetchInteractive(this, this); } } @Override public void onNoInternetError() { showNoInternetLayout(); } @Override protected void onDestroy() { super.onDestroy(); requestHandler.cancelRequest(true); } @Override public void onFetchCancelled() { finish(); } @Override public void onFetchError(String errorReason) { showFailedTokenLayout(errorReason); } @Override public void onRefresh() { requestFetch(true); } }