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.RecyclerView;
|
||||
|
||||
import com.google.android.exoplayer2.C;
|
||||
import com.google.android.exoplayer2.ExoPlayerFactory;
|
||||
import com.google.android.exoplayer2.Format;
|
||||
import com.google.android.exoplayer2.SimpleExoPlayer;
|
||||
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.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.PlayerControlView;
|
||||
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.DefaultBandwidthMeter;
|
||||
import com.google.android.exoplayer2.upstream.DefaultDataSourceFactory;
|
||||
import com.google.android.exoplayer2.util.MimeTypes;
|
||||
import com.google.android.exoplayer2.util.Util;
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.security.KeyManagementException;
|
||||
import java.security.NoSuchAlgorithmException;
|
||||
import java.util.ArrayList;
|
||||
|
@ -111,6 +121,7 @@ import app.fedilab.fedilabtube.webview.MastalabWebViewClient;
|
|||
import es.dmoral.toasty.Toasty;
|
||||
|
||||
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.viewmodel.PlaylistsVM.action.GET_PLAYLIST;
|
||||
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 onStopCalled;
|
||||
private List<Caption> captions;
|
||||
private String captionValue;
|
||||
|
||||
public static void hideKeyboard(Activity activity) {
|
||||
if (activity != null && activity.getWindow() != null) {
|
||||
|
@ -684,7 +694,45 @@ public class PeertubeActivity extends AppCompatActivity {
|
|||
}
|
||||
}
|
||||
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 -> {
|
||||
|
@ -748,6 +796,7 @@ public class PeertubeActivity extends AppCompatActivity {
|
|||
change();
|
||||
}
|
||||
|
||||
|
||||
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)
|
||||
|
|
|
@ -45,6 +45,7 @@ public class APIResponse {
|
|||
private List<Instance> instances;
|
||||
private String stringData;
|
||||
private int statusCode;
|
||||
private String captionText;
|
||||
|
||||
public List<Account> getAccounts() {
|
||||
return accounts;
|
||||
|
@ -180,4 +181,12 @@ public class APIResponse {
|
|||
public void setCaptions(List<Caption> 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.text.Html;
|
||||
import android.text.SpannableString;
|
||||
import android.util.Log;
|
||||
|
||||
import org.json.JSONArray;
|
||||
import org.json.JSONException;
|
||||
|
@ -1010,7 +1009,6 @@ public class PeertubeAPI {
|
|||
apiResponse = new APIResponse();
|
||||
try {
|
||||
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");
|
||||
List<Caption> captions = parseCaption(jsonArray);
|
||||
apiResponse.setCaptions(captions);
|
||||
|
|
|
@ -25,6 +25,7 @@ import androidx.lifecycle.LiveData;
|
|||
import androidx.lifecycle.MutableLiveData;
|
||||
|
||||
import app.fedilab.fedilabtube.client.APIResponse;
|
||||
import app.fedilab.fedilabtube.client.HttpsConnection;
|
||||
import app.fedilab.fedilabtube.client.PeertubeAPI;
|
||||
|
||||
|
||||
|
@ -41,6 +42,12 @@ public class CaptionsVM extends AndroidViewModel {
|
|||
return apiResponseMutableLiveData;
|
||||
}
|
||||
|
||||
public LiveData<APIResponse> loadCaption(String url) {
|
||||
apiResponseMutableLiveData = new MutableLiveData<>();
|
||||
load(url);
|
||||
return apiResponseMutableLiveData;
|
||||
}
|
||||
|
||||
private void loadCaptions(String videoId) {
|
||||
Context _mContext = getApplication().getApplicationContext();
|
||||
new Thread(() -> {
|
||||
|
@ -55,4 +62,21 @@ public class CaptionsVM extends AndroidViewModel {
|
|||
}
|
||||
}).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