Fixed opening links

Fixed opening links
Proper backstack for notifications
captchafix
Florens Douwes 11 years ago
parent 14a1593ef6
commit ecae9160cd
  1. 1
      Chan/AndroidManifest.xml
  2. 1
      Chan/res/values/strings.xml
  3. 2
      Chan/src/org/floens/chan/ChanApplication.java
  4. 2
      Chan/src/org/floens/chan/core/watch/PinWatcher.java
  5. 14
      Chan/src/org/floens/chan/core/watch/WatchNotifier.java
  6. 7
      Chan/src/org/floens/chan/ui/activity/BaseActivity.java
  7. 176
      Chan/src/org/floens/chan/ui/activity/BoardActivity.java

@ -21,7 +21,6 @@
android:theme="@style/AppTheme" >
<activity
android:name="org.floens.chan.ui.activity.BoardActivity"
android:launchMode="singleTask"
android:configChanges="keyboardHidden|orientation|screenSize"
android:label="@string/app_name" >
<intent-filter>

@ -7,6 +7,7 @@
<string name="add">Add</string>
<string name="close">Close</string>
<string name="back">Back</string>
<string name="ok">OK</string>
<string name="action_settings">Settings</string>
<string name="action_reload">Reload</string>

@ -22,7 +22,7 @@ import com.android.volley.toolbox.ImageLoader;
import com.android.volley.toolbox.Volley;
public class ChanApplication extends Application implements PinListener {
public static final boolean DEVELOPER_MODE = false;
public static final boolean DEVELOPER_MODE = true;
private static ChanApplication instance;
private static RequestQueue volleyRequestQueue;

@ -69,7 +69,7 @@ public class PinWatcher implements Loader.LoaderListener {
return false;
}
}
public Post getLastSeenPost() {
int i = posts.size() - pin.getNewPostsCount() - 1;
if (i >= 0 && i < posts.size()) {

@ -19,6 +19,7 @@ import android.content.Context;
import android.content.Intent;
import android.media.RingtoneManager;
import android.support.v4.app.NotificationCompat;
import android.support.v4.app.TaskStackBuilder;
public class WatchNotifier {
private static final String TAG = "WatchNotifier";
@ -142,14 +143,15 @@ public class WatchNotifier {
@SuppressWarnings("deprecation")
private void showNotification(String tickerText, String title, String content, String contentInfo,
List<CharSequence> lines, boolean makeSound) {
Intent intent = new Intent(pinnedService, BoardActivity.class);
// intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP |
// Intent.FLAG_ACTIVITY_SINGLE_TOP
// | Intent.FLAG_ACTIVITY_NEW_TASK);
PendingIntent pending = PendingIntent.getActivity(pinnedService, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
Intent resultIntent = new Intent(pinnedService, BoardActivity.class);
TaskStackBuilder stackBuilder = TaskStackBuilder.create(pinnedService);
stackBuilder.addParentStack(BoardActivity.class);
stackBuilder.addNextIntent(resultIntent);
PendingIntent resultPendingIntent = stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);
NotificationCompat.Builder builder = new NotificationCompat.Builder(pinnedService);
builder.setContentIntent(pending);
builder.setContentIntent(resultPendingIntent);
builder.setTicker(tickerText);
builder.setContentTitle(title);

@ -91,13 +91,6 @@ public abstract class BaseActivity extends Activity implements PanelSlideListene
ChanApplication.getPinnedManager().removePinListener(this);
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
// pinDrawer.openDrawer(pinDrawerView);
}
private void initPane() {
threadPane.setPanelSlideListener(this);
threadPane.setParallaxDistance(200);

@ -1,6 +1,5 @@
package org.floens.chan.ui.activity;
import java.util.ArrayList;
import java.util.List;
import org.floens.chan.ChanApplication;
@ -11,6 +10,7 @@ import org.floens.chan.core.model.Pin;
import org.floens.chan.core.model.Post;
import org.floens.chan.service.WatchService;
import org.floens.chan.ui.fragment.ThreadFragment;
import org.floens.chan.utils.Logger;
import org.floens.chan.utils.Utils;
import android.app.ActionBar;
@ -36,15 +36,13 @@ public class BoardActivity extends BaseActivity implements ActionBar.OnNavigatio
private Loadable threadLoadable = new Loadable();
private ThreadFragment boardFragment;
private ThreadFragment threadFragment;
private boolean boardSetByIntent = false;
private boolean actionBarSetToListNavigation = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
boardLoadable.mode = Loadable.Mode.BOARD;
threadLoadable.mode = Loadable.Mode.THREAD;
boardFragment = ThreadFragment.newInstance(this);
threadFragment = ThreadFragment.newInstance(this);
@ -53,31 +51,34 @@ public class BoardActivity extends BaseActivity implements ActionBar.OnNavigatio
ft.replace(R.id.right_pane, threadFragment);
ft.commitAllowingStateLoss();
updatePaneState();
updateActionBarState();
final ActionBar actionBar = getActionBar();
actionBar.setListNavigationCallbacks(
new ArrayAdapter<String>(actionBar.getThemedContext(), R.layout.board_select_spinner,
android.R.id.text1, ChanApplication.getBoardManager().getMyBoardsKeys()), this);
updatePaneState();
updateActionBarState();
Intent startIntent = getIntent();
Uri startUri = startIntent.getData();
if (savedInstanceState != null) {
boardLoadable.readFromBundle(this, "board", savedInstanceState);
boardLoadable.no = 0;
boardLoadable.listViewIndex = 0;
boardLoadable.listViewTop = 0;
threadLoadable.readFromBundle(this, "thread", savedInstanceState);
setNavigationFromBoardValue(boardLoadable.board);
startLoadingThread(threadLoadable);
} else if (startUri != null) {
handleIntentURI(startUri);
// Reset page etc.
Loadable tmp = new Loadable();
tmp.readFromBundle(this, "board", savedInstanceState);
loadBoard(tmp.board);
} else {
getActionBar().setSelectedNavigationItem(0);
if (startUri != null) {
handleIntentURI(startUri);
}
if (boardLoadable.mode == Loadable.Mode.INVALID) {
String board = ChanApplication.getBoardManager().getMyBoardsValues().get(0);
loadBoard(board);
}
}
}
@ -119,18 +120,6 @@ public class BoardActivity extends BaseActivity implements ActionBar.OnNavigatio
super.initDrawer();
}
@Override
public boolean onNavigationItemSelected(int position, long id) {
if (!boardSetByIntent) {
boardLoadable = new Loadable(ChanApplication.getBoardManager().getMyBoardsValues().get(position));
startLoadingBoard(boardLoadable);
}
boardSetByIntent = false;
return true;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
@ -157,12 +146,12 @@ public class BoardActivity extends BaseActivity implements ActionBar.OnNavigatio
LayoutParams leftParams = left.getLayoutParams();
LayoutParams rightParams = right.getLayoutParams();
// Content view dp's:
// Nexus 4 is 384 x 640 dp
// Nexus 7 is 600 x 960 dp
// Nexus 10 is 800 x 1280 dp
if (width < Utils.dp(800)) {
if (width < Utils.dp(400)) {
leftParams.width = width - Utils.dp(30);
@ -217,13 +206,38 @@ public class BoardActivity extends BaseActivity implements ActionBar.OnNavigatio
}
private void updateActionBarState() {
// Force the actionbar state after the ThreadPane layout,
// otherwise the ThreadPane incorrectly reports that it's not slidable.
threadPane.post(new Runnable() {
@Override
public void run() {
updateActionBarStateCallback();
}
});
}
private void updateActionBarStateCallback() {
final ActionBar actionBar = getActionBar();
if (threadPane.isSlideable()) {
if (threadPane.isOpen()) {
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
int index = getBoardIndexNavigator(boardLoadable.board);
if (index >= 0) {
// actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
setActionBarListMode();
actionBar.setTitle("");
} else {
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
String niceTitle = ChanApplication.getBoardManager().getBoardKey(boardLoadable.board);
if (niceTitle == null) {
actionBar.setTitle("/" + boardLoadable.board + "/");
} else {
actionBar.setTitle(niceTitle);
}
}
actionBar.setHomeButtonEnabled(true);
actionBar.setTitle("");
pinDrawerListener.setDrawerIndicatorEnabled(true);
} else {
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
@ -233,7 +247,8 @@ public class BoardActivity extends BaseActivity implements ActionBar.OnNavigatio
actionBar.setDisplayHomeAsUpEnabled(true);
} else {
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
setActionBarListMode();
// actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
pinDrawerListener.setDrawerIndicatorEnabled(true);
actionBar.setTitle(threadLoadable.title);
@ -245,6 +260,12 @@ public class BoardActivity extends BaseActivity implements ActionBar.OnNavigatio
invalidateOptionsMenu();
}
private void setActionBarListMode() {
ActionBar actionBar = getActionBar();
if (actionBar.getNavigationMode() != ActionBar.NAVIGATION_MODE_LIST)
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
boolean open = threadPane.isOpen();
@ -339,6 +360,43 @@ public class BoardActivity extends BaseActivity implements ActionBar.OnNavigatio
updateActionBarState();
}
/**
* Sets the navigator to appropriately and calls startLoadingBoard
*
* @param board
*/
private void loadBoard(String board) {
boardLoadable = new Loadable(board);
Logger.test("LoadBoard " + board);
int index = getBoardIndexNavigator(boardLoadable.board);
if (index >= 0) {
ActionBar actionBar = getActionBar();
setActionBarListMode();
if (actionBar.getSelectedNavigationIndex() != index) {
actionBar.setSelectedNavigationItem(index);
} else {
startLoadingBoard(boardLoadable);
}
} else {
startLoadingBoard(boardLoadable);
}
}
@Override
public boolean onNavigationItemSelected(int position, long id) {
if (!actionBarSetToListNavigation) {
actionBarSetToListNavigation = true;
} else {
boardLoadable = new Loadable(ChanApplication.getBoardManager().getMyBoardsValues().get(position));
startLoadingBoard(boardLoadable);
}
return true;
}
private void startLoadingBoard(Loadable loadable) {
if (loadable.mode == Loadable.Mode.INVALID)
return;
@ -392,26 +450,15 @@ public class BoardActivity extends BaseActivity implements ActionBar.OnNavigatio
if (parts.size() == 1) {
// Board mode
String rawBoard = parts.get(0);
if (ChanApplication.getBoardManager().getBoardExists(rawBoard)) {
boardSetByIntent = true;
startLoadingBoard(new Loadable(rawBoard));
ActionBar actionBar = getActionBar();
if (!setNavigationFromBoardValue(rawBoard)) {
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
actionBar.setDisplayShowTitleEnabled(true);
String value = ChanApplication.getBoardManager().getBoardKey(rawBoard);
actionBar.setTitle(value == null ? ("/" + rawBoard + "/") : value);
}
// To clear the flag
loadBoard(rawBoard);
loadBoard(rawBoard);
} else {
handleIntentURIFallback(startUri.toString());
}
} else if (parts.size() == 3) {
// Thread mode
// First load a board and then start another activity opening the thread
String rawBoard = parts.get(0);
int no = -1;
@ -421,9 +468,6 @@ public class BoardActivity extends BaseActivity implements ActionBar.OnNavigatio
}
if (no >= 0 && ChanApplication.getBoardManager().getBoardExists(rawBoard)) {
boardSetByIntent = true;
startLoadingBoard(new Loadable(rawBoard));
startLoadingThread(new Loadable(rawBoard, no));
} else {
handleIntentURIFallback(startUri.toString());
@ -436,43 +480,27 @@ public class BoardActivity extends BaseActivity implements ActionBar.OnNavigatio
private void handleIntentURIFallback(final String url) {
new AlertDialog.Builder(this).setTitle(R.string.open_unknown_title).setMessage(R.string.open_unknown)
.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {
.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// Cancel button
finish();
}
}).setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
}).setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// Ok button
showUrlOpenPicker(url);
}
}).setCancelable(false).create().show();
}
/**
* Set the visual selector to the board. If the user has not set the board
* as a favorite, return false.
*
* @param boardValue
* @return true if spinner was set, false otherwise
*/
private boolean setNavigationFromBoardValue(String boardValue) {
ArrayList<String> list = ChanApplication.getBoardManager().getMyBoardsValues();
int foundIndex = -1;
private int getBoardIndexNavigator(String boardValue) {
List<String> list = ChanApplication.getBoardManager().getMyBoardsValues();
for (int i = 0; i < list.size(); i++) {
if (list.get(i).equals(boardValue)) {
foundIndex = i;
break;
return i;
}
}
if (foundIndex >= 0) {
getActionBar().setSelectedNavigationItem(foundIndex);
return true;
} else {
return false;
}
return -1;
}
}

Loading…
Cancel
Save