Compare commits
66 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9d7dc99416 | ||
|
|
c89dc4ba5b | ||
|
|
72289ced39 | ||
|
|
3554ccde05 | ||
|
|
73e2c42931 | ||
|
|
b11778ec55 | ||
|
|
18bc937958 | ||
|
|
9f618f6678 | ||
|
|
0c3c7493de | ||
|
|
8f3f02e9f7 | ||
|
|
69903ba889 | ||
|
|
25c5f95ad9 | ||
|
|
2546d1107e | ||
|
|
fdbeaf8692 | ||
|
|
63c0316af2 | ||
|
|
f2e761c07c | ||
|
|
6a741de7d1 | ||
|
|
3e94d18fe1 | ||
|
|
95d3651e29 | ||
|
|
cd2d88781a | ||
|
|
2178e86d09 | ||
|
|
f9ad0f12d0 | ||
|
|
63b16d925d | ||
|
|
53b9ffcbc8 | ||
|
|
df01f41980 | ||
|
|
b0c40d3b09 | ||
|
|
5880dcbcfd | ||
|
|
489bbc45f5 | ||
|
|
5e67502729 | ||
|
|
842079c928 | ||
|
|
b0bab07a15 | ||
|
|
4dbb12c65d | ||
|
|
db500e9791 | ||
|
|
fd8f600fec | ||
|
|
2e2d7d02fb | ||
|
|
d068cd7f75 | ||
|
|
5a05ffcbdd | ||
|
|
d8c7f50b39 | ||
|
|
988e6e1c82 | ||
|
|
f6af19444c | ||
|
|
0581e50e0c | ||
|
|
a95da9a42d | ||
|
|
be10b9750f | ||
|
|
29a3cbc688 | ||
|
|
4f57d3a201 | ||
|
|
c9be1398b0 | ||
|
|
30eef4db12 | ||
|
|
b932dbf514 | ||
|
|
320ac82dea | ||
|
|
26e36454ef | ||
|
|
6c63841d0c | ||
|
|
6ec2d91d91 | ||
|
|
3299b90c20 | ||
|
|
7b6d6da9a6 | ||
|
|
7c7c61fc35 | ||
|
|
c5408fb6b8 | ||
|
|
1c49102f67 | ||
|
|
f9dd88c1cb | ||
|
|
9ed4a65fd2 | ||
|
|
10bebf8a89 | ||
|
|
36260dac18 | ||
|
|
aebfeb98aa | ||
|
|
dc0fc05a9e | ||
|
|
6b2c3217ab | ||
|
|
0f93a45b9d | ||
|
|
943027ffdd |
@@ -2,15 +2,16 @@ language: android
|
||||
android:
|
||||
components:
|
||||
# The BuildTools version used by NewPipe
|
||||
- build-tools-23.0.1
|
||||
- tools
|
||||
- build-tools-23.0.2
|
||||
|
||||
# The SDK version used to compile NewPipe
|
||||
- android-23
|
||||
|
||||
|
||||
# Additional components
|
||||
- extra-android-support
|
||||
- extra-android-m2repository
|
||||
|
||||
|
||||
# Emulators
|
||||
- sys-img-armeabi-v7a-android-21
|
||||
- sys-img-armeabi-v7a-android-19
|
||||
|
||||
17
README.md
@@ -13,8 +13,15 @@ Project status:
|
||||
|
||||
## Screenshots
|
||||
|
||||
[<img src="assets/screenshot_1.png" width=200>](assets/screenshot_1.png)
|
||||
[<img src="assets/screenshot_2.png" width=200>](assets/screenshot_2.png)
|
||||
[<img src="screenshots/screenshot_1.png" width=150>](screenshots/screenshot_1.png)
|
||||
[<img src="screenshots/screenshot_2.png" width=150>](screenshots/screenshot_2.png)
|
||||
[<img src="screenshots/screenshot_3.png" width=150>](screenshots/screenshot_3.png)
|
||||
[<img src="screenshots/screenshot_4.png" width=150>](screenshots/screenshot_4.png)
|
||||
[<img src="screenshots/screenshot_5.png" width=150>](screenshots/screenshot_5.png)
|
||||
[<img src="screenshots/screenshot_6.png" width=250>](screenshots/screenshot_6.png)
|
||||
|
||||
[](assets/screenshot_1.png)
|
||||
[](assets/screenshot_2.png)
|
||||
|
||||
## Description
|
||||
|
||||
@@ -25,10 +32,10 @@ NewPipe does not use any Google framework libraries, or the YouTube API. It only
|
||||
* Search videos
|
||||
* Display general information about a video
|
||||
* Watch YouTube videos
|
||||
* Listen to YouTube videos (audio only streaming)
|
||||
* Listen to YouTube videos (experimental)
|
||||
* Select the streaming player to watch the video with
|
||||
* Download videos (working, but it could be better)
|
||||
* Download audio only (working, but it could be better)
|
||||
* Download videos (experimental)
|
||||
* Download audio only (experimental)
|
||||
* Open a video in Kodi
|
||||
* Show Next/Related videos
|
||||
* Search YouTube in a specific language
|
||||
|
||||
@@ -2,14 +2,14 @@ apply plugin: 'com.android.application'
|
||||
|
||||
android {
|
||||
compileSdkVersion 23
|
||||
buildToolsVersion "23.0.1"
|
||||
buildToolsVersion "23.0.2"
|
||||
|
||||
defaultConfig {
|
||||
applicationId "org.schabi.newpipe"
|
||||
minSdkVersion 15
|
||||
targetSdkVersion 23
|
||||
versionCode 7
|
||||
versionName "0.6.1"
|
||||
versionCode 9
|
||||
versionName "0.7.0"
|
||||
}
|
||||
buildTypes {
|
||||
release {
|
||||
@@ -31,6 +31,8 @@ dependencies {
|
||||
compile 'com.android.support:appcompat-v7:23.1.1'
|
||||
compile 'com.android.support:support-v4:23.1.1'
|
||||
compile 'com.android.support:design:23.1.1'
|
||||
compile 'com.android.support:cardview-v7:23.1.1'
|
||||
compile 'com.android.support:recyclerview-v7:23.1.1'
|
||||
compile 'org.jsoup:jsoup:1.8.3'
|
||||
compile 'org.mozilla:rhino:1.7.7'
|
||||
}
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
package="org.schabi.newpipe" >
|
||||
|
||||
<uses-permission android:name= "android.permission.INTERNET" />
|
||||
<uses-permission android:name= "android.permission.WAKE_LOCK" />
|
||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
|
||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
|
||||
<application
|
||||
@@ -15,7 +15,7 @@
|
||||
tools:ignore="AllowBackup">
|
||||
<activity
|
||||
android:name=".VideoItemListActivity"
|
||||
android:label="@string/app_name" >
|
||||
android:label="@string/app_name">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
|
||||
@@ -74,6 +74,12 @@
|
||||
android:parentActivityName=".VideoItemDetailActivity"
|
||||
tools:ignore="UnusedAttribute">
|
||||
</activity>
|
||||
<!--TODO: make label a translatable string -->
|
||||
<service
|
||||
android:name=".BackgroundPlayer"
|
||||
android:label="NewPipe Background Player"
|
||||
android:exported="false" >
|
||||
</service>
|
||||
<activity
|
||||
android:name=".SettingsActivity"
|
||||
android:label="@string/title_activity_settings" >
|
||||
|
||||
@@ -120,6 +120,9 @@ class ActionBarHandler {
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
Log.e(TAG, "FAILED to set audioStream value!");
|
||||
}
|
||||
}
|
||||
|
||||
private void selectFormatItem(int i) {
|
||||
@@ -136,7 +139,7 @@ class ActionBarHandler {
|
||||
MenuItem castItem = menu.findItem(R.id.action_play_with_kodi);
|
||||
|
||||
castItem.setVisible(defaultPreferences
|
||||
.getBoolean(activity.getString(R.string.showPlayWidthKodiPreference), false));
|
||||
.getBoolean(activity.getString(R.string.showPlayWithKodiPreference), false));
|
||||
}
|
||||
|
||||
public boolean onItemSelected(MenuItem item) {
|
||||
@@ -184,7 +187,7 @@ class ActionBarHandler {
|
||||
// ----------- THE MAGIC MOMENT ---------------
|
||||
if(!videoTitle.isEmpty()) {
|
||||
if (PreferenceManager.getDefaultSharedPreferences(activity)
|
||||
.getBoolean(activity.getString(R.string.useExternalPlayer), false)) {
|
||||
.getBoolean(activity.getString(R.string.useExternalVideoPlayer), false)) {
|
||||
|
||||
// External Player
|
||||
Intent intent = new Intent();
|
||||
@@ -293,37 +296,57 @@ class ActionBarHandler {
|
||||
}
|
||||
}
|
||||
|
||||
private void playAudio() {
|
||||
Intent intent = new Intent();
|
||||
try {
|
||||
public void playAudio() {
|
||||
|
||||
boolean externalAudioPlayer = PreferenceManager.getDefaultSharedPreferences(activity)
|
||||
.getBoolean(activity.getString(R.string.useExternalAudioPlayer), false);
|
||||
Intent intent;
|
||||
|
||||
if (!externalAudioPlayer && android.os.Build.VERSION.SDK_INT >= 18)//internal music player: explicit intent
|
||||
{
|
||||
intent = new Intent(activity, BackgroundPlayer.class);
|
||||
|
||||
intent.setAction(Intent.ACTION_VIEW);
|
||||
Log.i(TAG, "audioStream is null:" + (audioStream == null));
|
||||
Log.i(TAG, "audioStream.url is null:"+(audioStream.url==null));
|
||||
intent.setDataAndType(Uri.parse(audioStream.url),
|
||||
MediaFormat.getMimeById(audioStream.format));
|
||||
intent.putExtra(Intent.EXTRA_TITLE, videoTitle);
|
||||
intent.putExtra("title", videoTitle);
|
||||
activity.startActivity(intent); // HERE !!!
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
|
||||
builder.setMessage(R.string.noPlayerFound)
|
||||
.setPositiveButton(R.string.installStreamPlayer, 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.fdroidVLCurl)));
|
||||
activity.startActivity(intent);
|
||||
}
|
||||
})
|
||||
.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int which) {
|
||||
Log.i(TAG, "You unlocked a secret unicorn.");
|
||||
}
|
||||
});
|
||||
builder.create().show();
|
||||
Log.e(TAG, "Either no Streaming player for audio was installed, or something important crashed:");
|
||||
e.printStackTrace();
|
||||
activity.startService(intent);
|
||||
} else {
|
||||
intent = new Intent();
|
||||
try {
|
||||
intent.setAction(Intent.ACTION_VIEW);
|
||||
intent.setDataAndType(Uri.parse(audioStream.url),
|
||||
MediaFormat.getMimeById(audioStream.format));
|
||||
intent.putExtra(Intent.EXTRA_TITLE, videoTitle);
|
||||
intent.putExtra("title", videoTitle);
|
||||
|
||||
activity.startActivity(intent); // HERE !!!
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
|
||||
builder.setMessage(R.string.noPlayerFound)
|
||||
.setPositiveButton(R.string.installStreamPlayer, 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.fdroidVLCurl)));
|
||||
activity.startActivity(intent);
|
||||
}
|
||||
})
|
||||
.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int which) {
|
||||
Log.i(TAG, "You unlocked a secret unicorn.");
|
||||
}
|
||||
});
|
||||
builder.create().show();
|
||||
Log.e(TAG, "Either no Streaming player for audio was installed, or something important crashed:");
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
252
app/src/main/java/org/schabi/newpipe/BackgroundPlayer.java
Normal file
@@ -0,0 +1,252 @@
|
||||
package org.schabi.newpipe;
|
||||
|
||||
import android.app.Notification;
|
||||
import android.app.NotificationManager;
|
||||
import android.app.PendingIntent;
|
||||
import android.app.Service;
|
||||
import android.content.BroadcastReceiver;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.IntentFilter;
|
||||
import android.media.AudioManager;
|
||||
import android.media.MediaPlayer;
|
||||
import android.net.wifi.WifiManager;
|
||||
import android.os.IBinder;
|
||||
import android.os.PowerManager;
|
||||
import android.support.v7.app.NotificationCompat;
|
||||
import android.util.Log;
|
||||
import android.widget.Toast;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
/**
|
||||
* Created by Adam Howard on 08/11/15.
|
||||
* Copyright (c) Adam Howard <achdisposable1@gmail.com> 2015
|
||||
*
|
||||
* BackgroundPlayer.java is part of NewPipe.
|
||||
*
|
||||
* NewPipe is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* NewPipe is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with NewPipe. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**Plays the audio stream of videos in the background.*/
|
||||
public class BackgroundPlayer extends Service /*implements MediaPlayer.OnPreparedListener*/ {
|
||||
|
||||
private static final String TAG = BackgroundPlayer.class.toString();
|
||||
private static final String ACTION_STOP = TAG+".STOP";
|
||||
private static final String ACTION_PLAYPAUSE = TAG+".PLAYPAUSE";
|
||||
|
||||
public BackgroundPlayer() {
|
||||
super();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCreate() {
|
||||
/*PendingIntent pi = PendingIntent.getActivity(this, 0,
|
||||
new Intent(this, getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);*/
|
||||
super.onCreate();
|
||||
}
|
||||
@Override
|
||||
public int onStartCommand(Intent intent, int flags, int startId) {
|
||||
Toast.makeText(this, "Playing in background", Toast.LENGTH_SHORT).show();//todo:translation string
|
||||
|
||||
String source = intent.getDataString();
|
||||
//Log.i(TAG, "backgroundPLayer source:"+source);
|
||||
String videoTitle = intent.getStringExtra("title");
|
||||
|
||||
//do nearly everything in a separate thread
|
||||
PlayerThread player = new PlayerThread(source, videoTitle, this);
|
||||
player.start();
|
||||
|
||||
// If we get killed after returning here, don't restart
|
||||
return START_NOT_STICKY;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IBinder onBind(Intent intent) {
|
||||
// We don't provide binding (yet?), so return null
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDestroy() {
|
||||
//Toast.makeText(this, "service done", Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
|
||||
private class PlayerThread extends Thread {
|
||||
MediaPlayer mediaPlayer;
|
||||
private String source;
|
||||
private String title;
|
||||
private int noteID = TAG.hashCode();
|
||||
private BackgroundPlayer owner;
|
||||
private NotificationManager noteMgr;
|
||||
private NotificationCompat.Builder noteBuilder;
|
||||
private WifiManager.WifiLock wifiLock;
|
||||
|
||||
public PlayerThread(String src, String title, BackgroundPlayer owner) {
|
||||
this.source = src;
|
||||
this.title = title;
|
||||
this.owner = owner;
|
||||
mediaPlayer = new MediaPlayer();
|
||||
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
|
||||
}
|
||||
@Override
|
||||
public void run() {
|
||||
mediaPlayer.setWakeMode(getApplicationContext(), PowerManager.PARTIAL_WAKE_LOCK);//cpu lock
|
||||
try {
|
||||
mediaPlayer.setDataSource(source);
|
||||
mediaPlayer.prepare(); //We are already in a separate worker thread,
|
||||
//so calling the blocking prepare() method should be ok
|
||||
|
||||
//alternatively:
|
||||
//mediaPlayer.setOnPreparedListener(this);
|
||||
//mediaPlayer.prepareAsync(); //prepare async to not block main thread
|
||||
} catch (IOException ioe) {
|
||||
ioe.printStackTrace();
|
||||
Log.e(TAG, "video source:" + source);
|
||||
Log.e(TAG, "video title:" + title);
|
||||
//can't do anything useful without a file to play; exit early
|
||||
return;
|
||||
}
|
||||
|
||||
WifiManager wifiMgr = ((WifiManager)getSystemService(Context.WIFI_SERVICE));
|
||||
wifiLock = wifiMgr.createWifiLock(WifiManager.WIFI_MODE_FULL, TAG);
|
||||
|
||||
mediaPlayer.setOnCompletionListener(new EndListener(wifiLock));//listen for end of video
|
||||
|
||||
//get audio focus
|
||||
/*
|
||||
AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
|
||||
int result = audioManager.requestAudioFocus(this, AudioManager.STREAM_MUSIC,
|
||||
AudioManager.AUDIOFOCUS_GAIN);
|
||||
|
||||
if (result != AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
|
||||
// could not get audio focus.
|
||||
}*/
|
||||
wifiLock.acquire();
|
||||
mediaPlayer.start();
|
||||
|
||||
IntentFilter filter = new IntentFilter();
|
||||
filter.setPriority(Integer.MAX_VALUE);
|
||||
filter.addAction(ACTION_PLAYPAUSE);
|
||||
filter.addAction(ACTION_STOP);
|
||||
registerReceiver(broadcastReceiver, filter);
|
||||
|
||||
PendingIntent playPI = PendingIntent.getBroadcast(owner, noteID, new Intent(ACTION_PLAYPAUSE), PendingIntent.FLAG_UPDATE_CURRENT);
|
||||
|
||||
NotificationCompat.Action playButton = new NotificationCompat.Action.Builder
|
||||
(R.drawable.ic_play_arrow_white_48dp, "Play", playPI).build();
|
||||
|
||||
NotificationCompat.Action pauseButton = new NotificationCompat.Action.Builder
|
||||
(R.drawable.ic_play_arrow_white_48dp, "Pause", playPI).build();
|
||||
|
||||
PendingIntent stopPI = PendingIntent.getBroadcast(owner, noteID,
|
||||
new Intent(ACTION_STOP), PendingIntent.FLAG_UPDATE_CURRENT);
|
||||
|
||||
//todo: make it so that tapping the notification brings you back to the Video's DetailActivity
|
||||
//using setContentIntent
|
||||
noteBuilder = new NotificationCompat.Builder(owner);
|
||||
noteBuilder
|
||||
.setPriority(Notification.PRIORITY_LOW)
|
||||
.setCategory(Notification.CATEGORY_TRANSPORT)
|
||||
.setContentTitle(title)
|
||||
.setContentText("NewPipe is playing in the background")//todo: translation string
|
||||
//.setAutoCancel(!mediaPlayer.isPlaying())
|
||||
.setOngoing(true)
|
||||
.setDeleteIntent(stopPI)
|
||||
//.setProgress(vidLength, 0, false) //doesn't fit with Notification.MediaStyle
|
||||
.setSmallIcon(R.mipmap.ic_launcher)
|
||||
.setTicker(title + " - NewPipe")
|
||||
.addAction(playButton);
|
||||
/* .setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
|
||||
.setLargeIcon(cover)*/
|
||||
|
||||
noteBuilder.setStyle(new NotificationCompat.MediaStyle()
|
||||
//.setMediaSession(mMediaSession.getSessionToken())
|
||||
.setShowActionsInCompactView(new int[] {0})
|
||||
.setShowCancelButton(true)
|
||||
.setCancelButtonIntent(stopPI)
|
||||
);
|
||||
|
||||
startForeground(noteID, noteBuilder.build());
|
||||
|
||||
//currently decommissioned progressbar looping update code - works, but doesn't fit inside
|
||||
//Notification.MediaStyle Notification layout.
|
||||
noteMgr = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
|
||||
/*
|
||||
//update every 2s or 4 times in the video, whichever is shorter
|
||||
int sleepTime = Math.min(2000, (int)((double)vidLength/4));
|
||||
while(mediaPlayer.isPlaying()) {
|
||||
noteBuilder.setProgress(vidLength, mediaPlayer.getCurrentPosition(), false);
|
||||
noteMgr.notify(noteID, noteBuilder.build());
|
||||
try {
|
||||
Thread.sleep(sleepTime);
|
||||
} catch (InterruptedException e) {
|
||||
Log.d(TAG, "sleep failure");
|
||||
}
|
||||
}*/
|
||||
|
||||
}
|
||||
|
||||
private final BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
|
||||
@Override
|
||||
public void onReceive(Context context, Intent intent) {
|
||||
String action = intent.getAction();
|
||||
Log.i(TAG, "received broadcast action:"+action);
|
||||
if(action.equals(ACTION_PLAYPAUSE)) {
|
||||
if(mediaPlayer.isPlaying()) {
|
||||
mediaPlayer.pause();
|
||||
}
|
||||
else {
|
||||
//reacquire CPU lock after releasing it on pause
|
||||
mediaPlayer.setWakeMode(getApplicationContext(), PowerManager.PARTIAL_WAKE_LOCK);
|
||||
mediaPlayer.start();
|
||||
}
|
||||
}
|
||||
else if(action.equals(ACTION_STOP)) {
|
||||
mediaPlayer.stop();//this auto-releases CPU lock
|
||||
afterPlayCleanup();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
private void afterPlayCleanup() {
|
||||
//noteBuilder.setProgress(0, 0, false);
|
||||
//remove progress bar
|
||||
//remove notification
|
||||
noteMgr.cancel(noteID);
|
||||
unregisterReceiver(broadcastReceiver);
|
||||
//release mediaPlayer's system resources
|
||||
mediaPlayer.release();
|
||||
|
||||
//release wifilock
|
||||
wifiLock.release();
|
||||
//remove foreground status of service; make us killable
|
||||
stopForeground(true);
|
||||
|
||||
stopSelf();
|
||||
}
|
||||
|
||||
private class EndListener implements MediaPlayer.OnCompletionListener {
|
||||
private WifiManager.WifiLock wl;
|
||||
public EndListener(WifiManager.WifiLock wifiLock) {
|
||||
this.wl = wifiLock;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCompletion(MediaPlayer mp) {
|
||||
afterPlayCleanup();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -8,6 +8,7 @@ import android.content.res.Resources;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.BitmapFactory;
|
||||
import android.graphics.Point;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
import android.preference.PreferenceManager;
|
||||
@@ -245,7 +246,6 @@ public class VideoItemDetailFragment extends Fragment {
|
||||
String.format(
|
||||
res.getString(R.string.viewCountText), localisedViewCount));
|
||||
|
||||
|
||||
thumbsUpView.setText(nf.format(info.like_count));
|
||||
thumbsDownView.setText(nf.format(info.dislike_count));
|
||||
|
||||
@@ -359,8 +359,7 @@ public class VideoItemDetailFragment extends Fragment {
|
||||
public void onActivityCreated(Bundle savedInstanceBundle) {
|
||||
super.onActivityCreated(savedInstanceBundle);
|
||||
Activity a = getActivity();
|
||||
playVideoButton =
|
||||
(FloatingActionButton) a.findViewById(R.id.playVideoButton);
|
||||
playVideoButton = (FloatingActionButton) a.findViewById(R.id.playVideoButton);
|
||||
thumbnailWindowLayout = a.findViewById(R.id.detailVideoThumbnailWindowLayout);
|
||||
Button backgroundButton = (Button)
|
||||
a.findViewById(R.id.detailVideoThumbnailWindowBackgroundButton);
|
||||
@@ -381,20 +380,6 @@ public class VideoItemDetailFragment extends Fragment {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
if (PreferenceManager.getDefaultSharedPreferences(getActivity())
|
||||
.getBoolean(getString(R.string.leftHandLayout), false) && checkIfLandscape()) {
|
||||
RelativeLayout.LayoutParams oldLayout =
|
||||
(RelativeLayout.LayoutParams) playVideoButton.getLayoutParams();
|
||||
RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(
|
||||
RelativeLayout.LayoutParams.WRAP_CONTENT,
|
||||
RelativeLayout.LayoutParams.WRAP_CONTENT);
|
||||
layoutParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
|
||||
layoutParams.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
|
||||
layoutParams.setMargins(oldLayout.leftMargin, oldLayout.topMargin,
|
||||
oldLayout.rightMargin, oldLayout.bottomMargin);
|
||||
playVideoButton.setLayoutParams(layoutParams);
|
||||
}
|
||||
|
||||
playVideoButton.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
@@ -424,26 +409,31 @@ public class VideoItemDetailFragment extends Fragment {
|
||||
}
|
||||
});
|
||||
|
||||
ImageView thumbnailView = (ImageView) activity.findViewById(R.id.detailThumbnailView);
|
||||
thumbnailView.addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
|
||||
// This is used to synchronize the thumbnailWindowButton and the playVideoButton
|
||||
// inside the ScrollView with the actual size of the thumbnail.
|
||||
@Override
|
||||
public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
|
||||
RelativeLayout.LayoutParams newWindowLayoutParams =
|
||||
(RelativeLayout.LayoutParams) thumbnailWindowLayout.getLayoutParams();
|
||||
newWindowLayoutParams.height = bottom - top;
|
||||
thumbnailWindowLayout.setLayoutParams(newWindowLayoutParams);
|
||||
// todo: Fix this workaround (probably with a better design), so that older android
|
||||
// versions don't have problems rendering the thumbnail right.
|
||||
if(Build.VERSION.SDK_INT >= 18) {
|
||||
ImageView thumbnailView = (ImageView) activity.findViewById(R.id.detailThumbnailView);
|
||||
thumbnailView.addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
|
||||
// This is used to synchronize the thumbnailWindowButton and the playVideoButton
|
||||
// inside the ScrollView with the actual size of the thumbnail.
|
||||
@Override
|
||||
public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
|
||||
RelativeLayout.LayoutParams newWindowLayoutParams =
|
||||
(RelativeLayout.LayoutParams) thumbnailWindowLayout.getLayoutParams();
|
||||
newWindowLayoutParams.height = bottom - top;
|
||||
thumbnailWindowLayout.setLayoutParams(newWindowLayoutParams);
|
||||
|
||||
//noinspection SuspiciousNameCombination
|
||||
initialThumbnailPos.set(top, left);
|
||||
|
||||
//noinspection SuspiciousNameCombination
|
||||
initialThumbnailPos.set(top, left);
|
||||
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**Returns the java.util.Locale object which corresponds to the locale set in NewPipe's preferences.
|
||||
* Currently not affected by the device's locale.*/
|
||||
private Locale getPreferredLocale() {
|
||||
|
||||
@@ -9,6 +9,7 @@ import android.os.Handler;
|
||||
import android.preference.PreferenceManager;
|
||||
import android.support.v4.app.ListFragment;
|
||||
import android.util.Log;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.widget.AbsListView;
|
||||
import android.widget.ListView;
|
||||
@@ -63,6 +64,8 @@ public class VideoItemListFragment extends ListFragment {
|
||||
private int currentRequestId = -1;
|
||||
private ListView list;
|
||||
|
||||
private View footer;
|
||||
|
||||
private class ResultRunnable implements Runnable {
|
||||
private final SearchEngine.Result result;
|
||||
private final int requestId;
|
||||
@@ -112,6 +115,15 @@ public class VideoItemListFragment extends ListFragment {
|
||||
}
|
||||
});
|
||||
}
|
||||
getActivity().runOnUiThread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
if (android.os.Build.VERSION.SDK_INT >= 19) {
|
||||
getListView().removeFooterView(footer);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -185,6 +197,8 @@ public class VideoItemListFragment extends ListFragment {
|
||||
videoListAdapter.clearVideoList();
|
||||
setListShown(false);
|
||||
startSearch(query, lastPage);
|
||||
//todo: Somehow this command is not working on older devices,
|
||||
// although it was introduced with API level 8. Test this and find a solution.
|
||||
getListView().smoothScrollToPosition(0);
|
||||
}
|
||||
|
||||
@@ -283,6 +297,9 @@ public class VideoItemListFragment extends ListFragment {
|
||||
super.onViewCreated(view, savedInstanceState);
|
||||
list = getListView();
|
||||
videoListAdapter = new VideoListAdapter(getActivity(), this);
|
||||
footer = ((LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.paginate_footer, null, false);
|
||||
|
||||
|
||||
setListAdapter(videoListAdapter);
|
||||
|
||||
// Restore the previously serialized activated item position.
|
||||
@@ -292,6 +309,7 @@ public class VideoItemListFragment extends ListFragment {
|
||||
setActivatedPosition(savedInstanceState.getInt(STATE_ACTIVATED_POSITION));
|
||||
}
|
||||
|
||||
|
||||
getListView().setOnScrollListener(new AbsListView.OnScrollListener() {
|
||||
long lastScrollDate = 0;
|
||||
|
||||
@@ -308,6 +326,7 @@ public class VideoItemListFragment extends ListFragment {
|
||||
long time = System.currentTimeMillis();
|
||||
if ((time - lastScrollDate) > 200) {
|
||||
lastScrollDate = time;
|
||||
getListView().addFooterView(footer);
|
||||
nextPage();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -33,7 +33,6 @@ import java.util.Vector;
|
||||
*/
|
||||
|
||||
class VideoListAdapter extends BaseAdapter {
|
||||
|
||||
private final Context context;
|
||||
private final VideoInfoItemViewCreator viewCreator;
|
||||
private Vector<VideoPreviewInfo> videoList = new Vector<>();
|
||||
@@ -43,6 +42,8 @@ class VideoListAdapter extends BaseAdapter {
|
||||
public VideoListAdapter(Context context, VideoItemListFragment videoListFragment) {
|
||||
viewCreator = new VideoInfoItemViewCreator(LayoutInflater.from(context));
|
||||
this.listView = videoListFragment.getListView();
|
||||
this.listView.setDivider(null);
|
||||
this.listView.setDividerHeight(0);
|
||||
this.context = context;
|
||||
}
|
||||
|
||||
|
||||
@@ -26,6 +26,7 @@ import org.schabi.newpipe.services.youtube.YoutubeService;
|
||||
|
||||
/**Provides access to the video streaming services supported by NewPipe.
|
||||
* Currently only Youtube until the API becomes more stable.*/
|
||||
|
||||
@SuppressWarnings("ALL")
|
||||
public class ServiceList {
|
||||
private static final String TAG = ServiceList.class.toString();
|
||||
|
||||
@@ -30,6 +30,6 @@ public interface StreamingService {
|
||||
|
||||
/**When a VIEW_ACTION is caught this function will test if the url delivered within the calling
|
||||
Intent was meant to be watched with this Service.
|
||||
Return false if this service shall not allow to be callean through ACTIONs.*/
|
||||
Return false if this service shall not allow to be called through ACTIONs.*/
|
||||
boolean acceptUrl(String videoUrl);
|
||||
}
|
||||
|
||||
@@ -23,6 +23,7 @@ package org.schabi.newpipe.services;
|
||||
import org.schabi.newpipe.VideoInfo;
|
||||
|
||||
/**Scrapes information from a video streaming service (eg, YouTube).*/
|
||||
|
||||
@SuppressWarnings("ALL")
|
||||
public abstract class VideoExtractor {
|
||||
protected final String pageUrl;
|
||||
|
||||
@@ -109,7 +109,7 @@ public class YoutubeSearchEngine implements SearchEngine {
|
||||
Matcher m = p.matcher(resultItem.webpage_url);
|
||||
resultItem.id=m.group(1);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
//e.printStackTrace();
|
||||
}
|
||||
resultItem.title = dl.text();
|
||||
|
||||
|
||||
@@ -75,7 +75,7 @@ public class YoutubeVideoExtractor extends VideoExtractor {
|
||||
} catch (Exception e) {//if this fails, the video is most likely not available.
|
||||
// Determining why is done later.
|
||||
videoInfo.videoAvailableStatus = VideoInfo.VIDEO_UNAVAILABLE;
|
||||
Log.d(TAG, "Could not load JSON data for Youtube video \""+pageUrl+"\". This most likely means the video is unavailable");
|
||||
Log.e(TAG, "Could not load JSON data for Youtube video \""+pageUrl+"\". This most likely means the video is unavailable");
|
||||
}
|
||||
|
||||
//----------------------------------
|
||||
@@ -94,7 +94,7 @@ public class YoutubeVideoExtractor extends VideoExtractor {
|
||||
}
|
||||
decryptionCode = loadDecryptionCode(playerUrl);
|
||||
} catch (Exception e){
|
||||
Log.d(TAG, "Could not load decryption code for the Youtube service.");
|
||||
Log.e(TAG, "Could not load decryption code for the Youtube service.");
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
@@ -323,10 +323,10 @@ public class YoutubeVideoExtractor extends VideoExtractor {
|
||||
}
|
||||
id = matchGroup1(pat, url);
|
||||
if(!id.isEmpty()){
|
||||
Log.i(TAG, "string \""+url+"\" matches!");
|
||||
//Log.i(TAG, "string \""+url+"\" matches!");
|
||||
return id;
|
||||
}
|
||||
Log.i(TAG, "string \""+url+"\" does not match.");
|
||||
//Log.i(TAG, "string \""+url+"\" does not match.");
|
||||
return "";
|
||||
}
|
||||
|
||||
@@ -358,7 +358,7 @@ public class YoutubeVideoExtractor extends VideoExtractor {
|
||||
int hours = (hoursString.isEmpty() ? 0 : Integer.parseInt(hoursString));
|
||||
|
||||
int ret = seconds + (60*minutes) + (3600*hours);//don't trust BODMAS!
|
||||
Log.d(TAG, "derived timestamp value:"+ret);
|
||||
//Log.d(TAG, "derived timestamp value:"+ret);
|
||||
return ret;
|
||||
//the ordering varies internationally
|
||||
}//else, return default 0
|
||||
@@ -371,6 +371,16 @@ public class YoutubeVideoExtractor extends VideoExtractor {
|
||||
//todo: replace this with a call to getVideoId, if possible
|
||||
videoInfo.id = matchGroup1("v=([0-9a-zA-Z_-]{11})", pageUrl);
|
||||
|
||||
if(videoInfo.audioStreams == null
|
||||
|| videoInfo.audioStreams.length == 0) {
|
||||
Log.e(TAG, "uninitialised audio streams!");
|
||||
}
|
||||
|
||||
if(videoInfo.videoStreams == null
|
||||
|| videoInfo.videoStreams.length == 0) {
|
||||
Log.e(TAG, "uninitialised video streams!");
|
||||
}
|
||||
|
||||
videoInfo.age_limit = 0;
|
||||
|
||||
//average rating
|
||||
@@ -445,13 +455,14 @@ public class YoutubeVideoExtractor extends VideoExtractor {
|
||||
try {
|
||||
XmlPullParser parser = Xml.newPullParser();
|
||||
parser.setInput(new StringReader(dashDoc));
|
||||
int eventType = parser.getEventType();
|
||||
String tagName = "";
|
||||
String currentMimeType = "";
|
||||
int currentBandwidth = -1;
|
||||
int currentSamplingRate = -1;
|
||||
boolean currentTagIsBaseUrl = false;
|
||||
while(eventType != XmlPullParser.END_DOCUMENT) {
|
||||
for(int eventType = parser.getEventType();
|
||||
eventType != XmlPullParser.END_DOCUMENT;
|
||||
eventType = parser.next() ) {
|
||||
switch(eventType) {
|
||||
case XmlPullParser.START_TAG:
|
||||
tagName = parser.getName();
|
||||
@@ -465,8 +476,8 @@ public class YoutubeVideoExtractor extends VideoExtractor {
|
||||
} else if(tagName.equals("BaseURL")) {
|
||||
currentTagIsBaseUrl = true;
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case XmlPullParser.TEXT:
|
||||
if(currentTagIsBaseUrl &&
|
||||
(currentMimeType.contains("audio"))) {
|
||||
@@ -479,16 +490,14 @@ public class YoutubeVideoExtractor extends VideoExtractor {
|
||||
audioStreams.add(new VideoInfo.AudioStream(parser.getText(),
|
||||
format, currentBandwidth, currentSamplingRate));
|
||||
}
|
||||
//missing break here?
|
||||
case XmlPullParser.END_TAG:
|
||||
if(tagName.equals("AdaptationSet")) {
|
||||
currentMimeType = "";
|
||||
} else if(tagName.equals("BaseURL")) {
|
||||
currentTagIsBaseUrl = false;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
}//no break needed here
|
||||
}
|
||||
eventType = parser.next();
|
||||
}
|
||||
} catch(Exception e) {
|
||||
e.printStackTrace();
|
||||
@@ -513,8 +522,8 @@ public class YoutubeVideoExtractor extends VideoExtractor {
|
||||
//this page causes the NullPointerException, after finding it by searching for "tjvg":
|
||||
//https://www.youtube.com/watch?v=Uqg0aEhLFAg
|
||||
String views = li.select("span.view-count").first().text();
|
||||
Log.i(TAG, "title:"+info.title);
|
||||
Log.i(TAG, "view count:"+views);
|
||||
//Log.i(TAG, "title:"+info.title);
|
||||
//Log.i(TAG, "view count:"+views);
|
||||
try {
|
||||
info.view_count = Long.parseLong(li.select("span.view-count")
|
||||
.first().text().replaceAll("[^\\d]", ""));
|
||||
@@ -551,9 +560,8 @@ public class YoutubeVideoExtractor extends VideoExtractor {
|
||||
try {
|
||||
decryptionFuncName = matchGroup1("\\.sig\\|\\|([a-zA-Z0-9$]+)\\(", playerCode);
|
||||
|
||||
String functionPattern = "(var "+ decryptionFuncName.replace("$", "\\$") +"=function\\([a-zA-Z0-9_]*\\)\\{.+?\\})";
|
||||
decryptionFunc = matchGroup1(functionPattern, playerCode);
|
||||
decryptionFunc += ";";
|
||||
String functionPattern = "(" + decryptionFuncName.replace("$", "\\$") +"=function\\([a-zA-Z0-9_]*\\)\\{.+?\\})";
|
||||
decryptionFunc = "var " + matchGroup1(functionPattern, playerCode) + ";";
|
||||
|
||||
helperObjectName = matchGroup1(";([A-Za-z0-9_\\$]{2})\\...\\(", decryptionFunc);
|
||||
|
||||
@@ -583,10 +591,7 @@ public class YoutubeVideoExtractor extends VideoExtractor {
|
||||
e.printStackTrace();
|
||||
}
|
||||
Context.exit();
|
||||
if(result != null)
|
||||
return result.toString();
|
||||
else
|
||||
return "";
|
||||
return (result == null ? "" : result.toString());
|
||||
}
|
||||
|
||||
private String cleanUrl(String complexUrl) {
|
||||
@@ -601,7 +606,7 @@ public class YoutubeVideoExtractor extends VideoExtractor {
|
||||
return mat.group(1);
|
||||
}
|
||||
else {
|
||||
Log.w(TAG, "failed to find pattern \""+pattern+"\" inside of \""+input+"\"");
|
||||
Log.e(TAG, "failed to find pattern \""+pattern+"\" inside of \""+input+"\"");
|
||||
new Exception("failed to find pattern \""+pattern+"\"").printStackTrace();
|
||||
return "";
|
||||
}
|
||||
|
||||
BIN
app/src/main/res/drawable-hdpi/ic_play_arrow_white_48dp.png
Normal file
|
After Width: | Height: | Size: 283 B |
BIN
app/src/main/res/drawable-mdpi/ic_play_arrow_white_48dp.png
Normal file
|
After Width: | Height: | Size: 220 B |
|
Before Width: | Height: | Size: 870 B After Width: | Height: | Size: 4.1 KiB |
|
Before Width: | Height: | Size: 783 B After Width: | Height: | Size: 3.6 KiB |
BIN
app/src/main/res/drawable-xhdpi/ic_play_arrow_white_48dp.png
Normal file
|
After Width: | Height: | Size: 343 B |
BIN
app/src/main/res/drawable-xxhdpi/ic_play_arrow_white_48dp.png
Normal file
|
After Width: | Height: | Size: 461 B |
BIN
app/src/main/res/drawable-xxxhdpi/ic_play_arrow_white_48dp.png
Normal file
|
After Width: | Height: | Size: 605 B |
219
app/src/main/res/layout-v18/fragment_videoitem_detail.xml
Normal file
@@ -0,0 +1,219 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
tools:context=".VideoItemDetailFragment"
|
||||
android:textIsSelectable="true"
|
||||
style="?android:attr/textAppearanceLarge"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:id="@+id/videoitem_detail">
|
||||
|
||||
<ImageView android:id="@+id/detailThumbnailView"
|
||||
android:contentDescription="@string/detailThumbnailViewDescription"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:scaleType="centerCrop"
|
||||
android:adjustViewBounds="true"
|
||||
android:layout_alignParentLeft="true"
|
||||
android:layout_alignParentStart="true"
|
||||
android:layout_alignParentTop="true"
|
||||
android:background="@android:color/black"
|
||||
android:src="@drawable/dummy_thumbnail_dark"
|
||||
tools:ignore="RtlHardcoded" />
|
||||
|
||||
<ScrollView
|
||||
android:id="@+id/detailMainContent"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:visibility="visible">
|
||||
|
||||
<RelativeLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<RelativeLayout
|
||||
android:id="@+id/detailVideoThumbnailWindowLayout"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/video_item_detail_thumbnail_image_height"
|
||||
android:background="?attr/selectableItemBackground">
|
||||
|
||||
<ProgressBar android:id="@+id/detailProgressBar"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_centerInParent="true"
|
||||
android:indeterminate="true"/>
|
||||
|
||||
<android.support.design.widget.FloatingActionButton
|
||||
android:id="@+id/playVideoButton"
|
||||
android:visibility="invisible"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_centerInParent="true"
|
||||
app:backgroundTint="@color/primaryColorYoutube"
|
||||
android:src="@drawable/ic_play_arrow_black"
|
||||
android:layout_margin="@dimen/video_item_detail_play_fab_margin"/>
|
||||
|
||||
<Button
|
||||
android:id="@+id/detailVideoThumbnailWindowBackgroundButton"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:background="?attr/selectableItemBackground"/>
|
||||
|
||||
</RelativeLayout>
|
||||
|
||||
<RelativeLayout android:id="@+id/detailTextContentLayout"
|
||||
android:visibility="invisible"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:padding="@dimen/video_item_detail_info_text_padding"
|
||||
android:layout_below="@id/detailVideoThumbnailWindowLayout"
|
||||
android:background="@color/background_gray">
|
||||
|
||||
<TextView android:id="@+id/detailVideoTitleView"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignParentLeft="true"
|
||||
android:layout_alignParentStart="true"
|
||||
android:textStyle="bold"
|
||||
android:textSize="@dimen/video_item_detail_title_text_size"
|
||||
android:textAppearance="?android:attr/textAppearanceLarge"
|
||||
tools:ignore="RtlHardcoded" />
|
||||
|
||||
<ImageView android:id="@+id/detailUploaderThumbnailView"
|
||||
android:contentDescription="@string/detailUploaderThumbnailViewDescription"
|
||||
android:layout_width="@dimen/video_item_detail_uploader_image_size"
|
||||
android:layout_height="@dimen/video_item_detail_uploader_image_size"
|
||||
android:layout_below="@id/detailVideoTitleView"
|
||||
android:layout_alignParentLeft="true"
|
||||
android:layout_alignParentStart="true"
|
||||
android:src="@drawable/buddy"
|
||||
tools:ignore="RtlHardcoded" />
|
||||
|
||||
<TextView android:id="@+id/detailUploaderView"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@id/detailUploaderThumbnailView"
|
||||
android:layout_alignParentLeft="true"
|
||||
android:layout_alignParentStart="true"
|
||||
android:textStyle="bold"
|
||||
android:textSize="@dimen/video_item_detail_uploader_text_size"
|
||||
android:textAppearance="?android:attr/textAppearanceLarge"
|
||||
tools:ignore="RtlHardcoded" />
|
||||
|
||||
<TextView android:id="@+id/detailViewCountView"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@id/detailVideoTitleView"
|
||||
android:layout_alignParentRight="true"
|
||||
android:layout_alignParentEnd="true"
|
||||
android:textSize="@dimen/video_item_detail_views_text_size"
|
||||
android:textAppearance="?android:attr/textAppearanceLarge"
|
||||
tools:ignore="RtlHardcoded" />
|
||||
|
||||
<TextView android:id="@+id/detailThumbsDownCountView"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@id/detailViewCountView"
|
||||
android:layout_alignParentRight="true"
|
||||
android:layout_alignParentEnd="true"
|
||||
android:textSize="@dimen/video_item_detail_likes_text_size"
|
||||
android:textAppearance="?android:attr/textAppearanceMedium"
|
||||
tools:ignore="RtlHardcoded" />
|
||||
|
||||
<ImageView android:id="@+id/detailThumbsDownImgView"
|
||||
android:contentDescription="@string/detailThumbsDownImgViewDescription"
|
||||
android:layout_width="@dimen/video_item_detail_like_image_width"
|
||||
android:layout_height="@dimen/video_item_detail_like_image_height"
|
||||
android:layout_below="@id/detailViewCountView"
|
||||
android:layout_toLeftOf="@id/detailThumbsDownCountView"
|
||||
android:layout_toStartOf="@id/detailThumbsDownCountView"
|
||||
android:layout_marginLeft="@dimen/video_item_detail_like_margin"
|
||||
android:src="@drawable/thumbs_down"
|
||||
tools:ignore="RtlHardcoded" />
|
||||
|
||||
<TextView android:id="@+id/detailThumbsUpCountView"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@id/detailViewCountView"
|
||||
android:layout_toLeftOf="@id/detailThumbsDownImgView"
|
||||
android:layout_toStartOf="@id/detailThumbsDownImgView"
|
||||
android:textSize="@dimen/video_item_detail_likes_text_size"
|
||||
android:textAppearance="?android:attr/textAppearanceMedium"
|
||||
tools:ignore="RtlHardcoded" />
|
||||
|
||||
<ImageView android:id="@+id/detailThumbsUpImgView"
|
||||
android:contentDescription="@string/detailThumbsUpImgViewDescription"
|
||||
android:layout_width="@dimen/video_item_detail_like_image_width"
|
||||
android:layout_height="@dimen/video_item_detail_like_image_height"
|
||||
android:layout_below="@id/detailViewCountView"
|
||||
android:layout_toLeftOf="@id/detailThumbsUpCountView"
|
||||
android:layout_toStartOf="@id/detailThumbsUpCountView"
|
||||
android:src="@drawable/thumbs_up"
|
||||
tools:ignore="RtlHardcoded" />
|
||||
|
||||
<TextView android:id="@+id/detailUploadDateView"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@id/detailUploaderView"
|
||||
android:layout_alignParentLeft="true"
|
||||
android:layout_alignParentStart="true"
|
||||
android:textSize="@dimen/video_item_detail_upload_date_text_size"
|
||||
android:textAppearance="?android:attr/textAppearanceLarge"
|
||||
tools:ignore="RtlHardcoded" />
|
||||
|
||||
<TextView android:id="@+id/detailDescriptionView"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@id/detailUploadDateView"
|
||||
android:layout_alignParentLeft="true"
|
||||
android:layout_alignParentStart="true"
|
||||
android:textSize="@dimen/video_item_detail_description_text_size"
|
||||
android:textAppearance="?android:attr/textAppearanceMedium"
|
||||
tools:ignore="RtlHardcoded" />
|
||||
|
||||
|
||||
<RelativeLayout android:id="@+id/detailNextVideoRootLayout"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:padding="@dimen/video_item_detail_info_text_padding"
|
||||
android:layout_below="@id/detailDescriptionView" >
|
||||
|
||||
<TextView android:id="@+id/detailNextVideoTitle"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_centerHorizontal="true"
|
||||
android:textSize="@dimen/video_item_detail_next_text_size"
|
||||
android:textAppearance="?android:attr/textAppearanceMedium"
|
||||
android:text="@string/nextVideoTitle"
|
||||
android:textAllCaps="true" />
|
||||
|
||||
<RelativeLayout android:id="@+id/detailNextVidButtonAndContentLayout"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@id/detailNextVideoTitle">
|
||||
<FrameLayout
|
||||
android:id="@+id/detailNextVideoFrame"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"/>
|
||||
<Button
|
||||
android:id="@+id/detailNextVideoButton"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_alignTop="@id/detailNextVideoFrame"
|
||||
android:layout_alignBottom="@id/detailNextVideoFrame"
|
||||
android:background="?attr/selectableItemBackground"/>
|
||||
</RelativeLayout>
|
||||
<Button android:id="@+id/detailShowSimilarButton"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@id/detailNextVidButtonAndContentLayout"
|
||||
android:textSize="@dimen/video_item_detail_similar_text_size"
|
||||
android:text="@string/showSimilarVideosButtonText"/>
|
||||
</RelativeLayout>
|
||||
|
||||
</RelativeLayout>
|
||||
</RelativeLayout>
|
||||
</ScrollView>
|
||||
</RelativeLayout>
|
||||
@@ -14,12 +14,14 @@
|
||||
android:contentDescription="@string/detailThumbnailViewDescription"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:scaleType="fitCenter"
|
||||
android:scaleType="centerCrop"
|
||||
android:adjustViewBounds="true"
|
||||
android:layout_alignParentLeft="true"
|
||||
android:layout_alignParentStart="true"
|
||||
android:layout_alignParentTop="true"
|
||||
android:background="@android:color/black"
|
||||
android:src="@drawable/dummy_thumbnail_dark"/>
|
||||
android:src="@drawable/dummy_thumbnail_dark"
|
||||
tools:ignore="RtlHardcoded" />
|
||||
|
||||
<ScrollView
|
||||
android:id="@+id/detailMainContent"
|
||||
@@ -34,7 +36,7 @@
|
||||
<RelativeLayout
|
||||
android:id="@+id/detailVideoThumbnailWindowLayout"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="250dp"
|
||||
android:layout_height="@dimen/video_item_detail_thumbnail_image_height"
|
||||
android:background="?attr/selectableItemBackground">
|
||||
|
||||
<ProgressBar android:id="@+id/detailProgressBar"
|
||||
@@ -42,19 +44,18 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_centerInParent="true"
|
||||
android:indeterminate="true"
|
||||
android:indeterminateTint="@color/primaryColorDarkYoutube"
|
||||
android:indeterminateTint="@color/primaryColorYoutube"
|
||||
android:indeterminateTintMode="src_in"/>
|
||||
|
||||
<android.support.design.widget.FloatingActionButton
|
||||
android:id="@+id/playVideoButton"
|
||||
android:visibility="invisible"
|
||||
android:layout_width="wrap_content"
|
||||
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_centerInParent="true"
|
||||
app:backgroundTint="@color/primaryColorYoutube"
|
||||
android:src="@drawable/ic_play_arrow_black"
|
||||
android:layout_margin="20dp"/>
|
||||
android:layout_margin="@dimen/video_item_detail_play_fab_margin"/>
|
||||
|
||||
<Button
|
||||
android:id="@+id/detailVideoThumbnailWindowBackgroundButton"
|
||||
@@ -68,145 +69,152 @@
|
||||
android:visibility="invisible"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingTop="5dp"
|
||||
android:paddingBottom="5dp"
|
||||
android:paddingRight="5dp"
|
||||
android:paddingLeft="5dp"
|
||||
android:padding="@dimen/video_item_detail_info_text_padding"
|
||||
android:layout_below="@id/detailVideoThumbnailWindowLayout"
|
||||
android:background="@color/background_gray">
|
||||
|
||||
<TextView android:id="@+id/detailVideoTitleView"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignParentLeft="true"
|
||||
android:layout_alignParentStart="true"
|
||||
android:textStyle="bold"
|
||||
android:paddingBottom="3dp"
|
||||
android:textSize="@dimen/text_video_title_size"
|
||||
android:textAppearance="?android:attr/textAppearanceLarge"/>
|
||||
android:textSize="@dimen/video_item_detail_title_text_size"
|
||||
android:textAppearance="?android:attr/textAppearanceLarge"
|
||||
tools:ignore="RtlHardcoded" />
|
||||
|
||||
<ImageView android:id="@+id/detailUploaderThumbnailView"
|
||||
android:contentDescription="@string/detailUploaderThumbnailViewDescription"
|
||||
android:layout_width="80dp"
|
||||
android:layout_height="80dp"
|
||||
android:layout_width="@dimen/video_item_detail_uploader_image_size"
|
||||
android:layout_height="@dimen/video_item_detail_uploader_image_size"
|
||||
android:layout_below="@id/detailVideoTitleView"
|
||||
android:layout_alignParentLeft="true"
|
||||
android:layout_alignParentStart="true"
|
||||
android:src="@drawable/buddy" />
|
||||
android:src="@drawable/buddy"
|
||||
tools:ignore="RtlHardcoded" />
|
||||
|
||||
<TextView android:id="@+id/detailUploaderView"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@id/detailUploaderThumbnailView"
|
||||
android:layout_alignParentLeft="true"
|
||||
android:layout_alignParentStart="true"
|
||||
android:textStyle="bold"
|
||||
android:textSize="@dimen/text_video_uploader_size"
|
||||
android:textAppearance="?android:attr/textAppearanceLarge" />
|
||||
android:textSize="@dimen/video_item_detail_uploader_text_size"
|
||||
android:textAppearance="?android:attr/textAppearanceLarge"
|
||||
tools:ignore="RtlHardcoded" />
|
||||
|
||||
<TextView android:id="@+id/detailViewCountView"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingBottom="3dp"
|
||||
android:layout_below="@id/detailVideoTitleView"
|
||||
android:layout_alignParentRight="true"
|
||||
android:layout_alignParentEnd="true"
|
||||
android:textSize="@dimen/text_video_views_size"
|
||||
android:textAppearance="?android:attr/textAppearanceLarge" />
|
||||
android:textSize="@dimen/video_item_detail_views_text_size"
|
||||
android:textAppearance="?android:attr/textAppearanceLarge"
|
||||
tools:ignore="RtlHardcoded" />
|
||||
|
||||
<TextView android:id="@+id/detailThumbsDownCountView"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@id/detailViewCountView"
|
||||
android:layout_alignParentRight="true"
|
||||
android:layout_alignParentEnd="true"
|
||||
android:textSize="@dimen/text_video_like_size"
|
||||
android:paddingRight="5dp"
|
||||
android:paddingLeft="5dp"
|
||||
android:textAppearance="?android:attr/textAppearanceMedium" />
|
||||
android:textSize="@dimen/video_item_detail_likes_text_size"
|
||||
android:textAppearance="?android:attr/textAppearanceMedium"
|
||||
tools:ignore="RtlHardcoded" />
|
||||
|
||||
<ImageView android:id="@+id/detailThumbsDownImgView"
|
||||
android:contentDescription="@string/detailThumbsDownImgViewDescription"
|
||||
android:layout_width="30dp"
|
||||
android:layout_height="15dp"
|
||||
android:layout_width="@dimen/video_item_detail_like_image_width"
|
||||
android:layout_height="@dimen/video_item_detail_like_image_height"
|
||||
android:layout_below="@id/detailViewCountView"
|
||||
android:layout_toLeftOf="@id/detailThumbsDownCountView"
|
||||
android:layout_toStartOf="@id/detailThumbsDownCountView"
|
||||
android:paddingRight="5dp"
|
||||
android:paddingLeft="5dp"
|
||||
android:src="@drawable/thumbs_down" />
|
||||
android:layout_marginLeft="@dimen/video_item_detail_like_margin"
|
||||
android:src="@drawable/thumbs_down"
|
||||
tools:ignore="RtlHardcoded" />
|
||||
|
||||
<TextView android:id="@+id/detailThumbsUpCountView"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@id/detailViewCountView"
|
||||
android:layout_toLeftOf="@id/detailThumbsDownImgView"
|
||||
android:layout_toStartOf="@id/detailThumbsDownImgView"
|
||||
android:paddingRight="5dp"
|
||||
android:paddingLeft="5dp"
|
||||
android:textSize="@dimen/text_video_like_size"
|
||||
android:textAppearance="?android:attr/textAppearanceMedium"/>
|
||||
android:textSize="@dimen/video_item_detail_likes_text_size"
|
||||
android:textAppearance="?android:attr/textAppearanceMedium"
|
||||
tools:ignore="RtlHardcoded" />
|
||||
|
||||
<ImageView android:id="@+id/detailThumbsUpImgView"
|
||||
android:contentDescription="@string/detailThumbsUpImgViewDescription"
|
||||
android:layout_width="30dp"
|
||||
android:layout_height="15dp"
|
||||
android:layout_width="@dimen/video_item_detail_like_image_width"
|
||||
android:layout_height="@dimen/video_item_detail_like_image_height"
|
||||
android:layout_below="@id/detailViewCountView"
|
||||
android:layout_toStartOf="@id/detailThumbsUpImgView"
|
||||
android:paddingRight="5dp"
|
||||
android:paddingLeft="5dp"
|
||||
android:src="@drawable/thumbs_up" />
|
||||
android:layout_toLeftOf="@id/detailThumbsUpCountView"
|
||||
android:layout_toStartOf="@id/detailThumbsUpCountView"
|
||||
android:src="@drawable/thumbs_up"
|
||||
tools:ignore="RtlHardcoded" />
|
||||
|
||||
<TextView android:id="@+id/detailUploadDateView"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@id/detailUploaderView"
|
||||
android:layout_alignParentLeft="true"
|
||||
android:layout_alignParentStart="true"
|
||||
android:textSize="@dimen/text_video_upload_date_size"
|
||||
android:textAppearance="?android:attr/textAppearanceLarge" />
|
||||
android:textSize="@dimen/video_item_detail_upload_date_text_size"
|
||||
android:textAppearance="?android:attr/textAppearanceLarge"
|
||||
tools:ignore="RtlHardcoded" />
|
||||
|
||||
<TextView android:id="@+id/detailDescriptionView"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@id/detailUploadDateView"
|
||||
android:layout_alignParentLeft="true"
|
||||
android:layout_alignParentStart="true"
|
||||
android:textSize="@dimen/text_video_description_size"
|
||||
android:textAppearance="?android:attr/textAppearanceMedium" />
|
||||
android:textSize="@dimen/video_item_detail_description_text_size"
|
||||
android:textAppearance="?android:attr/textAppearanceMedium"
|
||||
tools:ignore="RtlHardcoded" />
|
||||
|
||||
|
||||
<RelativeLayout
|
||||
android:id="@+id/detailNextVideoRootLayout"
|
||||
<RelativeLayout android:id="@+id/detailNextVideoRootLayout"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingTop="10dp"
|
||||
android:paddingBottom="10dp"
|
||||
android:paddingLeft="5dp"
|
||||
android:paddingRight="5dp"
|
||||
android:padding="@dimen/video_item_detail_info_text_padding"
|
||||
android:layout_below="@id/detailDescriptionView" >
|
||||
|
||||
<TextView android:id="@+id/detailNextVideoTitle"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignParentStart="true"
|
||||
android:textSize="@dimen/text_video_upload_date_size"
|
||||
android:layout_centerHorizontal="true"
|
||||
android:textSize="@dimen/video_item_detail_next_text_size"
|
||||
android:textAppearance="?android:attr/textAppearanceMedium"
|
||||
android:textColor="@android:color/black"
|
||||
android:text="@string/nextVideoTitle"
|
||||
/>
|
||||
<FrameLayout
|
||||
android:id="@+id/detailNextVideoFrame"
|
||||
android:textAllCaps="true" />
|
||||
|
||||
<RelativeLayout android:id="@+id/detailNextVidButtonAndContentLayout"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@id/detailNextVideoTitle"/>
|
||||
<Button
|
||||
android:id="@+id/detailNextVideoButton"
|
||||
android:layout_below="@id/detailNextVideoTitle">
|
||||
<FrameLayout
|
||||
android:id="@+id/detailNextVideoFrame"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"/>
|
||||
<Button
|
||||
android:id="@+id/detailNextVideoButton"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_alignTop="@id/detailNextVideoFrame"
|
||||
android:layout_alignBottom="@id/detailNextVideoFrame"
|
||||
android:background="?attr/selectableItemBackground"/>
|
||||
</RelativeLayout>
|
||||
<Button android:id="@+id/detailShowSimilarButton"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_alignTop="@id/detailNextVideoFrame"
|
||||
android:layout_alignBottom="@id/detailNextVideoFrame"
|
||||
android:background="?attr/selectableItemBackground"/>
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@id/detailNextVidButtonAndContentLayout"
|
||||
android:textSize="@dimen/video_item_detail_similar_text_size"
|
||||
android:text="@string/showSimilarVideosButtonText"/>
|
||||
</RelativeLayout>
|
||||
|
||||
<Button android:id="@+id/detailShowSimilarButton"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginLeft="6dp"
|
||||
android:layout_marginRight="6dp"
|
||||
android:layout_below="@id/detailNextVideoRootLayout"
|
||||
android:text="@string/showSimilarVideosButtonText"/>
|
||||
</RelativeLayout>
|
||||
</RelativeLayout>
|
||||
</ScrollView>
|
||||
|
||||
@@ -10,6 +10,6 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
tools:context=".VideoItemListActivity"
|
||||
tools:layout="@android:layout/list_content"/>
|
||||
tools:layout="@android:layout/list_content" />
|
||||
|
||||
</LinearLayout>
|
||||
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
tools:context=".VideoItemDetailFragment"
|
||||
@@ -10,23 +10,12 @@
|
||||
android:layout_height="match_parent"
|
||||
android:id="@+id/videoitem_detail">
|
||||
|
||||
<ImageView android:id="@+id/detailThumbnailView"
|
||||
android:contentDescription="@string/detailThumbnailViewDescription"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:scaleType="fitCenter"
|
||||
android:adjustViewBounds="true"
|
||||
android:layout_alignParentLeft="true"
|
||||
android:layout_alignParentStart="true"
|
||||
android:layout_alignParentTop="true"
|
||||
android:background="@android:color/black"
|
||||
android:src="@drawable/dummy_thumbnail_dark"/>
|
||||
|
||||
<ScrollView
|
||||
android:id="@+id/detailMainContent"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:visibility="visible">
|
||||
android:visibility="visible"
|
||||
tools:ignore="UselessParent">
|
||||
|
||||
<RelativeLayout
|
||||
android:layout_width="match_parent"
|
||||
@@ -35,9 +24,21 @@
|
||||
<RelativeLayout
|
||||
android:id="@+id/detailVideoThumbnailWindowLayout"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="250dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="?attr/selectableItemBackground">
|
||||
|
||||
<ImageView android:id="@+id/detailThumbnailView"
|
||||
android:contentDescription="@string/detailThumbnailViewDescription"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:scaleType="fitCenter"
|
||||
android:adjustViewBounds="true"
|
||||
android:layout_alignParentLeft="true"
|
||||
android:layout_alignParentStart="true"
|
||||
android:layout_alignParentTop="true"
|
||||
android:background="@android:color/black"
|
||||
android:src="@drawable/dummy_thumbnail_dark"/>
|
||||
|
||||
<ProgressBar android:id="@+id/detailProgressBar"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
@@ -48,12 +49,11 @@
|
||||
android:id="@+id/playVideoButton"
|
||||
android:visibility="invisible"
|
||||
android:layout_width="wrap_content"
|
||||
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_centerInParent="true"
|
||||
app:backgroundTint="@color/primaryColorYoutube"
|
||||
android:src="@drawable/ic_play_arrow_black"
|
||||
android:layout_margin="20dp"/>
|
||||
android:layout_margin="@dimen/video_item_detail_play_fab_margin"/>
|
||||
|
||||
<Button
|
||||
android:id="@+id/detailVideoThumbnailWindowBackgroundButton"
|
||||
@@ -67,10 +67,7 @@
|
||||
android:visibility="invisible"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingTop="5dp"
|
||||
android:paddingBottom="5dp"
|
||||
android:paddingRight="5dp"
|
||||
android:paddingLeft="5dp"
|
||||
android:padding="@dimen/video_item_detail_info_text_padding"
|
||||
android:layout_below="@id/detailVideoThumbnailWindowLayout"
|
||||
android:background="@color/background_gray">
|
||||
|
||||
@@ -80,14 +77,13 @@
|
||||
android:layout_alignParentLeft="true"
|
||||
android:layout_alignParentStart="true"
|
||||
android:textStyle="bold"
|
||||
android:paddingBottom="3dp"
|
||||
android:textSize="@dimen/text_video_title_size"
|
||||
android:textSize="@dimen/video_item_detail_title_text_size"
|
||||
android:textAppearance="?android:attr/textAppearanceLarge"/>
|
||||
|
||||
<ImageView android:id="@+id/detailUploaderThumbnailView"
|
||||
android:contentDescription="@string/detailUploaderThumbnailViewDescription"
|
||||
android:layout_width="80dp"
|
||||
android:layout_height="80dp"
|
||||
android:layout_width="@dimen/video_item_detail_uploader_image_size"
|
||||
android:layout_height="@dimen/video_item_detail_uploader_image_size"
|
||||
android:layout_below="@id/detailVideoTitleView"
|
||||
android:layout_alignParentLeft="true"
|
||||
android:layout_alignParentStart="true"
|
||||
@@ -100,17 +96,16 @@
|
||||
android:layout_alignParentLeft="true"
|
||||
android:layout_alignParentStart="true"
|
||||
android:textStyle="bold"
|
||||
android:textSize="@dimen/text_video_uploader_size"
|
||||
android:textSize="@dimen/video_item_detail_uploader_text_size"
|
||||
android:textAppearance="?android:attr/textAppearanceLarge" />
|
||||
|
||||
<TextView android:id="@+id/detailViewCountView"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingBottom="3dp"
|
||||
android:layout_below="@id/detailVideoTitleView"
|
||||
android:layout_alignParentRight="true"
|
||||
android:layout_alignParentEnd="true"
|
||||
android:textSize="@dimen/text_video_views_size"
|
||||
android:textSize="@dimen/video_item_detail_views_text_size"
|
||||
android:textAppearance="?android:attr/textAppearanceLarge" />
|
||||
|
||||
<TextView android:id="@+id/detailThumbsDownCountView"
|
||||
@@ -119,20 +114,16 @@
|
||||
android:layout_below="@id/detailViewCountView"
|
||||
android:layout_alignParentRight="true"
|
||||
android:layout_alignParentEnd="true"
|
||||
android:textSize="@dimen/text_video_like_size"
|
||||
android:paddingRight="5dp"
|
||||
android:paddingLeft="5dp"
|
||||
android:textSize="@dimen/video_item_detail_likes_text_size"
|
||||
android:textAppearance="?android:attr/textAppearanceMedium" />
|
||||
|
||||
<ImageView android:id="@+id/detailThumbsDownImgView"
|
||||
android:contentDescription="@string/detailThumbsDownImgViewDescription"
|
||||
android:layout_width="30dp"
|
||||
android:layout_height="15dp"
|
||||
android:layout_width="@dimen/video_item_detail_like_image_width"
|
||||
android:layout_height="@dimen/video_item_detail_like_image_height"
|
||||
android:layout_below="@id/detailViewCountView"
|
||||
android:layout_toLeftOf="@id/detailThumbsDownCountView"
|
||||
android:layout_toStartOf="@id/detailThumbsDownCountView"
|
||||
android:paddingRight="5dp"
|
||||
android:paddingLeft="5dp"
|
||||
android:src="@drawable/thumbs_down" />
|
||||
|
||||
<TextView android:id="@+id/detailThumbsUpCountView"
|
||||
@@ -141,20 +132,16 @@
|
||||
android:layout_below="@id/detailViewCountView"
|
||||
android:layout_toLeftOf="@id/detailThumbsDownImgView"
|
||||
android:layout_toStartOf="@id/detailThumbsDownImgView"
|
||||
android:paddingRight="5dp"
|
||||
android:paddingLeft="5dp"
|
||||
android:textSize="@dimen/text_video_like_size"
|
||||
android:textSize="@dimen/video_item_detail_likes_text_size"
|
||||
android:textAppearance="?android:attr/textAppearanceMedium"/>
|
||||
|
||||
<ImageView android:id="@+id/detailThumbsUpImgView"
|
||||
android:contentDescription="@string/detailThumbsUpImgViewDescription"
|
||||
android:layout_width="30dp"
|
||||
android:layout_height="15dp"
|
||||
android:layout_width="@dimen/video_item_detail_like_image_width"
|
||||
android:layout_height="@dimen/video_item_detail_like_image_height"
|
||||
android:layout_below="@id/detailViewCountView"
|
||||
android:layout_toLeftOf="@id/detailThumbsUpCountView"
|
||||
android:layout_toStartOf="@id/detailThumbsUpImgView"
|
||||
android:paddingRight="5dp"
|
||||
android:paddingLeft="5dp"
|
||||
android:layout_toStartOf="@id/detailThumbsUpCountView"
|
||||
android:src="@drawable/thumbs_up" />
|
||||
|
||||
<TextView android:id="@+id/detailUploadDateView"
|
||||
@@ -163,7 +150,7 @@
|
||||
android:layout_below="@id/detailUploaderView"
|
||||
android:layout_alignParentLeft="true"
|
||||
android:layout_alignParentStart="true"
|
||||
android:textSize="@dimen/text_video_upload_date_size"
|
||||
android:textSize="@dimen/video_item_detail_upload_date_text_size"
|
||||
android:textAppearance="?android:attr/textAppearanceLarge" />
|
||||
|
||||
<TextView android:id="@+id/detailDescriptionView"
|
||||
@@ -172,52 +159,50 @@
|
||||
android:layout_below="@id/detailUploadDateView"
|
||||
android:layout_alignParentLeft="true"
|
||||
android:layout_alignParentStart="true"
|
||||
android:textSize="@dimen/text_video_description_size"
|
||||
android:textSize="@dimen/video_item_detail_description_text_size"
|
||||
android:textAppearance="?android:attr/textAppearanceMedium" />
|
||||
|
||||
|
||||
<RelativeLayout
|
||||
android:id="@+id/detailNextVideoRootLayout"
|
||||
<RelativeLayout android:id="@+id/detailNextVideoRootLayout"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingTop="10dp"
|
||||
android:paddingBottom="10dp"
|
||||
android:paddingLeft="5dp"
|
||||
android:paddingRight="5dp"
|
||||
android:padding="@dimen/video_item_detail_info_text_padding"
|
||||
android:layout_below="@id/detailDescriptionView" >
|
||||
|
||||
<TextView android:id="@+id/detailNextVideoTitle"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignParentLeft="true"
|
||||
android:layout_alignParentStart="true"
|
||||
android:textSize="@dimen/text_video_upload_date_size"
|
||||
android:layout_centerHorizontal="true"
|
||||
android:textSize="@dimen/video_item_detail_next_text_size"
|
||||
android:textAppearance="?android:attr/textAppearanceMedium"
|
||||
android:textColor="@android:color/black"
|
||||
android:text="@string/nextVideoTitle"
|
||||
/>
|
||||
<FrameLayout
|
||||
android:id="@+id/detailNextVideoFrame"
|
||||
android:textAllCaps="true" />
|
||||
|
||||
<RelativeLayout android:id="@+id/detailNextVidButtonAndContentLayout"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@id/detailNextVideoTitle"/>
|
||||
<Button
|
||||
android:id="@+id/detailNextVideoButton"
|
||||
android:layout_below="@id/detailNextVideoTitle">
|
||||
<FrameLayout
|
||||
android:id="@+id/detailNextVideoFrame"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"/>
|
||||
<Button
|
||||
android:id="@+id/detailNextVideoButton"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_alignTop="@id/detailNextVideoFrame"
|
||||
android:layout_alignBottom="@id/detailNextVideoFrame"
|
||||
android:background="?attr/selectableItemBackground"/>
|
||||
</RelativeLayout>
|
||||
<Button android:id="@+id/detailShowSimilarButton"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_alignTop="@id/detailNextVideoFrame"
|
||||
android:layout_alignBottom="@id/detailNextVideoFrame"
|
||||
android:background="?attr/selectableItemBackground"/>
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@id/detailNextVidButtonAndContentLayout"
|
||||
android:textSize="@dimen/video_item_detail_similar_text_size"
|
||||
android:text="@string/showSimilarVideosButtonText"/>
|
||||
</RelativeLayout>
|
||||
|
||||
<Button android:id="@+id/detailShowSimilarButton"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginLeft="6dp"
|
||||
android:layout_marginRight="6dp"
|
||||
android:layout_below="@id/detailNextVideoRootLayout"
|
||||
android:text="@string/showSimilarVideosButtonText"/>
|
||||
</RelativeLayout>
|
||||
</RelativeLayout>
|
||||
</ScrollView>
|
||||
</RelativeLayout>
|
||||
</FrameLayout>
|
||||
20
app/src/main/res/layout/paginate_footer.xml
Normal file
@@ -0,0 +1,20 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:gravity="center_horizontal"
|
||||
android:orientation="vertical">
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="Loading"
|
||||
android:textAppearance="?android:attr/textAppearanceMedium" />
|
||||
|
||||
<ProgressBar
|
||||
android:id="@+id/paginate_progress_bar"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginRight="10dp" />
|
||||
|
||||
</LinearLayout>
|
||||
@@ -1,67 +1,96 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<RelativeLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:orientation="vertical"
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
xmlns:card_view="http://schemas.android.com/apk/res-auto"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="92dp"
|
||||
android:padding="6dp">
|
||||
android:layout_height="wrap_content" >
|
||||
|
||||
<ImageView android:id="@+id/itemThumbnailView"
|
||||
android:contentDescription="@string/itemThumbnailViewDescription"
|
||||
android:layout_width="142dp"
|
||||
android:layout_height="80dp"
|
||||
android:layout_marginEnd="6dp"
|
||||
android:layout_marginRight="6dp"
|
||||
android:scaleType="centerCrop"
|
||||
android:layout_alignParentLeft="true"
|
||||
android:layout_alignParentStart="true"
|
||||
android:layout_alignParentTop="true"
|
||||
android:src="@drawable/dummy_thumbnail"/>
|
||||
|
||||
<TextView android:id="@+id/itemVideoTitleView"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="36dp"
|
||||
android:layout_toRightOf="@id/itemThumbnailView"
|
||||
android:layout_toEndOf="@id/itemThumbnailView"
|
||||
android:layout_alignParentTop="true"
|
||||
android:textAppearance="?android:attr/textAppearanceLarge"
|
||||
android:textSize="@dimen/text_search_title_size"/>
|
||||
|
||||
<TextView android:id="@+id/itemUploaderView"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="18dp"
|
||||
android:layout_toRightOf="@id/itemThumbnailView"
|
||||
android:layout_toEndOf="@id/itemThumbnailView"
|
||||
android:layout_below="@id/itemVideoTitleView"
|
||||
android:textAppearance="?android:attr/textAppearanceSmall"
|
||||
android:textSize="@dimen/text_search_uploader_size"/>
|
||||
|
||||
<TextView android:id="@+id/itemUploadDateView"
|
||||
android:layout_width="wrap_content"
|
||||
<android.support.v7.widget.CardView
|
||||
xmlns:card_view="http://schemas.android.com/apk/res-auto"
|
||||
android:id="@+id/card_view"
|
||||
android:layout_gravity="center"
|
||||
android:orientation="vertical"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_toRightOf="@id/itemThumbnailView"
|
||||
android:layout_toEndOf="@id/itemThumbnailView"
|
||||
android:layout_below="@id/itemUploaderView"
|
||||
android:textAppearance="?android:attr/textAppearanceSmall"
|
||||
android:textSize="@dimen/text_search_uploadtime_size"
|
||||
/>
|
||||
card_view:cardCornerRadius="@dimen/video_item_search_card_radius"
|
||||
android:layout_marginTop="@dimen/video_item_search_card_vertical_margin"
|
||||
android:layout_marginBottom="@dimen/video_item_search_card_vertical_margin"
|
||||
android:layout_marginLeft="@dimen/video_item_search_card_horizontal_margin"
|
||||
android:layout_marginRight="@dimen/video_item_search_card_horizontal_margin" >
|
||||
|
||||
<TextView android:id="@+id/itemDurationView"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignBottom="@id/itemThumbnailView"
|
||||
android:layout_alignRight="@id/itemThumbnailView"
|
||||
android:layout_alignEnd="@id/itemThumbnailView"
|
||||
android:layout_marginRight="2dp"
|
||||
android:layout_marginEnd="2dp"
|
||||
android:layout_marginBottom="2dp"
|
||||
android:paddingTop="1dp"
|
||||
android:paddingBottom="1dp"
|
||||
android:paddingRight="5dp"
|
||||
android:paddingLeft="5dp"
|
||||
android:textAppearance="?android:attr/textAppearanceSmall"
|
||||
android:textSize="@dimen/text_search_duration_size"
|
||||
android:background="@color/durationBackground"
|
||||
android:textColor="@color/durationText"/>
|
||||
<RelativeLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:orientation="vertical"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:padding="@dimen/video_item_search_card_padding">
|
||||
|
||||
</RelativeLayout>
|
||||
<RelativeLayout android:id="@+id/itemThumbnailViewContainer"
|
||||
android:layout_marginRight="@dimen/video_item_search_image_right_margin"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
tools:ignore="RtlHardcoded">
|
||||
|
||||
<ImageView android:id="@+id/itemThumbnailView"
|
||||
android:contentDescription="@string/itemThumbnailViewDescription"
|
||||
android:layout_width="@dimen/video_item_search_thumbnail_image_width"
|
||||
android:layout_height="@dimen/video_item_search_thumbnail_image_height"
|
||||
android:scaleType="centerCrop"
|
||||
android:layout_alignParentLeft="true"
|
||||
android:layout_alignParentStart="true"
|
||||
android:layout_alignParentTop="true"
|
||||
android:src="@drawable/dummy_thumbnail"/>
|
||||
|
||||
<TextView android:id="@+id/itemDurationView"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignBottom="@id/itemThumbnailView"
|
||||
android:layout_alignRight="@id/itemThumbnailView"
|
||||
android:layout_alignEnd="@id/itemThumbnailView"
|
||||
android:layout_marginRight="@dimen/video_item_search_duration_margin"
|
||||
android:layout_marginEnd="@dimen/video_item_search_duration_margin"
|
||||
android:layout_marginBottom="@dimen/video_item_search_duration_margin"
|
||||
android:paddingTop="@dimen/video_item_search_duration_vertical_padding"
|
||||
android:paddingBottom="@dimen/video_item_search_duration_vertical_padding"
|
||||
android:paddingRight="@dimen/video_item_search_duration_horizontal_padding"
|
||||
android:paddingLeft="@dimen/video_item_search_duration_horizontal_padding"
|
||||
android:textAppearance="?android:attr/textAppearanceSmall"
|
||||
android:textSize="@dimen/video_item_search_duration_text_size"
|
||||
android:background="@color/durationBackground"
|
||||
android:textColor="@color/durationText"/>
|
||||
|
||||
</RelativeLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:orientation="vertical"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="@dimen/video_item_search_thumbnail_image_height"
|
||||
android:layout_toRightOf="@id/itemThumbnailViewContainer"
|
||||
tools:ignore="RtlHardcoded">
|
||||
|
||||
<TextView android:id="@+id/itemVideoTitleView"
|
||||
android:layout_weight="1"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="0dp"
|
||||
android:textAppearance="?android:attr/textAppearanceLarge"
|
||||
android:textSize="@dimen/video_item_search_title_text_size"/>
|
||||
|
||||
<TextView android:id="@+id/itemUploaderView"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:singleLine="true"
|
||||
android:textAppearance="?android:attr/textAppearanceSmall"
|
||||
android:textSize="@dimen/video_item_search_uploader_text_size"/>
|
||||
|
||||
<TextView android:id="@+id/itemUploadDateView"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:singleLine="true"
|
||||
android:textAppearance="?android:attr/textAppearanceSmall"
|
||||
android:textSize="@dimen/video_item_search_upload_date_text_size"/>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</RelativeLayout>
|
||||
</android.support.v7.widget.CardView>
|
||||
</LinearLayout>
|
||||
@@ -28,7 +28,6 @@
|
||||
<string name="installeKore">Kore installieren</string>
|
||||
<string name="showPlayWithKodiTitle">Zeige \"Mit Kodi abspielen\" Option</string>
|
||||
<string name="showPlayWithKodiSummary">Zeigt eine Option an, über die man Videos mit dem Kodi Mediacenter abspielen kann.</string>
|
||||
<string name="leftPlayButtonTitle">Play-Button auf der linken Seite.</string>
|
||||
<string name="playAudio">Audio</string>
|
||||
<string name="defaultAudioFormatTitle">Bevorzugtes Audio Format</string>
|
||||
<string name="webMAudioDescription">WebM - freies Format</string>
|
||||
|
||||
@@ -28,7 +28,6 @@
|
||||
<string name="installeKore">Instalar Kore</string>
|
||||
<string name="showPlayWithKodiTitle">Mostrar la opción \"Reproducir con Kodi\"</string>
|
||||
<string name="showPlayWithKodiSummary">Muestra una opción para reproducir el vídeo con Kodi media center.</string>
|
||||
<string name="leftPlayButtonTitle">Mostrar el botón de reproducir en el lado izquierdo.</string>
|
||||
<string name="playAudio">Audio</string>
|
||||
<string name="defaultAudioFormatTitle">Formato de audio por defecto</string>
|
||||
<string name="webMAudioDescription">WebM - formato libre</string>
|
||||
|
||||
@@ -28,7 +28,6 @@
|
||||
<string name="installeKore">نصب Kore</string>
|
||||
<string name="showPlayWithKodiTitle">نمایش گزینهی «پخش با Kodi»</string>
|
||||
<string name="showPlayWithKodiSummary">گزینهای برای پخش کردن ویدئو با مرکز رسانهی Kodi نشان میدهد.</string>
|
||||
<string name="leftPlayButtonTitle">نمایش دکمهی پخش در سمت چپ.</string>
|
||||
<string name="playAudio">صدا</string>
|
||||
<string name="defaultAudioFormatTitle">قالب پیشفرض صدا</string>
|
||||
<string name="webMAudioDescription">WebM - قالبی آزاد</string>
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
<?xml version='1.0' encoding='utf-8'?>
|
||||
<resources>
|
||||
<string name="autoPlayThroughIntentSummary">Démarrer automatiquement la vidéo si elle a été appellée à partir d\'une autre application.</string>
|
||||
<string name="autoPlayThroughIntentSummary">Démarrer automatiquement la vidéo si elle a été appelée depuis une autre application.</string>
|
||||
<string name="cancel">Annuler</string>
|
||||
<string name="chooseBrowser">Choisir un navigateur:</string>
|
||||
<string name="defaultResolutionPreferenceTitle">Résolution par défaut:</string>
|
||||
<string name="didYouMean">S\'agirait-il de:</string>
|
||||
<string name="chooseBrowser">Choisir un navigateur :</string>
|
||||
<string name="defaultResolutionPreferenceTitle">Résolution par défaut</string>
|
||||
<string name="didYouMean">"S\'agirait-il de : "</string>
|
||||
<string name="download">Télécharger</string>
|
||||
<string name="downloadLocation">Emplacement des téléchargements</string>
|
||||
<string name="downloadLocationDialogTitle">Entrez l\'emplacement du téléchargement</string>
|
||||
@@ -17,18 +17,17 @@
|
||||
<string name="autoPlayThroughIntentTitle">Lecture automatique via Intent</string>
|
||||
<string name="playWithKodiTitle">Lire avec Kodi</string>
|
||||
<string name="screenRotation">rotation</string>
|
||||
<string name="search">Chercher</string>
|
||||
<string name="searchPage">Chercher dans la page:</string>
|
||||
<string name="search">Rechercher</string>
|
||||
<string name="searchPage">"Rechercher dans la page : "</string>
|
||||
<string name="settings">Paramètres</string>
|
||||
<string name="share">Partager</string>
|
||||
<string name="shareDialogTitle">Partager avec:</string>
|
||||
<string name="shareDialogTitle">Partager avec :</string>
|
||||
<string name="showPlayWithKodiSummary">Afficher une option pour lire la vidéo avec Kodi media center.</string>
|
||||
<string name="showPlayWithKodiTitle">Afficher l\'option \"Lire avec Kodi\"</string>
|
||||
<string name="title_activity_settings">Paramètres</string>
|
||||
<string name="uploadDateText">Mise en ligne le %1$s</string>
|
||||
<string name="useExternalPlayerTitle">Utiliser un lecteur externe</string>
|
||||
<string name="viewCountText">%1$s vues</string>
|
||||
<string name="leftPlayButtonTitle">Afficher le bouton de lecture sur la gauche.</string>
|
||||
<string name="playAudio">Audio</string>
|
||||
<string name="defaultAudioFormatTitle">Format audio par défaut</string>
|
||||
<string name="webMAudioDescription">WebM- format libre</string>
|
||||
@@ -38,4 +37,14 @@
|
||||
<string name="showNextAndSimilarTitle">Afficher les vidéos suivantes et similaires</string>
|
||||
<string name="urlNotSupportedText">URL non supportée.</string>
|
||||
<string name="showSimilarVideosButtonText">Vidéos similaires</string>
|
||||
<string name="settingsCategoryVideoAudioTitle">VIDÉO & AUDIO</string>
|
||||
<string name="settingsCategoryVideoInfoTittle">INFORMATION</string>
|
||||
<string name="settingsCategoryEtcTitle">DIVERS</string>
|
||||
|
||||
<string name="itemThumbnailViewDescription">Miniature d\'aperçu vidéo</string>
|
||||
<string name="detailThumbnailViewDescription">Miniature d\'aperçu vidéo</string>
|
||||
<string name="detailThumbsDownImgViewDescription">Je n\'aime pas</string>
|
||||
<string name="detailThumbsUpImgViewDescription">J\'aime</string>
|
||||
<string name="searchLanguageTitle">Langue du contenu</string>
|
||||
<string name="detailUploaderThumbnailViewDescription">Avatar de l\'utilisateur</string>
|
||||
</resources>
|
||||
|
||||
@@ -28,7 +28,6 @@
|
||||
<string name="installeKore">Kore telepítése</string>
|
||||
<string name="showPlayWithKodiTitle">\"Lejátszás Kodi-val\" opció mutatása</string>
|
||||
<string name="showPlayWithKodiSummary">Mutat egy opciót a videók Kodi médiaközponttal való lejátszására</string>
|
||||
<string name="leftPlayButtonTitle">Lejátszás gomb bal oldalon mutatása</string>
|
||||
<string name="playAudio">Hang</string>
|
||||
<string name="defaultAudioFormatTitle">Alapértelmezett hang formátum</string>
|
||||
<string name="webMAudioDescription">WebM - szabad formátum</string>
|
||||
|
||||
49
app/src/main/res/values-it/strings.xml
Normal file
@@ -0,0 +1,49 @@
|
||||
<?xml version='1.0' encoding='utf-8'?>
|
||||
<resources><string name="viewCountText">%1$s visite</string>
|
||||
<string name="uploadDateText">Caricato in %1$s</string>
|
||||
<string name="noPlayerFound">Nessun riproduttore trovato. Dovresti installarne uno.</string>
|
||||
<string name="installStreamPlayer">Installa</string>
|
||||
<string name="cancel">Cancella</string>
|
||||
<string name="open_in_browser">Apri nel browser</string>
|
||||
<string name="share">Condividi</string>
|
||||
<string name="download">Scarica</string>
|
||||
<string name="search">Cerca</string>
|
||||
<string name="settings">Impostazioni</string>
|
||||
<string name="didYouMean">"Intendevi: "</string>
|
||||
<string name="searchPage">"Cerca pagina: "</string>
|
||||
<string name="shareDialogTitle">Condividi con:</string>
|
||||
<string name="chooseBrowser">Scegli browser:</string>
|
||||
<string name="screenRotation">rotazione</string>
|
||||
<string name="title_activity_settings">Impostazioni</string>
|
||||
<string name="useExternalPlayerTitle">Usa un riproduttore video esterno</string>
|
||||
<string name="downloadLocation">Cartella di download</string>
|
||||
<string name="downloadLocationSummary">Percorso dove memorizzare i video scaricati.</string>
|
||||
<string name="downloadLocationDialogTitle">Inserisci il percorso di download</string>
|
||||
<string name="autoPlayThroughIntentTitle">Auto riproduzione attraverso internet</string>
|
||||
<string name="autoPlayThroughIntentSummary">Avvia automaticamente un video quando è stato chiamato da un\'altra applicazione.</string>
|
||||
<string name="defaultResolutionPreferenceTitle">Risoluzione predefinita</string>
|
||||
<string name="playWithKodiTitle">Riproduci con Kodi</string>
|
||||
<string name="koreNotFound">Kore app non trovata. Kore è richiesto per riprodurre video con Kodi media center.</string>
|
||||
<string name="installeKore">Installa Kore</string>
|
||||
<string name="showPlayWithKodiTitle">Mostra l\'opzione \"Riproduci con Kodi\"</string>
|
||||
<string name="showPlayWithKodiSummary">Mostra un opzione per riprodurre un video attraverso Kodi media center.</string>
|
||||
<string name="playAudio">Audio</string>
|
||||
<string name="defaultAudioFormatTitle">Formato audio predefinito</string>
|
||||
<string name="webMAudioDescription">WedM - formato libero</string>
|
||||
<string name="m4aAudioDescription">m4a - qualità migliore</string>
|
||||
<string name="downloadDialogTitle">Scarica</string>
|
||||
<string name="nextVideoTitle">Prossimo video</string>
|
||||
<string name="showNextAndSimilarTitle">Mostra i video successivi e simili</string>
|
||||
<string name="urlNotSupportedText">URL non supportato.</string>
|
||||
<string name="showSimilarVideosButtonText">Video simili</string>
|
||||
<string name="searchLanguageTitle">Lingua preferita dei contenuti</string>
|
||||
<string name="settingsCategoryVideoAudioTitle">VIDEO & AUDIO</string>
|
||||
<string name="settingsCategoryVideoInfoTittle">INFO</string>
|
||||
<string name="settingsCategoryEtcTitle">ETC</string>
|
||||
|
||||
<string name="itemThumbnailViewDescription">Anteprima video</string>
|
||||
<string name="detailThumbnailViewDescription">Anteprima video</string>
|
||||
<string name="detailUploaderThumbnailViewDescription">Miniatura caricata</string>
|
||||
<string name="detailThumbsDownImgViewDescription">Non mi piace</string>
|
||||
<string name="detailThumbsUpImgViewDescription">Mi piace</string>
|
||||
</resources>
|
||||
@@ -27,7 +27,6 @@
|
||||
<string name="installeKore">Kore をインストール</string>
|
||||
<string name="showPlayWithKodiTitle">\"Kodi で再生\" 設定を表示</string>
|
||||
<string name="showPlayWithKodiSummary">Kodi メディアセンター経由で動画を再生するための設定を表示します.</string>
|
||||
<string name="leftPlayButtonTitle">左側に再生ボタンを表示.</string>
|
||||
<string name="playAudio">オーディオ</string>
|
||||
<string name="defaultAudioFormatTitle">基本のオーディオフォーマット</string>
|
||||
<string name="webMAudioDescription">.WebM - フリーフォーマット</string>
|
||||
@@ -45,6 +44,6 @@
|
||||
<string name="itemThumbnailViewDescription">ビデオ プレビュー サムネイル</string>
|
||||
<string name="detailThumbnailViewDescription">ビデオ プレビュー サムネイル</string>
|
||||
<string name="detailUploaderThumbnailViewDescription">アップローダー サムネイル</string>
|
||||
<string name="detailThumbsDownImgViewDescription">いいね解除</string>
|
||||
<string name="detailThumbsDownImgViewDescription">残念だね</string>
|
||||
<string name="detailThumbsUpImgViewDescription">いいね</string>
|
||||
</resources>
|
||||
|
||||
49
app/src/main/res/values-ko/strings.xml
Normal file
@@ -0,0 +1,49 @@
|
||||
<?xml version='1.0' encoding='utf-8'?>
|
||||
<resources><string name="viewCountText">시청 횟수 %1$s</string>
|
||||
<string name="uploadDateText">%1$s에 업로드됨</string>
|
||||
<string name="noPlayerFound">스트리밍 플레이어가 발견되지 않았습니다. 플레이어를 설치하시기 바랍니다.</string>
|
||||
<string name="installStreamPlayer">설치</string>
|
||||
<string name="cancel">취소</string>
|
||||
<string name="open_in_browser">브라우저에서 열기</string>
|
||||
<string name="share">공유</string>
|
||||
<string name="download">다운로드</string>
|
||||
<string name="search">검색</string>
|
||||
<string name="settings">설정</string>
|
||||
<string name="didYouMean">"혹시 이것을 검색하셨습니까? "</string>
|
||||
<string name="searchPage">"검색 페이지: "</string>
|
||||
<string name="shareDialogTitle">다음으로 공유:</string>
|
||||
<string name="chooseBrowser">브라우저 선택:</string>
|
||||
<string name="screenRotation">회전</string>
|
||||
<string name="title_activity_settings">설정</string>
|
||||
<string name="useExternalPlayerTitle">외부 플레이어 사용</string>
|
||||
<string name="downloadLocation">다운로드 위치</string>
|
||||
<string name="downloadLocationSummary">다운로드된 비디오가 저장될 경로를 선택하세요.</string>
|
||||
<string name="downloadLocationDialogTitle">다운로드 경로 입력</string>
|
||||
<string name="autoPlayThroughIntentTitle">인텐트로 경유할 경우 자동 재생</string>
|
||||
<string name="autoPlayThroughIntentSummary">다른 앱으로부터 호출되었을 경우에 비디오를 자동으로 재생합니다.</string>
|
||||
<string name="defaultResolutionPreferenceTitle">기본 해상도</string>
|
||||
<string name="playWithKodiTitle">Kodi로 재생</string>
|
||||
<string name="koreNotFound">Kore 앱이 발견되지 않았습니다. Kodi media center로 비디오를 재생하려면 Kore가 필요합니다.</string>
|
||||
<string name="installeKore">Kore 설치</string>
|
||||
<string name="showPlayWithKodiTitle">\"Kodi로 재생\" 옵션 표시</string>
|
||||
<string name="showPlayWithKodiSummary">비디오를 Kodi media center를 사용해 재생하는 옵션을 표시합니다.</string>
|
||||
<string name="playAudio">오디오</string>
|
||||
<string name="defaultAudioFormatTitle">기본 오디오 포맷</string>
|
||||
<string name="webMAudioDescription">WebM - 무료 자유 포맷입니다</string>
|
||||
<string name="m4aAudioDescription">m4a - 보다 나은 품질</string>
|
||||
<string name="downloadDialogTitle">다운로드</string>
|
||||
<string name="nextVideoTitle">다음 비디오</string>
|
||||
<string name="showNextAndSimilarTitle">다음 및 유사한 비디오 표시</string>
|
||||
<string name="urlNotSupportedText">지원하지 않는 URL 입니다.</string>
|
||||
<string name="showSimilarVideosButtonText">유사한 비디오</string>
|
||||
<string name="searchLanguageTitle">선호하는 컨텐츠 언어</string>
|
||||
<string name="settingsCategoryVideoAudioTitle">비디오 & 오디오</string>
|
||||
<string name="settingsCategoryVideoInfoTittle">정보</string>
|
||||
<string name="settingsCategoryEtcTitle">기타</string>
|
||||
|
||||
<string name="itemThumbnailViewDescription">비디오 미리보기 썸네일</string>
|
||||
<string name="detailThumbnailViewDescription">비디오 미리보기 썸네일</string>
|
||||
<string name="detailUploaderThumbnailViewDescription">업로더 썸네일</string>
|
||||
<string name="detailThumbsDownImgViewDescription">싫어요</string>
|
||||
<string name="detailThumbsUpImgViewDescription">좋아요</string>
|
||||
</resources>
|
||||
44
app/src/main/res/values-land/dimens.xml
Normal file
@@ -0,0 +1,44 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
|
||||
<!-- Video Item Search View Dimensions-->
|
||||
<!-- Text Size -->
|
||||
<dimen name="video_item_search_title_text_size">22sp</dimen>
|
||||
<dimen name="video_item_search_duration_text_size">16sp</dimen>
|
||||
<dimen name="video_item_search_uploader_text_size">18sp</dimen>
|
||||
<dimen name="video_item_search_upload_date_text_size">18sp</dimen>
|
||||
<!-- Elements Size -->
|
||||
<dimen name="video_item_search_thumbnail_image_width">210dp</dimen>
|
||||
<dimen name="video_item_search_thumbnail_image_height">130dp</dimen>
|
||||
<!-- Paddings & Margins -->
|
||||
<dimen name="video_item_search_card_vertical_margin">5dp</dimen>
|
||||
<dimen name="video_item_search_card_horizontal_margin">10dp</dimen>
|
||||
<dimen name="video_item_search_card_padding">10dp</dimen>
|
||||
<dimen name="video_item_search_image_right_margin">10dp</dimen>
|
||||
<dimen name="video_item_search_duration_vertical_padding">1sp</dimen>
|
||||
<dimen name="video_item_search_duration_horizontal_padding">7sp</dimen>
|
||||
<dimen name="video_item_search_duration_margin">5sp</dimen>
|
||||
<!-- Miscellaneous -->
|
||||
<dimen name="video_item_search_card_radius">4dp</dimen>
|
||||
|
||||
<!-- Video Item Detail View Dimensions-->
|
||||
<!-- Text Size -->
|
||||
<dimen name="video_item_detail_title_text_size">24sp</dimen>
|
||||
<dimen name="video_item_detail_views_text_size">18sp</dimen>
|
||||
<dimen name="video_item_detail_likes_text_size">16sp</dimen>
|
||||
<dimen name="video_item_detail_uploader_text_size">18sp</dimen>
|
||||
<dimen name="video_item_detail_upload_date_text_size">18sp</dimen>
|
||||
<dimen name="video_item_detail_description_text_size">18sp</dimen>
|
||||
<dimen name="video_item_detail_next_text_size">20sp</dimen>
|
||||
<dimen name="video_item_detail_similar_text_size">20sp</dimen>
|
||||
<!-- Elements Size -->
|
||||
<dimen name="video_item_detail_thumbnail_image_height">240dp</dimen>
|
||||
<dimen name="video_item_detail_uploader_image_size">100dp</dimen>
|
||||
<dimen name="video_item_detail_like_image_height">20sp</dimen>
|
||||
<dimen name="video_item_detail_like_image_width">20sp</dimen>
|
||||
<!-- Paddings & Margins -->
|
||||
<dimen name="video_item_detail_info_text_padding">10sp</dimen>
|
||||
<dimen name="video_item_detail_like_margin">10sp</dimen>
|
||||
<dimen name="video_item_detail_play_fab_margin">20dp</dimen>
|
||||
|
||||
</resources>
|
||||
@@ -28,7 +28,6 @@
|
||||
<string name="installeKore">Installeer Kore</string>
|
||||
<string name="showPlayWithKodiTitle">Toon \"Speel af met Kodi\" optie</string>
|
||||
<string name="showPlayWithKodiSummary">Toont een optie om een video op een Kodi media center af te spelen.</string>
|
||||
<string name="leftPlayButtonTitle">Afspeel knop aan de linker kant weergeven.</string>
|
||||
<string name="playAudio">Audio</string>
|
||||
<string name="defaultAudioFormatTitle">Standaard audio formaat</string>
|
||||
<string name="webMAudioDescription">Webam - open formaat</string>
|
||||
|
||||
@@ -25,7 +25,6 @@
|
||||
<string name="installeKore">Zainstaluj Kore</string>
|
||||
<string name="showPlayWithKodiTitle">Wyświetlaj opcję \"Odtwarzaj za pośrednictwem Kodi\"</string>
|
||||
<string name="showPlayWithKodiSummary">Wyświetla opcję do odtwarzania wideo przez aplikację Kodi.</string>
|
||||
<string name="leftPlayButtonTitle">Wyświetl przycisk odtwarzania po lewej stronie.</string>
|
||||
<string name="playAudio">Dźwięk</string>
|
||||
<string name="defaultAudioFormatTitle">Domyślny format dźwięku</string>
|
||||
<string name="webMAudioDescription">WebM - otwarty format</string>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<?xml version='1.0' encoding='utf-8'?>
|
||||
<resources>
|
||||
<string name="viewCountText">%1$s просмотров</string>
|
||||
<string name="uploadDateText">Опубликовано: %1$s</string>
|
||||
<string name="uploadDateText">Опубликовано %1$s</string>
|
||||
<string name="noPlayerFound">Ни одного потокового проигрывателя не было найдено. Установить?</string>
|
||||
<string name="installStreamPlayer">Установить</string>
|
||||
<string name="cancel">Отмена</string>
|
||||
@@ -28,7 +28,6 @@
|
||||
<string name="installeKore">Установить Kore</string>
|
||||
<string name="showPlayWithKodiTitle">Показывать опцию \"Воспроизвести с помощью Kodi\"</string>
|
||||
<string name="showPlayWithKodiSummary">Показать опцию воспроизведения видео через Kodi media center.</string>
|
||||
<string name="leftPlayButtonTitle">Показать кнопку воспроизведения слева.</string>
|
||||
<string name="playAudio">Аудио</string>
|
||||
<string name="defaultAudioFormatTitle">Формат аудио по-умолчанию</string>
|
||||
<string name="webMAudioDescription">WebM - свободный формат</string>
|
||||
@@ -43,4 +42,13 @@
|
||||
<string name="showSimilarVideosButtonText">Похожие видео</string>
|
||||
<string name="showNextAndSimilarTitle">Показывать следующее и предложенные видео</string>
|
||||
<string name="searchLanguageTitle">Предпочитаемый язык контента</string>
|
||||
<string name="settingsCategoryVideoAudioTitle">ВИДЕО И АУДИО</string>
|
||||
<string name="settingsCategoryVideoInfoTittle">ИНФОРМАЦИЯ</string>
|
||||
<string name="settingsCategoryEtcTitle">ПРОЧЕЕ</string>
|
||||
|
||||
<string name="itemThumbnailViewDescription">Миниатюра видео-превью</string>
|
||||
<string name="detailThumbnailViewDescription">Миниатюра видео-превью</string>
|
||||
<string name="detailUploaderThumbnailViewDescription">Миниатюра аватара пользователся</string>
|
||||
<string name="detailThumbsDownImgViewDescription">Дислайки</string>
|
||||
<string name="detailThumbsUpImgViewDescription">Лайки</string>
|
||||
</resources>
|
||||
|
||||
@@ -28,7 +28,6 @@
|
||||
<string name="installeKore">Инсталирај Кор</string>
|
||||
<string name="showPlayWithKodiTitle">Прикажи „Пусти помоћу Кодија“</string>
|
||||
<string name="showPlayWithKodiSummary">Приказ опције за пуштање видеа у Коди медија центру.</string>
|
||||
<string name="leftPlayButtonTitle">Прикажи дугме за пуштање на левој страни.</string>
|
||||
<string name="playAudio">Аудио</string>
|
||||
<string name="defaultAudioFormatTitle">Подразумевани формат звука</string>
|
||||
<string name="webMAudioDescription">WebM - слободни формат</string>
|
||||
|
||||
24
app/src/main/res/values-sw600dp/dimens.xml
Normal file
@@ -0,0 +1,24 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
|
||||
<!-- Video Item Detail View Dimensions-->
|
||||
<!-- Text Size -->
|
||||
<dimen name="video_item_detail_title_text_size">20sp</dimen>
|
||||
<dimen name="video_item_detail_views_text_size">16sp</dimen>
|
||||
<dimen name="video_item_detail_likes_text_size">14sp</dimen>
|
||||
<dimen name="video_item_detail_uploader_text_size">16sp</dimen>
|
||||
<dimen name="video_item_detail_upload_date_text_size">16sp</dimen>
|
||||
<dimen name="video_item_detail_description_text_size">16sp</dimen>
|
||||
<dimen name="video_item_detail_next_text_size">18sp</dimen>
|
||||
<dimen name="video_item_detail_similar_text_size">18sp</dimen>
|
||||
<!-- Elements Size -->
|
||||
<dimen name="video_item_detail_thumbnail_image_height">300dp</dimen>
|
||||
<dimen name="video_item_detail_uploader_image_size">100dp</dimen>
|
||||
<dimen name="video_item_detail_like_image_height">18sp</dimen>
|
||||
<dimen name="video_item_detail_like_image_width">18sp</dimen>
|
||||
<!-- Paddings & Margins -->
|
||||
<dimen name="video_item_detail_info_text_padding">10sp</dimen>
|
||||
<dimen name="video_item_detail_like_margin">10sp</dimen>
|
||||
<dimen name="video_item_detail_play_fab_margin">20dp</dimen>
|
||||
|
||||
</resources>
|
||||
@@ -31,7 +31,7 @@
|
||||
<style name="VideoPlayerActionBarTheme" parent="Widget.AppCompat.Light.ActionBar.Solid.Inverse" >
|
||||
<item name="android:displayOptions">showHome</item>
|
||||
<item name="displayOptions">showHome</item>
|
||||
<item name="android:background">@color/black_overlay</item>
|
||||
<item name="background">@color/black_overlay</item>
|
||||
<item name="android:background">@color/dark_overlay</item>
|
||||
<item name="background">@color/dark_overlay</item>
|
||||
</style>
|
||||
</resources>
|
||||
@@ -2,9 +2,9 @@
|
||||
<resources>
|
||||
<color name="primaryColorYoutube">#cd322e</color>
|
||||
<color name="primaryColorDarkYoutube">#bc211d</color>
|
||||
<color name="accentColorYoutube">#000000</color>
|
||||
<color name="durationBackground">#aa000000</color>
|
||||
<color name="durationText">#eeffffff</color>
|
||||
<color name="black_overlay">#66000000</color>
|
||||
<color name="accentColorYoutube">#000</color>
|
||||
<color name="durationBackground">#a000</color>
|
||||
<color name="durationText">#efff</color>
|
||||
<color name="dark_overlay">#6000</color>
|
||||
<color name="background_gray">#EEEEEE</color>
|
||||
</resources>
|
||||
44
app/src/main/res/values/dimens.xml
Normal file
@@ -0,0 +1,44 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
|
||||
<!-- Video Item Search View Dimensions-->
|
||||
<!-- Text Size -->
|
||||
<dimen name="video_item_search_title_text_size">14sp</dimen>
|
||||
<dimen name="video_item_search_duration_text_size">11sp</dimen>
|
||||
<dimen name="video_item_search_uploader_text_size">12sp</dimen>
|
||||
<dimen name="video_item_search_upload_date_text_size">12sp</dimen>
|
||||
<!-- Elements Size -->
|
||||
<dimen name="video_item_search_thumbnail_image_width">140dp</dimen>
|
||||
<dimen name="video_item_search_thumbnail_image_height">85dp</dimen>
|
||||
<!-- Paddings & Margins -->
|
||||
<dimen name="video_item_search_card_vertical_margin">3dp</dimen>
|
||||
<dimen name="video_item_search_card_horizontal_margin">6dp</dimen>
|
||||
<dimen name="video_item_search_card_padding">6dp</dimen>
|
||||
<dimen name="video_item_search_image_right_margin">6dp</dimen>
|
||||
<dimen name="video_item_search_duration_vertical_padding">1sp</dimen>
|
||||
<dimen name="video_item_search_duration_horizontal_padding">5sp</dimen>
|
||||
<dimen name="video_item_search_duration_margin">2sp</dimen>
|
||||
<!-- Miscellaneous -->
|
||||
<dimen name="video_item_search_card_radius">4dp</dimen>
|
||||
|
||||
<!-- Video Item Detail View Dimensions-->
|
||||
<!-- Text Size -->
|
||||
<dimen name="video_item_detail_title_text_size">18sp</dimen>
|
||||
<dimen name="video_item_detail_views_text_size">14sp</dimen>
|
||||
<dimen name="video_item_detail_likes_text_size">12sp</dimen>
|
||||
<dimen name="video_item_detail_uploader_text_size">14sp</dimen>
|
||||
<dimen name="video_item_detail_upload_date_text_size">14sp</dimen>
|
||||
<dimen name="video_item_detail_description_text_size">14sp</dimen>
|
||||
<dimen name="video_item_detail_next_text_size">16sp</dimen>
|
||||
<dimen name="video_item_detail_similar_text_size">16sp</dimen>
|
||||
<!-- Elements Size -->
|
||||
<dimen name="video_item_detail_thumbnail_image_height">200dp</dimen>
|
||||
<dimen name="video_item_detail_uploader_image_size">80dp</dimen>
|
||||
<dimen name="video_item_detail_like_image_height">18sp</dimen>
|
||||
<dimen name="video_item_detail_like_image_width">18sp</dimen>
|
||||
<!-- Paddings & Margins -->
|
||||
<dimen name="video_item_detail_info_text_padding">6sp</dimen>
|
||||
<dimen name="video_item_detail_like_margin">6sp</dimen>
|
||||
<dimen name="video_item_detail_play_fab_margin">20dp</dimen>
|
||||
|
||||
</resources>
|
||||
@@ -1,14 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<dimen name="text_search_title_size">14sp</dimen>
|
||||
<dimen name="text_search_duration_size">11sp</dimen>
|
||||
<dimen name="text_search_uploader_size">12sp</dimen>
|
||||
<dimen name="text_search_uploadtime_size">12sp</dimen>
|
||||
|
||||
<dimen name="text_video_title_size">18sp</dimen>
|
||||
<dimen name="text_video_views_size">14sp</dimen>
|
||||
<dimen name="text_video_like_size">12sp</dimen>
|
||||
<dimen name="text_video_uploader_size">14sp</dimen>
|
||||
<dimen name="text_video_upload_date_size">14sp</dimen>
|
||||
<dimen name="text_video_description_size">14sp</dimen>
|
||||
</resources>
|
||||
@@ -6,9 +6,10 @@
|
||||
<string name="settingsCategoryEtc">settings_category_etc</string>
|
||||
<!-- Key values -->
|
||||
<string name="downloadPathPreference">download_path_preference</string>
|
||||
<string name="useExternalPlayer">use_external_player</string>
|
||||
<string name="useExternalVideoPlayer">use_external_video_player</string>
|
||||
<string name="useExternalAudioPlayer">use_external_audio_player</string>
|
||||
<string name="autoPlayThroughIntent">autoplay_through_intent</string>
|
||||
<string name="defaultResolutionPreference">default_resulution_preference</string>
|
||||
<string name="defaultResolutionPreference">default_resolution_preference</string>
|
||||
<string-array name="resolutionList">
|
||||
<item>720p</item>
|
||||
<item>360p</item>
|
||||
@@ -16,8 +17,7 @@
|
||||
<item>144p</item>
|
||||
</string-array>
|
||||
<string name="defaultResolutionListItem">360p</string>
|
||||
<string name="showPlayWidthKodiPreference">show_play_with_kodi_preference</string>
|
||||
<string name="leftHandLayout">left_hand_layout</string>
|
||||
<string name="showPlayWithKodiPreference">show_play_with_kodi_preference</string>
|
||||
<string name="defaultAudioFormatPreference">default_audio_format</string>
|
||||
<string-array name="audioFormatDescriptionList">
|
||||
<item>@string/webMAudioDescription</item>
|
||||
|
||||
@@ -19,7 +19,8 @@
|
||||
<string name="chooseBrowser">Choose browser:</string>
|
||||
<string name="screenRotation">rotation</string>
|
||||
<string name="title_activity_settings">Settings</string>
|
||||
<string name="useExternalPlayerTitle">Use external player</string>
|
||||
<string name="useExternalVideoPlayerTitle">Use external video player</string>
|
||||
<string name="useExternalAudioPlayerTitle">Use external audio player</string>
|
||||
<string name="downloadLocation">Download location</string>
|
||||
<string name="downloadLocationSummary">Path to store downloaded videos in.</string>
|
||||
<string name="downloadLocationDialogTitle">Enter download path</string>
|
||||
@@ -32,7 +33,6 @@
|
||||
<string name="fdroidKoreUrl" translatable="false">https://f-droid.org/repository/browse/?fdfilter=Kore&fdid=org.xbmc.kore</string>
|
||||
<string name="showPlayWithKodiTitle">Show \"Play with Kodi\" option</string>
|
||||
<string name="showPlayWithKodiSummary">Displays an option to play a video via Kodi media center.</string>
|
||||
<string name="leftPlayButtonTitle">Show play button on the left side.</string>
|
||||
<string name="playAudio">Audio</string>
|
||||
<string name="defaultAudioFormatTitle">Default audio format</string>
|
||||
<string name="webMAudioDescription">WebM - free format</string>
|
||||
@@ -55,6 +55,6 @@
|
||||
<string name="itemThumbnailViewDescription">Video preview thumbnail</string>
|
||||
<string name="detailThumbnailViewDescription">Video preview thumbnail</string>
|
||||
<string name="detailUploaderThumbnailViewDescription">Uploader thumbnail</string>
|
||||
<string name="detailThumbsDownImgViewDescription">Unlikes</string>
|
||||
<string name="detailThumbsDownImgViewDescription">Dislikes</string>
|
||||
<string name="detailThumbsUpImgViewDescription">Likes</string>
|
||||
</resources>
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
<style name="VideoPlayerActionBarTheme" parent="Widget.AppCompat.Light.ActionBar.Solid.Inverse" >
|
||||
<item name="android:displayOptions">showHome</item>
|
||||
<item name="displayOptions">showHome</item>
|
||||
<item name="android:background">@color/black_overlay</item>
|
||||
<item name="background">@color/black_overlay</item>
|
||||
<item name="android:background">@color/dark_overlay</item>
|
||||
<item name="background">@color/dark_overlay</item>
|
||||
</style>
|
||||
</resources>
|
||||
@@ -8,8 +8,13 @@
|
||||
android:title="@string/settingsCategoryVideoAudioTitle">
|
||||
|
||||
<CheckBoxPreference
|
||||
android:key="@string/useExternalPlayer"
|
||||
android:title="@string/useExternalPlayerTitle"
|
||||
android:key="@string/useExternalVideoPlayer"
|
||||
android:title="@string/useExternalVideoPlayerTitle"
|
||||
android:defaultValue="false"/>
|
||||
|
||||
<CheckBoxPreference
|
||||
android:key="@string/useExternalAudioPlayer"
|
||||
android:title="@string/useExternalAudioPlayerTitle"
|
||||
android:defaultValue="false"/>
|
||||
|
||||
<ListPreference
|
||||
@@ -32,16 +37,11 @@
|
||||
android:title="@string/settingsCategoryVideoInfoTittle">
|
||||
|
||||
<CheckBoxPreference
|
||||
android:key="@string/showPlayWidthKodiPreference"
|
||||
android:key="@string/showPlayWithKodiPreference"
|
||||
android:title="@string/showPlayWithKodiTitle"
|
||||
android:summary="@string/showPlayWithKodiSummary"
|
||||
android:defaultValue="false" />
|
||||
|
||||
<CheckBoxPreference
|
||||
android:key="@string/leftHandLayout"
|
||||
android:title="@string/leftPlayButtonTitle"
|
||||
android:defaultValue="false" />
|
||||
|
||||
<ListPreference
|
||||
android:key="@string/searchLanguage"
|
||||
android:title="@string/searchLanguageTitle"
|
||||
|
||||
|
Before Width: | Height: | Size: 252 KiB |
|
Before Width: | Height: | Size: 166 KiB |
BIN
assets/thumbs_up.png
Normal file
|
After Width: | Height: | Size: 4.5 KiB |
BIN
screenshots/screenshot_1.png
Normal file
|
After Width: | Height: | Size: 6.8 KiB |
BIN
screenshots/screenshot_2.png
Normal file
|
After Width: | Height: | Size: 320 KiB |
BIN
screenshots/screenshot_3.png
Normal file
|
After Width: | Height: | Size: 247 KiB |
BIN
screenshots/screenshot_4.png
Normal file
|
After Width: | Height: | Size: 254 KiB |
BIN
screenshots/screenshot_5.png
Normal file
|
After Width: | Height: | Size: 169 KiB |
BIN
screenshots/screenshot_6.png
Normal file
|
After Width: | Height: | Size: 163 KiB |