-Added icon for adding stream to playlist.
-Renamed HistoryPlaylistFragment to StatisticsPlaylistFragment.
|
@ -58,6 +58,7 @@ import org.schabi.newpipe.extractor.stream.StreamInfoItem;
|
||||||
import org.schabi.newpipe.extractor.stream.VideoStream;
|
import org.schabi.newpipe.extractor.stream.VideoStream;
|
||||||
import org.schabi.newpipe.fragments.BackPressable;
|
import org.schabi.newpipe.fragments.BackPressable;
|
||||||
import org.schabi.newpipe.fragments.BaseStateFragment;
|
import org.schabi.newpipe.fragments.BaseStateFragment;
|
||||||
|
import org.schabi.newpipe.fragments.local.PlaylistAppendDialog;
|
||||||
import org.schabi.newpipe.history.HistoryListener;
|
import org.schabi.newpipe.history.HistoryListener;
|
||||||
import org.schabi.newpipe.info_list.InfoItemBuilder;
|
import org.schabi.newpipe.info_list.InfoItemBuilder;
|
||||||
import org.schabi.newpipe.info_list.InfoItemDialog;
|
import org.schabi.newpipe.info_list.InfoItemDialog;
|
||||||
|
@ -145,6 +146,7 @@ public class VideoDetailFragment extends BaseStateFragment<StreamInfo> implement
|
||||||
|
|
||||||
private TextView detailControlsBackground;
|
private TextView detailControlsBackground;
|
||||||
private TextView detailControlsPopup;
|
private TextView detailControlsPopup;
|
||||||
|
private TextView detailControlsAddToPlaylist;
|
||||||
private TextView appendControlsDetail;
|
private TextView appendControlsDetail;
|
||||||
|
|
||||||
private LinearLayout videoDescriptionRootLayout;
|
private LinearLayout videoDescriptionRootLayout;
|
||||||
|
@ -327,6 +329,11 @@ public class VideoDetailFragment extends BaseStateFragment<StreamInfo> implement
|
||||||
case R.id.detail_controls_popup:
|
case R.id.detail_controls_popup:
|
||||||
openPopupPlayer(false);
|
openPopupPlayer(false);
|
||||||
break;
|
break;
|
||||||
|
case R.id.detail_controls_playlist_append:
|
||||||
|
if (getFragmentManager() != null && currentInfo != null) {
|
||||||
|
PlaylistAppendDialog.newInstance(currentInfo).show(getFragmentManager(), TAG);
|
||||||
|
}
|
||||||
|
break;
|
||||||
case R.id.detail_uploader_root_layout:
|
case R.id.detail_uploader_root_layout:
|
||||||
if (TextUtils.isEmpty(currentInfo.getUploaderUrl())) {
|
if (TextUtils.isEmpty(currentInfo.getUploaderUrl())) {
|
||||||
Log.w(TAG, "Can't open channel because we got no channel URL");
|
Log.w(TAG, "Can't open channel because we got no channel URL");
|
||||||
|
@ -429,6 +436,7 @@ public class VideoDetailFragment extends BaseStateFragment<StreamInfo> implement
|
||||||
|
|
||||||
detailControlsBackground = rootView.findViewById(R.id.detail_controls_background);
|
detailControlsBackground = rootView.findViewById(R.id.detail_controls_background);
|
||||||
detailControlsPopup = rootView.findViewById(R.id.detail_controls_popup);
|
detailControlsPopup = rootView.findViewById(R.id.detail_controls_popup);
|
||||||
|
detailControlsAddToPlaylist = rootView.findViewById(R.id.detail_controls_playlist_append);
|
||||||
appendControlsDetail = rootView.findViewById(R.id.touch_append_detail);
|
appendControlsDetail = rootView.findViewById(R.id.touch_append_detail);
|
||||||
|
|
||||||
videoDescriptionRootLayout = rootView.findViewById(R.id.detail_description_root_layout);
|
videoDescriptionRootLayout = rootView.findViewById(R.id.detail_description_root_layout);
|
||||||
|
@ -479,6 +487,7 @@ public class VideoDetailFragment extends BaseStateFragment<StreamInfo> implement
|
||||||
thumbnailBackgroundButton.setOnClickListener(this);
|
thumbnailBackgroundButton.setOnClickListener(this);
|
||||||
detailControlsBackground.setOnClickListener(this);
|
detailControlsBackground.setOnClickListener(this);
|
||||||
detailControlsPopup.setOnClickListener(this);
|
detailControlsPopup.setOnClickListener(this);
|
||||||
|
detailControlsAddToPlaylist.setOnClickListener(this);
|
||||||
relatedStreamExpandButton.setOnClickListener(this);
|
relatedStreamExpandButton.setOnClickListener(this);
|
||||||
|
|
||||||
detailControlsBackground.setLongClickable(true);
|
detailControlsBackground.setLongClickable(true);
|
||||||
|
|
|
@ -144,9 +144,8 @@ public class LocalPlaylistFragment extends BaseListFragment<List<StreamEntity>,
|
||||||
infoListAdapter.setOnStreamSelectedListener(new InfoItemBuilder.OnInfoItemSelectedListener<StreamInfoItem>() {
|
infoListAdapter.setOnStreamSelectedListener(new InfoItemBuilder.OnInfoItemSelectedListener<StreamInfoItem>() {
|
||||||
@Override
|
@Override
|
||||||
public void selected(StreamInfoItem selectedItem) {
|
public void selected(StreamInfoItem selectedItem) {
|
||||||
if (getParentFragment() == null) return;
|
|
||||||
// Requires the parent fragment to find holder for fragment replacement
|
// Requires the parent fragment to find holder for fragment replacement
|
||||||
NavigationHelper.openVideoDetailFragment(getParentFragment().getFragmentManager(),
|
NavigationHelper.openVideoDetailFragment(getFragmentManager(),
|
||||||
selectedItem.getServiceId(), selectedItem.url, selectedItem.getName());
|
selectedItem.getServiceId(), selectedItem.url, selectedItem.getName());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -9,7 +9,7 @@ import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class MostPlayedFragment extends HistoryPlaylistFragment {
|
public class MostPlayedFragment extends StatisticsPlaylistFragment {
|
||||||
@Override
|
@Override
|
||||||
protected String getName() {
|
protected String getName() {
|
||||||
return getString(R.string.title_most_played);
|
return getString(R.string.title_most_played);
|
||||||
|
|
|
@ -35,7 +35,7 @@ import io.reactivex.android.schedulers.AndroidSchedulers;
|
||||||
|
|
||||||
import static org.schabi.newpipe.util.AnimationUtils.animateView;
|
import static org.schabi.newpipe.util.AnimationUtils.animateView;
|
||||||
|
|
||||||
public abstract class HistoryPlaylistFragment
|
public abstract class StatisticsPlaylistFragment
|
||||||
extends BaseListFragment<List<StreamStatisticsEntry>, Void> {
|
extends BaseListFragment<List<StreamStatisticsEntry>, Void> {
|
||||||
|
|
||||||
private View headerRootLayout;
|
private View headerRootLayout;
|
||||||
|
@ -130,9 +130,7 @@ public abstract class HistoryPlaylistFragment
|
||||||
infoListAdapter.setOnStreamSelectedListener(new InfoItemBuilder.OnInfoItemSelectedListener<StreamInfoItem>() {
|
infoListAdapter.setOnStreamSelectedListener(new InfoItemBuilder.OnInfoItemSelectedListener<StreamInfoItem>() {
|
||||||
@Override
|
@Override
|
||||||
public void selected(StreamInfoItem selectedItem) {
|
public void selected(StreamInfoItem selectedItem) {
|
||||||
if (getParentFragment() == null) return;
|
NavigationHelper.openVideoDetailFragment(getFragmentManager(),
|
||||||
// Requires the parent fragment to find holder for fragment replacement
|
|
||||||
NavigationHelper.openVideoDetailFragment(getParentFragment().getFragmentManager(),
|
|
||||||
selectedItem.getServiceId(), selectedItem.url, selectedItem.getName());
|
selectedItem.getServiceId(), selectedItem.url, selectedItem.getName());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -231,7 +229,7 @@ public abstract class HistoryPlaylistFragment
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onError(Throwable exception) {
|
public void onError(Throwable exception) {
|
||||||
HistoryPlaylistFragment.this.onError(exception);
|
StatisticsPlaylistFragment.this.onError(exception);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
|
@ -11,7 +11,7 @@ import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class WatchHistoryFragment extends HistoryPlaylistFragment {
|
public class WatchHistoryFragment extends StatisticsPlaylistFragment {
|
||||||
@Override
|
@Override
|
||||||
protected String getName() {
|
protected String getName() {
|
||||||
return getString(R.string.title_watch_history);
|
return getString(R.string.title_watch_history);
|
||||||
|
|
BIN
app/src/main/res/drawable-hdpi/ic_playlist_add_black_24dp.png
Normal file
After Width: | Height: | Size: 106 B |
BIN
app/src/main/res/drawable-hdpi/ic_playlist_add_white_24dp.png
Normal file
After Width: | Height: | Size: 107 B |
BIN
app/src/main/res/drawable-mdpi/ic_playlist_add_black_24dp.png
Normal file
After Width: | Height: | Size: 100 B |
BIN
app/src/main/res/drawable-mdpi/ic_playlist_add_white_24dp.png
Normal file
After Width: | Height: | Size: 101 B |
BIN
app/src/main/res/drawable-xhdpi/ic_playlist_add_black_24dp.png
Normal file
After Width: | Height: | Size: 113 B |
BIN
app/src/main/res/drawable-xhdpi/ic_playlist_add_white_24dp.png
Normal file
After Width: | Height: | Size: 109 B |
BIN
app/src/main/res/drawable-xxhdpi/ic_playlist_add_black_24dp.png
Normal file
After Width: | Height: | Size: 129 B |
BIN
app/src/main/res/drawable-xxhdpi/ic_playlist_add_white_24dp.png
Normal file
After Width: | Height: | Size: 113 B |
BIN
app/src/main/res/drawable-xxxhdpi/ic_playlist_add_black_24dp.png
Normal file
After Width: | Height: | Size: 128 B |
BIN
app/src/main/res/drawable-xxxhdpi/ic_playlist_add_white_24dp.png
Normal file
After Width: | Height: | Size: 111 B |
|
@ -274,6 +274,25 @@
|
||||||
android:paddingTop="6dp"
|
android:paddingTop="6dp"
|
||||||
android:text="@string/controls_background_title"
|
android:text="@string/controls_background_title"
|
||||||
android:textSize="12sp"/>
|
android:textSize="12sp"/>
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/detail_controls_playlist_append"
|
||||||
|
android:layout_width="60dp"
|
||||||
|
android:layout_height="55dp"
|
||||||
|
android:layout_alignParentTop="true"
|
||||||
|
android:layout_gravity="center_vertical"
|
||||||
|
android:layout_toLeftOf="@id/detail_controls_background"
|
||||||
|
android:layout_toStartOf="@id/detail_controls_background"
|
||||||
|
android:background="?attr/selectableItemBackgroundBorderless"
|
||||||
|
android:clickable="true"
|
||||||
|
android:focusable="true"
|
||||||
|
android:contentDescription="@string/append_playlist"
|
||||||
|
android:drawableTop="?attr/playlist_add"
|
||||||
|
android:gravity="center"
|
||||||
|
android:paddingBottom="6dp"
|
||||||
|
android:paddingTop="6dp"
|
||||||
|
android:text="@string/controls_add_to_playlist_title"
|
||||||
|
android:textSize="12sp"/>
|
||||||
</RelativeLayout>
|
</RelativeLayout>
|
||||||
|
|
||||||
<!--UPLOADER-->
|
<!--UPLOADER-->
|
||||||
|
|
|
@ -26,6 +26,7 @@
|
||||||
<attr name="play" format="reference"/>
|
<attr name="play" format="reference"/>
|
||||||
<attr name="ic_hot" format="reference"/>
|
<attr name="ic_hot" format="reference"/>
|
||||||
<attr name="ic_channel" format="reference"/>
|
<attr name="ic_channel" format="reference"/>
|
||||||
|
<attr name="playlist_add" format="reference"/>
|
||||||
|
|
||||||
<!-- Can't refer to colors directly into drawable's xml-->
|
<!-- Can't refer to colors directly into drawable's xml-->
|
||||||
<attr name="toolbar_shadow_drawable" format="reference"/>
|
<attr name="toolbar_shadow_drawable" format="reference"/>
|
||||||
|
|
|
@ -38,6 +38,7 @@
|
||||||
|
|
||||||
<string name="controls_background_title">Background</string>
|
<string name="controls_background_title">Background</string>
|
||||||
<string name="controls_popup_title">Popup</string>
|
<string name="controls_popup_title">Popup</string>
|
||||||
|
<string name="controls_add_to_playlist_title">Add To</string>
|
||||||
|
|
||||||
<string name="download_path_title">Video download path</string>
|
<string name="download_path_title">Video download path</string>
|
||||||
<string name="download_path_summary">Path to store downloaded videos in</string>
|
<string name="download_path_summary">Path to store downloaded videos in</string>
|
||||||
|
@ -375,4 +376,5 @@
|
||||||
<string name="create_playlist">Create New Playlist</string>
|
<string name="create_playlist">Create New Playlist</string>
|
||||||
<string name="delete_playlist">Delete Playlist</string>
|
<string name="delete_playlist">Delete Playlist</string>
|
||||||
<string name="playlist_name_input">Name</string>
|
<string name="playlist_name_input">Name</string>
|
||||||
|
<string name="append_playlist">Add To Playlist</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
@ -41,6 +41,7 @@
|
||||||
<item name="play">@drawable/ic_play_arrow_black_24dp</item>
|
<item name="play">@drawable/ic_play_arrow_black_24dp</item>
|
||||||
<item name="ic_hot">@drawable/ic_whatshot_black_24dp</item>
|
<item name="ic_hot">@drawable/ic_whatshot_black_24dp</item>
|
||||||
<item name="ic_channel">@drawable/ic_channel_black_24dp</item>
|
<item name="ic_channel">@drawable/ic_channel_black_24dp</item>
|
||||||
|
<item name="playlist_add">@drawable/ic_playlist_add_black_24dp</item>
|
||||||
|
|
||||||
<item name="separator_color">@color/light_separator_color</item>
|
<item name="separator_color">@color/light_separator_color</item>
|
||||||
<item name="contrast_background_color">@color/light_contrast_background_color</item>
|
<item name="contrast_background_color">@color/light_contrast_background_color</item>
|
||||||
|
@ -88,6 +89,7 @@
|
||||||
<item name="play">@drawable/ic_play_arrow_white_24dp</item>
|
<item name="play">@drawable/ic_play_arrow_white_24dp</item>
|
||||||
<item name="ic_hot">@drawable/ic_whatshot_white_24dp</item>
|
<item name="ic_hot">@drawable/ic_whatshot_white_24dp</item>
|
||||||
<item name="ic_channel">@drawable/ic_channel_white_24dp</item>
|
<item name="ic_channel">@drawable/ic_channel_white_24dp</item>
|
||||||
|
<item name="playlist_add">@drawable/ic_playlist_add_white_24dp</item>
|
||||||
|
|
||||||
<item name="separator_color">@color/dark_separator_color</item>
|
<item name="separator_color">@color/dark_separator_color</item>
|
||||||
<item name="contrast_background_color">@color/dark_contrast_background_color</item>
|
<item name="contrast_background_color">@color/dark_contrast_background_color</item>
|
||||||
|
|