Skip to content

Commit

Permalink
* implemented auto-refresh
Browse files Browse the repository at this point in the history
  • Loading branch information
TimNowaczynski committed Dec 23, 2014
1 parent 060e1d5 commit b011749
Show file tree
Hide file tree
Showing 8 changed files with 105 additions and 21 deletions.
1 change: 0 additions & 1 deletion res/values-de/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,6 @@

<string name="error_no_meals_found">Es ist keine Speisekarte verfügbar.</string>
<string name="error_no_mensa_selected">Klicke hier um eine Mensa auszuwählen.</string>
<string name="error_no_refresh">Klicken zum Aktualiseren (oder aktiviere autmatisches Aktualisieren in den Einstellungen).</string>
<string name="error_no_network">Konnte die Speisekarte nicht abrufen. Überprüfe deine Netzwerkverbindung.</string>
<string name="error_unknown">Fehler beim abrufen der Speisekarte. Versuche es später noch einmal.</string>
</resources>
1 change: 0 additions & 1 deletion res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,6 @@

<string name="error_no_meals_found">There is no schedule available.</string>
<string name="error_no_mensa_selected">Click to select a mensa.</string>
<string name="error_no_refresh">Click to refresh or configure auto refresh via the settings.</string>
<string name="error_no_network">Couldn\'t request the menu. Check your network connection.</string>
<string name="error_unknown">Something went wrong. Try again later.</string>
</resources>
41 changes: 30 additions & 11 deletions src/net/pherth/omnomagon/MenuOverviewActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,7 @@ protected void onResume() {
configureEmptyListHint();
configureSelectedPrice();
setDataForTabs();
triggerAutoRefresh();
}

