package org.ohmage.async; import org.ohmage.AccountHelper; import org.ohmage.OhmageApi.CampaignReadResponse; import org.ohmage.OhmageApi.Result; import org.ohmage.UserPreferencesHelper; import org.ohmage.ui.BaseActivity; import android.os.Bundle; import android.support.v4.app.LoaderManager; import android.support.v4.content.Loader; import android.text.format.DateUtils; public class CampaignReadLoaderCallbacks implements LoaderManager.LoaderCallbacks<CampaignReadResponse> { private final BaseActivity mActivity; private AccountHelper mAccount; private UserPreferencesHelper mSharedPreferencesHelper; private String mHashedPassword; public CampaignReadLoaderCallbacks(BaseActivity activity) { mActivity = activity; } public void onCreate() { mAccount = new AccountHelper(mActivity); mSharedPreferencesHelper = new UserPreferencesHelper(mActivity); mActivity.getSupportLoaderManager().initLoader(0, null, this); } public void onResume(){ Loader<Object> loader = mActivity.getSupportLoaderManager().getLoader(0); if(mHashedPassword != mAccount.getAuthToken() && !((PauseableTaskLoader) loader).isPaused()) { forceLoad(); } } public void onSaveInstanceState(Bundle outState) { outState.putString("hashedPassword", mHashedPassword); } public void onRestoreInstanceState(Bundle savedInstanceState) { mHashedPassword = savedInstanceState.getString("hashedPassword"); } @Override public Loader<CampaignReadResponse> onCreateLoader(int id, Bundle args) { // We should pause the task if it is within 5 minutes of the last request boolean pause = mSharedPreferencesHelper.getLastCampaignRefreshTime() + DateUtils.MINUTE_IN_MILLIS * 5 > System.currentTimeMillis(); mActivity.getActionBarControl().setProgressVisible(!pause); mHashedPassword = mAccount.getAuthToken(); CampaignReadTask loader = new CampaignReadTask(mActivity, mAccount.getUsername(), mHashedPassword); loader.pause(pause); return loader; } @Override public void onLoadFinished(Loader<CampaignReadResponse> loader, CampaignReadResponse data) { if(data.getResult() == Result.SUCCESS) { ((PauseableTaskLoader<CampaignReadResponse>) loader).pause(true); mSharedPreferencesHelper.setLastCampaignRefreshTime(System.currentTimeMillis()); } else ((AuthenticatedTaskLoader<CampaignReadResponse>) loader).clearCredentials(); mActivity.getActionBarControl().setProgressVisible(false); } @Override public void onLoaderReset(Loader<CampaignReadResponse> loader) {} public void forceLoad() { Loader<Object> loader = mActivity.getSupportLoaderManager().getLoader(0); mActivity.getActionBarControl().setProgressVisible(true); mHashedPassword = mAccount.getAuthToken(); ((AuthenticatedTaskLoader)loader).setCredentials(mAccount.getUsername(), mHashedPassword); loader.forceLoad(); } }