Add logic
This commit is contained in:
parent
0c6c5c813f
commit
7c40060438
|
@ -60,19 +60,29 @@ import androidx.lifecycle.ViewModelProvider;
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||||
import androidx.recyclerview.widget.RecyclerView;
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
|
|
||||||
|
import com.google.android.exoplayer2.C;
|
||||||
import com.google.android.exoplayer2.ExoPlayerFactory;
|
import com.google.android.exoplayer2.ExoPlayerFactory;
|
||||||
|
import com.google.android.exoplayer2.Format;
|
||||||
import com.google.android.exoplayer2.SimpleExoPlayer;
|
import com.google.android.exoplayer2.SimpleExoPlayer;
|
||||||
import com.google.android.exoplayer2.ext.mediasession.MediaSessionConnector;
|
import com.google.android.exoplayer2.ext.mediasession.MediaSessionConnector;
|
||||||
|
import com.google.android.exoplayer2.source.MediaSource;
|
||||||
|
import com.google.android.exoplayer2.source.MergingMediaSource;
|
||||||
import com.google.android.exoplayer2.source.ProgressiveMediaSource;
|
import com.google.android.exoplayer2.source.ProgressiveMediaSource;
|
||||||
|
import com.google.android.exoplayer2.source.SingleSampleMediaSource;
|
||||||
|
import com.google.android.exoplayer2.trackselection.AdaptiveTrackSelection;
|
||||||
|
import com.google.android.exoplayer2.trackselection.DefaultTrackSelector;
|
||||||
|
import com.google.android.exoplayer2.trackselection.TrackSelector;
|
||||||
import com.google.android.exoplayer2.ui.AspectRatioFrameLayout;
|
import com.google.android.exoplayer2.ui.AspectRatioFrameLayout;
|
||||||
import com.google.android.exoplayer2.ui.PlayerControlView;
|
import com.google.android.exoplayer2.ui.PlayerControlView;
|
||||||
import com.google.android.exoplayer2.ui.PlayerView;
|
import com.google.android.exoplayer2.ui.PlayerView;
|
||||||
|
import com.google.android.exoplayer2.upstream.BandwidthMeter;
|
||||||
import com.google.android.exoplayer2.upstream.DataSource;
|
import com.google.android.exoplayer2.upstream.DataSource;
|
||||||
|
import com.google.android.exoplayer2.upstream.DefaultBandwidthMeter;
|
||||||
import com.google.android.exoplayer2.upstream.DefaultDataSourceFactory;
|
import com.google.android.exoplayer2.upstream.DefaultDataSourceFactory;
|
||||||
|
import com.google.android.exoplayer2.util.MimeTypes;
|
||||||
import com.google.android.exoplayer2.util.Util;
|
import com.google.android.exoplayer2.util.Util;
|
||||||
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
import java.security.KeyManagementException;
|
import java.security.KeyManagementException;
|
||||||
import java.security.NoSuchAlgorithmException;
|
import java.security.NoSuchAlgorithmException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
@ -111,6 +121,7 @@ import app.fedilab.fedilabtube.webview.MastalabWebViewClient;
|
||||||
import es.dmoral.toasty.Toasty;
|
import es.dmoral.toasty.Toasty;
|
||||||
|
|
||||||
import static app.fedilab.fedilabtube.helper.Helper.getAttColor;
|
import static app.fedilab.fedilabtube.helper.Helper.getAttColor;
|
||||||
|
import static app.fedilab.fedilabtube.helper.Helper.getLiveInstance;
|
||||||
import static app.fedilab.fedilabtube.helper.Helper.isLoggedIn;
|
import static app.fedilab.fedilabtube.helper.Helper.isLoggedIn;
|
||||||
import static app.fedilab.fedilabtube.viewmodel.PlaylistsVM.action.GET_PLAYLIST;
|
import static app.fedilab.fedilabtube.viewmodel.PlaylistsVM.action.GET_PLAYLIST;
|
||||||
import static app.fedilab.fedilabtube.viewmodel.PlaylistsVM.action.GET_PLAYLIST_FOR_VIDEO;
|
import static app.fedilab.fedilabtube.viewmodel.PlaylistsVM.action.GET_PLAYLIST_FOR_VIDEO;
|
||||||
|
@ -142,7 +153,6 @@ public class PeertubeActivity extends AppCompatActivity {
|
||||||
private boolean playInMinimized;
|
private boolean playInMinimized;
|
||||||
private boolean onStopCalled;
|
private boolean onStopCalled;
|
||||||
private List<Caption> captions;
|
private List<Caption> captions;
|
||||||
private String captionValue;
|
|
||||||
|
|
||||||
public static void hideKeyboard(Activity activity) {
|
public static void hideKeyboard(Activity activity) {
|
||||||
if (activity != null && activity.getWindow() != null) {
|
if (activity != null && activity.getWindow() != null) {
|
||||||
|
@ -684,7 +694,45 @@ public class PeertubeActivity extends AppCompatActivity {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
dialogBuilder.setSingleChoiceItems(itemsLabelLanguage, i, (dialog, which) -> {
|
dialogBuilder.setSingleChoiceItems(itemsLabelLanguage, i, (dialog, which) -> {
|
||||||
captionValue = itemsKeyLanguage[which];
|
Uri uri = Uri.parse("https://" + getLiveInstance(PeertubeActivity.this) + captions.get(which).getCaptionPath());
|
||||||
|
int video_cache = sharedpreferences.getInt(Helper.SET_VIDEO_CACHE, Helper.DEFAULT_VIDEO_CACHE_MB);
|
||||||
|
|
||||||
|
long position = player.getCurrentPosition();
|
||||||
|
|
||||||
|
if (player != null)
|
||||||
|
player.release();
|
||||||
|
|
||||||
|
BandwidthMeter bandwidthMeter = new DefaultBandwidthMeter();
|
||||||
|
TrackSelector trackSelector = new DefaultTrackSelector(new AdaptiveTrackSelection.Factory(bandwidthMeter));
|
||||||
|
player = ExoPlayerFactory.newSimpleInstance(PeertubeActivity.this, trackSelector);
|
||||||
|
ProgressiveMediaSource videoSource;
|
||||||
|
MediaSource subtitleSource;
|
||||||
|
Format subtitleFormat = Format.createTextSampleFormat(
|
||||||
|
null,
|
||||||
|
MimeTypes.APPLICATION_SUBRIP,
|
||||||
|
Format.NO_VALUE,
|
||||||
|
"en");
|
||||||
|
if (video_cache == 0) {
|
||||||
|
DataSource.Factory dataSourceFactory = new DefaultDataSourceFactory(PeertubeActivity.this,
|
||||||
|
Util.getUserAgent(PeertubeActivity.this, null), null);
|
||||||
|
videoSource = new ProgressiveMediaSource.Factory(dataSourceFactory)
|
||||||
|
.createMediaSource(Uri.parse(apiResponse.getPeertubes().get(0).getFileUrl(null, PeertubeActivity.this)));
|
||||||
|
|
||||||
|
subtitleSource = new SingleSampleMediaSource(uri, dataSourceFactory, subtitleFormat, C.TIME_UNSET);
|
||||||
|
} else {
|
||||||
|
CacheDataSourceFactory cacheDataSourceFactory = new CacheDataSourceFactory(PeertubeActivity.this);
|
||||||
|
videoSource = new ProgressiveMediaSource.Factory(cacheDataSourceFactory)
|
||||||
|
.createMediaSource(Uri.parse(apiResponse.getPeertubes().get(0).getFileUrl(null, PeertubeActivity.this)));
|
||||||
|
subtitleSource = new SingleSampleMediaSource(uri, cacheDataSourceFactory, subtitleFormat, C.TIME_UNSET);
|
||||||
|
}
|
||||||
|
MergingMediaSource mergedSource =
|
||||||
|
new MergingMediaSource(videoSource, subtitleSource);
|
||||||
|
playerView.setPlayer(player);
|
||||||
|
player.prepare(mergedSource);
|
||||||
|
player.seekTo(0, position);
|
||||||
|
player.setPlayWhenReady(true);
|
||||||
|
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
dialogBuilder.setOnDismissListener(dialogInterface -> {
|
dialogBuilder.setOnDismissListener(dialogInterface -> {
|
||||||
|
@ -748,6 +796,7 @@ public class PeertubeActivity extends AppCompatActivity {
|
||||||
change();
|
change();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public void manageVIewComment(APIResponse apiResponse) {
|
public void manageVIewComment(APIResponse apiResponse) {
|
||||||
if (apiResponse == null || (apiResponse.getError() != null && apiResponse.getError().getStatusCode() != 404 && apiResponse.getError() != null && apiResponse.getError().getStatusCode() != 501)) {
|
if (apiResponse == null || (apiResponse.getError() != null && apiResponse.getError().getStatusCode() != 404 && apiResponse.getError() != null && apiResponse.getError().getStatusCode() != 501)) {
|
||||||
if (apiResponse == null)
|
if (apiResponse == null)
|
||||||
|
|
|
@ -45,6 +45,7 @@ public class APIResponse {
|
||||||
private List<Instance> instances;
|
private List<Instance> instances;
|
||||||
private String stringData;
|
private String stringData;
|
||||||
private int statusCode;
|
private int statusCode;
|
||||||
|
private String captionText;
|
||||||
|
|
||||||
public List<Account> getAccounts() {
|
public List<Account> getAccounts() {
|
||||||
return accounts;
|
return accounts;
|
||||||
|
@ -180,4 +181,12 @@ public class APIResponse {
|
||||||
public void setCaptions(List<Caption> captions) {
|
public void setCaptions(List<Caption> captions) {
|
||||||
this.captions = captions;
|
this.captions = captions;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getCaptionText() {
|
||||||
|
return captionText;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCaptionText(String captionText) {
|
||||||
|
this.captionText = captionText;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,7 +21,6 @@ import android.database.sqlite.SQLiteDatabase;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
import android.text.Html;
|
import android.text.Html;
|
||||||
import android.text.SpannableString;
|
import android.text.SpannableString;
|
||||||
import android.util.Log;
|
|
||||||
|
|
||||||
import org.json.JSONArray;
|
import org.json.JSONArray;
|
||||||
import org.json.JSONException;
|
import org.json.JSONException;
|
||||||
|
@ -1010,7 +1009,6 @@ public class PeertubeAPI {
|
||||||
apiResponse = new APIResponse();
|
apiResponse = new APIResponse();
|
||||||
try {
|
try {
|
||||||
String response = new HttpsConnection(context).get(getAbsoluteUrl(String.format("/videos/%s/captions", videoId)), 60, null, prefKeyOauthTokenT);
|
String response = new HttpsConnection(context).get(getAbsoluteUrl(String.format("/videos/%s/captions", videoId)), 60, null, prefKeyOauthTokenT);
|
||||||
Log.v(Helper.TAG, "response: " + response);
|
|
||||||
JSONArray jsonArray = new JSONObject(response).getJSONArray("data");
|
JSONArray jsonArray = new JSONObject(response).getJSONArray("data");
|
||||||
List<Caption> captions = parseCaption(jsonArray);
|
List<Caption> captions = parseCaption(jsonArray);
|
||||||
apiResponse.setCaptions(captions);
|
apiResponse.setCaptions(captions);
|
||||||
|
|
|
@ -25,6 +25,7 @@ import androidx.lifecycle.LiveData;
|
||||||
import androidx.lifecycle.MutableLiveData;
|
import androidx.lifecycle.MutableLiveData;
|
||||||
|
|
||||||
import app.fedilab.fedilabtube.client.APIResponse;
|
import app.fedilab.fedilabtube.client.APIResponse;
|
||||||
|
import app.fedilab.fedilabtube.client.HttpsConnection;
|
||||||
import app.fedilab.fedilabtube.client.PeertubeAPI;
|
import app.fedilab.fedilabtube.client.PeertubeAPI;
|
||||||
|
|
||||||
|
|
||||||
|
@ -41,6 +42,12 @@ public class CaptionsVM extends AndroidViewModel {
|
||||||
return apiResponseMutableLiveData;
|
return apiResponseMutableLiveData;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public LiveData<APIResponse> loadCaption(String url) {
|
||||||
|
apiResponseMutableLiveData = new MutableLiveData<>();
|
||||||
|
load(url);
|
||||||
|
return apiResponseMutableLiveData;
|
||||||
|
}
|
||||||
|
|
||||||
private void loadCaptions(String videoId) {
|
private void loadCaptions(String videoId) {
|
||||||
Context _mContext = getApplication().getApplicationContext();
|
Context _mContext = getApplication().getApplicationContext();
|
||||||
new Thread(() -> {
|
new Thread(() -> {
|
||||||
|
@ -55,4 +62,21 @@ public class CaptionsVM extends AndroidViewModel {
|
||||||
}
|
}
|
||||||
}).start();
|
}).start();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void load(String url) {
|
||||||
|
Context _mContext = getApplication().getApplicationContext();
|
||||||
|
new Thread(() -> {
|
||||||
|
try {
|
||||||
|
String captionText = new HttpsConnection(_mContext).get(url);
|
||||||
|
APIResponse apiResponse = new APIResponse();
|
||||||
|
apiResponse.setCaptionText(captionText);
|
||||||
|
Handler mainHandler = new Handler(Looper.getMainLooper());
|
||||||
|
Runnable myRunnable = () -> apiResponseMutableLiveData.setValue(apiResponse);
|
||||||
|
mainHandler.post(myRunnable);
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}).start();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue