Fixed quotes not notifying count...

Fixed sharing
Cancel image load when view is destroyed
Pause video when it isn't visible.
captchafix
Florens Douwes 11 years ago
parent 80073c61e6
commit 1eafe4cbfd
  1. 8
      Chan/src/org/floens/chan/core/model/Pin.java
  2. 11
      Chan/src/org/floens/chan/core/watch/PinWatcher.java
  3. 14
      Chan/src/org/floens/chan/ui/activity/BaseActivity.java
  4. 13
      Chan/src/org/floens/chan/ui/activity/BoardActivity.java
  5. 27
      Chan/src/org/floens/chan/ui/activity/ImageViewActivity.java
  6. 15
      Chan/src/org/floens/chan/ui/fragment/ImageViewFragment.java
  7. 152
      Chan/src/org/floens/chan/ui/view/ThumbnailImageView.java

@ -29,16 +29,16 @@ public class Pin {
public boolean watching = true; public boolean watching = true;
@DatabaseField @DatabaseField
public int watchLastCount; public int watchLastCount = -1;
@DatabaseField @DatabaseField
public int watchNewCount; public int watchNewCount = -1;
@DatabaseField @DatabaseField
public int quoteLastCount; public int quoteLastCount = -1;
@DatabaseField @DatabaseField
public int quoteNewCount; public int quoteNewCount = -1;
public boolean isError = false; public boolean isError = false;

@ -53,13 +53,14 @@ public class PinWatcher implements Loader.LoaderListener {
} }
} }
/* Currently not used
public List<Post> getNewQuotes() { public List<Post> getNewQuotes() {
if (posts.size() == 0) { if (posts.size() == 0) {
return posts; return posts;
} else { } else {
return posts.subList(Math.max(0, posts.size() - pin.getNewQuoteCount()), posts.size()); return posts.subList(Math.max(0, posts.size() - pin.getNewQuoteCount()), posts.size());
} }
} }*/
public boolean getWereNewQuotes() { public boolean getWereNewQuotes() {
if (wereNewQuotes) { if (wereNewQuotes) {
@ -94,10 +95,10 @@ public class PinWatcher implements Loader.LoaderListener {
posts.clear(); posts.clear();
posts.addAll(result); posts.addAll(result);
if (pin.watchLastCount <= 0) if (pin.watchLastCount < 0)
pin.watchLastCount = pin.watchNewCount; pin.watchLastCount = pin.watchNewCount;
if (pin.quoteLastCount <= 0) if (pin.quoteLastCount < 0)
pin.quoteLastCount = pin.quoteNewCount; pin.quoteLastCount = pin.quoteNewCount;
pin.watchNewCount = result.size(); pin.watchNewCount = result.size();
@ -110,7 +111,7 @@ public class PinWatcher implements Loader.LoaderListener {
} }
} }
int lastQuoteCount = pin.quoteNewCount; int lastCount = pin.quoteNewCount;
// Find posts quoting these saved posts // Find posts quoting these saved posts
pin.quoteNewCount = 0; pin.quoteNewCount = 0;
@ -123,7 +124,7 @@ public class PinWatcher implements Loader.LoaderListener {
} }
} }
if (pin.quoteNewCount > lastQuoteCount) { if (pin.quoteNewCount > lastCount) {
wereNewQuotes = true; wereNewQuotes = true;
} }

