174 lines
6.6 KiB
Java
174 lines
6.6 KiB
Java
|
package app.fedilab.fedilabtube;
|
||
|
|
||
|
|
||
|
import android.os.AsyncTask;
|
||
|
import android.os.Bundle;
|
||
|
import android.view.MenuItem;
|
||
|
import android.view.View;
|
||
|
import android.widget.RelativeLayout;
|
||
|
import android.widget.Toast;
|
||
|
|
||
|
import androidx.annotation.NonNull;
|
||
|
import androidx.appcompat.app.AppCompatActivity;
|
||
|
import androidx.recyclerview.widget.LinearLayoutManager;
|
||
|
import androidx.recyclerview.widget.RecyclerView;
|
||
|
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
|
||
|
|
||
|
import java.util.ArrayList;
|
||
|
import java.util.List;
|
||
|
|
||
|
import app.fedilab.fedilabtube.asynctasks.ManagePlaylistsAsyncTask;
|
||
|
import app.fedilab.fedilabtube.client.APIResponse;
|
||
|
import app.fedilab.fedilabtube.client.entities.Peertube;
|
||
|
import app.fedilab.fedilabtube.client.entities.Playlist;
|
||
|
import app.fedilab.fedilabtube.drawer.PeertubeAdapter;
|
||
|
import app.fedilab.fedilabtube.interfaces.OnPlaylistActionInterface;
|
||
|
import es.dmoral.toasty.Toasty;
|
||
|
|
||
|
import static app.fedilab.fedilabtube.asynctasks.ManagePlaylistsAsyncTask.action.GET_LIST_VIDEOS;
|
||
|
|
||
|
|
||
|
public class PlaylistsActivity extends AppCompatActivity implements OnPlaylistActionInterface {
|
||
|
|
||
|
|
||
|
LinearLayoutManager mLayoutManager;
|
||
|
private RelativeLayout mainLoader, nextElementLoader, textviewNoAction;
|
||
|
private SwipeRefreshLayout swipeRefreshLayout;
|
||
|
private boolean swiped;
|
||
|
private List<Peertube> peertubes;
|
||
|
private String max_id;
|
||
|
private Playlist playlist;
|
||
|
private boolean firstLoad;
|
||
|
private boolean flag_loading;
|
||
|
private PeertubeAdapter peertubeAdapter;
|
||
|
|
||
|
@Override
|
||
|
protected void onCreate(Bundle savedInstanceState) {
|
||
|
super.onCreate(savedInstanceState);
|
||
|
|
||
|
if (getSupportActionBar() != null)
|
||
|
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||
|
|
||
|
|
||
|
setContentView(R.layout.activity_playlists);
|
||
|
peertubes = new ArrayList<>();
|
||
|
|
||
|
RecyclerView lv_playlist = findViewById(R.id.lv_playlist);
|
||
|
mainLoader = findViewById(R.id.loader);
|
||
|
nextElementLoader = findViewById(R.id.loading_next_status);
|
||
|
textviewNoAction = findViewById(R.id.no_action);
|
||
|
mainLoader.setVisibility(View.VISIBLE);
|
||
|
swipeRefreshLayout = findViewById(R.id.swipeContainer);
|
||
|
|
||
|
|
||
|
max_id = null;
|
||
|
flag_loading = true;
|
||
|
firstLoad = true;
|
||
|
swiped = false;
|
||
|
|
||
|
|
||
|
mainLoader.setVisibility(View.VISIBLE);
|
||
|
nextElementLoader.setVisibility(View.GONE);
|
||
|
|
||
|
peertubeAdapter = new PeertubeAdapter(this.peertubes);
|
||
|
|
||
|
lv_playlist.setAdapter(peertubeAdapter);
|
||
|
mLayoutManager = new LinearLayoutManager(PlaylistsActivity.this);
|
||
|
lv_playlist.setLayoutManager(mLayoutManager);
|
||
|
|
||
|
Bundle b = getIntent().getExtras();
|
||
|
if (b != null) {
|
||
|
playlist = b.getParcelable("playlist");
|
||
|
} else {
|
||
|
Toasty.error(PlaylistsActivity.this, getString(R.string.toast_error_search), Toast.LENGTH_LONG).show();
|
||
|
return;
|
||
|
}
|
||
|
if (getSupportActionBar() != null)
|
||
|
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||
|
|
||
|
setTitle(playlist.getDisplayName());
|
||
|
|
||
|
|
||
|
lv_playlist.addOnScrollListener(new RecyclerView.OnScrollListener() {
|
||
|
public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
|
||
|
int firstVisibleItem = mLayoutManager.findFirstVisibleItemPosition();
|
||
|
if (dy > 0) {
|
||
|
int visibleItemCount = mLayoutManager.getChildCount();
|
||
|
int totalItemCount = mLayoutManager.getItemCount();
|
||
|
if (firstVisibleItem + visibleItemCount == totalItemCount) {
|
||
|
if (!flag_loading) {
|
||
|
flag_loading = true;
|
||
|
new ManagePlaylistsAsyncTask(PlaylistsActivity.this, GET_LIST_VIDEOS, playlist, null, max_id, PlaylistsActivity.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
|
||
|
nextElementLoader.setVisibility(View.VISIBLE);
|
||
|
}
|
||
|
} else {
|
||
|
nextElementLoader.setVisibility(View.GONE);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
});
|
||
|
|
||
|
|
||
|
swipeRefreshLayout.setOnRefreshListener(() -> {
|
||
|
max_id = null;
|
||
|
firstLoad = true;
|
||
|
flag_loading = true;
|
||
|
swiped = true;
|
||
|
new ManagePlaylistsAsyncTask(PlaylistsActivity.this, GET_LIST_VIDEOS, playlist, null, null, PlaylistsActivity.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
|
||
|
});
|
||
|
|
||
|
new ManagePlaylistsAsyncTask(PlaylistsActivity.this, GET_LIST_VIDEOS, playlist, null, null, PlaylistsActivity.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
|
||
|
}
|
||
|
|
||
|
|
||
|
@Override
|
||
|
public boolean onOptionsItemSelected(MenuItem item) {
|
||
|
if (item.getItemId() == android.R.id.home) {
|
||
|
finish();
|
||
|
return true;
|
||
|
}
|
||
|
return super.onOptionsItemSelected(item);
|
||
|
}
|
||
|
|
||
|
|
||
|
@Override
|
||
|
public void onActionDone(ManagePlaylistsAsyncTask.action actionType, APIResponse apiResponse, int statusCode) {
|
||
|
mainLoader.setVisibility(View.GONE);
|
||
|
nextElementLoader.setVisibility(View.GONE);
|
||
|
//Discards 404 - error which can often happen due to toots which have been deleted
|
||
|
if (apiResponse.getError() != null) {
|
||
|
if (!apiResponse.getError().getError().startsWith("404 -") && !apiResponse.getError().getError().startsWith("501 -"))
|
||
|
Toasty.error(PlaylistsActivity.this, apiResponse.getError().getError(), Toast.LENGTH_LONG).show();
|
||
|
swipeRefreshLayout.setRefreshing(false);
|
||
|
swiped = false;
|
||
|
flag_loading = false;
|
||
|
return;
|
||
|
}
|
||
|
if (actionType == GET_LIST_VIDEOS) {
|
||
|
|
||
|
int previousPosition = this.peertubes.size();
|
||
|
List<Peertube> videos = apiResponse.getPeertubes();
|
||
|
max_id = apiResponse.getMax_id();
|
||
|
flag_loading = (max_id == null);
|
||
|
if (!swiped && firstLoad && (videos == null || videos.size() == 0))
|
||
|
textviewNoAction.setVisibility(View.VISIBLE);
|
||
|
else
|
||
|
textviewNoAction.setVisibility(View.GONE);
|
||
|
|
||
|
if (swiped) {
|
||
|
if (previousPosition > 0) {
|
||
|
this.peertubes.subList(0, previousPosition).clear();
|
||
|
peertubeAdapter.notifyItemRangeRemoved(0, previousPosition);
|
||
|
}
|
||
|
swiped = false;
|
||
|
}
|
||
|
if (videos != null && videos.size() > 0) {
|
||
|
this.peertubes.addAll(videos);
|
||
|
peertubeAdapter.notifyItemRangeInserted(previousPosition, videos.size());
|
||
|
}
|
||
|
swipeRefreshLayout.setRefreshing(false);
|
||
|
firstLoad = false;
|
||
|
}
|
||
|
}
|
||
|
}
|