@@ -287,8 +287,6 @@ public void doWithData(final ArrayList<JsonElement> jsonElements) {
} else {
Album.this.gallery = LoadIntoRecycler.this.gallery;
images = new ArrayList<>(jsonElements);
if (getSupportActionBar() != null)
getSupportActionBar().setSubtitle(1 + "/" + images.size());
AlbumView adapter = new AlbumView(baseActivity, images, false, findViewById(R.id.toolbar).getHeight());
recyclerView.setAdapter(adapter);

@@ -1564,15 +1564,15 @@ public void onClick(View view) {
((Reddit) getApplication()).forceRestart(MainActivity.this);
}
});
header.findViewById(R.id.manage).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent i = new Intent(MainActivity.this, ManageHistory.class);
startActivity(i);
}
});
}

}
header.findViewById(R.id.manage).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent i = new Intent(MainActivity.this, ManageHistory.class);
startActivity(i);
}
});
if (Authentication.didOnline) {

View support = header.findViewById(R.id.support);
@@ -20,11 +20,13 @@

import me.ccrama.redditslide.Autocache.AutoCacheScheduler;
import me.ccrama.redditslide.ColorPreferences;
import me.ccrama.redditslide.CommentCacheAsync;
import me.ccrama.redditslide.OfflineSubreddit;
import me.ccrama.redditslide.R;
import me.ccrama.redditslide.Reddit;
import me.ccrama.redditslide.TimeUtils;
import me.ccrama.redditslide.UserSubscriptions;
import me.ccrama.redditslide.util.NetworkUtil;


/**
@@ -45,6 +47,16 @@ public void onClick(View v) {
finish();
}
});
if(NetworkUtil.isConnectedNoOverride(this)) {
findViewById(R.id.sync_now).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
new CommentCacheAsync(ManageHistory.this, Reddit.cachedData.getString("toCache", "").split(","), true).execute();
}
});
} else {
findViewById(R.id.sync_now).setVisibility(View.GONE);
}
{
SwitchCompat single = (SwitchCompat) findViewById(R.id.wifi);

@@ -43,7 +43,6 @@ public void onCreate(Bundle savedInstance) {

subreddit = getIntent().getExtras().getString(EXTRA_SUBREDDIT);

setContentView(R.layout.activity_slide);

firstPage = getIntent().getExtras().getInt(EXTRA_PAGE, 0);
subreddit = getIntent().getExtras().getString(EXTRA_SUBREDDIT);
@@ -56,6 +55,7 @@ public void onCreate(Bundle savedInstance) {
subreddit = multireddit == null ? subreddit : ("multi" + multireddit);
applyDarkColorTheme(subreddit);
super.onCreate(savedInstance);
setContentView(R.layout.activity_slide);

submissions = OfflineSubreddit.getSubreddit(subreddit, 0l, !Authentication.didOnline, this);

@@ -25,6 +25,7 @@

import me.ccrama.redditslide.Authentication;
import me.ccrama.redditslide.Fragments.CommentPage;
import me.ccrama.redditslide.util.NetworkUtil;

/**
* Created by ccrama on 9/17/2015.
@@ -204,7 +205,7 @@ protected ArrayList<CommentObject> doInBackground(String... subredditPaginators)

comments = new ArrayList<>();
HashMap<Integer, MoreChildItem> waiting = new HashMap<>();

boolean online = NetworkUtil.isConnected(page.getActivity());

for (CommentNode n : baseComment.walkTree()) {

@@ -224,7 +225,7 @@ protected ArrayList<CommentObject> doInBackground(String... subredditPaginators)

comments.add(obj);

if (n.hasMoreComments()) {
if (n.hasMoreComments() && online) {
waiting.put(n.getDepth(), new MoreChildItem(n, n.getMoreChildren()));
}
}
@@ -22,11 +22,8 @@ public void onReceive(Context context, Intent intent) {
if (NetworkUtil.isConnectedNoOverride(c)) {
if (Reddit.cachedData.getBoolean("wifiOnly", false))
if (!NetworkUtil.isConnectedWifi(context)) return;
for (String s : Reddit.cachedData.getString("toCache", "").split(",")) {
if (!s.isEmpty()) {
new CommentCacheAsync(c, s, false).execute();
}
}
new CommentCacheAsync(c, Reddit.cachedData.getString("toCache", "").split(","), false).execute();

}
}
}
@@ -1,10 +1,13 @@
package me.ccrama.redditslide;

import android.app.Activity;
import android.app.NotificationManager;
import android.content.Context;
import android.os.AsyncTask;
import android.support.annotation.NonNull;
import android.support.v7.app.NotificationCompat;

import com.afollestad.materialdialogs.DialogAction;
import com.afollestad.materialdialogs.MaterialDialog;
import com.fasterxml.jackson.databind.JsonNode;

@@ -33,65 +36,77 @@ public class CommentCacheAsync extends AsyncTask<String, Void, Void> {
public CommentCacheAsync(List<Submission> submissions, Context c, String subreddit) {
alreadyReceived = submissions;
this.context = c;
this.sub = subreddit;
this.subs = new String[]{subreddit};
this.modal = true;
}
String sub;
String[] subs;

Context context;
NotificationCompat.Builder mBuilder;
MaterialDialog dialog;
boolean modal;

public CommentCacheAsync(Context c, String subreddit, boolean modal) {
public CommentCacheAsync(Context c, String[] subreddits, boolean modal) {
this.context = c;
this.sub = subreddit;
this.subs = subreddits;
this.modal = modal;
}

@Override
protected void onPreExecute() {
if(modal){
dialog = new MaterialDialog.Builder(context).title("Caching /r/" + sub)
.progress(false, 50)
.cancelable(false)
.show();
} else {
mNotifyManager =
(NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
mBuilder = new NotificationCompat.Builder(context);
mBuilder.setContentTitle("Caching /r/" + sub)
.setSmallIcon(R.drawable.save);
}
}

@Override
protected Void doInBackground(String... params) {


ArrayList<Submission> submissions = new ArrayList<>();
ArrayList<String> newFullnames = new ArrayList<>();
int count = 0;
if (alreadyReceived != null) {
submissions.addAll(alreadyReceived);
} else {
SubredditPaginator p = new SubredditPaginator(Authentication.reddit, sub);
p.setLimit(50);
submissions.addAll(p.next());
}

if(!modal) {
mBuilder.setProgress(submissions.size(), 0, false);
mNotifyManager.notify(1, mBuilder.build());
} else {
dialog.setMaxProgress(submissions.size());
}
for (final Submission s : submissions) {
try {
JsonNode n = getSubmission(new SubmissionRequest.Builder(s.getId()).sort(CommentSort.CONFIDENCE).build());
Submission s2 = SubmissionSerializer.withComments(n, CommentSort.CONFIDENCE);
OfflineSubreddit.writeSubmission(n, s2, context);
newFullnames.add(s2.getFullName());
for(final String sub : subs) {
if (!sub.isEmpty()) {

((Activity) context).runOnUiThread(new Runnable() {
@Override
public void run() {
if (modal) {
dialog = new MaterialDialog.Builder(context).title("Caching /r/" + sub)
.progress(false, 50)
.cancelable(false)
.positiveText(R.string.btn_cancel)
.onPositive(new MaterialDialog.SingleButtonCallback() {
@Override
public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {
CommentCacheAsync.this.cancel(true);
dialog.dismiss();
}
})
.show();
} else {
mNotifyManager =
(NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
mBuilder = new NotificationCompat.Builder(context);
mBuilder.setContentTitle("Caching /r/" + sub)
.setSmallIcon(R.drawable.save);
}
}
});
ArrayList<Submission> submissions = new ArrayList<>();
ArrayList<String> newFullnames = new ArrayList<>();
int count = 0;
if (alreadyReceived != null) {
submissions.addAll(alreadyReceived);
} else {
SubredditPaginator p = new SubredditPaginator(Authentication.reddit, sub);
p.setLimit(50);
submissions.addAll(p.next());
}

if (!modal) {
mBuilder.setProgress(submissions.size(), 0, false);
mNotifyManager.notify(1, mBuilder.build());
} else {
dialog.setMaxProgress(submissions.size());
}
for (final Submission s : submissions) {
try {
JsonNode n = getSubmission(new SubmissionRequest.Builder(s.getId()).sort(CommentSort.CONFIDENCE).build());
Submission s2 = SubmissionSerializer.withComments(n, CommentSort.CONFIDENCE);
OfflineSubreddit.writeSubmission(n, s2, context);
newFullnames.add(s2.getFullName());
/* todo maybe
switch (ContentType.getContentType(s)) {
case GIF:
@@ -104,26 +119,28 @@ protected Void doInBackground(String... params) {
AlbumUtils.saveAlbumToCache(MainActivity.this, s.getUrl());
break;
}*/
} catch (Exception e) {
}
count++;
if(modal){
dialog.setProgress(count);
} else {
mBuilder.setProgress(submissions.size(), count, false);
mNotifyManager.notify(1, mBuilder.build());
} catch (Exception e) {
}
count++;
if (modal) {
dialog.setProgress(count);
} else {
mBuilder.setProgress(submissions.size(), count, false);
mNotifyManager.notify(1, mBuilder.build());
}

}
if (modal) {
dialog.dismiss();
} else {
mBuilder.setContentText("Caching complete")
// Removes the progress bar
.setProgress(0, 0, false);
mNotifyManager.notify(1, mBuilder.build());
}
OfflineSubreddit.newSubreddit(sub).writeToMemory(newFullnames);
}

}
if(modal){
dialog.dismiss();
} else {
mBuilder.setContentText("Caching complete")
// Removes the progress bar
.setProgress(0, 0, false);
mNotifyManager.notify(1, mBuilder.build());
}
OfflineSubreddit.newSubreddit(sub).writeToMemory(newFullnames);
return null;
}