@ -52,6 +52,7 @@ public abstract class BaseActivity extends Activity implements PanelSlideListene
protected SlidingPaneLayout threadPane; protected SlidingPaneLayout threadPane;
private ShareActionProvider shareActionProvider; private ShareActionProvider shareActionProvider;
private Intent pendingShareActionProviderIntent;
/** /**
* Called when a post has been clicked in the pinned drawer * Called when a post has been clicked in the pinned drawer
@ -248,6 +249,10 @@ public abstract class BaseActivity extends Activity implements PanelSlideListene
public boolean onCreateOptionsMenu(Menu menu) { public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.base, menu); getMenuInflater().inflate(R.menu.base, menu);
shareActionProvider = (ShareActionProvider) menu.findItem(R.id.action_share).getActionProvider(); shareActionProvider = (ShareActionProvider) menu.findItem(R.id.action_share).getActionProvider();
if (pendingShareActionProviderIntent != null) {
shareActionProvider.setShareIntent(pendingShareActionProviderIntent);
pendingShareActionProviderIntent = null;
}
return true; return true;
} }
@ -285,11 +290,14 @@ public abstract class BaseActivity extends Activity implements PanelSlideListene
adapter.setNdefPushMessage(message, this); adapter.setNdefPushMessage(message, this);
} }
Intent share = new Intent(android.content.Intent.ACTION_SEND);
share.putExtra(android.content.Intent.EXTRA_TEXT, url);
share.setType("text/plain");
if (shareActionProvider != null) { if (shareActionProvider != null) {
Intent share = new Intent(android.content.Intent.ACTION_SEND);
share.putExtra(android.content.Intent.EXTRA_TEXT, url);
share.setType("text/plain");
shareActionProvider.setShareIntent(share); shareActionProvider.setShareIntent(share);
} else {
pendingShareActionProviderIntent = share;
} }
} }

@ -239,10 +239,16 @@ public class BoardActivity extends BaseActivity implements ActionBar.OnNavigatio
actionBar.setHomeButtonEnabled(true); actionBar.setHomeButtonEnabled(true);
pinDrawerListener.setDrawerIndicatorEnabled(true); pinDrawerListener.setDrawerIndicatorEnabled(true);
if (boardLoadable.isBoardMode())
setShareUrl(ChanUrls.getBoardUrlDesktop(boardLoadable.board));
} else { } else {
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD); actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
actionBar.setTitle(threadLoadable.title); actionBar.setTitle(threadLoadable.title);
pinDrawerListener.setDrawerIndicatorEnabled(false); pinDrawerListener.setDrawerIndicatorEnabled(false);
if (threadLoadable.isThreadMode())
setShareUrl(ChanUrls.getThreadUrlDesktop(threadLoadable.board, threadLoadable.no));
} }
actionBar.setDisplayHomeAsUpEnabled(true); actionBar.setDisplayHomeAsUpEnabled(true);
@ -253,6 +259,9 @@ public class BoardActivity extends BaseActivity implements ActionBar.OnNavigatio
actionBar.setTitle(threadLoadable.title); actionBar.setTitle(threadLoadable.title);
actionBar.setDisplayHomeAsUpEnabled(true); actionBar.setDisplayHomeAsUpEnabled(true);
if (threadLoadable.isThreadMode())
setShareUrl(ChanUrls.getThreadUrlDesktop(threadLoadable.board, threadLoadable.no));
} }
actionBar.setDisplayShowTitleEnabled(true); actionBar.setDisplayShowTitleEnabled(true);
@ -406,8 +415,6 @@ public class BoardActivity extends BaseActivity implements ActionBar.OnNavigatio
boardFragment.bindLoadable(loadable); boardFragment.bindLoadable(loadable);
boardFragment.requestData(); boardFragment.requestData();
setShareUrl(ChanUrls.getBoardUrlDesktop(loadable.board));
updateActionBarState(); updateActionBarState();
} }
@ -428,8 +435,6 @@ public class BoardActivity extends BaseActivity implements ActionBar.OnNavigatio
threadFragment.bindLoadable(loadable); threadFragment.bindLoadable(loadable);
threadFragment.requestData(); threadFragment.requestData();
setShareUrl(ChanUrls.getThreadUrlDesktop(loadable.board, loadable.no));
if (TextUtils.isEmpty(loadable.title)) { if (TextUtils.isEmpty(loadable.title)) {
loadable.title = "/" + loadable.board + "/" + loadable.no; loadable.title = "/" + loadable.board + "/" + loadable.no;
} }

@ -111,7 +111,14 @@ public class ImageViewActivity extends Activity implements ViewPager.OnPageChang
public void onPageSelected(int position) { public void onPageSelected(int position) {
currentPosition = position; currentPosition = position;
ImageViewFragment fragment = getCurrentFragment(); for (int i = -1; i <= 1; i++) {
ImageViewFragment fragment = getFragment(i);
if (fragment != null) {
fragment.onDeselected();
}
}
ImageViewFragment fragment = getFragment(currentPosition);
if (fragment != null) { if (fragment != null) {
fragment.onSelected(adapter, position); fragment.onSelected(adapter, position);
} }
@ -127,7 +134,7 @@ public class ImageViewActivity extends Activity implements ViewPager.OnPageChang
} }
public void callOnSelect() { public void callOnSelect() {
ImageViewFragment fragment = getCurrentFragment(); ImageViewFragment fragment = getFragment(currentPosition);
if (fragment != null) { if (fragment != null) {
fragment.onSelected(adapter, currentPosition); fragment.onSelected(adapter, currentPosition);
} }
@ -144,7 +151,7 @@ public class ImageViewActivity extends Activity implements ViewPager.OnPageChang
return true; return true;
} else { } else {
ImageViewFragment fragment = getCurrentFragment(); ImageViewFragment fragment = getFragment(currentPosition);
if (fragment != null) { if (fragment != null) {
fragment.customOnOptionsItemSelected(item); fragment.customOnOptionsItemSelected(item);
} }
@ -162,7 +169,7 @@ public class ImageViewActivity extends Activity implements ViewPager.OnPageChang
@Override @Override
public boolean onPrepareOptionsMenu(Menu menu) { public boolean onPrepareOptionsMenu(Menu menu) {
ImageViewFragment fragment = getCurrentFragment(); ImageViewFragment fragment = getFragment(currentPosition);
if (fragment != null) { if (fragment != null) {
fragment.onPrepareOptionsMenu(currentPosition, adapter, menu); fragment.onPrepareOptionsMenu(currentPosition, adapter, menu);
} }
@ -170,10 +177,14 @@ public class ImageViewActivity extends Activity implements ViewPager.OnPageChang
return super.onPrepareOptionsMenu(menu); return super.onPrepareOptionsMenu(menu);
} }
private ImageViewFragment getCurrentFragment() { private ImageViewFragment getFragment(int i) {
Object o = adapter.instantiateItem(viewPager, currentPosition); if (i >= 0 && i < adapter.getCount()) {
if (o instanceof ImageViewFragment) { Object o = adapter.instantiateItem(viewPager, i);
return (ImageViewFragment) o; if (o instanceof ImageViewFragment) {
return (ImageViewFragment) o;
} else {
return null;
}
} else { } else {
return null; return null;
} }

@ -91,6 +91,15 @@ public class ImageViewFragment extends Fragment implements ThumbnailImageViewCal
super.onSaveInstanceState(bundle); super.onSaveInstanceState(bundle);
} }
@Override
public void onDestroy() {
super.onDestroy();
if (imageView != null) {
imageView.cancelLoad();
}
}
public void onSelected(ImageViewAdapter adapter, int position) { public void onSelected(ImageViewAdapter adapter, int position) {
activity.setProgressBarIndeterminateVisibility(showProgressBar); activity.setProgressBarIndeterminateVisibility(showProgressBar);
@ -103,6 +112,12 @@ public class ImageViewFragment extends Fragment implements ThumbnailImageViewCal
activity.invalidateActionBar(); activity.invalidateActionBar();
} }
public void onDeselected() {
if (imageView != null && imageView.getVideoView() != null && imageView.getVideoView().isPlaying()) {
imageView.getVideoView().pause();
}
}
public void onPrepareOptionsMenu(int position, ImageViewAdapter adapter, Menu menu) { public void onPrepareOptionsMenu(int position, ImageViewAdapter adapter, Menu menu) {
MenuItem item = menu.findItem(R.id.action_image_play_state); MenuItem item = menu.findItem(R.id.action_image_play_state);
item.setVisible(isVideo); item.setVisible(isVideo);

@ -6,6 +6,7 @@ import org.floens.chan.ChanApplication;
import org.floens.chan.R; import org.floens.chan.R;
import org.floens.chan.core.net.FileRequest; import org.floens.chan.core.net.FileRequest;
import org.floens.chan.core.net.GIFRequest; import org.floens.chan.core.net.GIFRequest;
import org.floens.chan.utils.Logger;
import org.floens.chan.utils.Utils; import org.floens.chan.utils.Utils;
import uk.co.senab.photoview.PhotoViewAttacher; import uk.co.senab.photoview.PhotoViewAttacher;
@ -20,6 +21,7 @@ import android.widget.ImageView;
import android.widget.Toast; import android.widget.Toast;
import android.widget.VideoView; import android.widget.VideoView;
import com.android.volley.Request;
import com.android.volley.Response; import com.android.volley.Response;
import com.android.volley.VolleyError; import com.android.volley.VolleyError;
import com.android.volley.toolbox.ImageLoader.ImageContainer; import com.android.volley.toolbox.ImageLoader.ImageContainer;
@ -36,6 +38,8 @@ public class ThumbnailImageView extends LoadView implements OnViewTapListener, V
private boolean thumbnailNeeded = true; private boolean thumbnailNeeded = true;
private boolean tapDismiss = false; private boolean tapDismiss = false;
private ImageContainer imageContainerRequest;
private Request<?> imageRequest;
private VideoView videoView; private VideoView videoView;
public ThumbnailImageView(Context context) { public ThumbnailImageView(Context context) {
@ -83,7 +87,7 @@ public class ThumbnailImageView extends LoadView implements OnViewTapListener, V
public void setBigImage(String imageUrl) { public void setBigImage(String imageUrl) {
callback.setProgress(true); callback.setProgress(true);
ChanApplication.getImageLoader().get(imageUrl, new ImageListener() { imageContainerRequest = ChanApplication.getImageLoader().get(imageUrl, new ImageListener() {
@Override @Override
public void onErrorResponse(VolleyError error) { public void onErrorResponse(VolleyError error) {
onError(); onError();
@ -113,77 +117,80 @@ public class ThumbnailImageView extends LoadView implements OnViewTapListener, V
public void setGif(String gifUrl) { public void setGif(String gifUrl) {
callback.setProgress(true); callback.setProgress(true);
ChanApplication.getVolleyRequestQueue().add(new GIFRequest(gifUrl, new Response.Listener<GIFView>() { imageRequest = ChanApplication.getVolleyRequestQueue().add(
@Override new GIFRequest(gifUrl, new Response.Listener<GIFView>() {
public void onResponse(GIFView view) { @Override
view.setLayoutParams(Utils.MATCH_PARAMS); public void onResponse(GIFView view) {
view.setLayoutParams(Utils.MATCH_PARAMS);
setView(view, false);
callback.setProgress(false); setView(view, false);
thumbnailNeeded = false; callback.setProgress(false);
tapDismiss = true; thumbnailNeeded = false;
} tapDismiss = true;
}, new Response.ErrorListener() { }
@Override }, new Response.ErrorListener() {
public void onErrorResponse(VolleyError error) { @Override
onError(); public void onErrorResponse(VolleyError error) {
} onError();
}, getContext())); }
}, getContext()));
} }
public void setVideo(String videoUrl) { public void setVideo(String videoUrl) {
callback.setProgress(true); callback.setProgress(true);
ChanApplication.getVolleyRequestQueue().add(new FileRequest(videoUrl, new Response.Listener<File>() { imageRequest = ChanApplication.getVolleyRequestQueue().add(
@Override new FileRequest(videoUrl, new Response.Listener<File>() {
public void onResponse(final File file) { @Override
if (file != null) { public void onResponse(final File file) {
videoView = new VideoView(getContext()); if (file != null) {
videoView.setZOrderOnTop(true); videoView = new VideoView(getContext());
videoView.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); videoView.setZOrderOnTop(true);
videoView.setLayoutParams(Utils.MATCH_PARAMS); videoView.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,
LayoutParams par = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); LayoutParams.MATCH_PARENT));
par.gravity = Gravity.CENTER; videoView.setLayoutParams(Utils.MATCH_PARAMS);
videoView.setLayoutParams(par); LayoutParams par = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
par.gravity = Gravity.CENTER;
videoView.setOnPreparedListener(new OnPreparedListener() { videoView.setLayoutParams(par);
@Override
public void onPrepared(MediaPlayer mp) { videoView.setOnPreparedListener(new OnPreparedListener() {
mp.setLooping(true); @Override
callback.onVideoLoaded(); public void onPrepared(MediaPlayer mp) {
} mp.setLooping(true);
}); callback.onVideoLoaded();
}
new Thread(new Runnable() { });
@Override
public void run() { new Thread(new Runnable() {
try { @Override
Thread.sleep(200); public void run() {
} catch (InterruptedException e) { try {
e.printStackTrace(); Thread.sleep(200);
} } catch (InterruptedException e) {
e.printStackTrace();
videoView.start(); }
videoView.start();
}
}).start();
videoView.setVideoPath(file.getAbsolutePath());
setView(videoView, false);
callback.setProgress(false);
thumbnailNeeded = false;
tapDismiss = true;
} else {
onError();
} }
}).start(); }
}, new Response.ErrorListener() {
videoView.setVideoPath(file.getAbsolutePath());
@Override
setView(videoView, false); public void onErrorResponse(VolleyError error) {
callback.setProgress(false); onError();
thumbnailNeeded = false; }
tapDismiss = true; }));
} else {
onError();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
onError();
}
}));
} }
@Override @Override
@ -200,6 +207,19 @@ public class ThumbnailImageView extends LoadView implements OnViewTapListener, V
callback.setProgress(false); callback.setProgress(false);
} }
public void cancelLoad() {
Logger.test("Cancelling load!");
if (imageRequest != null) {
imageRequest.cancel();
imageRequest = null;
}
if (imageContainerRequest != null) {
imageContainerRequest.cancelRequest();
imageContainerRequest = null;
}
}
@Override @Override
public void onViewTap(View view, float x, float y) { public void onViewTap(View view, float x, float y) {
if (tapDismiss) { if (tapDismiss) {

Loading…
Cancel
Save