diff --git a/Clover/app/src/main/java/org/floens/chan/chan/ChanHelper.java b/Clover/app/src/main/java/org/floens/chan/chan/ChanHelper.java new file mode 100644 index 00000000..42087118 --- /dev/null +++ b/Clover/app/src/main/java/org/floens/chan/chan/ChanHelper.java @@ -0,0 +1,56 @@ +package org.floens.chan.chan; + +import android.net.Uri; + +import org.floens.chan.Chan; +import org.floens.chan.core.model.Loadable; + +import java.util.List; + +public class ChanHelper { + public static Loadable getLoadableFromStartUri(Uri uri) { + Loadable loadable = null; + int markedNo = -1; + + List parts = uri.getPathSegments(); + + if (parts.size() > 0) { + String rawBoard = parts.get(0); + if (Chan.getBoardManager().getBoardExists(rawBoard)) { + if (parts.size() == 1) { + // Board mode + loadable = new Loadable(rawBoard); + } else if (parts.size() >= 3) { + // Thread mode + int no = -1; + + try { + no = Integer.parseInt(parts.get(2)); + } catch (NumberFormatException ignored) { + } + + int post = -1; + String fragment = uri.getFragment(); + if (fragment != null) { + int index = fragment.indexOf("p"); + if (index >= 0) { + try { + post = Integer.parseInt(fragment.substring(index + 1)); + } catch (NumberFormatException ignored) { + } + } + } + + if (no >= 0) { + loadable = new Loadable(rawBoard, no); + if (post >= 0) { + loadable.markedNo = post; + } + } + } + } + } + + return loadable; + } +} diff --git a/Clover/app/src/main/java/org/floens/chan/core/model/Loadable.java b/Clover/app/src/main/java/org/floens/chan/core/model/Loadable.java index 95e44fd1..ab781058 100644 --- a/Clover/app/src/main/java/org/floens/chan/core/model/Loadable.java +++ b/Clover/app/src/main/java/org/floens/chan/core/model/Loadable.java @@ -51,6 +51,8 @@ public class Loadable { public int lastViewed = -1; + public int markedNo = -1; + /** * Constructs an empty loadable. The mode is INVALID. */ diff --git a/Clover/app/src/main/java/org/floens/chan/core/presenter/ThreadPresenter.java b/Clover/app/src/main/java/org/floens/chan/core/presenter/ThreadPresenter.java index f0e65ee5..7f05fe98 100644 --- a/Clover/app/src/main/java/org/floens/chan/core/presenter/ThreadPresenter.java +++ b/Clover/app/src/main/java/org/floens/chan/core/presenter/ThreadPresenter.java @@ -166,6 +166,16 @@ public class ThreadPresenter implements ChanLoader.ChanLoaderCallback, PostAdapt public void onChanLoaderData(ChanThread result) { chanLoader.setAutoLoadMore(isWatching()); threadPresenterCallback.showPosts(result); + + if (loadable.markedNo >= 0) { + Post markedPost = findPostById(loadable.markedNo); + if (markedPost != null) { + highlightPost(markedPost); + scrollToPost(markedPost, false); + } + loadable.markedNo = -1; + } + } @Override diff --git a/Clover/app/src/main/java/org/floens/chan/ui/activity/StartActivity.java b/Clover/app/src/main/java/org/floens/chan/ui/activity/StartActivity.java index 41789331..4351249f 100644 --- a/Clover/app/src/main/java/org/floens/chan/ui/activity/StartActivity.java +++ b/Clover/app/src/main/java/org/floens/chan/ui/activity/StartActivity.java @@ -26,7 +26,10 @@ import android.view.ViewGroup; import org.floens.chan.Chan; import org.floens.chan.R; +import org.floens.chan.chan.ChanHelper; import org.floens.chan.controller.Controller; +import org.floens.chan.core.model.Board; +import org.floens.chan.core.model.Loadable; import org.floens.chan.core.settings.ChanSettings; import org.floens.chan.ui.controller.BrowseController; import org.floens.chan.ui.controller.RootNavigationController; @@ -56,13 +59,36 @@ public class StartActivity extends AppCompatActivity { setContentView(rootNavigationController.view); addController(rootNavigationController); - rootNavigationController.pushController(new BrowseController(this), false); + BrowseController browseController = new BrowseController(this); + rootNavigationController.pushController(browseController, false); rootNavigationController.onShow(); // Prevent overdraw // Do this after setContentView, or the decor creating will reset the background to a default non-null drawable getWindow().setBackgroundDrawable(null); + + // Startup from background or url + boolean loadDefault = true; + if (savedInstanceState != null) { + // blah + } else if (getIntent().getData() != null) { + Loadable fromUri = ChanHelper.getLoadableFromStartUri(getIntent().getData()); + if (fromUri != null) { + loadDefault = false; + Board board = Chan.getBoardManager().getBoardByValue(fromUri.board); + browseController.loadBoard(board); + + if (fromUri.isThreadMode()) { + browseController.showThread(fromUri); + } + } + } + + if (loadDefault) { + // start default + browseController.loadBoard(Chan.getBoardManager().getSavedBoards().get(0)); + } } public void addController(Controller controller) { diff --git a/Clover/app/src/main/java/org/floens/chan/ui/controller/BrowseController.java b/Clover/app/src/main/java/org/floens/chan/ui/controller/BrowseController.java index a4b164c4..1a8e9e18 100644 --- a/Clover/app/src/main/java/org/floens/chan/ui/controller/BrowseController.java +++ b/Clover/app/src/main/java/org/floens/chan/ui/controller/BrowseController.java @@ -79,8 +79,6 @@ public class BrowseController extends ThreadController implements ToolbarMenuIte items.add(new FloatingMenuItem(SETTINGS_ID, context.getString(R.string.settings_screen))); overflow.setSubMenu(new FloatingMenu(context, overflow.getView(), items)); - - loadBoard(Chan.getBoardManager().getSavedBoards().get(0)); } @Override @@ -150,7 +148,7 @@ public class BrowseController extends ThreadController implements ToolbarMenuIte return false; } - private void loadBoard(Board board) { + public void loadBoard(Board board) { Loadable loadable = new Loadable(board.value); loadable.mode = Loadable.Mode.CATALOG; loadable.generateTitle(); @@ -165,6 +163,7 @@ public class BrowseController extends ThreadController implements ToolbarMenuIte navigationItem.middleMenu.setSelectedItem(item); } } + navigationItem.updateTitle(); } private void loadBoards() { diff --git a/Clover/app/src/main/java/org/floens/chan/ui/controller/ViewThreadController.java b/Clover/app/src/main/java/org/floens/chan/ui/controller/ViewThreadController.java index 81c50347..31e62f3f 100644 --- a/Clover/app/src/main/java/org/floens/chan/ui/controller/ViewThreadController.java +++ b/Clover/app/src/main/java/org/floens/chan/ui/controller/ViewThreadController.java @@ -141,10 +141,8 @@ public class ViewThreadController extends ThreadController implements ThreadLayo @Override public void onShowPosts() { super.onShowPosts(); - if (!navigationItem.title.equals(loadable.title)) { - navigationItem.title = loadable.title; - navigationItem.updateTitle(); - } + navigationItem.title = loadable.title; + navigationItem.updateTitle(); } @Override