state: do not assume board or site is the same for board and thread

loadables.
refactor-toolbar
Floens 8 years ago
parent e4ee945a46
commit aa7fa04ec6
  1. 45
      Clover/app/src/main/java/org/floens/chan/ui/activity/StartActivity.java

@ -197,7 +197,7 @@ public class StartActivity extends AppCompatActivity implements NfcAdapter.Creat
} }
private boolean restoreFromSavedState(Bundle savedInstanceState) { private boolean restoreFromSavedState(Bundle savedInstanceState) {
boolean handled = true; boolean handled = false;
// Restore the activity state from the previously saved state. // Restore the activity state from the previously saved state.
ChanState chanState = savedInstanceState.getParcelable(STATE_KEY); ChanState chanState = savedInstanceState.getParcelable(STATE_KEY);
@ -206,7 +206,7 @@ public class StartActivity extends AppCompatActivity implements NfcAdapter.Creat
} else { } else {
Pair<Loadable, Loadable> boardThreadPair = resolveChanState(chanState); Pair<Loadable, Loadable> boardThreadPair = resolveChanState(chanState);
if (boardThreadPair != null && boardThreadPair.first != null) { if (boardThreadPair.first != null) {
handled = true; handled = true;
browseController.setBoard(boardThreadPair.first.board); browseController.setBoard(boardThreadPair.first.board);
@ -221,30 +221,33 @@ public class StartActivity extends AppCompatActivity implements NfcAdapter.Creat
} }
private Pair<Loadable, Loadable> resolveChanState(ChanState state) { private Pair<Loadable, Loadable> resolveChanState(ChanState state) {
DatabaseLoadableManager loadableManager = databaseManager.getDatabaseLoadableManager(); Loadable boardLoadable = resolveLoadable(state.board, false);
Loadable threadLoadable = resolveLoadable(state.thread, true);
return new Pair<>(boardLoadable, threadLoadable);
}
Site site = Sites.forId(state.board.siteId); private Loadable resolveLoadable(Loadable stateLoadable, boolean forThread) {
Site site = Sites.forId(stateLoadable.siteId);
if (site != null) { if (site != null) {
Board board = site.board(state.board.boardCode); Board board = site.board(stateLoadable.boardCode);
if (board != null) { if (board != null) {
state.board.site = site; stateLoadable.site = site;
state.board.board = board; stateLoadable.board = board;
state.thread.site = site;
state.thread.board = board; if (forThread) {
// When restarting the parcelable isn't actually deserialized, but the same
// When restarting the parcelable isn't actually deserialized, but the same object // object instance is reused. This means that the loadables we gave to the
// instance is reused. This means that the loadables we gave to the state are // state are the same instance, and also have the id set etc. We don't need to
// the same instance, and also have the id set etc. We don't need to query // query these from the loadablemanager.
// these from the loadablemanager. DatabaseLoadableManager loadableManager =
Loadable threadLoadable; databaseManager.getDatabaseLoadableManager();
if (state.thread.id == 0) { if (stateLoadable.id == 0) {
threadLoadable = loadableManager.get(state.thread); stateLoadable = loadableManager.get(stateLoadable);
} else { }
threadLoadable = state.thread;
} }
return new Pair<>(state.board, return stateLoadable;
threadLoadable.mode == Loadable.Mode.THREAD ? threadLoadable : null);
} }
} }

Loading…
Cancel
Save