@@ -151,7 +151,7 @@ public void setTextHtml(CharSequence baseText, String subreddit) {
}

private String wrapAlternateSpoilers(String html){
Pattern htmlSpoilerPattern = Pattern.compile("<a href=\"(/spoiler|/s)\">(.*?)</a>");
Pattern htmlSpoilerPattern = Pattern.compile("<a href=\"(/spoiler|/s|/sp)\">(.*?)</a>");
Matcher htmlSpoilerMatcher = htmlSpoilerPattern.matcher(html);
while (htmlSpoilerMatcher.find()) {
String newPiece = htmlSpoilerMatcher.group();
@@ -45,10 +45,10 @@ public void setExtraLayoutSpace(int extraLayoutSpace) {

@Override
protected int getExtraLayoutSpace(RecyclerView.State state) {
if (extraLayoutSpace > 0) {
/*if (extraLayoutSpace > 0) {
return extraLayoutSpace;
}
return DEFAULT_EXTRA_LAYOUT_SPACE;
//return super.getExtraLayoutSpace(state);
return DEFAULT_EXTRA_LAYOUT_SPACE;*/
return super.getExtraLayoutSpace(state);
}
}
@@ -128,6 +128,36 @@
android:textSize="13sp" />
</LinearLayout>

</RelativeLayout>
<View
android:layout_width="match_parent"
android:background="?attr/tint"
android:alpha=".25"
android:layout_height="0.25dp"/>
<RelativeLayout
android:id="@+id/sync_now"
android:layout_width="match_parent"
android:layout_height="56dp"
android:background="?android:selectableItemBackground"
android:gravity="center_vertical"
android:orientation="horizontal"
android:paddingEnd="16dp"
android:paddingStart="16dp">

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:orientation="vertical">

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Cache subreddits now"
android:textColor="?attr/font"
android:textSize="16sp" />
</LinearLayout>

</RelativeLayout>
<View
android:layout_width="match_parent"