diff --git a/app/src/main/java/org/schabi/newpipe/fragments/list/BaseListFragment.java b/app/src/main/java/org/schabi/newpipe/fragments/list/BaseListFragment.java
index 279b396dfe2..38a32228560 100644
--- a/app/src/main/java/org/schabi/newpipe/fragments/list/BaseListFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/fragments/list/BaseListFragment.java
@@ -64,7 +64,6 @@ public void onAttach(Context context) {
@Override
public void onDetach() {
- infoListAdapter.dispose();
super.onDetach();
}
@@ -97,8 +96,6 @@ public void onResume() {
}
updateFlags = 0;
}
-
- itemsList.post(infoListAdapter::updateStates);
}
/*//////////////////////////////////////////////////////////////////////////
diff --git a/app/src/main/java/org/schabi/newpipe/info_list/InfoItemBuilder.java b/app/src/main/java/org/schabi/newpipe/info_list/InfoItemBuilder.java
index 39f7971dd61..e279ee21bb3 100644
--- a/app/src/main/java/org/schabi/newpipe/info_list/InfoItemBuilder.java
+++ b/app/src/main/java/org/schabi/newpipe/info_list/InfoItemBuilder.java
@@ -2,14 +2,11 @@
import android.content.Context;
import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
-import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import com.nostra13.universalimageloader.core.ImageLoader;
-import org.schabi.newpipe.database.stream.model.StreamStateEntity;
import org.schabi.newpipe.extractor.InfoItem;
import org.schabi.newpipe.extractor.channel.ChannelInfoItem;
import org.schabi.newpipe.extractor.comments.CommentsInfoItem;
@@ -24,6 +21,7 @@
import org.schabi.newpipe.info_list.holder.PlaylistMiniInfoItemHolder;
import org.schabi.newpipe.info_list.holder.StreamInfoItemHolder;
import org.schabi.newpipe.info_list.holder.StreamMiniInfoItemHolder;
+import org.schabi.newpipe.local.history.HistoryRecordManager;
import org.schabi.newpipe.util.OnClickGesture;
/*
@@ -61,14 +59,14 @@ public InfoItemBuilder(Context context) {
this.context = context;
}
- public View buildView(@NonNull ViewGroup parent, @NonNull final InfoItem infoItem, @Nullable StreamStateEntity state) {
- return buildView(parent, infoItem, state, false);
+ public View buildView(@NonNull ViewGroup parent, @NonNull final InfoItem infoItem, final HistoryRecordManager historyRecordManager) {
+ return buildView(parent, infoItem, historyRecordManager, false);
}
public View buildView(@NonNull ViewGroup parent, @NonNull final InfoItem infoItem,
- @Nullable StreamStateEntity state, boolean useMiniVariant) {
+ final HistoryRecordManager historyRecordManager, boolean useMiniVariant) {
InfoItemHolder holder = holderFromInfoType(parent, infoItem.getInfoType(), useMiniVariant);
- holder.updateFromItem(infoItem, state);
+ holder.updateFromItem(infoItem, historyRecordManager);
return holder.itemView;
}
@@ -83,7 +81,6 @@ private InfoItemHolder holderFromInfoType(@NonNull ViewGroup parent, @NonNull In
case COMMENT:
return useMiniVariant ? new CommentsMiniInfoItemHolder(this, parent) : new CommentsInfoItemHolder(this, parent);
default:
- Log.e(TAG, "Trollolo");
throw new RuntimeException("InfoType not expected = " + infoType.name());
}
}
diff --git a/app/src/main/java/org/schabi/newpipe/info_list/InfoListAdapter.java b/app/src/main/java/org/schabi/newpipe/info_list/InfoListAdapter.java
index 7f5b07dbee6..d8515e4ba9f 100644
--- a/app/src/main/java/org/schabi/newpipe/info_list/InfoListAdapter.java
+++ b/app/src/main/java/org/schabi/newpipe/info_list/InfoListAdapter.java
@@ -1,6 +1,6 @@
package org.schabi.newpipe.info_list;
-import android.app.Activity;
+import android.content.Context;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v7.widget.GridLayoutManager;
@@ -27,6 +27,7 @@
import org.schabi.newpipe.info_list.holder.StreamGridInfoItemHolder;
import org.schabi.newpipe.info_list.holder.StreamInfoItemHolder;
import org.schabi.newpipe.info_list.holder.StreamMiniInfoItemHolder;
+import org.schabi.newpipe.local.history.HistoryRecordManager;
import org.schabi.newpipe.util.FallbackViewHolder;
import org.schabi.newpipe.util.OnClickGesture;
@@ -53,7 +54,7 @@
* along with NewPipe. If not, see .
*/
-public class InfoListAdapter extends StateObjectsListAdapter {
+public class InfoListAdapter extends RecyclerView.Adapter {
private static final String TAG = InfoListAdapter.class.getSimpleName();
private static final boolean DEBUG = false;
@@ -74,6 +75,8 @@ public class InfoListAdapter extends StateObjectsListAdapter {
private final InfoItemBuilder infoItemBuilder;
private final ArrayList infoItemList;
+ private final HistoryRecordManager recordManager;
+
private boolean useMiniVariant = false;
private boolean useGridVariant = false;
private boolean showFooter = false;
@@ -89,9 +92,9 @@ public HFHolder(View v) {
}
}
- public InfoListAdapter(Activity a) {
- super(a.getApplicationContext());
- infoItemBuilder = new InfoItemBuilder(a);
+ public InfoListAdapter(Context context) {
+ this.recordManager = new HistoryRecordManager(context);
+ infoItemBuilder = new InfoItemBuilder(context);
infoItemList = new ArrayList<>();
}
@@ -120,63 +123,52 @@ public void setGridItemVariants(boolean useGridVariant) {
}
public void addInfoItemList(@Nullable final List data) {
- if (data != null) {
- loadStates(data, infoItemList.size(), () -> addInfoItemListImpl(data));
- }
- }
-
- private void addInfoItemListImpl(@NonNull List data) {
- if (DEBUG) {
- Log.d(TAG, "addInfoItemList() before > infoItemList.size() = " + infoItemList.size() + ", data.size() = " + data.size());
+ if (data == null) {
+ return;
}
+ if (DEBUG) Log.d(TAG, "addInfoItemList() before > infoItemList.size() = " +
+ infoItemList.size() + ", data.size() = " + data.size());
int offsetStart = sizeConsideringHeaderOffset();
infoItemList.addAll(data);
- if (DEBUG) {
- Log.d(TAG, "addInfoItemList() after > offsetStart = " + offsetStart + ", infoItemList.size() = " + infoItemList.size() + ", header = " + header + ", footer = " + footer + ", showFooter = " + showFooter);
- }
-
+ if (DEBUG) Log.d(TAG, "addInfoItemList() after > offsetStart = " + offsetStart +
+ ", infoItemList.size() = " + infoItemList.size() +
+ ", header = " + header + ", footer = " + footer +
+ ", showFooter = " + showFooter);
notifyItemRangeInserted(offsetStart, data.size());
if (footer != null && showFooter) {
int footerNow = sizeConsideringHeaderOffset();
notifyItemMoved(offsetStart, footerNow);
- if (DEBUG) Log.d(TAG, "addInfoItemList() footer from " + offsetStart + " to " + footerNow);
+ if (DEBUG) Log.d(TAG, "addInfoItemList() footer from " + offsetStart +
+ " to " + footerNow);
}
}
public void addInfoItem(@Nullable InfoItem data) {
- if (data != null) {
- loadState(data, infoItemList.size(), () -> addInfoItemImpl(data));
- }
- }
-
- private void addInfoItemImpl(@NonNull InfoItem data) {
- if (DEBUG) {
- Log.d(TAG, "addInfoItem() before > infoItemList.size() = " + infoItemList.size() + ", thread = " + Thread.currentThread());
+ if (data == null) {
+ return;
}
+ if (DEBUG) Log.d(TAG, "addInfoItem() before > infoItemList.size() = " +
+ infoItemList.size() + ", thread = " + Thread.currentThread());
int positionInserted = sizeConsideringHeaderOffset();
infoItemList.add(data);
- if (DEBUG) {
- Log.d(TAG, "addInfoItem() after > position = " + positionInserted + ", infoItemList.size() = " + infoItemList.size() + ", header = " + header + ", footer = " + footer + ", showFooter = " + showFooter);
- }
+ if (DEBUG) Log.d(TAG, "addInfoItem() after > position = " + positionInserted +
+ ", infoItemList.size() = " + infoItemList.size() +
+ ", header = " + header + ", footer = " + footer +
+ ", showFooter = " + showFooter);
notifyItemInserted(positionInserted);
if (footer != null && showFooter) {
int footerNow = sizeConsideringHeaderOffset();
notifyItemMoved(positionInserted, footerNow);
- if (DEBUG) Log.d(TAG, "addInfoItem() footer from " + positionInserted + " to " + footerNow);
- }
- }
-
- public void updateStates() {
- if (!infoItemList.isEmpty()) {
- updateAllStates(infoItemList);
+ if (DEBUG) Log.d(TAG, "addInfoItem() footer from " + positionInserted +
+ " to " + footerNow);
}
}
@@ -185,7 +177,6 @@ public void clearStreamItemList() {
return;
}
infoItemList.clear();
- clearStates();
notifyDataSetChanged();
}
@@ -254,7 +245,6 @@ public int getItemViewType(int position) {
case COMMENT:
return useMiniVariant ? MINI_COMMENT_HOLDER_TYPE : COMMENT_HOLDER_TYPE;
default:
- Log.e(TAG, "Trollolo");
return -1;
}
}
@@ -292,7 +282,6 @@ public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int
case COMMENT_HOLDER_TYPE:
return new CommentsInfoItemHolder(infoItemBuilder, parent);
default:
- Log.e(TAG, "Trollolo");
return new FallbackViewHolder(new View(parent.getContext()));
}
}
@@ -304,7 +293,7 @@ public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int positi
// If header isn't null, offset the items by -1
if (header != null) position--;
- ((InfoItemHolder) holder).updateFromItem(infoItemList.get(position), getState(position));
+ ((InfoItemHolder) holder).updateFromItem(infoItemList.get(position), recordManager);
} else if (holder instanceof HFHolder && position == 0 && header != null) {
((HFHolder) holder).view = header;
} else if (holder instanceof HFHolder && position == sizeConsideringHeaderOffset() && footer != null && showFooter) {
@@ -317,11 +306,9 @@ public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int positi
if (!payloads.isEmpty() && holder instanceof InfoItemHolder) {
for (Object payload : payloads) {
if (payload instanceof StreamStateEntity) {
- ((InfoItemHolder) holder).updateState(infoItemList.get(header == null ? position : position - 1),
- (StreamStateEntity) payload);
+ ((InfoItemHolder) holder).updateState(infoItemList.get(header == null ? position : position - 1), recordManager);
} else if (payload instanceof Boolean) {
- ((InfoItemHolder) holder).updateState(infoItemList.get(header == null ? position : position - 1),
- null);
+ ((InfoItemHolder) holder).updateState(infoItemList.get(header == null ? position : position - 1), recordManager);
}
}
} else {
@@ -329,11 +316,6 @@ public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int positi
}
}
- @Override
- protected void onItemStateChanged(int position, @Nullable StreamStateEntity state) {
- notifyItemChanged(header == null ? position : position + 1, state != null ? state : false);
- }
-
public GridLayoutManager.SpanSizeLookup getSpanSizeLookup(final int spanCount) {
return new GridLayoutManager.SpanSizeLookup() {
@Override
diff --git a/app/src/main/java/org/schabi/newpipe/info_list/StateObjectsListAdapter.java b/app/src/main/java/org/schabi/newpipe/info_list/StateObjectsListAdapter.java
deleted file mode 100644
index 17ac919d91e..00000000000
--- a/app/src/main/java/org/schabi/newpipe/info_list/StateObjectsListAdapter.java
+++ /dev/null
@@ -1,180 +0,0 @@
-package org.schabi.newpipe.info_list;
-
-import android.content.Context;
-import android.content.SharedPreferences;
-import android.preference.PreferenceManager;
-import android.support.annotation.Nullable;
-import android.support.v7.widget.RecyclerView;
-import android.util.SparseArray;
-
-import org.schabi.newpipe.BuildConfig;
-import org.schabi.newpipe.R;
-import org.schabi.newpipe.database.LocalItem;
-import org.schabi.newpipe.database.stream.model.StreamStateEntity;
-import org.schabi.newpipe.extractor.InfoItem;
-import org.schabi.newpipe.local.history.HistoryRecordManager;
-import org.schabi.newpipe.util.SparseArrayUtils;
-
-import java.util.List;
-import java.util.Objects;
-
-import io.reactivex.android.schedulers.AndroidSchedulers;
-import io.reactivex.disposables.CompositeDisposable;
-
-public abstract class StateObjectsListAdapter extends RecyclerView.Adapter {
-
- private final SparseArray states;
- private final HistoryRecordManager recordManager;
- private final CompositeDisposable stateLoaders;
- private final Context context;
-
- public StateObjectsListAdapter(Context context) {
- this.states = new SparseArray<>();
- this.recordManager = new HistoryRecordManager(context);
- this.context = context;
- this.stateLoaders = new CompositeDisposable();
- }
-
- @Nullable
- public StreamStateEntity getState(int position) {
- return states.get(position);
- }
-
- protected void clearStates() {
- states.clear();
- }
-
- private void appendStates(List statesEntities, int offset) {
- for (int i = 0; i < statesEntities.size(); i++) {
- final StreamStateEntity state = statesEntities.get(i);
- if (state != null) {
- states.append(offset + i, state);
- }
- }
- }
-
- private void appendState(StreamStateEntity statesEntity, int offset) {
- if (statesEntity != null) {
- states.append(offset, statesEntity);
- }
- }
-
- protected void removeState(int index) {
- states.remove(index);
- }
-
- protected void moveState(int from, int to) {
- final StreamStateEntity item = states.get(from);
- if (from < to) {
- SparseArrayUtils.shiftItemsDown(states, from, to);
- } else {
- SparseArrayUtils.shiftItemsUp(states, to, from);
- }
- states.put(to, item);
- }
-
- protected void loadStates(List list, int offset, Runnable callback) {
- if (isPlaybackStatesVisible()) {
- List streamStateEntities = null;
- try {
- streamStateEntities = recordManager.loadStreamStateBatch(list).blockingGet();
- } catch (Exception e) {
- if (BuildConfig.DEBUG) e.printStackTrace();
- }
- if(streamStateEntities != null) appendStates(streamStateEntities, offset);
- callback.run();
- } else {
- callback.run();
- }
- }
-
- protected void loadState(InfoItem item, int offset, Runnable callback) {
- if (isPlaybackStatesVisible()) {
- StreamStateEntity[] streamStateEntities = null;
- try {
- streamStateEntities = recordManager.loadStreamState(item).blockingGet();
- } catch (Exception e) {
- if (BuildConfig.DEBUG) e.printStackTrace();
- }
- if(streamStateEntities != null && streamStateEntities.length > 0) appendState(streamStateEntities[0], offset);
- callback.run();
- } else {
- callback.run();
- }
- }
-
- protected void loadStatesForLocal(List extends LocalItem> list, int offset, Runnable callback) {
- if (isPlaybackStatesVisible()) {
- List streamStateEntities = null;
- try {
- streamStateEntities = recordManager.loadLocalStreamStateBatch(list).blockingGet();
- } catch (Exception e) {
- if (BuildConfig.DEBUG) e.printStackTrace();
- }
- if(streamStateEntities != null) appendStates(streamStateEntities, offset);
- callback.run();
- } else {
- callback.run();
- }
- }
-
- private void processStatesUpdates(List streamStateEntities) {
- for (int i = 0; i < streamStateEntities.size(); i++) {
- final StreamStateEntity newState = streamStateEntities.get(i);
- if (!Objects.equals(states.get(i), newState)) {
- if (newState == null) {
- states.remove(i);
- } else {
- states.put(i, newState);
- }
- onItemStateChanged(i, newState);
- }
- }
- }
-
- protected void updateAllStates(List list) {
- if (isPlaybackStatesVisible()) {
- stateLoaders.add(
- recordManager.loadStreamStateBatch(list)
- .observeOn(AndroidSchedulers.mainThread())
- .subscribe(this::processStatesUpdates, throwable -> {
- if (BuildConfig.DEBUG) throwable.printStackTrace();
- })
- );
- } else {
- final int[] positions = SparseArrayUtils.getKeys(states);
- states.clear();
- for (int pos : positions) onItemStateChanged(pos, null);
- }
- }
-
- protected void updateAllLocalStates(List extends LocalItem> list) {
- if (isPlaybackStatesVisible()) {
- stateLoaders.add(
- recordManager.loadLocalStreamStateBatch(list)
- .observeOn(AndroidSchedulers.mainThread())
- .subscribe(this::processStatesUpdates, throwable -> {
- if (BuildConfig.DEBUG) throwable.printStackTrace();
- })
- );
- } else {
- final int[] positions = SparseArrayUtils.getKeys(states);
- states.clear();
- for (int pos : positions) onItemStateChanged(pos, null);
- }
- }
-
- public void dispose() {
- stateLoaders.dispose();
- }
-
- protected boolean isPlaybackStatesVisible() {
- final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
- return prefs.getBoolean(context.getString(R.string.enable_watch_history_key), true)
- && prefs.getBoolean(context.getString(R.string.enable_playback_resume_key), true)
- && prefs.getBoolean(context.getString(R.string.enable_playback_state_lists_key), true);
- }
-
- protected abstract void onItemStateChanged(int position, @Nullable StreamStateEntity state);
-
-}
diff --git a/app/src/main/java/org/schabi/newpipe/info_list/holder/ChannelInfoItemHolder.java b/app/src/main/java/org/schabi/newpipe/info_list/holder/ChannelInfoItemHolder.java
index 31793445576..956bc47a682 100644
--- a/app/src/main/java/org/schabi/newpipe/info_list/holder/ChannelInfoItemHolder.java
+++ b/app/src/main/java/org/schabi/newpipe/info_list/holder/ChannelInfoItemHolder.java
@@ -1,14 +1,13 @@
package org.schabi.newpipe.info_list.holder;
-import android.support.annotation.Nullable;
import android.view.ViewGroup;
import android.widget.TextView;
import org.schabi.newpipe.R;
-import org.schabi.newpipe.database.stream.model.StreamStateEntity;
import org.schabi.newpipe.extractor.InfoItem;
import org.schabi.newpipe.extractor.channel.ChannelInfoItem;
import org.schabi.newpipe.info_list.InfoItemBuilder;
+import org.schabi.newpipe.local.history.HistoryRecordManager;
import org.schabi.newpipe.util.Localization;
/*
@@ -40,8 +39,8 @@ public ChannelInfoItemHolder(InfoItemBuilder infoItemBuilder, ViewGroup parent)
}
@Override
- public void updateFromItem(final InfoItem infoItem, @Nullable final StreamStateEntity state) {
- super.updateFromItem(infoItem, state);
+ public void updateFromItem(final InfoItem infoItem, final HistoryRecordManager historyRecordManager) {
+ super.updateFromItem(infoItem, historyRecordManager);
if (!(infoItem instanceof ChannelInfoItem)) return;
final ChannelInfoItem item = (ChannelInfoItem) infoItem;
diff --git a/app/src/main/java/org/schabi/newpipe/info_list/holder/ChannelMiniInfoItemHolder.java b/app/src/main/java/org/schabi/newpipe/info_list/holder/ChannelMiniInfoItemHolder.java
index a191707c0c5..3f4e4e398c3 100644
--- a/app/src/main/java/org/schabi/newpipe/info_list/holder/ChannelMiniInfoItemHolder.java
+++ b/app/src/main/java/org/schabi/newpipe/info_list/holder/ChannelMiniInfoItemHolder.java
@@ -1,14 +1,13 @@
package org.schabi.newpipe.info_list.holder;
-import android.support.annotation.Nullable;
import android.view.ViewGroup;
import android.widget.TextView;
import org.schabi.newpipe.R;
-import org.schabi.newpipe.database.stream.model.StreamStateEntity;
import org.schabi.newpipe.extractor.InfoItem;
import org.schabi.newpipe.extractor.channel.ChannelInfoItem;
import org.schabi.newpipe.info_list.InfoItemBuilder;
+import org.schabi.newpipe.local.history.HistoryRecordManager;
import org.schabi.newpipe.util.ImageDisplayConstants;
import org.schabi.newpipe.util.Localization;
@@ -32,7 +31,7 @@ public ChannelMiniInfoItemHolder(InfoItemBuilder infoItemBuilder, ViewGroup pare
}
@Override
- public void updateFromItem(final InfoItem infoItem, @Nullable final StreamStateEntity state) {
+ public void updateFromItem(final InfoItem infoItem, final HistoryRecordManager historyRecordManager) {
if (!(infoItem instanceof ChannelInfoItem)) return;
final ChannelInfoItem item = (ChannelInfoItem) infoItem;
diff --git a/app/src/main/java/org/schabi/newpipe/info_list/holder/CommentsInfoItemHolder.java b/app/src/main/java/org/schabi/newpipe/info_list/holder/CommentsInfoItemHolder.java
index 4ecf8696162..90212ea318a 100644
--- a/app/src/main/java/org/schabi/newpipe/info_list/holder/CommentsInfoItemHolder.java
+++ b/app/src/main/java/org/schabi/newpipe/info_list/holder/CommentsInfoItemHolder.java
@@ -1,14 +1,13 @@
package org.schabi.newpipe.info_list.holder;
-import android.support.annotation.Nullable;
import android.view.ViewGroup;
import android.widget.TextView;
import org.schabi.newpipe.R;
-import org.schabi.newpipe.database.stream.model.StreamStateEntity;
import org.schabi.newpipe.extractor.InfoItem;
import org.schabi.newpipe.extractor.comments.CommentsInfoItem;
import org.schabi.newpipe.info_list.InfoItemBuilder;
+import org.schabi.newpipe.local.history.HistoryRecordManager;
/*
* Created by Christian Schabesberger on 12.02.17.
@@ -41,8 +40,8 @@ public CommentsInfoItemHolder(InfoItemBuilder infoItemBuilder, ViewGroup parent)
}
@Override
- public void updateFromItem(final InfoItem infoItem, @Nullable final StreamStateEntity state) {
- super.updateFromItem(infoItem, state);
+ public void updateFromItem(final InfoItem infoItem, final HistoryRecordManager historyRecordManager) {
+ super.updateFromItem(infoItem, historyRecordManager);
if (!(infoItem instanceof CommentsInfoItem)) return;
final CommentsInfoItem item = (CommentsInfoItem) infoItem;
diff --git a/app/src/main/java/org/schabi/newpipe/info_list/holder/CommentsMiniInfoItemHolder.java b/app/src/main/java/org/schabi/newpipe/info_list/holder/CommentsMiniInfoItemHolder.java
index 3d3a9bb0976..4794ce3fd99 100644
--- a/app/src/main/java/org/schabi/newpipe/info_list/holder/CommentsMiniInfoItemHolder.java
+++ b/app/src/main/java/org/schabi/newpipe/info_list/holder/CommentsMiniInfoItemHolder.java
@@ -1,18 +1,16 @@
package org.schabi.newpipe.info_list.holder;
-import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.text.util.Linkify;
-import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import org.jsoup.helper.StringUtil;
import org.schabi.newpipe.R;
-import org.schabi.newpipe.database.stream.model.StreamStateEntity;
import org.schabi.newpipe.extractor.InfoItem;
import org.schabi.newpipe.extractor.comments.CommentsInfoItem;
import org.schabi.newpipe.info_list.InfoItemBuilder;
+import org.schabi.newpipe.local.history.HistoryRecordManager;
import org.schabi.newpipe.report.ErrorActivity;
import org.schabi.newpipe.util.CommentTextOnTouchListener;
import org.schabi.newpipe.util.ImageDisplayConstants;
@@ -48,7 +46,7 @@ public String transformUrl(Matcher match, String url) {
if(hours != null) timestamp += (Integer.parseInt(hours.replace(":", ""))*3600);
if(minutes != null) timestamp += (Integer.parseInt(minutes.replace(":", ""))*60);
if(seconds != null) timestamp += (Integer.parseInt(seconds));
- return streamUrl + url.replace(match.group(0), "#timestamp=" + String.valueOf(timestamp));
+ return streamUrl + url.replace(match.group(0), "#timestamp=" + timestamp);
}
};
@@ -67,7 +65,7 @@ public CommentsMiniInfoItemHolder(InfoItemBuilder infoItemBuilder, ViewGroup par
}
@Override
- public void updateFromItem(final InfoItem infoItem, @Nullable final StreamStateEntity state) {
+ public void updateFromItem(final InfoItem infoItem, final HistoryRecordManager historyRecordManager) {
if (!(infoItem instanceof CommentsInfoItem)) return;
final CommentsInfoItem item = (CommentsInfoItem) infoItem;
@@ -76,20 +74,17 @@ public void updateFromItem(final InfoItem infoItem, @Nullable final StreamStateE
itemThumbnailView,
ImageDisplayConstants.DISPLAY_THUMBNAIL_OPTIONS);
- itemThumbnailView.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View view) {
- if(StringUtil.isBlank(item.getAuthorEndpoint())) return;
- try {
- final AppCompatActivity activity = (AppCompatActivity) itemBuilder.getContext();
- NavigationHelper.openChannelFragment(
- activity.getSupportFragmentManager(),
- item.getServiceId(),
- item.getAuthorEndpoint(),
- item.getAuthorName());
- } catch (Exception e) {
- ErrorActivity.reportUiError((AppCompatActivity) itemBuilder.getContext(), e);
- }
+ itemThumbnailView.setOnClickListener(view -> {
+ if(StringUtil.isBlank(item.getAuthorEndpoint())) return;
+ try {
+ final AppCompatActivity activity = (AppCompatActivity) itemBuilder.getContext();
+ NavigationHelper.openChannelFragment(
+ activity.getSupportFragmentManager(),
+ item.getServiceId(),
+ item.getAuthorEndpoint(),
+ item.getAuthorName());
+ } catch (Exception e) {
+ ErrorActivity.reportUiError((AppCompatActivity) itemBuilder.getContext(), e);
}
});
@@ -101,7 +96,7 @@ public void onClick(View view) {
itemContentView.setOnTouchListener(CommentTextOnTouchListener.INSTANCE);
if (itemContentView.getLineCount() == 0) {
- itemContentView.post(() -> ellipsize());
+ itemContentView.post(this::ellipsize);
} else {
ellipsize();
}
diff --git a/app/src/main/java/org/schabi/newpipe/info_list/holder/InfoItemHolder.java b/app/src/main/java/org/schabi/newpipe/info_list/holder/InfoItemHolder.java
index 3bc0d9e54ad..e0641912653 100644
--- a/app/src/main/java/org/schabi/newpipe/info_list/holder/InfoItemHolder.java
+++ b/app/src/main/java/org/schabi/newpipe/info_list/holder/InfoItemHolder.java
@@ -1,13 +1,12 @@
package org.schabi.newpipe.info_list.holder;
-import android.support.annotation.Nullable;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.ViewGroup;
-import org.schabi.newpipe.database.stream.model.StreamStateEntity;
import org.schabi.newpipe.extractor.InfoItem;
import org.schabi.newpipe.info_list.InfoItemBuilder;
+import org.schabi.newpipe.local.history.HistoryRecordManager;
/*
* Created by Christian Schabesberger on 12.02.17.
@@ -37,8 +36,8 @@ public InfoItemHolder(InfoItemBuilder infoItemBuilder, int layoutId, ViewGroup p
this.itemBuilder = infoItemBuilder;
}
- public abstract void updateFromItem(final InfoItem infoItem, @Nullable final StreamStateEntity state);
+ public abstract void updateFromItem(final InfoItem infoItem, final HistoryRecordManager historyRecordManager);
- public void updateState(final InfoItem infoItem, @Nullable final StreamStateEntity state) {
+ public void updateState(final InfoItem infoItem, final HistoryRecordManager historyRecordManager) {
}
}
diff --git a/app/src/main/java/org/schabi/newpipe/info_list/holder/PlaylistMiniInfoItemHolder.java b/app/src/main/java/org/schabi/newpipe/info_list/holder/PlaylistMiniInfoItemHolder.java
index f9d617e6696..b73f22d93a7 100644
--- a/app/src/main/java/org/schabi/newpipe/info_list/holder/PlaylistMiniInfoItemHolder.java
+++ b/app/src/main/java/org/schabi/newpipe/info_list/holder/PlaylistMiniInfoItemHolder.java
@@ -1,15 +1,14 @@
package org.schabi.newpipe.info_list.holder;
-import android.support.annotation.Nullable;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import org.schabi.newpipe.R;
-import org.schabi.newpipe.database.stream.model.StreamStateEntity;
import org.schabi.newpipe.extractor.InfoItem;
import org.schabi.newpipe.extractor.playlist.PlaylistInfoItem;
import org.schabi.newpipe.info_list.InfoItemBuilder;
+import org.schabi.newpipe.local.history.HistoryRecordManager;
import org.schabi.newpipe.util.ImageDisplayConstants;
public class PlaylistMiniInfoItemHolder extends InfoItemHolder {
@@ -32,7 +31,7 @@ public PlaylistMiniInfoItemHolder(InfoItemBuilder infoItemBuilder, ViewGroup par
}
@Override
- public void updateFromItem(final InfoItem infoItem, @Nullable final StreamStateEntity state) {
+ public void updateFromItem(final InfoItem infoItem, final HistoryRecordManager historyRecordManager) {
if (!(infoItem instanceof PlaylistInfoItem)) return;
final PlaylistInfoItem item = (PlaylistInfoItem) infoItem;
diff --git a/app/src/main/java/org/schabi/newpipe/info_list/holder/StreamInfoItemHolder.java b/app/src/main/java/org/schabi/newpipe/info_list/holder/StreamInfoItemHolder.java
index 25502bc81ed..ea058bc0e30 100644
--- a/app/src/main/java/org/schabi/newpipe/info_list/holder/StreamInfoItemHolder.java
+++ b/app/src/main/java/org/schabi/newpipe/info_list/holder/StreamInfoItemHolder.java
@@ -1,15 +1,14 @@
package org.schabi.newpipe.info_list.holder;
-import android.support.annotation.Nullable;
import android.text.TextUtils;
import android.view.ViewGroup;
import android.widget.TextView;
import org.schabi.newpipe.R;
-import org.schabi.newpipe.database.stream.model.StreamStateEntity;
import org.schabi.newpipe.extractor.InfoItem;
import org.schabi.newpipe.extractor.stream.StreamInfoItem;
import org.schabi.newpipe.info_list.InfoItemBuilder;
+import org.schabi.newpipe.local.history.HistoryRecordManager;
import org.schabi.newpipe.util.Localization;
/*
@@ -42,8 +41,8 @@ public StreamInfoItemHolder(InfoItemBuilder infoItemBuilder, ViewGroup parent) {
}
@Override
- public void updateFromItem(final InfoItem infoItem, @Nullable final StreamStateEntity state) {
- super.updateFromItem(infoItem, state);
+ public void updateFromItem(final InfoItem infoItem, final HistoryRecordManager historyRecordManager) {
+ super.updateFromItem(infoItem, historyRecordManager);
if (!(infoItem instanceof StreamInfoItem)) return;
final StreamInfoItem item = (StreamInfoItem) infoItem;
diff --git a/app/src/main/java/org/schabi/newpipe/info_list/holder/StreamMiniInfoItemHolder.java b/app/src/main/java/org/schabi/newpipe/info_list/holder/StreamMiniInfoItemHolder.java
index aa2a3f8786c..6c685c6cf62 100644
--- a/app/src/main/java/org/schabi/newpipe/info_list/holder/StreamMiniInfoItemHolder.java
+++ b/app/src/main/java/org/schabi/newpipe/info_list/holder/StreamMiniInfoItemHolder.java
@@ -1,6 +1,5 @@
package org.schabi.newpipe.info_list.holder;
-import android.support.annotation.Nullable;
import android.support.v4.content.ContextCompat;
import android.view.View;
import android.view.ViewGroup;
@@ -13,6 +12,7 @@
import org.schabi.newpipe.extractor.stream.StreamInfoItem;
import org.schabi.newpipe.extractor.stream.StreamType;
import org.schabi.newpipe.info_list.InfoItemBuilder;
+import org.schabi.newpipe.local.history.HistoryRecordManager;
import org.schabi.newpipe.util.AnimationUtils;
import org.schabi.newpipe.util.ImageDisplayConstants;
import org.schabi.newpipe.util.Localization;
@@ -43,7 +43,7 @@ public StreamMiniInfoItemHolder(InfoItemBuilder infoItemBuilder, ViewGroup paren
}
@Override
- public void updateFromItem(final InfoItem infoItem, @Nullable final StreamStateEntity state) {
+ public void updateFromItem(final InfoItem infoItem, final HistoryRecordManager historyRecordManager) {
if (!(infoItem instanceof StreamInfoItem)) return;
final StreamInfoItem item = (StreamInfoItem) infoItem;
@@ -55,10 +55,12 @@ public void updateFromItem(final InfoItem infoItem, @Nullable final StreamStateE
itemDurationView.setBackgroundColor(ContextCompat.getColor(itemBuilder.getContext(),
R.color.duration_background_color));
itemDurationView.setVisibility(View.VISIBLE);
- if (state != null) {
+
+ StreamStateEntity state2 = historyRecordManager.loadStreamState(infoItem).blockingGet()[0];
+ if (state2 != null) {
itemProgressView.setVisibility(View.VISIBLE);
itemProgressView.setMax((int) item.getDuration());
- itemProgressView.setProgress((int) TimeUnit.MILLISECONDS.toSeconds(state.getProgressTime()));
+ itemProgressView.setProgress((int) TimeUnit.MILLISECONDS.toSeconds(state2.getProgressTime()));
} else {
itemProgressView.setVisibility(View.GONE);
}
@@ -101,8 +103,10 @@ public void updateFromItem(final InfoItem infoItem, @Nullable final StreamStateE
}
@Override
- public void updateState(final InfoItem infoItem, @Nullable final StreamStateEntity state) {
+ public void updateState(final InfoItem infoItem, final HistoryRecordManager historyRecordManager) {
final StreamInfoItem item = (StreamInfoItem) infoItem;
+
+ StreamStateEntity state = historyRecordManager.loadStreamState(infoItem).blockingGet()[0];
if (state != null && item.getDuration() > 0 && item.getStreamType() != StreamType.LIVE_STREAM) {
itemProgressView.setMax((int) item.getDuration());
if (itemProgressView.getVisibility() == View.VISIBLE) {
@@ -130,4 +134,4 @@ private void disableLongClick() {
itemView.setLongClickable(false);
itemView.setOnLongClickListener(null);
}
-}
+}
\ No newline at end of file
diff --git a/app/src/main/java/org/schabi/newpipe/local/BaseLocalListFragment.java b/app/src/main/java/org/schabi/newpipe/local/BaseLocalListFragment.java
index 94672bd49ac..abdf82353af 100644
--- a/app/src/main/java/org/schabi/newpipe/local/BaseLocalListFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/local/BaseLocalListFragment.java
@@ -76,8 +76,6 @@ public void onResume() {
}
updateFlags = 0;
}
-
- itemsList.post(itemListAdapter::updateStates);
}
/*//////////////////////////////////////////////////////////////////////////
@@ -152,7 +150,6 @@ public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
public void onDestroyView() {
super.onDestroyView();
itemsList = null;
- itemListAdapter.dispose();
itemListAdapter = null;
}
diff --git a/app/src/main/java/org/schabi/newpipe/local/LocalItemListAdapter.java b/app/src/main/java/org/schabi/newpipe/local/LocalItemListAdapter.java
index d29e85ee324..4b1a1f363ef 100644
--- a/app/src/main/java/org/schabi/newpipe/local/LocalItemListAdapter.java
+++ b/app/src/main/java/org/schabi/newpipe/local/LocalItemListAdapter.java
@@ -1,6 +1,6 @@
package org.schabi.newpipe.local;
-import android.app.Activity;
+import android.content.Context;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v7.widget.GridLayoutManager;
@@ -11,7 +11,7 @@
import org.schabi.newpipe.database.LocalItem;
import org.schabi.newpipe.database.stream.model.StreamStateEntity;
-import org.schabi.newpipe.info_list.StateObjectsListAdapter;
+import org.schabi.newpipe.local.history.HistoryRecordManager;
import org.schabi.newpipe.local.holder.LocalItemHolder;
import org.schabi.newpipe.local.holder.LocalPlaylistGridItemHolder;
import org.schabi.newpipe.local.holder.LocalPlaylistItemHolder;
@@ -49,7 +49,7 @@
* along with NewPipe. If not, see .
*/
-public class LocalItemListAdapter extends StateObjectsListAdapter {
+public class LocalItemListAdapter extends RecyclerView.Adapter {
private static final String TAG = LocalItemListAdapter.class.getSimpleName();
private static final boolean DEBUG = false;
@@ -68,6 +68,7 @@ public class LocalItemListAdapter extends StateObjectsListAdapter {
private final LocalItemBuilder localItemBuilder;
private final ArrayList localItems;
+ private final HistoryRecordManager recordManager;
private final DateFormat dateFormat;
private boolean showFooter = false;
@@ -75,12 +76,12 @@ public class LocalItemListAdapter extends StateObjectsListAdapter {
private View header = null;
private View footer = null;
- public LocalItemListAdapter(Activity activity) {
- super(activity.getApplicationContext());
- localItemBuilder = new LocalItemBuilder(activity);
+ public LocalItemListAdapter(Context context) {
+ recordManager = new HistoryRecordManager(context);
+ localItemBuilder = new LocalItemBuilder(context);
localItems = new ArrayList<>();
dateFormat = DateFormat.getDateInstance(DateFormat.SHORT,
- Localization.getPreferredLocale(activity));
+ Localization.getPreferredLocale(context));
}
public void setSelectedListener(OnClickGesture listener) {
@@ -92,27 +93,19 @@ public void unsetSelectedListener() {
}
public void addItems(@Nullable List extends LocalItem> data) {
- if (data != null) {
- loadStatesForLocal(data, localItems.size(), () -> addItemsImpl(data));
- }
- }
-
- private void addItemsImpl(@NonNull List extends LocalItem> data) {
- if (DEBUG) {
- Log.d(TAG, "addItems() before > localItems.size() = " +
- localItems.size() + ", data.size() = " + data.size());
+ if (data == null) {
+ return;
}
+ if (DEBUG) Log.d(TAG, "addItems() before > localItems.size() = " +
+ localItems.size() + ", data.size() = " + data.size());
int offsetStart = sizeConsideringHeader();
localItems.addAll(data);
- if (DEBUG) {
- Log.d(TAG, "addItems() after > offsetStart = " + offsetStart +
- ", localItems.size() = " + localItems.size() +
- ", header = " + header + ", footer = " + footer +
- ", showFooter = " + showFooter);
- }
-
+ if (DEBUG) Log.d(TAG, "addItems() after > offsetStart = " + offsetStart +
+ ", localItems.size() = " + localItems.size() +
+ ", header = " + header + ", footer = " + footer +
+ ", showFooter = " + showFooter);
notifyItemRangeInserted(offsetStart, data.size());
if (footer != null && showFooter) {
@@ -124,16 +117,9 @@ private void addItemsImpl(@NonNull List extends LocalItem> data) {
}
}
- public void updateStates() {
- if (!localItems.isEmpty()) {
- updateAllLocalStates(localItems);
- }
- }
-
public void removeItem(final LocalItem data) {
final int index = localItems.indexOf(data);
localItems.remove(index);
- removeState(index);
notifyItemRemoved(index + (header != null ? 1 : 0));
}
@@ -145,7 +131,6 @@ public boolean swapItems(int fromAdapterPosition, int toAdapterPosition) {
if (actualFrom >= localItems.size() || actualTo >= localItems.size()) return false;
localItems.add(actualTo, localItems.remove(actualFrom));
- moveState(actualFrom, actualTo);
notifyItemMoved(fromAdapterPosition, toAdapterPosition);
return true;
}
@@ -155,7 +140,6 @@ public void clearStreamItemList() {
return;
}
localItems.clear();
- clearStates();
notifyDataSetChanged();
}
@@ -236,8 +220,9 @@ public int getItemViewType(int position) {
}
}
+ @NonNull
@Override
- public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int type) {
+ public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int type) {
if (DEBUG) Log.d(TAG, "onCreateViewHolder() called with: parent = [" +
parent + "], type = [" + type + "]");
switch (type) {
@@ -268,7 +253,7 @@ public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int type) {
}
@Override
- public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
+ public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
if (DEBUG) Log.d(TAG, "onBindViewHolder() called with: holder = [" +
holder.getClass().getSimpleName() + "], position = [" + position + "]");
@@ -276,7 +261,7 @@ public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
// If header isn't null, offset the items by -1
if (header != null) position--;
- ((LocalItemHolder) holder).updateFromItem(localItems.get(position), getState(position), dateFormat);
+ ((LocalItemHolder) holder).updateFromItem(localItems.get(position), recordManager, dateFormat);
} else if (holder instanceof HeaderFooterHolder && position == 0 && header != null) {
((HeaderFooterHolder) holder).view = header;
} else if (holder instanceof HeaderFooterHolder && position == sizeConsideringHeader()
@@ -290,11 +275,9 @@ public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int positi
if (!payloads.isEmpty() && holder instanceof LocalItemHolder) {
for (Object payload : payloads) {
if (payload instanceof StreamStateEntity) {
- ((LocalItemHolder) holder).updateState(localItems.get(header == null ? position : position - 1),
- (StreamStateEntity) payload);
+ ((LocalItemHolder) holder).updateState(localItems.get(header == null ? position : position - 1), recordManager);
} else if (payload instanceof Boolean) {
- ((LocalItemHolder) holder).updateState(localItems.get(header == null ? position : position - 1),
- null);
+ ((LocalItemHolder) holder).updateState(localItems.get(header == null ? position : position - 1), recordManager);
}
}
} else {
@@ -302,11 +285,6 @@ public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int positi
}
}
- @Override
- protected void onItemStateChanged(int position, @Nullable StreamStateEntity state) {
- notifyItemChanged(header == null ? position : position + 1, state != null ? state : false);
- }
-
public GridLayoutManager.SpanSizeLookup getSpanSizeLookup(final int spanCount) {
return new GridLayoutManager.SpanSizeLookup() {
@Override
diff --git a/app/src/main/java/org/schabi/newpipe/local/dialog/PlaylistAppendDialog.java b/app/src/main/java/org/schabi/newpipe/local/dialog/PlaylistAppendDialog.java
index 5973ad920d0..6565709434d 100644
--- a/app/src/main/java/org/schabi/newpipe/local/dialog/PlaylistAppendDialog.java
+++ b/app/src/main/java/org/schabi/newpipe/local/dialog/PlaylistAppendDialog.java
@@ -1,6 +1,5 @@
package org.schabi.newpipe.local.dialog;
-import android.annotation.SuppressLint;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
@@ -28,7 +27,7 @@
import java.util.List;
import io.reactivex.android.schedulers.AndroidSchedulers;
-import io.reactivex.disposables.Disposable;
+import io.reactivex.disposables.CompositeDisposable;
public final class PlaylistAppendDialog extends PlaylistDialog {
private static final String TAG = PlaylistAppendDialog.class.getCanonicalName();
@@ -36,7 +35,7 @@ public final class PlaylistAppendDialog extends PlaylistDialog {
private RecyclerView playlistRecyclerView;
private LocalItemListAdapter playlistAdapter;
- private Disposable playlistReactor;
+ private CompositeDisposable playlistDisposables = new CompositeDisposable();
public static PlaylistAppendDialog fromStreamInfo(final StreamInfo info) {
PlaylistAppendDialog dialog = new PlaylistAppendDialog();
@@ -99,9 +98,9 @@ public void selected(LocalItem selectedItem) {
final View newPlaylistButton = view.findViewById(R.id.newPlaylist);
newPlaylistButton.setOnClickListener(ignored -> openCreatePlaylistDialog());
- playlistReactor = playlistManager.getPlaylists()
+ playlistDisposables.add(playlistManager.getPlaylists()
.observeOn(AndroidSchedulers.mainThread())
- .subscribe(this::onPlaylistsReceived);
+ .subscribe(this::onPlaylistsReceived));
}
/*//////////////////////////////////////////////////////////////////////////
@@ -111,13 +110,12 @@ public void selected(LocalItem selectedItem) {
@Override
public void onDestroyView() {
super.onDestroyView();
- if (playlistReactor != null) playlistReactor.dispose();
+ playlistDisposables.dispose();
if (playlistAdapter != null) {
- playlistAdapter.dispose();
playlistAdapter.unsetSelectedListener();
}
- playlistReactor = null;
+ playlistDisposables.clear();
playlistRecyclerView = null;
playlistAdapter = null;
}
@@ -151,13 +149,12 @@ private void onPlaylistSelected(@NonNull LocalPlaylistManager manager,
@NonNull List streams) {
if (getStreams() == null) return;
- @SuppressLint("ShowToast")
final Toast successToast = Toast.makeText(getContext(),
R.string.playlist_add_stream_success, Toast.LENGTH_SHORT);
- manager.appendToPlaylist(playlist.uid, streams)
+ playlistDisposables.add(manager.appendToPlaylist(playlist.uid, streams)
.observeOn(AndroidSchedulers.mainThread())
- .subscribe(ignored -> successToast.show());
+ .subscribe(ignored -> successToast.show()));
getDialog().dismiss();
}
diff --git a/app/src/main/java/org/schabi/newpipe/local/holder/LocalItemHolder.java b/app/src/main/java/org/schabi/newpipe/local/holder/LocalItemHolder.java
index c00fa1fb4b1..ed6a9b4cdca 100644
--- a/app/src/main/java/org/schabi/newpipe/local/holder/LocalItemHolder.java
+++ b/app/src/main/java/org/schabi/newpipe/local/holder/LocalItemHolder.java
@@ -1,13 +1,12 @@
package org.schabi.newpipe.local.holder;
-import android.support.annotation.Nullable;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.ViewGroup;
import org.schabi.newpipe.database.LocalItem;
-import org.schabi.newpipe.database.stream.model.StreamStateEntity;
import org.schabi.newpipe.local.LocalItemBuilder;
+import org.schabi.newpipe.local.history.HistoryRecordManager;
import java.text.DateFormat;
@@ -40,8 +39,8 @@ public LocalItemHolder(LocalItemBuilder itemBuilder, int layoutId, ViewGroup par
this.itemBuilder = itemBuilder;
}
- public abstract void updateFromItem(final LocalItem item, @Nullable final StreamStateEntity state, final DateFormat dateFormat);
+ public abstract void updateFromItem(final LocalItem item, HistoryRecordManager historyRecordManager, final DateFormat dateFormat);
- public void updateState(final LocalItem localItem, @Nullable final StreamStateEntity state) {
+ public void updateState(final LocalItem localItem, HistoryRecordManager historyRecordManager) {
}
}
diff --git a/app/src/main/java/org/schabi/newpipe/local/holder/LocalPlaylistItemHolder.java b/app/src/main/java/org/schabi/newpipe/local/holder/LocalPlaylistItemHolder.java
index 0e6eca9ba3f..1366bd02e93 100644
--- a/app/src/main/java/org/schabi/newpipe/local/holder/LocalPlaylistItemHolder.java
+++ b/app/src/main/java/org/schabi/newpipe/local/holder/LocalPlaylistItemHolder.java
@@ -1,13 +1,12 @@
package org.schabi.newpipe.local.holder;
-import android.support.annotation.Nullable;
import android.view.View;
import android.view.ViewGroup;
import org.schabi.newpipe.database.LocalItem;
import org.schabi.newpipe.database.playlist.PlaylistMetadataEntry;
-import org.schabi.newpipe.database.stream.model.StreamStateEntity;
import org.schabi.newpipe.local.LocalItemBuilder;
+import org.schabi.newpipe.local.history.HistoryRecordManager;
import org.schabi.newpipe.util.ImageDisplayConstants;
import java.text.DateFormat;
@@ -23,7 +22,7 @@ public LocalPlaylistItemHolder(LocalItemBuilder infoItemBuilder, ViewGroup paren
}
@Override
- public void updateFromItem(final LocalItem localItem, @Nullable final StreamStateEntity state, final DateFormat dateFormat) {
+ public void updateFromItem(final LocalItem localItem, HistoryRecordManager historyRecordManager, final DateFormat dateFormat) {
if (!(localItem instanceof PlaylistMetadataEntry)) return;
final PlaylistMetadataEntry item = (PlaylistMetadataEntry) localItem;
@@ -34,6 +33,6 @@ public void updateFromItem(final LocalItem localItem, @Nullable final StreamStat
itemBuilder.displayImage(item.thumbnailUrl, itemThumbnailView,
ImageDisplayConstants.DISPLAY_PLAYLIST_OPTIONS);
- super.updateFromItem(localItem, state, dateFormat);
+ super.updateFromItem(localItem, historyRecordManager, dateFormat);
}
}
diff --git a/app/src/main/java/org/schabi/newpipe/local/holder/LocalPlaylistStreamItemHolder.java b/app/src/main/java/org/schabi/newpipe/local/holder/LocalPlaylistStreamItemHolder.java
index 0c4e66c9d2a..c5d9a6428c1 100644
--- a/app/src/main/java/org/schabi/newpipe/local/holder/LocalPlaylistStreamItemHolder.java
+++ b/app/src/main/java/org/schabi/newpipe/local/holder/LocalPlaylistStreamItemHolder.java
@@ -1,6 +1,5 @@
package org.schabi.newpipe.local.holder;
-import android.support.annotation.Nullable;
import android.support.v4.content.ContextCompat;
import android.view.MotionEvent;
import android.view.View;
@@ -14,12 +13,14 @@
import org.schabi.newpipe.database.stream.model.StreamStateEntity;
import org.schabi.newpipe.extractor.NewPipe;
import org.schabi.newpipe.local.LocalItemBuilder;
+import org.schabi.newpipe.local.history.HistoryRecordManager;
import org.schabi.newpipe.util.AnimationUtils;
import org.schabi.newpipe.util.ImageDisplayConstants;
import org.schabi.newpipe.util.Localization;
import org.schabi.newpipe.views.AnimatedProgressBar;
import java.text.DateFormat;
+import java.util.ArrayList;
import java.util.concurrent.TimeUnit;
public class LocalPlaylistStreamItemHolder extends LocalItemHolder {
@@ -47,7 +48,7 @@ public LocalPlaylistStreamItemHolder(LocalItemBuilder infoItemBuilder, ViewGroup
}
@Override
- public void updateFromItem(final LocalItem localItem, @Nullable final StreamStateEntity state, final DateFormat dateFormat) {
+ public void updateFromItem(final LocalItem localItem, HistoryRecordManager historyRecordManager, final DateFormat dateFormat) {
if (!(localItem instanceof PlaylistStreamEntry)) return;
final PlaylistStreamEntry item = (PlaylistStreamEntry) localItem;
@@ -60,6 +61,8 @@ public void updateFromItem(final LocalItem localItem, @Nullable final StreamStat
itemDurationView.setBackgroundColor(ContextCompat.getColor(itemBuilder.getContext(),
R.color.duration_background_color));
itemDurationView.setVisibility(View.VISIBLE);
+
+ StreamStateEntity state = historyRecordManager.loadLocalStreamStateBatch(new ArrayList() {{ add(localItem); }}).blockingGet().get(0);
if (state != null) {
itemProgressView.setVisibility(View.VISIBLE);
itemProgressView.setMax((int) item.duration);
@@ -94,9 +97,11 @@ public void updateFromItem(final LocalItem localItem, @Nullable final StreamStat
}
@Override
- public void updateState(LocalItem localItem, @Nullable StreamStateEntity state) {
+ public void updateState(LocalItem localItem, HistoryRecordManager historyRecordManager) {
if (!(localItem instanceof PlaylistStreamEntry)) return;
final PlaylistStreamEntry item = (PlaylistStreamEntry) localItem;
+
+ StreamStateEntity state = historyRecordManager.loadLocalStreamStateBatch(new ArrayList() {{ add(localItem); }}).blockingGet().get(0);
if (state != null && item.duration > 0) {
itemProgressView.setMax((int) item.duration);
if (itemProgressView.getVisibility() == View.VISIBLE) {
diff --git a/app/src/main/java/org/schabi/newpipe/local/holder/LocalStatisticStreamItemHolder.java b/app/src/main/java/org/schabi/newpipe/local/holder/LocalStatisticStreamItemHolder.java
index b24051a4f3a..05717392c2f 100644
--- a/app/src/main/java/org/schabi/newpipe/local/holder/LocalStatisticStreamItemHolder.java
+++ b/app/src/main/java/org/schabi/newpipe/local/holder/LocalStatisticStreamItemHolder.java
@@ -13,12 +13,14 @@
import org.schabi.newpipe.database.stream.model.StreamStateEntity;
import org.schabi.newpipe.extractor.NewPipe;
import org.schabi.newpipe.local.LocalItemBuilder;
+import org.schabi.newpipe.local.history.HistoryRecordManager;
import org.schabi.newpipe.util.AnimationUtils;
import org.schabi.newpipe.util.ImageDisplayConstants;
import org.schabi.newpipe.util.Localization;
import org.schabi.newpipe.views.AnimatedProgressBar;
import java.text.DateFormat;
+import java.util.ArrayList;
import java.util.concurrent.TimeUnit;
/*
@@ -76,7 +78,7 @@ private String getStreamInfoDetailLine(final StreamStatisticsEntry entry,
}
@Override
- public void updateFromItem(final LocalItem localItem, @Nullable final StreamStateEntity state, final DateFormat dateFormat) {
+ public void updateFromItem(final LocalItem localItem, HistoryRecordManager historyRecordManager, final DateFormat dateFormat) {
if (!(localItem instanceof StreamStatisticsEntry)) return;
final StreamStatisticsEntry item = (StreamStatisticsEntry) localItem;
@@ -88,6 +90,8 @@ public void updateFromItem(final LocalItem localItem, @Nullable final StreamStat
itemDurationView.setBackgroundColor(ContextCompat.getColor(itemBuilder.getContext(),
R.color.duration_background_color));
itemDurationView.setVisibility(View.VISIBLE);
+
+ StreamStateEntity state = historyRecordManager.loadLocalStreamStateBatch(new ArrayList() {{ add(localItem); }}).blockingGet().get(0);
if (state != null) {
itemProgressView.setVisibility(View.VISIBLE);
itemProgressView.setMax((int) item.duration);
@@ -124,9 +128,11 @@ public void updateFromItem(final LocalItem localItem, @Nullable final StreamStat
}
@Override
- public void updateState(LocalItem localItem, @Nullable StreamStateEntity state) {
+ public void updateState(LocalItem localItem, HistoryRecordManager historyRecordManager) {
if (!(localItem instanceof StreamStatisticsEntry)) return;
final StreamStatisticsEntry item = (StreamStatisticsEntry) localItem;
+
+ StreamStateEntity state = historyRecordManager.loadLocalStreamStateBatch(new ArrayList() {{ add(localItem); }}).blockingGet().get(0);
if (state != null && item.duration > 0) {
itemProgressView.setMax((int) item.duration);
if (itemProgressView.getVisibility() == View.VISIBLE) {
diff --git a/app/src/main/java/org/schabi/newpipe/local/holder/PlaylistItemHolder.java b/app/src/main/java/org/schabi/newpipe/local/holder/PlaylistItemHolder.java
index 2a81f95718c..c5f1813c707 100644
--- a/app/src/main/java/org/schabi/newpipe/local/holder/PlaylistItemHolder.java
+++ b/app/src/main/java/org/schabi/newpipe/local/holder/PlaylistItemHolder.java
@@ -1,14 +1,13 @@
package org.schabi.newpipe.local.holder;
-import android.support.annotation.Nullable;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import org.schabi.newpipe.R;
import org.schabi.newpipe.database.LocalItem;
-import org.schabi.newpipe.database.stream.model.StreamStateEntity;
import org.schabi.newpipe.local.LocalItemBuilder;
+import org.schabi.newpipe.local.history.HistoryRecordManager;
import java.text.DateFormat;
@@ -33,7 +32,7 @@ public PlaylistItemHolder(LocalItemBuilder infoItemBuilder, ViewGroup parent) {
}
@Override
- public void updateFromItem(final LocalItem localItem, @Nullable final StreamStateEntity state, final DateFormat dateFormat) {
+ public void updateFromItem(final LocalItem localItem, HistoryRecordManager historyRecordManager, final DateFormat dateFormat) {
itemView.setOnClickListener(view -> {
if (itemBuilder.getOnItemSelectedListener() != null) {
itemBuilder.getOnItemSelectedListener().selected(localItem);
diff --git a/app/src/main/java/org/schabi/newpipe/local/holder/RemotePlaylistItemHolder.java b/app/src/main/java/org/schabi/newpipe/local/holder/RemotePlaylistItemHolder.java
index bdcd42f6731..f9542850edd 100644
--- a/app/src/main/java/org/schabi/newpipe/local/holder/RemotePlaylistItemHolder.java
+++ b/app/src/main/java/org/schabi/newpipe/local/holder/RemotePlaylistItemHolder.java
@@ -1,13 +1,12 @@
package org.schabi.newpipe.local.holder;
-import android.support.annotation.Nullable;
import android.view.ViewGroup;
import org.schabi.newpipe.database.LocalItem;
import org.schabi.newpipe.database.playlist.model.PlaylistRemoteEntity;
-import org.schabi.newpipe.database.stream.model.StreamStateEntity;
import org.schabi.newpipe.extractor.NewPipe;
import org.schabi.newpipe.local.LocalItemBuilder;
+import org.schabi.newpipe.local.history.HistoryRecordManager;
import org.schabi.newpipe.util.ImageDisplayConstants;
import org.schabi.newpipe.util.Localization;
@@ -23,7 +22,7 @@ public RemotePlaylistItemHolder(LocalItemBuilder infoItemBuilder, ViewGroup pare
}
@Override
- public void updateFromItem(final LocalItem localItem, @Nullable final StreamStateEntity state, final DateFormat dateFormat) {
+ public void updateFromItem(final LocalItem localItem, HistoryRecordManager historyRecordManager, final DateFormat dateFormat) {
if (!(localItem instanceof PlaylistRemoteEntity)) return;
final PlaylistRemoteEntity item = (PlaylistRemoteEntity) localItem;
@@ -35,6 +34,6 @@ public void updateFromItem(final LocalItem localItem, @Nullable final StreamStat
itemBuilder.displayImage(item.getThumbnailUrl(), itemThumbnailView,
ImageDisplayConstants.DISPLAY_PLAYLIST_OPTIONS);
- super.updateFromItem(localItem, state, dateFormat);
+ super.updateFromItem(localItem, historyRecordManager, dateFormat);
}
}
diff --git a/app/src/main/java/org/schabi/newpipe/local/subscription/SubscriptionFragment.java b/app/src/main/java/org/schabi/newpipe/local/subscription/SubscriptionFragment.java
index 9a53e7e94cc..a2727c29b9f 100644
--- a/app/src/main/java/org/schabi/newpipe/local/subscription/SubscriptionFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/local/subscription/SubscriptionFragment.java
@@ -130,7 +130,6 @@ public void onAttach(Context context) {
@Override
public void onDetach() {
- infoListAdapter.dispose();
super.onDetach();
}
@@ -153,8 +152,6 @@ public void onResume() {
}
updateFlags = 0;
}
-
- itemsList.post(infoListAdapter::updateStates);
}
@Override
@@ -382,7 +379,6 @@ public void held(ChannelInfoItem selectedItem) {
});
- //noinspection ConstantConditions
whatsNewItemListHeader.setOnClickListener(v -> {
FragmentManager fragmentManager = getFM();
NavigationHelper.openWhatsNewFragment(fragmentManager);
@@ -430,12 +426,12 @@ private void showLongTapDialog(ChannelInfoItem selectedItem) {
}
- private void shareChannel (ChannelInfoItem selectedItem) {
- ShareUtils.shareUrl(this.getContext(), selectedItem.getName(), selectedItem.getUrl());
+ private void shareChannel(ChannelInfoItem selectedItem) {
+ ShareUtils.shareUrl(getContext(), selectedItem.getName(), selectedItem.getUrl());
}
@SuppressLint("CheckResult")
- private void deleteChannel (ChannelInfoItem selectedItem) {
+ private void deleteChannel(ChannelInfoItem selectedItem) {
subscriptionService.subscriptionTable()
.getSubscription(selectedItem.getServiceId(), selectedItem.getUrl())
.toObservable()
@@ -447,7 +443,7 @@ private void deleteChannel (ChannelInfoItem selectedItem) {
- private Observer> getDeleteObserver(){
+ private Observer> getDeleteObserver() {
return new Observer>() {
@Override
public void onSubscribe(Disposable d) {