Repository: eventfahrplan/eventfahrplan
Issue: EventDetailFragment: IllegalArgumentException: Parameter specified as non-null is null: parameter event

Crash report from a user:

- sent: 22.09.2018
- Version: [1.36.1 (Datenspuren Edition)](https://github.com/johnjohndoe/CampFahrplan/releases/tag/v.1.36.1-Datenspuren-Edition)
- Android version: 8.1.0
- Device model: MI 8

# Stacktrace
``` java
java.lang.RuntimeException: Unable to start activity 
    ComponentInfo{info.metadude.android.datenspuren.schedule/
    nerd.tuxmobil.fahrplan.congress.details.EventDetail}: java.lang.IllegalArgumentException: 
    Parameter specified as non-null is null: method 
    kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull, parameter event
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2813)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2891)
at android.app.ActivityThread.-wrap11(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1614)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6648)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:818)

Caused by: java.lang.IllegalArgumentException: Parameter specified as non-null is null: 
    method kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull, parameter event
at nerd.tuxmobil.fahrplan.congress.utils.EventUrlComposer.<init>(Unknown Source:2)
at nerd.tuxmobil.fahrplan.congress.details.EventDetailFragment.onViewCreated(EventDetailFragment.java:237)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1430)
at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1740)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1809)
at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:799)
at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2580)
at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2367)
at android.support.v4.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2322)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2229)
at android.support.v4.app.FragmentManagerImpl.dispatchStateChange(FragmentManager.java:3221)
at android.support.v4.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:3171)
at android.support.v4.app.FragmentController.dispatchActivityCreated(FragmentController.java:192)
at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:560)
at android.support.v7.app.AppCompatActivity.onStart(AppCompatActivity.java:177)
at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1335)
at android.app.Activity.performStart(Activity.java:7118)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2776)
... 9 more
```

# Log
``` java
0 D: Writing unhandled exception to: /data/user/0/
     info.metadude.android.datenspuren.schedule/files/1.36.1 (Datenspuren Edition)-1537567710095.tracedroid
1 D: current handler class=com.android.internal.os.RuntimeInit$KillApplicationHandler
```

Changed files:
app/src/main/java/nerd/tuxmobil/fahrplan/congress/schedule/MainActivity.java
app/src/main/java/nerd/tuxmobil/fahrplan/congress/changes/ChangesDialog.java
app/src/main/java/nerd/tuxmobil/fahrplan/congress/details/EventDetail.java
app/src/main/java/nerd/tuxmobil/fahrplan/congress/details/EventDetailFragment.java
app/src/main/java/nerd/tuxmobil/fahrplan/congress/favorites/StarredListFragment.java
app/src/main/java/nerd/tuxmobil/fahrplan/congress/schedule/FahrplanFragment.java
app/src/main/java/nerd/tuxmobil/fahrplan/congress/changes/ChangeListActivity.java
app/src/main/java/nerd/tuxmobil/fahrplan/congress/favorites/StarredListActivity.java
app/src/main/java/nerd/tuxmobil/fahrplan/congress/contract/BundleKeys.java
app/src/main/java/nerd/tuxmobil/fahrplan/congress/base/AbstractListFragment.java
app/src/main/java/nerd/tuxmobil/fahrplan/congress/changes/ChangeListFragment.java

diff --git a/app/src/main/java/nerd/tuxmobil/fahrplan/congress/base/AbstractListFragment.java b/app/src/main/java/nerd/tuxmobil/fahrplan/congress/base/AbstractListFragment.java
index 3724beb6..865c9da9 100644
--- a/app/src/main/java/nerd/tuxmobil/fahrplan/congress/base/AbstractListFragment.java
+++ b/app/src/main/java/nerd/tuxmobil/fahrplan/congress/base/AbstractListFragment.java
@@ -21,9 +21,13 @@ public abstract class AbstractListFragment extends ListFragment {
      * fragment to allow an interaction in this fragment to be communicated
      * to the activity and potentially other fragments contained in that
      * activity.
+     *
+     * @param lecture                The lecture which was clicked.
+     * @param requiresScheduleReload Boolean flag to indicate whether the schedule
+     *                               must be reload from the data source or not.
      */
     public interface OnLectureListClick {
-        void onLectureListClick(Lecture lecture);
+        void onLectureListClick(Lecture lecture, boolean requiresScheduleReload);
     }
 
 }
diff --git a/app/src/main/java/nerd/tuxmobil/fahrplan/congress/changes/ChangeListActivity.java b/app/src/main/java/nerd/tuxmobil/fahrplan/congress/changes/ChangeListActivity.java
index 895540cd..2891cf48 100644
--- a/app/src/main/java/nerd/tuxmobil/fahrplan/congress/changes/ChangeListActivity.java
+++ b/app/src/main/java/nerd/tuxmobil/fahrplan/congress/changes/ChangeListActivity.java
@@ -10,6 +10,7 @@ import nerd.tuxmobil.fahrplan.congress.MyApp;
 import nerd.tuxmobil.fahrplan.congress.R;
 import nerd.tuxmobil.fahrplan.congress.base.AbstractListFragment;
 import nerd.tuxmobil.fahrplan.congress.base.BaseActivity;
+import nerd.tuxmobil.fahrplan.congress.contract.BundleKeys;
 import nerd.tuxmobil.fahrplan.congress.details.EventDetail;
 import nerd.tuxmobil.fahrplan.congress.models.Lecture;
 
@@ -27,16 +28,26 @@ public class ChangeListActivity extends BaseActivity implements
         int actionBarColor = ContextCompat.getColor(this, R.color.colorActionBar);
         getSupportActionBar().setBackgroundDrawable(new ColorDrawable(actionBarColor));
 
+        boolean requiresScheduleReload = false;
+        Intent intent = getIntent();
+        if (intent != null) {
+            Bundle extras = intent.getExtras();
+            if (extras != null) {
+                requiresScheduleReload = extras.getBoolean(BundleKeys.REQUIRES_SCHEDULE_RELOAD, false);
+            }
+        }
+
         if (savedInstanceState == null) {
-            addFragment(R.id.container, new ChangeListFragment(), ChangeListFragment.FRAGMENT_TAG);
+            ChangeListFragment fragment = ChangeListFragment.newInstance(false, requiresScheduleReload);
+            addFragment(R.id.container, fragment, ChangeListFragment.FRAGMENT_TAG);
             MyApp.LogDebug(LOG_TAG, "onCreate fragment created");
         }
     }
 
     @Override
