Open from urls

filtering
Floens 10 years ago
parent 35a37ab09d
commit 507b4dbc11
  1. 56
      Clover/app/src/main/java/org/floens/chan/chan/ChanHelper.java
  2. 2
      Clover/app/src/main/java/org/floens/chan/core/model/Loadable.java
  3. 10
      Clover/app/src/main/java/org/floens/chan/core/presenter/ThreadPresenter.java
  4. 28
      Clover/app/src/main/java/org/floens/chan/ui/activity/StartActivity.java
  5. 5
      Clover/app/src/main/java/org/floens/chan/ui/controller/BrowseController.java
  6. 6
      Clover/app/src/main/java/org/floens/chan/ui/controller/ViewThreadController.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<String> 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;
}
}

@ -51,6 +51,8 @@ public class Loadable {
public int lastViewed = -1; public int lastViewed = -1;
public int markedNo = -1;
/** /**
* Constructs an empty loadable. The mode is INVALID. * Constructs an empty loadable. The mode is INVALID.
*/ */

@ -166,6 +166,16 @@ public class ThreadPresenter implements ChanLoader.ChanLoaderCallback, PostAdapt
public void onChanLoaderData(ChanThread result) { public void onChanLoaderData(ChanThread result) {
chanLoader.setAutoLoadMore(isWatching()); chanLoader.setAutoLoadMore(isWatching());
threadPresenterCallback.showPosts(result); threadPresenterCallback.showPosts(result);
if (loadable.markedNo >= 0) {
Post markedPost = findPostById(loadable.markedNo);
if (markedPost != null) {
highlightPost(markedPost);
scrollToPost(markedPost, false);
}
loadable.markedNo = -1;
}
} }
@Override @Override

@ -26,7 +26,10 @@ import android.view.ViewGroup;
import org.floens.chan.Chan; import org.floens.chan.Chan;
import org.floens.chan.R; import org.floens.chan.R;
import org.floens.chan.chan.ChanHelper;
import org.floens.chan.controller.Controller; 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.core.settings.ChanSettings;
import org.floens.chan.ui.controller.BrowseController; import org.floens.chan.ui.controller.BrowseController;
import org.floens.chan.ui.controller.RootNavigationController; import org.floens.chan.ui.controller.RootNavigationController;
@ -56,13 +59,36 @@ public class StartActivity extends AppCompatActivity {
setContentView(rootNavigationController.view); setContentView(rootNavigationController.view);
addController(rootNavigationController); addController(rootNavigationController);
rootNavigationController.pushController(new BrowseController(this), false); BrowseController browseController = new BrowseController(this);
rootNavigationController.pushController(browseController, false);
rootNavigationController.onShow(); rootNavigationController.onShow();
// Prevent overdraw // Prevent overdraw
// Do this after setContentView, or the decor creating will reset the background to a default non-null drawable // Do this after setContentView, or the decor creating will reset the background to a default non-null drawable
getWindow().setBackgroundDrawable(null); 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) { public void addController(Controller controller) {

@ -79,8 +79,6 @@ public class BrowseController extends ThreadController implements ToolbarMenuIte
items.add(new FloatingMenuItem(SETTINGS_ID, context.getString(R.string.settings_screen))); items.add(new FloatingMenuItem(SETTINGS_ID, context.getString(R.string.settings_screen)));
overflow.setSubMenu(new FloatingMenu(context, overflow.getView(), items)); overflow.setSubMenu(new FloatingMenu(context, overflow.getView(), items));
loadBoard(Chan.getBoardManager().getSavedBoards().get(0));
} }
@Override @Override
@ -150,7 +148,7 @@ public class BrowseController extends ThreadController implements ToolbarMenuIte
return false; return false;
} }
private void loadBoard(Board board) { public void loadBoard(Board board) {
Loadable loadable = new Loadable(board.value); Loadable loadable = new Loadable(board.value);
loadable.mode = Loadable.Mode.CATALOG; loadable.mode = Loadable.Mode.CATALOG;
loadable.generateTitle(); loadable.generateTitle();
@ -165,6 +163,7 @@ public class BrowseController extends ThreadController implements ToolbarMenuIte
navigationItem.middleMenu.setSelectedItem(item); navigationItem.middleMenu.setSelectedItem(item);
} }
} }
navigationItem.updateTitle();
} }
private void loadBoards() { private void loadBoards() {

@ -141,10 +141,8 @@ public class ViewThreadController extends ThreadController implements ThreadLayo
@Override @Override
public void onShowPosts() { public void onShowPosts() {
super.onShowPosts(); super.onShowPosts();
if (!navigationItem.title.equals(loadable.title)) { navigationItem.title = loadable.title;
navigationItem.title = loadable.title; navigationItem.updateTitle();
navigationItem.updateTitle();
}
} }
@Override @Override

Loading…
Cancel
Save