private void changeFeatureImageAfterFiveMinutes() {
Expand Down Expand Up @@ -139,9 +140,7 @@ private void configureEmptyListHint() {
menuTabAdapter.setHint(WeekdayTabHint.NoMealData);
} else {
final boolean mensaSelected = _userPreferences.validator().hasMensaSelected();
if (mensaSelected) {
menuTabAdapter.setHint(WeekdayTabHint.NoDataRequested);
} else {
if (!mensaSelected) {
menuTabAdapter.setHint(WeekdayTabHint.NoMensaSelected);
}
}
Expand All @@ -165,14 +164,25 @@ private void setDataForTabs() {
menuTabAdapter.setData(data);
}

private void triggerAutoRefresh() {
final boolean mensaSelected = _userPreferences.validator().hasMensaSelected();
if (mensaSelected) {
final boolean refreshTriggered = _dataProvider.autoRefreshForMensa(this, _userPreferences);
if (refreshTriggered) {
setRefreshHints();
}
}
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK && requestCode == REQUEST_SETTINGS && data != null) {
final boolean changedMensa = data.getBooleanExtra(SettingsActivity.CHANGED_MENSA, false);
if (changedMensa) {
updateMensaName();
//todo request data
_dataProvider.blockNextAutoRefresh();
triggerRefresh();
}
final boolean changedPrice = data.getBooleanExtra(SettingsActivity.CHANGED_PRICE, false);
if (changedPrice) {
Expand Down Expand Up @@ -221,14 +231,16 @@ public void onPageScrollStateChanged(int state) {
@Override
public void onNetworkError() {
endRefreshAnimation();
configureEmptyListHint();
final MenuTabAdapter menuTabAdapter = _menuTabHandler.getMenuTabAdapter();
menuTabAdapter.setHint(WeekdayTabHint.NoNetwork);
Toast.makeText(this, R.string.error_no_network, Toast.LENGTH_SHORT).show();
}

@Override
public void onUnknownError() {
endRefreshAnimation();
configureEmptyListHint();
final MenuTabAdapter menuTabAdapter = _menuTabHandler.getMenuTabAdapter();
menuTabAdapter.setHint(WeekdayTabHint.SomethingWentWrong);
Toast.makeText(this, R.string.error_unknown, Toast.LENGTH_SHORT).show();
}

Expand All @@ -247,18 +259,25 @@ private void endRefreshAnimation() {
public void triggerRefresh() {
final boolean mensaSelected = _userPreferences.validator().hasMensaSelected();
if (mensaSelected) {
final RefreshAnimationHelper refreshAnimationHelper = getRefreshAnimationHelper();
refreshAnimationHelper.startAnimation();
final MenuTabAdapter menuTabAdapter = _menuTabHandler.getMenuTabAdapter();
menuTabAdapter.setHint(WeekdayTabHint.UpdateInProgress);
setRefreshHints();
_dataProvider.requestDataForMensa(this, _userPreferences);
}
}

private void setRefreshHints() {
final RefreshAnimationHelper refreshAnimationHelper = getRefreshAnimationHelper();
refreshAnimationHelper.startAnimation();
final MenuTabAdapter menuTabAdapter = _menuTabHandler.getMenuTabAdapter();
menuTabAdapter.setHint(WeekdayTabHint.UpdateInProgress);
}

public RefreshAnimationHelper getRefreshAnimationHelper() {
if (_refreshAnimationHelper == null || !_refreshAnimationHelper.canAnimate()) {
if (_refreshAnimationHelper == null) {
_refreshAnimationHelper = new RefreshAnimationHelper(this);
}
if (!_refreshAnimationHelper.canAnimate()) {
_refreshAnimationHelper.refreshViewHint(this);
}
return _refreshAnimationHelper;
}
}
49 changes: 49 additions & 0 deletions src/net/pherth/omnomagon/data/DataProvider.java
Original file line number Diff line number Diff line change
@@ -1,16 +1,23 @@
package net.pherth.omnomagon.data;

import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
import android.os.AsyncTask;
import android.os.Build;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import net.pherth.omnomagon.settings.UserPreferences;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;

public class DataProvider {

private static final String SHARED_PREFERENCES_NAME = "Omnomagon.AutoUpdate";
private static final String SHARED_PREFERENCES_LAST_UPDATE_KEY = SHARED_PREFERENCES_NAME + ".LastUpdate";

private enum State {
Uninitialized, Requested, Initialized
}
Expand All @@ -19,11 +26,36 @@ private enum State {
private List<Day> _data = new ArrayList<Day>(0);
private State _state = State.Uninitialized;
private RequestDataTask _requestDataTask;
private boolean _blockAutoRefresh;

public DataProvider(@NonNull Activity activity) {
_activity = activity;
}

public void blockNextAutoRefresh() {
_blockAutoRefresh = true;
}

public boolean autoRefreshForMensa(@NonNull DataListener dataListener, @NonNull UserPreferences userPreferences) {
final boolean shouldReloadAutomatically = userPreferences.shouldReloadAutomatically();
final boolean shouldRefresh = shouldReloadAutomatically && !_blockAutoRefresh;
if (shouldRefresh) {
final Calendar instance = Calendar.getInstance();
final int dayOfYear = instance.get(Calendar.DAY_OF_YEAR);
final SharedPreferences sharedPreferences = getAutoUpdatePreferences();
final int lastUpdate = sharedPreferences.getInt(SHARED_PREFERENCES_LAST_UPDATE_KEY, -1);
if (dayOfYear != lastUpdate) {
requestDataForMensa(dataListener, userPreferences);
}
}
_blockAutoRefresh = false;
return shouldRefresh;
}

private SharedPreferences getAutoUpdatePreferences() {
return _activity.getSharedPreferences(SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE);
}

public void requestDataForMensa(@NonNull DataListener dataListener, @NonNull UserPreferences userPreferences) {
final boolean mensaSelected = userPreferences.validator().hasMensaSelected();
if (mensaSelected) {
Expand Down Expand Up @@ -58,6 +90,23 @@ public void setData(@Nullable List<Day> data) {
_state = State.Initialized;
}

public void setLastUpdateDayOfYear() {
final Calendar instance = Calendar.getInstance();
final int dayOfYear = instance.get(Calendar.DAY_OF_YEAR);
final SharedPreferences sharedPreferences = getAutoUpdatePreferences();
final SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putInt(SHARED_PREFERENCES_LAST_UPDATE_KEY, dayOfYear);
commitOrApply(editor);
}

private void commitOrApply(@NonNull SharedPreferences.Editor editor) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD) {
editor.apply();
} else {
editor.commit();
}
}

@NonNull
public List<Day> getData() {
return _data;
Expand Down
3 changes: 2 additions & 1 deletion src/net/pherth/omnomagon/data/RequestDataTask.java
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,6 @@ public void run() {
protected void onPostExecute(@Nullable List<Day> days) {
final DataProvider dataProvider = _dataProvider.get();
if (dataProvider != null) {
dataProvider.setData(days);
final DataProvider.DataListener dataListener = _dataListener.get();
if (dataListener != null) {
if (_error != null) {
Expand All @@ -93,6 +92,8 @@ protected void onPostExecute(@Nullable List<Day> days) {
dataListener.onUnknownError();
}
} else {
dataProvider.setData(days);
dataProvider.setLastUpdateDayOfYear();
dataListener.onDataReceived(days);
}
}
Expand Down
6 changes: 5 additions & 1 deletion src/net/pherth/omnomagon/header/RefreshAnimationHelper.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@

public class RefreshAnimationHelper {

private final View _refreshButton;
private View _refreshButton;
private RotateAnimation _rotateAnimation = new RotateAnimation(0f, 360f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);

public RefreshAnimationHelper(@NonNull Activity activity) {
Expand All @@ -18,6 +18,10 @@ public RefreshAnimationHelper(@NonNull Activity activity) {
_rotateAnimation.setRepeatMode(Animation.RESTART);
}

public void refreshViewHint(@NonNull Activity activity) {
_refreshButton = activity.findViewById(R.id.actionbar_refresh);
}

public boolean canAnimate() {
return _refreshButton != null;
}
Expand Down
23 changes: 18 additions & 5 deletions src/net/pherth/omnomagon/tabs/WeekdayTab.java
Original file line number Diff line number Diff line change
Expand Up @@ -86,19 +86,32 @@ private void showErrorHint() {
if (_currentHint == WeekdayTabHint.NoMensaSelected) {
showConfigurationError(activity);
} else {
if (_currentHint == WeekdayTabHint.NoDataRequested) {
showRefreshError(activity);
} else if(_currentHint == WeekdayTabHint.UpdateInProgress) {
if(_currentHint == WeekdayTabHint.UpdateInProgress) {
_viewHolder.showHint(R.string.retrvData, null);
} else if(_currentHint == WeekdayTabHint.NoNetwork) {
showNetworkError(activity);
} else if(_currentHint == WeekdayTabHint.SomethingWentWrong) {
showUnknownError(activity);
} else {
_viewHolder.showHint(R.string.error_no_meals_found, null);
}
}
}
}

private void showRefreshError(@NonNull final MenuOverviewActivity activity) {
_viewHolder.showHint(R.string.error_no_refresh, new View.OnClickListener() {
private void showNetworkError(@NonNull final MenuOverviewActivity activity) {
_viewHolder.showHint(R.string.error_no_network, new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!activity.isFinishing()) {
activity.triggerRefresh();
}
}
});
}

private void showUnknownError(@NonNull final MenuOverviewActivity activity) {
_viewHolder.showHint(R.string.error_unknown, new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!activity.isFinishing()) {
Expand Down
2 changes: 1 addition & 1 deletion src/net/pherth/omnomagon/tabs/WeekdayTabHint.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
package net.pherth.omnomagon.tabs;

public enum WeekdayTabHint {
NoMealData, NoMensaSelected, NoDataRequested, UpdateInProgress
NoMealData, NoMensaSelected, NoNetwork, SomethingWentWrong, UpdateInProgress
}

0 comments on commit b011749

Please sign in to comment.