-    public void onLectureListClick(Lecture lecture) {
+    public void onLectureListClick(Lecture lecture, boolean requiresScheduleReload) {
         if (lecture != null) {
-            EventDetail.startForResult(this, lecture, lecture.day);
+            EventDetail.startForResult(this, lecture, lecture.day, requiresScheduleReload);
         }
     }
 
diff --git a/app/src/main/java/nerd/tuxmobil/fahrplan/congress/changes/ChangeListFragment.java b/app/src/main/java/nerd/tuxmobil/fahrplan/congress/changes/ChangeListFragment.java
index 7764502c..8420073b 100644
--- a/app/src/main/java/nerd/tuxmobil/fahrplan/congress/changes/ChangeListFragment.java
+++ b/app/src/main/java/nerd/tuxmobil/fahrplan/congress/changes/ChangeListFragment.java
@@ -37,6 +37,7 @@ public class ChangeListFragment extends AbstractListFragment {
     private OnLectureListClick mListener;
     private List<Lecture> changesList;
     private boolean sidePane = false;
+    private boolean requiresScheduleReload = false;
 
     /**
      * The fragment's ListView/GridView.
@@ -49,10 +50,11 @@ public class ChangeListFragment extends AbstractListFragment {
      */
     private LectureChangesArrayAdapter mAdapter;
 
-    public static ChangeListFragment newInstance(boolean sidePane) {
+    public static ChangeListFragment newInstance(boolean sidePane, boolean requiresScheduleReload) {
         ChangeListFragment fragment = new ChangeListFragment();
         Bundle args = new Bundle();
         args.putBoolean(BundleKeys.SIDEPANE, sidePane);
+        args.putBoolean(BundleKeys.REQUIRES_SCHEDULE_RELOAD, requiresScheduleReload);
         fragment.setArguments(args);
         return fragment;
     }
@@ -71,6 +73,7 @@ public class ChangeListFragment extends AbstractListFragment {
         Bundle args = getArguments();
         if (args != null) {
             sidePane = args.getBoolean(BundleKeys.SIDEPANE);
+            requiresScheduleReload = args.getBoolean(BundleKeys.REQUIRES_SCHEDULE_RELOAD);
         }
 
         FragmentActivity activity = getActivity();
@@ -142,7 +145,7 @@ public class ChangeListFragment extends AbstractListFragment {
             position--;
             Lecture clicked = changesList.get(mAdapter.getItemIndex(position));
             if (clicked.changedIsCanceled) return;
-            mListener.onLectureListClick(clicked);
+            mListener.onLectureListClick(clicked, requiresScheduleReload);
         }
     }
 }
diff --git a/app/src/main/java/nerd/tuxmobil/fahrplan/congress/changes/ChangesDialog.java b/app/src/main/java/nerd/tuxmobil/fahrplan/congress/changes/ChangesDialog.java
index a81d3b30..93d3686b 100644
--- a/app/src/main/java/nerd/tuxmobil/fahrplan/congress/changes/ChangesDialog.java
+++ b/app/src/main/java/nerd/tuxmobil/fahrplan/congress/changes/ChangesDialog.java
@@ -31,9 +31,10 @@ public class ChangesDialog extends DialogFragment {
     private int cancelled;
     private int markedAffected;
     private String version;
+    private boolean requiresScheduleReload = false;
 
     public static ChangesDialog newInstance(String version, int changed, int added,
-                                            int cancelled, int marked) {
+                                            int cancelled, int marked, boolean requiresScheduleReload) {
         ChangesDialog dialog = new ChangesDialog();
         Bundle args = new Bundle();
         args.putInt(BundleKeys.CHANGES_DLG_NUM_CHANGED, changed);
@@ -41,6 +42,7 @@ public class ChangesDialog extends DialogFragment {
         args.putInt(BundleKeys.CHANGES_DLG_NUM_CANCELLED, cancelled);
         args.putInt(BundleKeys.CHANGES_DLG_NUM_MARKED, marked);
         args.putString(BundleKeys.CHANGES_DLG_VERSION, version);
+        args.putBoolean(BundleKeys.REQUIRES_SCHEDULE_RELOAD, requiresScheduleReload);
         dialog.setArguments(args);
         dialog.setCancelable(false);
         return dialog;
@@ -56,6 +58,7 @@ public class ChangesDialog extends DialogFragment {
             cancelled = args.getInt(BundleKeys.CHANGES_DLG_NUM_CANCELLED);
             markedAffected = args.getInt(BundleKeys.CHANGES_DLG_NUM_MARKED);
             version = args.getString(BundleKeys.CHANGES_DLG_VERSION);
+            requiresScheduleReload = args.getBoolean(BundleKeys.REQUIRES_SCHEDULE_RELOAD);
         }
     }
 
@@ -95,7 +98,7 @@ public class ChangesDialog extends DialogFragment {
         flagChangesAsSeen();
         FragmentActivity activity = getActivity();
         if (activity instanceof MainActivity) {
-            ((MainActivity) activity).openLectureChanges();
+            ((MainActivity) activity).openLectureChanges(requiresScheduleReload);
         }
     }
 
diff --git a/app/src/main/java/nerd/tuxmobil/fahrplan/congress/contract/BundleKeys.java b/app/src/main/java/nerd/tuxmobil/fahrplan/congress/contract/BundleKeys.java
index bb3e8985..a546c372 100644
--- a/app/src/main/java/nerd/tuxmobil/fahrplan/congress/contract/BundleKeys.java
+++ b/app/src/main/java/nerd/tuxmobil/fahrplan/congress/contract/BundleKeys.java
@@ -38,6 +38,10 @@ public interface BundleKeys {
     String SIDEPANE =
             "nerd.tuxmobil.fahrplan.congress.SIDEPANE";
 
+    // Schedule reload
+    String REQUIRES_SCHEDULE_RELOAD =
+            "nerd.tuxmobil.fahrplan.congress.REQUIRES_SCHEDULE_RELOAD";
+
     // Changes dialog
     String CHANGES_DLG_NUM_CHANGED =
             "nerd.tuxmobil.fahrplan.congress.ChangesDialog.NUM_CHANGES";
diff --git a/app/src/main/java/nerd/tuxmobil/fahrplan/congress/details/EventDetail.java b/app/src/main/java/nerd/tuxmobil/fahrplan/congress/details/EventDetail.java
index 000868cd..f7b0c5a5 100644
--- a/app/src/main/java/nerd/tuxmobil/fahrplan/congress/details/EventDetail.java
+++ b/app/src/main/java/nerd/tuxmobil/fahrplan/congress/details/EventDetail.java
@@ -23,7 +23,8 @@ public class EventDetail extends BaseActivity {
 
     public static void startForResult(@NonNull Activity activity,
                                       @NonNull Lecture lecture,
-                                      int lectureDay) {
+                                      int lectureDay,
+                                      boolean requiresScheduleReload) {
         Intent intent = new Intent(activity, EventDetail.class);
         intent.putExtra(BundleKeys.EVENT_TITLE, lecture.title);
         intent.putExtra(BundleKeys.EVENT_SUBTITLE, lecture.subtitle);
@@ -35,6 +36,7 @@ public class EventDetail extends BaseActivity {
         intent.putExtra(BundleKeys.EVENT_TIME, lecture.startTime);
         intent.putExtra(BundleKeys.EVENT_DAY, lectureDay);
         intent.putExtra(BundleKeys.EVENT_ROOM, lecture.room);
+        intent.putExtra(BundleKeys.REQUIRES_SCHEDULE_RELOAD, requiresScheduleReload);
         activity.startActivityForResult(intent, MyApp.EVENTVIEW);
     }
 
@@ -74,6 +76,8 @@ public class EventDetail extends BaseActivity {
                     intent.getIntExtra(BundleKeys.EVENT_DAY, 0));
             args.putString(BundleKeys.EVENT_ROOM,
                     intent.getStringExtra(BundleKeys.EVENT_ROOM));
+            args.putBoolean(BundleKeys.REQUIRES_SCHEDULE_RELOAD,
+                    intent.getBooleanExtra(BundleKeys.REQUIRES_SCHEDULE_RELOAD, false));
             eventDetailFragment.setArguments(args);
             replaceFragment(R.id.detail, eventDetailFragment,
                     EventDetailFragment.FRAGMENT_TAG);
diff --git a/app/src/main/java/nerd/tuxmobil/fahrplan/congress/details/EventDetailFragment.java b/app/src/main/java/nerd/tuxmobil/fahrplan/congress/details/EventDetailFragment.java
index 91a3d1e5..a474c6eb 100644
--- a/app/src/main/java/nerd/tuxmobil/fahrplan/congress/details/EventDetailFragment.java
+++ b/app/src/main/java/nerd/tuxmobil/fahrplan/congress/details/EventDetailFragment.java
@@ -95,6 +95,8 @@ public class EventDetailFragment extends Fragment {
 
     private Boolean sidePane = false;
 
+    private boolean requiresScheduleReload = false;
+
     private boolean hasArguments = false;
 
     @Override
@@ -128,6 +130,7 @@ public class EventDetailFragment extends Fragment {
         links = args.getString(BundleKeys.EVENT_LINKS);
         room = args.getString(BundleKeys.EVENT_ROOM);
         sidePane = args.getBoolean(BundleKeys.SIDEPANE, false);
+        requiresScheduleReload = args.getBoolean(BundleKeys.REQUIRES_SCHEDULE_RELOAD, false);
         hasArguments = true;
     }
 
@@ -146,7 +149,7 @@ public class EventDetailFragment extends Fragment {
 
             locale = getResources().getConfiguration().locale;
 
-            FahrplanFragment.loadLectureList(activity, day, false);
+            FahrplanFragment.loadLectureList(activity, day, requiresScheduleReload);
             lecture = eventIdToLecture(event_id);
 
             TextView t;
@@ -328,16 +331,17 @@ public class EventDetailFragment extends Fragment {
         return RoomForC3NavConverter.convert(currentRoom);
     }
 
+    @NonNull
     private Lecture eventIdToLecture(String eventId) {
         if (MyApp.lectureList == null) {
-            return null;
+            throw new NullPointerException("Lecture list is null.");
         }
         for (Lecture lecture : MyApp.lectureList) {
             if (lecture.lecture_id.equals(eventId)) {
                 return lecture;
             }
         }
-        return null;
+        throw new IllegalStateException("Lecture list does not contain eventId: " + eventId);
     }
 
     @Override
@@ -377,19 +381,15 @@ public class EventDetailFragment extends Fragment {
             }
             case R.id.menu_item_share_event:
                 l = eventIdToLecture(event_id);
-                if (l != null) {
-                    String formattedLecture = SimpleLectureFormat.format(l);
-                    Context context = getContext();
-                    if (!LectureSharer.shareSimple(context, formattedLecture)) {
-                        Toast.makeText(context, R.string.share_error_activity_not_found, Toast.LENGTH_SHORT).show();
-                    }
+                String formattedLecture = SimpleLectureFormat.format(l);
+                Context context = getContext();
+                if (!LectureSharer.shareSimple(context, formattedLecture)) {
+                    Toast.makeText(context, R.string.share_error_activity_not_found, Toast.LENGTH_SHORT).show();
                 }
                 return true;
             case R.id.menu_item_add_to_calendar:
                 l = eventIdToLecture(event_id);
-                if (l != null) {
-                    FahrplanMisc.addToCalender(activity, l);
-                }
+                FahrplanMisc.addToCalender(activity, l);
                 return true;
             case R.id.menu_item_flag_as_favorite:
                 if (lecture != null) {
diff --git a/app/src/main/java/nerd/tuxmobil/fahrplan/congress/favorites/StarredListActivity.java b/app/src/main/java/nerd/tuxmobil/fahrplan/congress/favorites/StarredListActivity.java
index aa9fe8f3..314cb54f 100644
--- a/app/src/main/java/nerd/tuxmobil/fahrplan/congress/favorites/StarredListActivity.java
+++ b/app/src/main/java/nerd/tuxmobil/fahrplan/congress/favorites/StarredListActivity.java
@@ -38,9 +38,9 @@ public class StarredListActivity extends BaseActivity implements
     }
 
     @Override
-    public void onLectureListClick(Lecture lecture) {
+    public void onLectureListClick(Lecture lecture, boolean requiresScheduleReload) {
         if (lecture != null) {
-            EventDetail.startForResult(this, lecture, lecture.day);
+            EventDetail.startForResult(this, lecture, lecture.day, requiresScheduleReload);
         }
     }
 
diff --git a/app/src/main/java/nerd/tuxmobil/fahrplan/congress/favorites/StarredListFragment.java b/app/src/main/java/nerd/tuxmobil/fahrplan/congress/favorites/StarredListFragment.java
index 69e8151b..ca95bf7b 100644
--- a/app/src/main/java/nerd/tuxmobil/fahrplan/congress/favorites/StarredListFragment.java
+++ b/app/src/main/java/nerd/tuxmobil/fahrplan/congress/favorites/StarredListFragment.java
@@ -190,7 +190,7 @@ public class StarredListFragment extends AbstractListFragment implements AbsList
             // fragment is attached to one) that an item has been selected.
             position--;
             Lecture clicked = starredList.get(mAdapter.getItemIndex(position));
-            mListener.onLectureListClick(clicked);
+            mListener.onLectureListClick(clicked, false);
         }
     }
 
diff --git a/app/src/main/java/nerd/tuxmobil/fahrplan/congress/schedule/FahrplanFragment.java b/app/src/main/java/nerd/tuxmobil/fahrplan/congress/schedule/FahrplanFragment.java
index ab3cb512..5c633064 100644
--- a/app/src/main/java/nerd/tuxmobil/fahrplan/congress/schedule/FahrplanFragment.java
+++ b/app/src/main/java/nerd/tuxmobil/fahrplan/congress/schedule/FahrplanFragment.java
@@ -279,7 +279,7 @@ public class FahrplanFragment extends Fragment implements OnClickListener {
             FrameLayout sidePane = getActivity().findViewById(R.id.detail);
             if (sidePane != null) {
                 Lecture lecture = LectureUtils.getLecture(MyApp.lectureList, lecture_id);
-                ((MainActivity) getActivity()).openLectureDetail(lecture, mDay);
+                ((MainActivity) getActivity()).openLectureDetail(lecture, mDay, false);
             }
             intent.removeExtra("lecture_id");   // jump to given lecture_id only once
         }
@@ -777,7 +777,7 @@ public class FahrplanFragment extends Fragment implements OnClickListener {
         MyApp.LogDebug(LOG_TAG, "Click on " + lecture.title);
         MainActivity main = (MainActivity) getActivity();
         if (main != null) {
-            main.openLectureDetail(lecture, mDay);
+            main.openLectureDetail(lecture, mDay, false);
         }
     }
 
diff --git a/app/src/main/java/nerd/tuxmobil/fahrplan/congress/schedule/MainActivity.java b/app/src/main/java/nerd/tuxmobil/fahrplan/congress/schedule/MainActivity.java
index d0dfe9dc..3cd2d64e 100644
--- a/app/src/main/java/nerd/tuxmobil/fahrplan/congress/schedule/MainActivity.java
+++ b/app/src/main/java/nerd/tuxmobil/fahrplan/congress/schedule/MainActivity.java
@@ -80,6 +80,7 @@ public class MainActivity extends BaseActivity implements
     private ProgressDialog progress = null;
 
     private ProgressBar progressBar = null;
+    private boolean requiresScheduleReload = false;
     private boolean showUpdateAction = true;
     private static MainActivity instance;
 
@@ -312,6 +313,7 @@ public class MainActivity extends BaseActivity implements
     void showChangesDialog() {
         Fragment fragment = findFragment(ChangesDialog.FRAGMENT_TAG);
         if (fragment == null) {
+            requiresScheduleReload = true;
             List<Lecture> changedLectures = FahrplanMisc.readChanges(this);
             AppRepository appRepository = AppRepository.Companion.getInstance(this);
             Meta meta = appRepository.readMeta();
@@ -323,7 +325,9 @@ public class MainActivity extends BaseActivity implements
                     FahrplanMisc.getCancelledLectureCount(changedLectures, false),
                     FahrplanMisc.getChangedLectureCount(changedLectures, true) +
                             FahrplanMisc.getNewLectureCount(changedLectures, true) +
-                            FahrplanMisc.getCancelledLectureCount(changedLectures, true));
+                            FahrplanMisc.getCancelledLectureCount(changedLectures, true),
+                    requiresScheduleReload
+            );
             changesDialog.show(getSupportFragmentManager(), ChangesDialog.FRAGMENT_TAG);
         }
     }
@@ -354,7 +358,7 @@ public class MainActivity extends BaseActivity implements
                 startActivityForResult(intent, MyApp.SETTINGS);
                 return true;
             case R.id.menu_item_schedule_changes:
-                openLectureChanges();
+                openLectureChanges(requiresScheduleReload);
                 return true;
             case R.id.menu_item_favorites:
                 openFavorites();
@@ -364,7 +368,7 @@ public class MainActivity extends BaseActivity implements
         return super.onOptionsItemSelected(item);
     }
 
-    public void openLectureDetail(Lecture lecture, int mDay) {
+    public void openLectureDetail(Lecture lecture, int mDay, boolean requiresScheduleReload) {
         if (lecture == null) return;
         FrameLayout sidePane = findViewById(R.id.detail);
         MyApp.LogDebug(LOG_TAG, "openLectureDetail sidePane=" + sidePane);
@@ -383,12 +387,13 @@ public class MainActivity extends BaseActivity implements
             args.putInt(BundleKeys.EVENT_DAY, mDay);
             args.putString(BundleKeys.EVENT_ROOM, lecture.room);
             args.putBoolean(BundleKeys.SIDEPANE, true);
+            args.putBoolean(BundleKeys.REQUIRES_SCHEDULE_RELOAD, requiresScheduleReload);
             EventDetailFragment eventDetailFragment = new EventDetailFragment();
             eventDetailFragment.setArguments(args);
             replaceFragment(R.id.detail, eventDetailFragment,
                     EventDetailFragment.FRAGMENT_TAG, EventDetailFragment.FRAGMENT_TAG);
         } else {
-            EventDetail.startForResult(this, lecture, mDay);
+            EventDetail.startForResult(this, lecture, mDay, requiresScheduleReload);
         }
     }
 
@@ -448,9 +453,9 @@ public class MainActivity extends BaseActivity implements
     }
 
     @Override
-    public void onLectureListClick(Lecture lecture) {
+    public void onLectureListClick(Lecture lecture, boolean requiresScheduleReload) {
         if (lecture != null) {
-            openLectureDetail(lecture, lecture.day);
+            openLectureDetail(lecture, lecture.day, requiresScheduleReload);
         }
     }
 
@@ -506,14 +511,15 @@ public class MainActivity extends BaseActivity implements
         }
     }
 
-    public void openLectureChanges() {
+    public void openLectureChanges(boolean requiresScheduleReload) {
         FrameLayout sidePane = findViewById(R.id.detail);
         if (sidePane == null) {
             Intent intent = new Intent(this, ChangeListActivity.class);
+            intent.putExtra(BundleKeys.REQUIRES_SCHEDULE_RELOAD, requiresScheduleReload);
             startActivityForResult(intent, MyApp.CHANGELOG);
         } else {
             sidePane.setVisibility(View.VISIBLE);
-            replaceFragment(R.id.detail, ChangeListFragment.newInstance(true),
+            replaceFragment(R.id.detail, ChangeListFragment.newInstance(true, requiresScheduleReload),
                     ChangeListFragment.FRAGMENT_TAG, ChangeListFragment.FRAGMENT_TAG);
         }
     }