Fix channel filter for subscriptions
This commit is contained in:
parent
3f1883fbbc
commit
23875a2ceb
|
@ -28,6 +28,7 @@ import android.widget.Spinner;
|
|||
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
import androidx.constraintlayout.widget.ConstraintLayout;
|
||||
import androidx.fragment.app.Fragment;
|
||||
import androidx.fragment.app.FragmentTransaction;
|
||||
|
||||
import com.mancj.materialsearchbar.MaterialSearchBar;
|
||||
|
@ -328,6 +329,10 @@ public class SepiaSearchActivity extends AppCompatActivity {
|
|||
}else{
|
||||
sepiaSearchVideo.setTagsAllOf(null);
|
||||
}
|
||||
|
||||
Fragment fragment = getSupportFragmentManager().findFragmentByTag("SEPIA_SEARCH");
|
||||
if(fragment != null)
|
||||
getSupportFragmentManager().beginTransaction().remove(fragment).commit();
|
||||
filter_elements.setVisibility(View.GONE);
|
||||
sepiaSearchVideo.setSearch(searchBar.getText());
|
||||
DisplaySepiaSearchFragment displaySepiaSearchFragment = new DisplaySepiaSearchFragment();
|
||||
|
@ -335,7 +340,7 @@ public class SepiaSearchActivity extends AppCompatActivity {
|
|||
bundle.putParcelable("sepiaSearchVideo", sepiaSearchVideo);
|
||||
displaySepiaSearchFragment.setArguments(bundle);
|
||||
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
|
||||
ft.add(R.id.container, displaySepiaSearchFragment).commit();
|
||||
ft.add(R.id.container, displaySepiaSearchFragment,"SEPIA_SEARCH").commit();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -288,7 +288,7 @@ public interface PeertubeService {
|
|||
//Subscribe/Unsubscribe
|
||||
//subscribers
|
||||
@GET("users/me/subscriptions")
|
||||
Call<AccountData> getSubscription(@Header("Authorization") String credentials, @Query("start") String maxId, @Query("count") String count);
|
||||
Call<ChannelData> getSubscription(@Header("Authorization") String credentials, @Query("start") String maxId, @Query("count") String count);
|
||||
|
||||
@GET("users/me/subscriptions/exist")
|
||||
Call<Map<String, Boolean>> getSubscriptionsExist(@Header("Authorization") String credentials, @Query("uris") List<String> uris);
|
||||
|
|
|
@ -311,7 +311,7 @@ public class RetrofitPeertubeAPI {
|
|||
return apiResponse;
|
||||
}
|
||||
|
||||
public APIResponse getTL(TimelineVM.TimelineType timelineType, String max_id) {
|
||||
public APIResponse getTL(TimelineVM.TimelineType timelineType, String max_id, String forAccount) {
|
||||
APIResponse apiResponse = new APIResponse();
|
||||
PeertubeService peertubeService = init();
|
||||
Call<VideoData> videoCall = null;
|
||||
|
@ -321,7 +321,11 @@ public class RetrofitPeertubeAPI {
|
|||
videoCall = peertubeService.getMyVideos(getToken(), max_id, count);
|
||||
break;
|
||||
case SUBSCRIBTIONS:
|
||||
if (forAccount == null) {
|
||||
videoCall = peertubeService.getSubscriptionVideos(getToken(), max_id, count, filter);
|
||||
} else {
|
||||
videoCall = peertubeService.getChannelVideos(forAccount, max_id, count);
|
||||
}
|
||||
break;
|
||||
case MOST_LIKED:
|
||||
videoCall = peertubeService.getMostLikedVideos(max_id, count, filter);
|
||||
|
@ -870,13 +874,13 @@ public class RetrofitPeertubeAPI {
|
|||
*/
|
||||
public APIResponse getSubscribtions(String maxId) {
|
||||
PeertubeService peertubeService = init();
|
||||
Call<AccountData> accountDataCall = peertubeService.getSubscription("Bearer " + token, maxId, count);
|
||||
Call<ChannelData> channelDataCall = peertubeService.getSubscription("Bearer " + token, maxId, count);
|
||||
APIResponse apiResponse = new APIResponse();
|
||||
if (accountDataCall != null) {
|
||||
if (channelDataCall != null) {
|
||||
try {
|
||||
Response<AccountData> response = accountDataCall.execute();
|
||||
Response<ChannelData> response = channelDataCall.execute();
|
||||
if (response.isSuccessful() && response.body() != null) {
|
||||
apiResponse.setAccounts(response.body().data);
|
||||
apiResponse.setChannels(response.body().data);
|
||||
} else {
|
||||
setError(apiResponse, response.code(), response.errorBody());
|
||||
}
|
||||
|
|
|
@ -77,7 +77,7 @@ public class AccountData {
|
|||
private String client_id;
|
||||
private String client_secret;
|
||||
private String refresh_token;
|
||||
private boolean selected;
|
||||
|
||||
|
||||
public Account() {
|
||||
}
|
||||
|
@ -197,14 +197,6 @@ public class AccountData {
|
|||
this.url = url;
|
||||
}
|
||||
|
||||
public boolean isSelected() {
|
||||
return selected;
|
||||
}
|
||||
|
||||
public void setSelected(boolean selected) {
|
||||
this.selected = selected;
|
||||
}
|
||||
|
||||
public String getAcct() {
|
||||
return name + "@" + host;
|
||||
}
|
||||
|
|
|
@ -80,6 +80,7 @@ public class ChannelData {
|
|||
@SerializedName("viewsPerDay")
|
||||
private List<ViewsPerDay> viewsPerDays;
|
||||
private String acct;
|
||||
private boolean selected;
|
||||
|
||||
public Channel() {
|
||||
}
|
||||
|
@ -243,6 +244,14 @@ public class ChannelData {
|
|||
this.viewsPerDays = viewsPerDays;
|
||||
}
|
||||
|
||||
public boolean isSelected() {
|
||||
return selected;
|
||||
}
|
||||
|
||||
public void setSelected(boolean selected) {
|
||||
this.selected = selected;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int describeContents() {
|
||||
return 0;
|
||||
|
|
|
@ -31,18 +31,18 @@ import androidx.recyclerview.widget.RecyclerView;
|
|||
import java.util.List;
|
||||
|
||||
import app.fedilab.fedilabtube.R;
|
||||
import app.fedilab.fedilabtube.client.data.AccountData.Account;
|
||||
import app.fedilab.fedilabtube.client.data.ChannelData;
|
||||
import app.fedilab.fedilabtube.helper.Helper;
|
||||
|
||||
|
||||
public class AccountsHorizontalListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
|
||||
|
||||
EventListener listener;
|
||||
private List<Account> accounts;
|
||||
private List<ChannelData.Channel> channels;
|
||||
private Context context;
|
||||
|
||||
public AccountsHorizontalListAdapter(List<Account> accounts, EventListener listener) {
|
||||
this.accounts = accounts;
|
||||
public AccountsHorizontalListAdapter(List<ChannelData.Channel> channels, EventListener listener) {
|
||||
this.channels = channels;
|
||||
this.listener = listener;
|
||||
}
|
||||
|
||||
|
@ -57,17 +57,17 @@ public class AccountsHorizontalListAdapter extends RecyclerView.Adapter<Recycler
|
|||
@Override
|
||||
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int position) {
|
||||
final AccountsHorizontalListAdapter.ViewHolder holder = (AccountsHorizontalListAdapter.ViewHolder) viewHolder;
|
||||
final Account account = accounts.get(position);
|
||||
final ChannelData.Channel channel = channels.get(position);
|
||||
|
||||
if (account.getDisplayName() != null && !account.getDisplayName().trim().equals(""))
|
||||
holder.account_dn.setText(account.getDisplayName());
|
||||
if (channel.getDisplayName() != null && !channel.getDisplayName().trim().equals(""))
|
||||
holder.account_dn.setText(channel.getDisplayName());
|
||||
else
|
||||
holder.account_dn.setText(account.getUsername().replace("@", ""));
|
||||
holder.account_dn.setText(channel.getName().replace("@", ""));
|
||||
|
||||
//Profile picture
|
||||
Helper.loadGiF(context, account.getAvatar() != null ? account.getAvatar().getPath() : null, holder.account_pp, 270);
|
||||
Helper.loadGiF(context, channel.getAvatar() != null ? channel.getAvatar().getPath() : null, holder.account_pp, 270);
|
||||
|
||||
if (account.isSelected()) {
|
||||
if (channel.isSelected()) {
|
||||
holder.main_container.setBackgroundColor(ColorUtils.setAlphaComponent(ContextCompat.getColor(context, Helper.getColorAccent()), 50));
|
||||
} else {
|
||||
holder.main_container.setBackgroundColor(Color.TRANSPARENT);
|
||||
|
@ -82,7 +82,7 @@ public class AccountsHorizontalListAdapter extends RecyclerView.Adapter<Recycler
|
|||
|
||||
@Override
|
||||
public int getItemCount() {
|
||||
return accounts.size();
|
||||
return channels.size();
|
||||
}
|
||||
|
||||
|
||||
|
@ -106,16 +106,16 @@ public class AccountsHorizontalListAdapter extends RecyclerView.Adapter<Recycler
|
|||
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
Account account = accounts.get(getAdapterPosition());
|
||||
listener.click(account.getId());
|
||||
for (Account acc : accounts) {
|
||||
if (acc.getId().compareTo(account.getId()) == 0) {
|
||||
ChannelData.Channel channel = channels.get(getAdapterPosition());
|
||||
listener.click(channel.getAcct());
|
||||
for (ChannelData.Channel acc : channels) {
|
||||
if (acc.getId().compareTo(channel.getId()) == 0) {
|
||||
acc.setSelected(true);
|
||||
} else {
|
||||
acc.setSelected(false);
|
||||
}
|
||||
}
|
||||
notifyItemRangeChanged(0, accounts.size());
|
||||
notifyItemRangeChanged(0, channels.size());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -47,7 +47,7 @@ import java.util.Map;
|
|||
import app.fedilab.fedilabtube.R;
|
||||
import app.fedilab.fedilabtube.client.APIResponse;
|
||||
import app.fedilab.fedilabtube.client.RetrofitPeertubeAPI;
|
||||
import app.fedilab.fedilabtube.client.data.AccountData.Account;
|
||||
import app.fedilab.fedilabtube.client.data.ChannelData;
|
||||
import app.fedilab.fedilabtube.client.data.VideoData;
|
||||
import app.fedilab.fedilabtube.client.data.VideoPlaylistData;
|
||||
import app.fedilab.fedilabtube.client.entities.PlaylistExist;
|
||||
|
@ -73,7 +73,7 @@ public class DisplayVideosFragment extends Fragment implements AccountsHorizonta
|
|||
private AccountsHorizontalListAdapter accountsHorizontalListAdapter;
|
||||
private String max_id, max_id_accounts;
|
||||
private List<VideoData.Video> peertubes;
|
||||
private List<Account> accounts;
|
||||
private List<ChannelData.Channel> channels;
|
||||
private TimelineVM.TimelineType type;
|
||||
private RelativeLayout mainLoader, nextElementLoader, textviewNoAction;
|
||||
private boolean firstLoad;
|
||||
|
@ -104,7 +104,7 @@ public class DisplayVideosFragment extends Fragment implements AccountsHorizonta
|
|||
|
||||
|
||||
peertubes = new ArrayList<>();
|
||||
accounts = new ArrayList<>();
|
||||
channels = new ArrayList<>();
|
||||
context = getContext();
|
||||
Bundle bundle = this.getArguments();
|
||||
if (bundle != null) {
|
||||
|
@ -140,7 +140,7 @@ public class DisplayVideosFragment extends Fragment implements AccountsHorizonta
|
|||
peertubeAdapater.relationShipListener = this;
|
||||
lv_status.setAdapter(peertubeAdapater);
|
||||
|
||||
accountsHorizontalListAdapter = new AccountsHorizontalListAdapter(this.accounts, this);
|
||||
accountsHorizontalListAdapter = new AccountsHorizontalListAdapter(this.channels, this);
|
||||
LinearLayoutManager layoutManager
|
||||
= new LinearLayoutManager(context, LinearLayoutManager.HORIZONTAL, false);
|
||||
lv_accounts.setLayoutManager(layoutManager);
|
||||
|
@ -281,13 +281,13 @@ public class DisplayVideosFragment extends Fragment implements AccountsHorizonta
|
|||
|
||||
|
||||
private void manageViewAccounts(APIResponse apiResponse) {
|
||||
if (apiResponse != null && apiResponse.getAccounts() != null && apiResponse.getAccounts().size() > 0) {
|
||||
if (apiResponse != null && apiResponse.getChannels() != null && apiResponse.getChannels().size() > 0) {
|
||||
if (top_account_container.getVisibility() == View.GONE) {
|
||||
top_account_container.setVisibility(View.VISIBLE);
|
||||
}
|
||||
int previousPosition = accounts.size();
|
||||
accounts.addAll(apiResponse.getAccounts());
|
||||
accountsHorizontalListAdapter.notifyItemRangeInserted(previousPosition, apiResponse.getAccounts().size());
|
||||
int previousPosition = channels.size();
|
||||
channels.addAll(apiResponse.getChannels());
|
||||
accountsHorizontalListAdapter.notifyItemRangeInserted(previousPosition, apiResponse.getChannels().size());
|
||||
if (max_id_accounts == null) {
|
||||
max_id_accounts = "0";
|
||||
}
|
||||
|
@ -434,10 +434,10 @@ public class DisplayVideosFragment extends Fragment implements AccountsHorizonta
|
|||
max_id = "0";
|
||||
peertubeAdapater.notifyItemRangeRemoved(0, size);
|
||||
if (forAccount == null) {
|
||||
for (Account account : accounts) {
|
||||
account.setSelected(false);
|
||||
for (ChannelData.Channel channel : channels) {
|
||||
channel.setSelected(false);
|
||||
}
|
||||
accountsHorizontalListAdapter.notifyItemRangeRemoved(0, accounts.size());
|
||||
accountsHorizontalListAdapter.notifyItemRangeRemoved(0, channels.size());
|
||||
}
|
||||
loadTimeline("0");
|
||||
}
|
||||
|
@ -461,7 +461,7 @@ public class DisplayVideosFragment extends Fragment implements AccountsHorizonta
|
|||
|
||||
viewModelFeeds.loadVideosInPlaylist(playlistId, max_id).observe(this.requireActivity(), this::manageVIewVideos);
|
||||
} else {
|
||||
viewModelFeeds.getVideos(type, max_id).observe(this.requireActivity(), this::manageVIewVideos);
|
||||
viewModelFeeds.getVideos(type, max_id, forAccount).observe(this.requireActivity(), this::manageVIewVideos);
|
||||
}
|
||||
} else {
|
||||
viewModelSearch.getVideos(max_id, search_peertube).observe(this.requireActivity(), this::manageVIewVideos);
|
||||
|
|
|
@ -38,9 +38,9 @@ public class TimelineVM extends AndroidViewModel {
|
|||
super(application);
|
||||
}
|
||||
|
||||
public LiveData<APIResponse> getVideos(TimelineType action, String max_id) {
|
||||
public LiveData<APIResponse> getVideos(TimelineType action, String max_id, String forAccount) {
|
||||
apiResponseMutableLiveData = new MutableLiveData<>();
|
||||
loadVideos(action, max_id);
|
||||
loadVideos(action, max_id, forAccount);
|
||||
return apiResponseMutableLiveData;
|
||||
}
|
||||
|
||||
|
@ -133,7 +133,7 @@ public class TimelineVM extends AndroidViewModel {
|
|||
}).start();
|
||||
}
|
||||
|
||||
private void loadVideos(TimelineType timeline, String max_id) {
|
||||
private void loadVideos(TimelineType timeline, String max_id, String forAccount) {
|
||||
Context _mContext = getApplication().getApplicationContext();
|
||||
new Thread(() -> {
|
||||
try {
|
||||
|
@ -141,7 +141,7 @@ public class TimelineVM extends AndroidViewModel {
|
|||
if (timeline == null)
|
||||
return;
|
||||
APIResponse apiResponse;
|
||||
apiResponse = retrofitPeertubeAPI.getTL(timeline, max_id);
|
||||
apiResponse = retrofitPeertubeAPI.getTL(timeline, max_id, forAccount);
|
||||
Handler mainHandler = new Handler(Looper.getMainLooper());
|
||||
Runnable myRunnable = () -> apiResponseMutableLiveData.setValue(apiResponse);
|
||||
mainHandler.post(myRunnable);
|
||||
|
|
Loading…
Reference in New Issue