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;
@DatabaseField
public int watchLastCount;
public int watchLastCount = -1;
@DatabaseField
public int watchNewCount;
public int watchNewCount = -1;
@DatabaseField
public int quoteLastCount;
public int quoteLastCount = -1;
@DatabaseField
public int quoteNewCount;
public int quoteNewCount = -1;
public boolean isError = false;

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

@ -52,6 +52,7 @@ public abstract class BaseActivity extends Activity implements PanelSlideListene
protected SlidingPaneLayout threadPane;
private ShareActionProvider shareActionProvider;
private Intent pendingShareActionProviderIntent;
/**
* 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) {
getMenuInflater().inflate(R.menu.base, menu);
shareActionProvider = (ShareActionProvider) menu.findItem(R.id.action_share).getActionProvider();
if (pendingShareActionProviderIntent != null) {
shareActionProvider.setShareIntent(pendingShareActionProviderIntent);
pendingShareActionProviderIntent = null;
}
return true;
}
@ -285,11 +290,14 @@ public abstract class BaseActivity extends Activity implements PanelSlideListene
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) {
Intent share = new Intent(android.content.Intent.ACTION_SEND);
share.putExtra(android.content.Intent.EXTRA_TEXT, url);
share.setType("text/plain");
shareActionProvider.setShareIntent(share);
} else {
pendingShareActionProviderIntent = share;
}
}

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

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

@ -91,6 +91,15 @@ public class ImageViewFragment extends Fragment implements ThumbnailImageViewCal
super.onSaveInstanceState(bundle);
}
@Override
public void onDestroy() {
super.onDestroy();
if (imageView != null) {
imageView.cancelLoad();
}
}
public void onSelected(ImageViewAdapter adapter, int position) {
activity.setProgressBarIndeterminateVisibility(showProgressBar);
@ -103,6 +112,12 @@ public class ImageViewFragment extends Fragment implements ThumbnailImageViewCal
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) {
MenuItem item = menu.findItem(R.id.action_image_play_state);
item.setVisible(isVideo);

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

Loading…
Cancel
Save