Merge branch 'fature-log-kodi-videos' of https://github.com/coffeemakr/NewPipe into kodi
This commit is contained in:
commit
f8c0c449bf
|
@ -27,6 +27,7 @@ import android.os.Handler;
|
||||||
import android.os.Looper;
|
import android.os.Looper;
|
||||||
import android.preference.PreferenceManager;
|
import android.preference.PreferenceManager;
|
||||||
import android.support.annotation.NonNull;
|
import android.support.annotation.NonNull;
|
||||||
|
import android.support.annotation.Nullable;
|
||||||
import android.support.v4.app.Fragment;
|
import android.support.v4.app.Fragment;
|
||||||
import android.support.v7.app.ActionBar;
|
import android.support.v7.app.ActionBar;
|
||||||
import android.support.v7.app.AppCompatActivity;
|
import android.support.v7.app.AppCompatActivity;
|
||||||
|
@ -309,7 +310,7 @@ public class MainActivity extends AppCompatActivity implements HistoryListener {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onVideoPlayed(StreamInfo streamInfo, VideoStream videoStream) {
|
public void onVideoPlayed(StreamInfo streamInfo, @Nullable VideoStream videoStream) {
|
||||||
addWatchHistoryEntry(streamInfo);
|
addWatchHistoryEntry(streamInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
package org.schabi.newpipe.fragments.detail;
|
package org.schabi.newpipe.fragments.detail;
|
||||||
|
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
|
import android.content.Context;
|
||||||
import android.content.DialogInterface;
|
import android.content.DialogInterface;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.SharedPreferences;
|
import android.content.SharedPreferences;
|
||||||
|
@ -98,7 +99,6 @@ public class VideoDetailFragment extends BaseStateFragment<StreamInfo> implement
|
||||||
|
|
||||||
// Amount of videos to show on start
|
// Amount of videos to show on start
|
||||||
private static final int INITIAL_RELATED_VIDEOS = 8;
|
private static final int INITIAL_RELATED_VIDEOS = 8;
|
||||||
private static final String KORE_PACKET = "org.xbmc.kore";
|
|
||||||
|
|
||||||
private ActionBarHandler actionBarHandler;
|
private ActionBarHandler actionBarHandler;
|
||||||
private ArrayList<VideoStream> sortedStreamVideosList;
|
private ArrayList<VideoStream> sortedStreamVideosList;
|
||||||
|
@ -561,6 +561,24 @@ public class VideoDetailFragment extends BaseStateFragment<StreamInfo> implement
|
||||||
return (!isLoading.get() && actionBarHandler.onItemSelected(item)) || super.onOptionsItemSelected(item);
|
return (!isLoading.get() && actionBarHandler.onItemSelected(item)) || super.onOptionsItemSelected(item);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static void showInstallKoreDialog(final Context context) {
|
||||||
|
final AlertDialog.Builder builder = new AlertDialog.Builder(context);
|
||||||
|
builder.setMessage(R.string.kore_not_found)
|
||||||
|
.setPositiveButton(R.string.install, new DialogInterface.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(DialogInterface dialog, int which) {
|
||||||
|
NavigationHelper.installKore(context);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(DialogInterface dialog, int which) {
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
builder.create().show();
|
||||||
|
}
|
||||||
|
|
||||||
private void setupActionBarHandler(final StreamInfo info) {
|
private void setupActionBarHandler(final StreamInfo info) {
|
||||||
if (DEBUG) Log.d(TAG, "setupActionBarHandler() called with: info = [" + info + "]");
|
if (DEBUG) Log.d(TAG, "setupActionBarHandler() called with: info = [" + info + "]");
|
||||||
sortedStreamVideosList = new ArrayList<>(ListHelper.getSortedStreamVideosList(activity, info.video_streams, info.video_only_streams, false));
|
sortedStreamVideosList = new ArrayList<>(ListHelper.getSortedStreamVideosList(activity, info.video_streams, info.video_only_streams, false));
|
||||||
|
@ -590,30 +608,13 @@ public class VideoDetailFragment extends BaseStateFragment<StreamInfo> implement
|
||||||
@Override
|
@Override
|
||||||
public void onActionSelected(int selectedStreamId) {
|
public void onActionSelected(int selectedStreamId) {
|
||||||
try {
|
try {
|
||||||
Intent intent = new Intent(Intent.ACTION_VIEW);
|
NavigationHelper.playWithKore(activity, Uri.parse(info.url.replace("https", "http")));
|
||||||
intent.setPackage(KORE_PACKET);
|
if(activity instanceof HistoryListener) {
|
||||||
intent.setData(Uri.parse(info.url.replace("https", "http")));
|
((HistoryListener) activity).onVideoPlayed(info, null);
|
||||||
activity.startActivity(intent);
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
e.printStackTrace();
|
if(DEBUG) Log.i(TAG, "Failed to start kore", e);
|
||||||
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
|
showInstallKoreDialog(activity);
|
||||||
builder.setMessage(R.string.kore_not_found)
|
|
||||||
.setPositiveButton(R.string.install, new DialogInterface.OnClickListener() {
|
|
||||||
@Override
|
|
||||||
public void onClick(DialogInterface dialog, int which) {
|
|
||||||
Intent intent = new Intent();
|
|
||||||
intent.setAction(Intent.ACTION_VIEW);
|
|
||||||
intent.setData(Uri.parse(activity.getString(R.string.fdroid_kore_url)));
|
|
||||||
activity.startActivity(intent);
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
|
|
||||||
@Override
|
|
||||||
public void onClick(DialogInterface dialog, int which) {
|
|
||||||
|
|
||||||
}
|
|
||||||
});
|
|
||||||
builder.create().show();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
package org.schabi.newpipe.history;
|
package org.schabi.newpipe.history;
|
||||||
|
|
||||||
|
import android.support.annotation.Nullable;
|
||||||
|
|
||||||
import org.schabi.newpipe.extractor.stream.AudioStream;
|
import org.schabi.newpipe.extractor.stream.AudioStream;
|
||||||
import org.schabi.newpipe.extractor.stream.StreamInfo;
|
import org.schabi.newpipe.extractor.stream.StreamInfo;
|
||||||
import org.schabi.newpipe.extractor.stream.VideoStream;
|
import org.schabi.newpipe.extractor.stream.VideoStream;
|
||||||
|
@ -9,9 +11,10 @@ public interface HistoryListener {
|
||||||
* Called when a video is played
|
* Called when a video is played
|
||||||
*
|
*
|
||||||
* @param streamInfo the stream info
|
* @param streamInfo the stream info
|
||||||
* @param videoStream the video stream that is played
|
* @param videoStream the video stream that is played. Can be null if it's not sure what
|
||||||
|
* quality was viewed (e.g. with Kodi).
|
||||||
*/
|
*/
|
||||||
void onVideoPlayed(StreamInfo streamInfo, VideoStream videoStream);
|
void onVideoPlayed(StreamInfo streamInfo, @Nullable VideoStream videoStream);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called when the audio is played in the background
|
* Called when the audio is played in the background
|
||||||
|
|
|
@ -1,11 +1,14 @@
|
||||||
package org.schabi.newpipe.util;
|
package org.schabi.newpipe.util;
|
||||||
|
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
|
import android.content.ActivityNotFoundException;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
|
import android.net.Uri;
|
||||||
import android.preference.PreferenceManager;
|
import android.preference.PreferenceManager;
|
||||||
import android.support.v4.app.Fragment;
|
import android.support.v4.app.Fragment;
|
||||||
import android.support.v4.app.FragmentManager;
|
import android.support.v4.app.FragmentManager;
|
||||||
|
import android.support.v7.app.AppCompatActivity;
|
||||||
|
|
||||||
import com.nostra13.universalimageloader.core.ImageLoader;
|
import com.nostra13.universalimageloader.core.ImageLoader;
|
||||||
|
|
||||||
|
@ -294,4 +297,55 @@ public class NavigationHelper {
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private static Uri openMarketUrl(String packageName) {
|
||||||
|
return Uri.parse("market://details")
|
||||||
|
.buildUpon()
|
||||||
|
.appendQueryParameter("id", packageName)
|
||||||
|
.build();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static Uri getGooglePlayUrl(String packageName) {
|
||||||
|
return Uri.parse("https://play.google.com/store/apps/details")
|
||||||
|
.buildUpon()
|
||||||
|
.appendQueryParameter("id", packageName)
|
||||||
|
.build();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void installApp(Context context, String packageName) {
|
||||||
|
try {
|
||||||
|
// Try market:// scheme
|
||||||
|
context.startActivity(new Intent(Intent.ACTION_VIEW, openMarketUrl(packageName)));
|
||||||
|
} catch (ActivityNotFoundException e) {
|
||||||
|
// Fall back to google play URL (don't worry F-Droid can handle it :)
|
||||||
|
context.startActivity(new Intent(Intent.ACTION_VIEW, getGooglePlayUrl(packageName)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Start an activity to install Kore
|
||||||
|
* @param context the context
|
||||||
|
*/
|
||||||
|
public static void installKore(Context context) {
|
||||||
|
installApp(context, context.getString(R.string.kore_package));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Start Kore app to show a video on Kodi
|
||||||
|
*
|
||||||
|
* For a list of supported urls see the
|
||||||
|
* <a href="https://github.com/xbmc/Kore/blob/master/app/src/main/AndroidManifest.xml">
|
||||||
|
* Kore source code
|
||||||
|
* </a>.
|
||||||
|
*
|
||||||
|
* @param context the context to use
|
||||||
|
* @param videoURL the url to the video
|
||||||
|
*/
|
||||||
|
public static void playWithKore(Context context, Uri videoURL) {
|
||||||
|
Intent intent = new Intent(Intent.ACTION_VIEW);
|
||||||
|
intent.setPackage(context.getString(R.string.kore_package));
|
||||||
|
intent.setData(videoURL);
|
||||||
|
context.startActivity(intent);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -53,7 +53,7 @@
|
||||||
<string name="show_higher_resolutions_summary">Only some devices support playing 2K/4K videos</string>
|
<string name="show_higher_resolutions_summary">Only some devices support playing 2K/4K videos</string>
|
||||||
<string name="play_with_kodi_title">Play with Kodi</string>
|
<string name="play_with_kodi_title">Play with Kodi</string>
|
||||||
<string name="kore_not_found">Kore app not found. Install it?</string>
|
<string name="kore_not_found">Kore app not found. Install it?</string>
|
||||||
<string name="fdroid_kore_url" translatable="false">https://f-droid.org/repository/browse/?fdfilter=Kore&fdid=org.xbmc.kore</string>
|
<string name="kore_package" translatable="false">org.xbmc.kore</string>
|
||||||
<string name="show_play_with_kodi_title">Show \"Play with Kodi\" option</string>
|
<string name="show_play_with_kodi_title">Show \"Play with Kodi\" option</string>
|
||||||
<string name="show_play_with_kodi_summary">Display an option to play a video via Kodi media center</string>
|
<string name="show_play_with_kodi_summary">Display an option to play a video via Kodi media center</string>
|
||||||
<string name="play_audio">Audio</string>
|
<string name="play_audio">Audio</string>
|
||||||
|
|
Loading…
Reference in New Issue