package me.ccrama.redditslide.Activities;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentStatePagerAdapter;
import android.support.v4.view.ViewPager;
import net.dean.jraw.models.Submission;
import java.util.List;
import me.ccrama.redditslide.Adapters.MultiredditPosts;
import me.ccrama.redditslide.Adapters.SubmissionDisplay;
import me.ccrama.redditslide.Adapters.SubredditPosts;
import me.ccrama.redditslide.Authentication;
import me.ccrama.redditslide.ContentType;
import me.ccrama.redditslide.Fragments.AlbumFull;
import me.ccrama.redditslide.Fragments.MediaFragment;
import me.ccrama.redditslide.Fragments.SelftextFull;
import me.ccrama.redditslide.Fragments.TitleFull;
import me.ccrama.redditslide.Fragments.TumblrFull;
import me.ccrama.redditslide.HasSeen;
import me.ccrama.redditslide.LastComments;
import me.ccrama.redditslide.OfflineSubreddit;
import me.ccrama.redditslide.PostLoader;
import me.ccrama.redditslide.R;
import me.ccrama.redditslide.SettingValues;
/**
* Created by ccrama on 9/17/2015.
*/
public class Shadowbox extends FullScreenActivity implements SubmissionDisplay {
public static final String EXTRA_PROFILE = "profile";
public static final String EXTRA_PAGE = "page";
public static final String EXTRA_SUBREDDIT = "subreddit";
public static final String EXTRA_MULTIREDDIT = "multireddit";
public PostLoader subredditPosts;
public String subreddit;
int firstPage;
public ViewPager pager;
@Override
public void onCreate(Bundle savedInstance) {
overrideSwipeFromAnywhere();
subreddit = getIntent().getExtras().getString(EXTRA_SUBREDDIT);
firstPage = getIntent().getExtras().getInt(EXTRA_PAGE, 0);
subreddit = getIntent().getExtras().getString(EXTRA_SUBREDDIT);
String multireddit = getIntent().getExtras().getString(EXTRA_MULTIREDDIT);
String profile = getIntent().getExtras().getString(EXTRA_PROFILE, "");
if (multireddit != null) {
subredditPosts = new MultiredditPosts(multireddit, profile);
} else {
subredditPosts = new SubredditPosts(subreddit, Shadowbox.this);
}
subreddit = multireddit == null ? subreddit : ("multi" + multireddit);
if(multireddit == null){
setShareUrl("https://reddit.com/r/" + subreddit);
}
applyDarkColorTheme(subreddit);
super.onCreate(savedInstance);
setContentView(R.layout.activity_slide);
long offline = getIntent().getLongExtra("offline",0L);
OfflineSubreddit submissions = OfflineSubreddit.getSubreddit(subreddit, offline, !Authentication.didOnline, this);
subredditPosts.getPosts().addAll(submissions.submissions);
pager = (ViewPager) findViewById(R.id.content_view);
submissionsPager = new OverviewPagerAdapter(getSupportFragmentManager());
pager.setAdapter(submissionsPager);
pager.setCurrentItem(firstPage);
pager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
if (SettingValues.storeHistory) {
if (subredditPosts.getPosts().get(position).isNsfw() && !SettingValues.storeNSFWHistory) {
} else HasSeen.addSeen(subredditPosts.getPosts().get(position).getFullName());
}
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
}
OverviewPagerAdapter submissionsPager;
@Override
public void updateSuccess(final List<Submission> submissions, final int startIndex) {
if (SettingValues.storeHistory) LastComments.setCommentsSince(submissions);
runOnUiThread(new Runnable() {
@Override
public void run() {
if (startIndex != -1) {
// TODO determine correct behaviour
//comments.notifyItemRangeInserted(startIndex, posts.posts.size());
submissionsPager.notifyDataSetChanged();
} else {
submissionsPager.notifyDataSetChanged();
}
}
});
}
@Override
public void updateOffline(List<Submission> submissions, final long cacheTime) {
runOnUiThread(new Runnable() {
@Override
public void run() {
submissionsPager.notifyDataSetChanged();
}
});
}
@Override
public void updateOfflineError() {
}
@Override
public void updateError() {
}
@Override
public void updateViews() {
}
public class OverviewPagerAdapter extends FragmentStatePagerAdapter {
public OverviewPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int i) {
Fragment f = null;
ContentType.Type t = ContentType.getContentType(subredditPosts.getPosts().get(i));
if (subredditPosts.getPosts().size() - 2 <= i && subredditPosts.hasMore()) {
subredditPosts.loadMore(Shadowbox.this.getApplicationContext(), Shadowbox.this, false);
}
switch (t) {
case GIF:
case IMAGE:
case IMGUR:
case REDDIT:
case EXTERNAL:
case SPOILER:
case DEVIANTART:
case EMBEDDED:
case XKCD:
case LINK:
case VID_ME:
case STREAMABLE:
case VIDEO:
{
f = new MediaFragment();
Bundle args = new Bundle();
Submission submission = subredditPosts.getPosts().get(i);
String previewUrl = "";
if (t != ContentType.Type.XKCD && submission.getDataNode().has("preview") && submission.getDataNode().get("preview").get("images").get(0).get("source").has("height")) { //Load the preview image which has probably already been cached in memory instead of the direct link
previewUrl = submission.getDataNode().get("preview").get("images").get(0).get("source").get("url").asText();
}
args.putString("contentUrl", submission.getUrl());
args.putString("firstUrl", previewUrl);
args.putInt("page", i);
args.putString("sub", subreddit);
f.setArguments(args);
}
break;
case SELF: {
if (subredditPosts.getPosts().get(i).getSelftext().isEmpty()) {
f = new TitleFull();
Bundle args = new Bundle();
args.putInt("page", i);
args.putString("sub", subreddit);
f.setArguments(args);
} else {
f = new SelftextFull();
Bundle args = new Bundle();
args.putInt("page", i);
args.putString("sub", subreddit);
f.setArguments(args);
}
}
break;
case TUMBLR:
{
f = new TumblrFull();
Bundle args = new Bundle();
args.putInt("page", i);
args.putString("sub", subreddit);
f.setArguments(args);
}
break;
case ALBUM: {
f = new AlbumFull();
Bundle args = new Bundle();
args.putInt("page", i);
args.putString("sub", subreddit);
f.setArguments(args);
}
break;
case NONE: {
if (subredditPosts.getPosts().get(i).getSelftext().isEmpty()) {
f = new TitleFull();
Bundle args = new Bundle();
args.putInt("page", i);
args.putString("sub", subreddit);
f.setArguments(args);
} else {
f = new SelftextFull();
Bundle args = new Bundle();
args.putInt("page", i);
args.putString("sub", subreddit);
f.setArguments(args);
}
}
break;
}
return f;
}
@Override
public int getCount() {
return subredditPosts.getPosts().size() ;
}
}
}