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 markedNo = -1;
/**
* Constructs an empty loadable. The mode is INVALID.
*/

@ -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

@ -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) {

@ -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() {

@ -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

Loading…
Cancel
Save