From d2519d469c853fc4d14fcf7f65afd780e4700f1d Mon Sep 17 00:00:00 2001 From: Peter Siegmund Date: Tue, 16 Aug 2016 12:29:34 +0200 Subject: [PATCH] remove usage of Parcelable for AlarmManager, because in N it also won't work More information: https://www.reddit.com/r/androiddev/comments/4tm8i6/were_on_the_android_engineering_team_and_built/d5ilrxo --- .../racecommittee/app/AppConstants.java | 2 + .../domain/impl/RaceStateEventImplParcel.java | 66 ------------------- .../app/services/RaceStateService.java | 23 ++++--- 3 files changed, 13 insertions(+), 78 deletions(-) delete mode 100644 mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/domain/impl/RaceStateEventImplParcel.java 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 80800366672..1d50b38df82 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 @@ -8,6 +8,8 @@ public class AppConstants { // Intent extra fields public final static String COURSE_AREA_UUID_KEY = "courseUuid"; public final static String RACE_ID_KEY = "raceUuid"; + public final static String INTENT_EXTRA_LONG = "intent.extra.long"; + public final static String INTENT_EXTRA_STRING = "intent.extra.string"; public final static String SERVICE_UNIQUE_ID = "serviceUID"; public final static String STARTPROCEDURE_SPECIFIC_EVENT_ID = "startProcedureSpecificEventId"; public final static String EXTRAS_RACE_STATE_EVENT = "raceStateEvent"; diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/domain/impl/RaceStateEventImplParcel.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/domain/impl/RaceStateEventImplParcel.java deleted file mode 100644 index 84e64ea57e2..00000000000 --- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/domain/impl/RaceStateEventImplParcel.java +++ /dev/null @@ -1,66 +0,0 @@ -package com.sap.sailing.racecommittee.app.domain.impl; - -import android.os.Parcel; -import android.os.Parcelable; - -import com.sap.sailing.domain.abstractlog.race.state.RaceStateEvent; -import com.sap.sailing.domain.abstractlog.race.state.impl.RaceStateEventImpl; -import com.sap.sailing.domain.abstractlog.race.state.impl.RaceStateEvents; -import com.sap.sse.common.TimePoint; -import com.sap.sse.common.impl.MillisecondsTimePoint; - -public class RaceStateEventImplParcel implements Parcelable { - - public static final Creator CREATOR = new Creator() { - @Override - public RaceStateEventImplParcel createFromParcel(Parcel in) { - return new RaceStateEventImplParcel(in); - } - - @Override - public RaceStateEventImplParcel[] newArray(int size) { - return new RaceStateEventImplParcel[size]; - } - }; - private long timePoint; - private String eventName; - - public RaceStateEventImplParcel(RaceStateEvent raceStateEvent) { - this.timePoint = raceStateEvent.getTimePoint().asMillis(); - this.eventName = raceStateEvent.getEventName().name(); - } - - private RaceStateEventImplParcel(Parcel in) { - timePoint = in.readLong(); - eventName = in.readString(); - } - - private TimePoint getTimePoint() { - return new MillisecondsTimePoint(timePoint); - } - - public RaceStateEvents getEventName() { - return RaceStateEvents.valueOf(eventName); - } - - public RaceStateEvent getRaceStateEvent() { - return new RaceStateEventImpl(getTimePoint(), getEventName()); - } - - @Override - public int describeContents() { - return 0; - } - - @Override - public void writeToParcel(Parcel dest, int flags) { - dest.writeLong(timePoint); - dest.writeString(eventName); - } - - @Override - public String toString() { - return "RaceStateEventImpl [timePoint=" + getTimePoint() + ", eventName=" + getEventName() + "]"; - } - -} 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 df54e56ae94..5889f985dd2 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 @@ -31,6 +31,7 @@ import com.sap.sailing.domain.abstractlog.race.impl.RaceLogChangedVisitor; import com.sap.sailing.domain.abstractlog.race.state.RaceState; import com.sap.sailing.domain.abstractlog.race.state.RaceStateEvent; import com.sap.sailing.domain.abstractlog.race.state.RaceStateEventScheduler; +import com.sap.sailing.domain.abstractlog.race.state.impl.RaceStateEventImpl; import com.sap.sailing.domain.abstractlog.race.state.impl.RaceStateEvents; import com.sap.sailing.racecommittee.app.AppConstants; import com.sap.sailing.racecommittee.app.R; @@ -38,13 +39,13 @@ import com.sap.sailing.racecommittee.app.data.DataManager; import com.sap.sailing.racecommittee.app.data.DataStore; import com.sap.sailing.racecommittee.app.data.ReadonlyDataManager; import com.sap.sailing.racecommittee.app.domain.ManagedRace; -import com.sap.sailing.racecommittee.app.domain.impl.RaceStateEventImplParcel; import com.sap.sailing.racecommittee.app.services.polling.RaceLogPollingService; import com.sap.sailing.racecommittee.app.services.sending.RaceEventSender; import com.sap.sailing.racecommittee.app.ui.activities.LoginActivity; import com.sap.sailing.server.gateway.serialization.JsonSerializer; import com.sap.sailing.server.gateway.serialization.impl.CompetitorJsonSerializer; import com.sap.sailing.server.gateway.serialization.racelog.impl.RaceLogEventSerializer; +import com.sap.sse.common.impl.MillisecondsTimePoint; public class RaceStateService extends Service { @@ -208,11 +209,6 @@ public class RaceStateService extends Service { break; default: - if (intent.getIntExtra(Intent.EXTRA_ALARM_COUNT, -1) != -1) { - ExLog.w(this, TAG, "Unexpected ALARM_COUNT extra found."); - return; - } - String id = intent.getStringExtra(AppConstants.RACE_ID_KEY); ManagedRace race = dataManager.getDataStore().getRace(id); if (race == null) { @@ -222,10 +218,12 @@ public class RaceStateService extends Service { switch (action) { case AppConstants.INTENT_ACTION_ALARM_ACTION: - RaceStateEventImplParcel stateEvent = intent.getParcelableExtra(AppConstants.EXTRAS_RACE_STATE_EVENT); - ExLog.i(this, TAG, String.format("Processing %s", stateEvent.toString())); - race.getState().processStateEvent(stateEvent.getRaceStateEvent()); - clearAlarmByName(race, stateEvent.getEventName()); + long timePoint = intent.getLongExtra(AppConstants.INTENT_EXTRA_LONG, 0); + String eventName = intent.getStringExtra(AppConstants.INTENT_EXTRA_STRING); + RaceStateEvent event = new RaceStateEventImpl(new MillisecondsTimePoint(timePoint), RaceStateEvents.valueOf(eventName)); + ExLog.i(this, TAG, String.format("Processing %s", event.toString())); + race.getState().processStateEvent(event); + clearAlarmByName(race, event.getEventName()); break; } } @@ -327,10 +325,11 @@ public class RaceStateService extends Service { } private PendingIntent createAlarmPendingIntent(ManagedRace managedRace, RaceStateEvent event) { - Intent intent = new Intent(this, RaceStateService.class); + Intent intent = new Intent().setClass(this, RaceStateService.class); intent.setAction(AppConstants.INTENT_ACTION_ALARM_ACTION); intent.putExtra(AppConstants.RACE_ID_KEY, managedRace.getId()); - intent.putExtra(AppConstants.EXTRAS_RACE_STATE_EVENT, new RaceStateEventImplParcel(event)); + intent.putExtra(AppConstants.INTENT_EXTRA_LONG, event.getTimePoint().asMillis()); + intent.putExtra(AppConstants.INTENT_EXTRA_STRING, event.getEventName().name()); return PendingIntent.getService(this, alarmManagerRequestCode++, intent, PendingIntent.FLAG_UPDATE_CURRENT); }