diff --git a/mobile/com.sap.sailing.racecommittee.app/res/drawable-hdpi/ic_refresh_black_48dp.png b/mobile/com.sap.sailing.racecommittee.app/res/drawable-hdpi/ic_refresh_black_48dp.png new file mode 100644 index 00000000000..d4b39b7c0ab Binary files /dev/null and b/mobile/com.sap.sailing.racecommittee.app/res/drawable-hdpi/ic_refresh_black_48dp.png differ diff --git a/mobile/com.sap.sailing.racecommittee.app/res/drawable-mdpi/ic_refresh_black_48dp.png b/mobile/com.sap.sailing.racecommittee.app/res/drawable-mdpi/ic_refresh_black_48dp.png new file mode 100644 index 00000000000..e3154ec6522 Binary files /dev/null and b/mobile/com.sap.sailing.racecommittee.app/res/drawable-mdpi/ic_refresh_black_48dp.png differ diff --git a/mobile/com.sap.sailing.racecommittee.app/res/drawable-xhdpi/ic_refresh_black_48dp.png b/mobile/com.sap.sailing.racecommittee.app/res/drawable-xhdpi/ic_refresh_black_48dp.png new file mode 100644 index 00000000000..88ba450d546 Binary files /dev/null and b/mobile/com.sap.sailing.racecommittee.app/res/drawable-xhdpi/ic_refresh_black_48dp.png differ diff --git a/mobile/com.sap.sailing.racecommittee.app/res/drawable-xxhdpi/ic_refresh_black_48dp.png b/mobile/com.sap.sailing.racecommittee.app/res/drawable-xxhdpi/ic_refresh_black_48dp.png new file mode 100644 index 00000000000..ca07174ea46 Binary files /dev/null and b/mobile/com.sap.sailing.racecommittee.app/res/drawable-xxhdpi/ic_refresh_black_48dp.png differ diff --git a/mobile/com.sap.sailing.racecommittee.app/res/drawable-xxxhdpi/ic_refresh_black_48dp.png b/mobile/com.sap.sailing.racecommittee.app/res/drawable-xxxhdpi/ic_refresh_black_48dp.png new file mode 100644 index 00000000000..29323c0c292 Binary files /dev/null and b/mobile/com.sap.sailing.racecommittee.app/res/drawable-xxxhdpi/ic_refresh_black_48dp.png differ diff --git a/mobile/com.sap.sailing.racecommittee.app/res/drawable/ic_refresh_48dp.xml b/mobile/com.sap.sailing.racecommittee.app/res/drawable/ic_refresh_48dp.xml new file mode 100644 index 00000000000..f6d5d4662b2 --- /dev/null +++ b/mobile/com.sap.sailing.racecommittee.app/res/drawable/ic_refresh_48dp.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/mobile/com.sap.sailing.racecommittee.app/res/drawable/round_button.xml b/mobile/com.sap.sailing.racecommittee.app/res/drawable/round_button.xml index b696c73a7fc..d21a9a1a6c8 100644 --- a/mobile/com.sap.sailing.racecommittee.app/res/drawable/round_button.xml +++ b/mobile/com.sap.sailing.racecommittee.app/res/drawable/round_button.xml @@ -8,7 +8,7 @@ - + diff --git a/mobile/com.sap.sailing.racecommittee.app/res/drawable/round_button_disabled.xml b/mobile/com.sap.sailing.racecommittee.app/res/drawable/round_button_disabled.xml new file mode 100644 index 00000000000..d84e0510cea --- /dev/null +++ b/mobile/com.sap.sailing.racecommittee.app/res/drawable/round_button_disabled.xml @@ -0,0 +1,9 @@ + + + + + + \ No newline at end of file diff --git a/mobile/com.sap.sailing.racecommittee.app/res/layout/race_list_header_content.xml b/mobile/com.sap.sailing.racecommittee.app/res/layout/race_list_header_content.xml index b77bf67bbb8..30368b5a106 100644 --- a/mobile/com.sap.sailing.racecommittee.app/res/layout/race_list_header_content.xml +++ b/mobile/com.sap.sailing.racecommittee.app/res/layout/race_list_header_content.xml @@ -26,7 +26,7 @@ android:layout_alignParentEnd="true" android:layout_alignParentRight="true" android:layout_margin="@dimen/default_margin" - android:src="@drawable/ic_refresh_white_48dp"/> + android:src="@drawable/ic_refresh_48dp"/> - + diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/AppConstants.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/AppConstants.java index 831ee923dfa..f3ea5d3fbfe 100755 --- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/AppConstants.java +++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/AppConstants.java @@ -25,8 +25,6 @@ public class AppConstants { private final static String INTENT_ACTION = PACKAGE_NAME + ".action"; public final static String INTENT_ACTION_RESET = INTENT_ACTION + ".reset"; - public final static String INTENT_ACTION_REGISTER_RACE = INTENT_ACTION + ".registerRace"; - public final static String INTENT_ACTION_UNREGISTER_RACE = INTENT_ACTION + ".unregisterRace"; public final static String INTENT_ACTION_CLEAR_RACES = INTENT_ACTION + ".clearRaces"; public final static String INTENT_ACTION_CLEANUP_RACES = INTENT_ACTION + ".cleanupRaces"; public final static String INTENT_ACTION_ALARM_ACTION = INTENT_ACTION + ".alarmAction"; diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/DataManager.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/DataManager.java index 86500daef9c..632aa78a89e 100644 --- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/DataManager.java +++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/DataManager.java @@ -15,6 +15,7 @@ public abstract class DataManager implements ReadonlyDataManager { public static ReadonlyDataManager create(Context context) { DataStore dataStore = InMemoryDataStore.INSTANCE; + dataStore.setContext(context); if (AppPreferences.on(context).isOfflineMode()) { return new OfflineDataManager(context, dataStore, dataStore.getDomainFactory()); } diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/DataStore.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/DataStore.java index f980b97c709..e0ef6af9b3f 100644 --- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/DataStore.java +++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/DataStore.java @@ -5,6 +5,8 @@ import java.util.Collection; import java.util.Set; import java.util.UUID; +import android.content.Context; + import com.sap.sailing.domain.abstractlog.race.SimpleRaceLogIdentifier; import com.sap.sailing.domain.base.CourseArea; import com.sap.sailing.domain.base.CourseBase; @@ -15,7 +17,8 @@ import com.sap.sailing.domain.base.racegroup.RaceGroup; import com.sap.sailing.racecommittee.app.domain.ManagedRace; public interface DataStore { - + + void setContext(Context context); void reset(); SharedDomainFactory getDomainFactory(); @@ -38,6 +41,7 @@ public interface DataStore { ManagedRace getRace(SimpleRaceLogIdentifier id); boolean hasRace(String id); boolean hasRace(SimpleRaceLogIdentifier id); + void registerRaces(Collection races); Collection getMarks(); Mark getMark(Serializable id); diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/InMemoryDataStore.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/InMemoryDataStore.java index f213b524b75..aab0f9f124a 100644 --- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/InMemoryDataStore.java +++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/InMemoryDataStore.java @@ -8,6 +8,12 @@ import java.util.Map; import java.util.Set; import java.util.UUID; +import android.content.ComponentName; +import android.content.Context; +import android.content.Intent; +import android.content.ServiceConnection; +import android.os.IBinder; + import com.sap.sailing.android.shared.util.CollectionUtils; import com.sap.sailing.domain.abstractlog.race.SimpleRaceLogIdentifier; import com.sap.sailing.domain.abstractlog.race.impl.SimpleRaceLogIdentifierImpl; @@ -21,11 +27,13 @@ import com.sap.sailing.domain.base.racegroup.RaceGroup; import com.sap.sailing.racecommittee.app.domain.ManagedRace; import com.sap.sailing.racecommittee.app.domain.ManagedRaceIdentifier; import com.sap.sailing.racecommittee.app.domain.impl.FleetIdentifierImpl; +import com.sap.sailing.racecommittee.app.services.RaceStateService; import com.sap.sse.common.Util.Triple; public enum InMemoryDataStore implements DataStore { INSTANCE; + private Context mContext; private LinkedHashMap eventsById; private LinkedHashMap managedRaceById; private LinkedHashMap marksById; @@ -35,10 +43,22 @@ public enum InMemoryDataStore implements DataStore { private Serializable eventUUID; private UUID courseUUID; + private RaceStateService mService; + private boolean mBound; + InMemoryDataStore() { reset(); } + @Override + public void setContext(Context context) { + if (mContext == null) { + mContext = context.getApplicationContext(); + } + Intent intent = new Intent(mContext, RaceStateService.class); + mContext.bindService(intent, mConnection, Context.BIND_AUTO_CREATE); + } + @Override public void reset() { eventsById = new LinkedHashMap<>(); @@ -49,6 +69,11 @@ public enum InMemoryDataStore implements DataStore { eventUUID = null; courseUUID = null; + + if (mContext != null && mBound) { + mContext.unbindService(mConnection); + mBound = false; + } } @Override @@ -185,6 +210,7 @@ public enum InMemoryDataStore implements DataStore { @Override public void removeRace(ManagedRace race) { + unregisterRace(race); managedRaceById.remove(convertManagedRaceIdentifierToSimpleRaceLogIdentifier(race.getIdentifier())); } @@ -303,4 +329,32 @@ public enum InMemoryDataStore implements DataStore { courseUUID = uuid; } + public void registerRaces(Collection races) { + if (mBound) { + for (ManagedRace race : races) { + mService.registerRace(race); + } + } + } + + private void unregisterRace(ManagedRace race) { + if (mBound) { + mService.unregisterRace(race); + } + } + + private ServiceConnection mConnection = new ServiceConnection() { + + @Override + public void onServiceConnected(ComponentName className, IBinder service) { + RaceStateService.RaceStateServiceBinder binder = (RaceStateService.RaceStateServiceBinder) service; + mService = binder.getService(); + mBound = true; + } + + @Override + public void onServiceDisconnected(ComponentName name) { + mBound = false; + } + }; } diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/handlers/ManagedRacesDataHandler.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/handlers/ManagedRacesDataHandler.java index e1da6302d86..5f0927399b0 100644 --- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/handlers/ManagedRacesDataHandler.java +++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/handlers/ManagedRacesDataHandler.java @@ -39,6 +39,7 @@ public class ManagedRacesDataHandler extends DataHandler } manager.addRaces(data); calcRaceState(data); + manager.getDataStore().registerRaces(data); } } diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/services/RaceStateService.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/services/RaceStateService.java index 8ca593847b4..3096a5e2ee0 100755 --- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/services/RaceStateService.java +++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/services/RaceStateService.java @@ -118,7 +118,7 @@ public class RaceStateService extends Service { } @Override - public IBinder onBind(Intent arg0) { + public IBinder onBind(Intent intent) { return mBinder; } @@ -167,7 +167,7 @@ public class RaceStateService extends Service { ExLog.i(this, TAG, "All races unregistered."); } - private void unregisterRace(ManagedRace race) { + public void unregisterRace(ManagedRace race) { poller.unregister(race); race.getState().getRaceLog().removeAllListeners(); @@ -183,6 +183,7 @@ public class RaceStateService extends Service { managedIntents.remove(race.getId()); ExLog.i(this, TAG, "Race " + race.getId() + " unregistered"); + updateNotification(); } private void unregisterRace(@Nullable String raceId) { @@ -212,16 +213,6 @@ public class RaceStateService extends Service { return; } - if (AppConstants.INTENT_ACTION_REGISTER_RACE.equals(action)) { - handleRegisterRace(intent); - return; - } - - if (AppConstants.INTENT_ACTION_UNREGISTER_RACE.equals(action)) { - handleUnregisterRace(intent); - return; - } - if (!serviceId.equals(intent.getSerializableExtra(EXTRAS_SERVICE_ID))) { ExLog.w(this, TAG, "Received event for different service version."); return; @@ -293,28 +284,6 @@ public class RaceStateService extends Service { return false; } - private void handleRegisterRace(Intent intent) { - ManagedRace race = getRaceFromIntent(intent); - if (race == null) { - ExLog.w(this, TAG, "Intent did not carry valid race information."); - return; - } - registerRace(race); - - updateNotification(); - } - - private void handleUnregisterRace(Intent intent) { - ManagedRace race = getRaceFromIntent(intent); - if (race == null) { - ExLog.w(this, TAG, "Intent did not carry valid race information"); - return; - } - unregisterRace(race); - - updateNotification(); - } - private void updateNotification() { int numRaces = managedIntents.keySet().size(); notificationManager.notify(NOTIFICATION_ID, notificationBuilder @@ -323,15 +292,7 @@ public class RaceStateService extends Service { startForeground(NOTIFICATION_ID, notificationBuilder.build()); } - private ManagedRace getRaceFromIntent(Intent intent) { - if (intent.getExtras() == null || !intent.getExtras().containsKey(AppConstants.RACE_ID_KEY)) { - return null; - } - String raceId = intent.getExtras().getString(AppConstants.RACE_ID_KEY); - return dataManager.getDataStore().getRace(raceId); - } - - private void registerRace(final ManagedRace race) { + public void registerRace(ManagedRace race) { ExLog.i(this, TAG, "Trying to register race " + race.getId()); if (!managedIntents.containsKey(race.getId())) { @@ -360,6 +321,8 @@ public class RaceStateService extends Service { unregisterRace(race.getId()); registerRace(race); } + + updateNotification(); } private PendingIntent createAlarmPendingIntent(ManagedRace managedRace, RaceStateEvent event) { @@ -372,7 +335,7 @@ public class RaceStateService extends Service { } @TargetApi(Build.VERSION_CODES.KITKAT) - public void setAlarm(ManagedRace race, RaceStateEvent event) { + /* package */ void setAlarm(ManagedRace race, RaceStateEvent event) { PendingIntent intent = createAlarmPendingIntent(race, event); managedIntents.get(race.getId()).add(Pair.create(intent, event.getEventName())); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { @@ -383,7 +346,7 @@ public class RaceStateService extends Service { ExLog.i(this, TAG, "The alarm " + event.getEventName() + " will be fired at " + event.getTimePoint()); } - public void clearAlarmByName(ManagedRace race, RaceStateEvents stateEventName) { + /* package */ void clearAlarmByName(ManagedRace race, RaceStateEvents stateEventName) { List> intents = managedIntents.get(race.getId()); Pair toBeRemoved = null; for (Pair intentPair : intents) { @@ -400,7 +363,7 @@ public class RaceStateService extends Service { } } - public void clearAllAlarms(ManagedRace race) { + /* package */ void clearAllAlarms(ManagedRace race) { Serializable raceId = race.getId(); List> intents = managedIntents.get(raceId); diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/activities/RacingActivity.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/activities/RacingActivity.java index 8304f7d7a71..e6b107a73be 100644 --- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/activities/RacingActivity.java +++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/activities/RacingActivity.java @@ -316,7 +316,7 @@ public class RacingActivity extends SessionActivity implements RaceListCallbacks } } - public void onRaceItemClicked(ManagedRace managedRace) { + private void onRaceItemClicked(ManagedRace managedRace) { onRaceItemClicked(managedRace, false); } @@ -380,7 +380,7 @@ public class RacingActivity extends SessionActivity implements RaceListCallbacks } } - public void onWindEntered(Wind windFix) { + private void onWindEntered(Wind windFix) { PanelButton windValue = (PanelButton) findViewById(R.id.button_wind); if (windFix != null) { if (windValue != null) { @@ -407,35 +407,7 @@ public class RacingActivity extends SessionActivity implements RaceListCallbacks } } - private void registerOnService(final Collection races) { - // close current race, if no longer on server - if (!races.contains(mSelectedRace)) { - BroadcastManager.getInstance(this).addIntent(new Intent(AppConstants.INTENT_ACTION_SHOW_WELCOME)); - mSelectedRace = null; - } - - // since the service is the long-living component - // he should decide whether these races are already - // registered or not. - new Thread(new Runnable() { - @Override - public void run() { - // add all received races to the service - for (ManagedRace race : races) { - Intent registerIntent = new Intent(RacingActivity.this, RaceStateService.class); - registerIntent.setAction(AppConstants.INTENT_ACTION_REGISTER_RACE); - registerIntent.putExtra(AppConstants.RACE_ID_KEY, race.getId()); - RacingActivity.this.startService(registerIntent); - } - - Intent cleanupIntent = new Intent(RacingActivity.this, RaceStateService.class); - cleanupIntent.setAction(AppConstants.INTENT_ACTION_CLEANUP_RACES); - RacingActivity.this.startService(cleanupIntent); - } - }).start(); - } - - public void setProgressSpinnerVisibility(boolean visible) { + private void setProgressSpinnerVisibility(boolean visible) { if (mProgressSpinner != null) { if (visible) { mProgressSpinner.setVisibility(View.VISIBLE); @@ -459,7 +431,7 @@ public class RacingActivity extends SessionActivity implements RaceListCallbacks } } - public void resetRace() { + private void resetRace() { AlertDialog.Builder builder = new AlertDialog.Builder(this, R.style.AppTheme_AlertDialog); builder.setTitle(getString(R.string.race_reset_confirmation_title)); builder.setMessage(getString(R.string.race_reset_message)); @@ -576,7 +548,7 @@ public class RacingActivity extends SessionActivity implements RaceListCallbacks } } - public void processIntent(final Intent intent) { + private void processIntent(final Intent intent) { final Bundle args = new Bundle(); if (mSelectedRace != null) { args.putSerializable(AppConstants.RACE_ID_KEY, mSelectedRace.getId()); @@ -717,14 +689,17 @@ public class RacingActivity extends SessionActivity implements RaceListCallbacks @Override public void onLoadSucceeded(Collection data, boolean isCached) { - // Let's do the setup stuff only when the data is changed (or its the first time) - if (lastSeenRaces != null && CollectionUtils.isEqualCollection(data, lastSeenRaces)) { - ExLog.i(RacingActivity.this, TAG, "Same races are already loaded..."); - } else { - lastSeenRaces = data; - registerOnService(data); - mRaceList.setupOn(data); - setupRegattaSpecificConfiguration(); + // need to be a new instance, because of Activity restart after background kill + // more information see bug 3741 + lastSeenRaces = new ArrayList<>(data); + mRaceList.setupOn(data); + setupRegattaSpecificConfiguration(); + if (!isCached) { + // close current race, if no longer on server + if (!data.contains(mSelectedRace)) { + BroadcastManager.getInstance(RacingActivity.this).addIntent(new Intent(AppConstants.INTENT_ACTION_SHOW_WELCOME)); + mSelectedRace = null; + } Toast.makeText(RacingActivity.this, String.format(getString(R.string.racing_load_success), data.size()), Toast.LENGTH_SHORT).show(); } setProgressSpinnerVisibility(false); diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/adapters/racelist/ManagedRaceListAdapter.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/adapters/racelist/ManagedRaceListAdapter.java index f030008387b..b09d1f37af7 100644 --- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/adapters/racelist/ManagedRaceListAdapter.java +++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/adapters/racelist/ManagedRaceListAdapter.java @@ -161,20 +161,20 @@ public class ManagedRaceListAdapter extends ArrayAdapter imple if (type == ViewType.HEADER.index) { final RaceListDataTypeHeader header = (RaceListDataTypeHeader) raceListElement; String regatta = header.getRaceGroup().getDisplayName(); - if (TextUtils.isEmpty(regatta)) { - regatta = header.getRaceGroup().getName(); - } - boat_class.setText(regatta); - fleet_series.setText(RaceHelper.getSeriesName(header.getSeries(), "")); - if (fleet_series.getText().length() == 0) { - fleet_series.setVisibility(View.GONE); - } else { - fleet_series.setVisibility(View.VISIBLE); - } - protest_image.setImageDrawable(FlagsResources.getFlagDrawable(getContext(), Flags.BRAVO.name(), flag_size)); - if (protest_image.getTag(R.id.protest_flag_image_click_listener) == null || - protest_image.getTag(R.id.protest_flag_image_click_listener) != Boolean.TRUE) { - protest_image.setTag(R.id.protest_flag_image_click_listener, Boolean.TRUE); + String series = RaceHelper.getSeriesName(header.getSeries(), ""); + + if (!(regatta + series).equals(convertView.getTag(R.id.race_list_header))) { + if (TextUtils.isEmpty(regatta)) { + regatta = header.getRaceGroup().getName(); + } + boat_class.setText(regatta); + fleet_series.setText(series); + if (fleet_series.getText().length() == 0) { + fleet_series.setVisibility(View.GONE); + } else { + fleet_series.setVisibility(View.VISIBLE); + } + protest_image.setImageDrawable(FlagsResources.getFlagDrawable(getContext(), Flags.BRAVO.name(), flag_size)); protest_image.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { @@ -184,6 +184,7 @@ public class ManagedRaceListAdapter extends ArrayAdapter imple BroadcastManager.getInstance(getContext()).addIntent(intent); } }); + convertView.setTag(R.id.race_list_header, regatta + series); } } else if (type == ViewType.RACE.index) { final RaceListDataTypeRace race = (RaceListDataTypeRace) raceListElement; diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/RaceListFragment.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/RaceListFragment.java index c83d61505b9..f5b7d7eac2f 100644 --- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/RaceListFragment.java +++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/RaceListFragment.java @@ -76,6 +76,7 @@ public class RaceListFragment extends LoggableFragment implements OnItemClickLis private Button mAllRacesButton; private TextView mCourse; private TextView mData; + private ImageView mRefresh; private DrawerLayout mDrawerLayout; private ActionBarDrawerToggle mDrawerToggle; private FilterMode mFilterMode; @@ -256,9 +257,9 @@ public class RaceListFragment extends LoggableFragment implements OnItemClickLis mCourse = (TextView) view.findViewById(R.id.regatta_course); mData = (TextView) view.findViewById(R.id.regatta_data); - ImageView imageView = (ImageView) view.findViewById(R.id.nav_button); - if (imageView != null) { - imageView.setOnClickListener(new OnClickListener() { + mRefresh = (ImageView) view.findViewById(R.id.nav_button); + if (mRefresh != null) { + mRefresh.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { @@ -481,10 +482,14 @@ public class RaceListFragment extends LoggableFragment implements OnItemClickLis public void showSpinner(boolean visible) { if (mProgress != null) { if (visible) { + mRefresh.setEnabled(false); mProgress.setVisibility(View.VISIBLE); + mListView.setVisibility(View.GONE); mUpdateList = false; } else { + mRefresh.setEnabled(true); mProgress.setVisibility(View.GONE); + mListView.setVisibility(View.VISIBLE); mUpdateList = true; } }