Merge pull request #1516 from Somethingweirdhere/LongTapInSubs
Long-tap delete and share in subscriptions
This commit is contained in:
commit
4e1bcdf209
4 changed files with 99 additions and 1 deletions
|
@ -47,6 +47,13 @@ public class ChannelMiniInfoItemHolder extends InfoItemHolder {
|
||||||
itemBuilder.getOnChannelSelectedListener().selected(item);
|
itemBuilder.getOnChannelSelectedListener().selected(item);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
itemView.setOnLongClickListener(view -> {
|
||||||
|
if (itemBuilder.getOnChannelSelectedListener() != null) {
|
||||||
|
itemBuilder.getOnChannelSelectedListener().held(item);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
protected String getDetailLine(final ChannelInfoItem item) {
|
protected String getDetailLine(final ChannelInfoItem item) {
|
||||||
|
|
|
@ -1,8 +1,11 @@
|
||||||
package org.schabi.newpipe.local.subscription;
|
package org.schabi.newpipe.local.subscription;
|
||||||
|
|
||||||
|
import android.annotation.SuppressLint;
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
|
import android.app.AlertDialog;
|
||||||
import android.content.BroadcastReceiver;
|
import android.content.BroadcastReceiver;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
import android.content.DialogInterface;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.IntentFilter;
|
import android.content.IntentFilter;
|
||||||
import android.graphics.Color;
|
import android.graphics.Color;
|
||||||
|
@ -42,6 +45,8 @@ import org.schabi.newpipe.info_list.InfoListAdapter;
|
||||||
import org.schabi.newpipe.report.UserAction;
|
import org.schabi.newpipe.report.UserAction;
|
||||||
import org.schabi.newpipe.local.subscription.services.SubscriptionsExportService;
|
import org.schabi.newpipe.local.subscription.services.SubscriptionsExportService;
|
||||||
import org.schabi.newpipe.local.subscription.services.SubscriptionsImportService;
|
import org.schabi.newpipe.local.subscription.services.SubscriptionsImportService;
|
||||||
|
import org.schabi.newpipe.report.ErrorActivity;
|
||||||
|
import org.schabi.newpipe.report.UserAction;
|
||||||
import org.schabi.newpipe.util.FilePickerActivityHelper;
|
import org.schabi.newpipe.util.FilePickerActivityHelper;
|
||||||
import org.schabi.newpipe.util.NavigationHelper;
|
import org.schabi.newpipe.util.NavigationHelper;
|
||||||
import org.schabi.newpipe.util.OnClickGesture;
|
import org.schabi.newpipe.util.OnClickGesture;
|
||||||
|
@ -318,7 +323,7 @@ public class SubscriptionFragment extends BaseStateFragment<List<SubscriptionEnt
|
||||||
super.initListeners();
|
super.initListeners();
|
||||||
|
|
||||||
infoListAdapter.setOnChannelSelectedListener(new OnClickGesture<ChannelInfoItem>() {
|
infoListAdapter.setOnChannelSelectedListener(new OnClickGesture<ChannelInfoItem>() {
|
||||||
@Override
|
|
||||||
public void selected(ChannelInfoItem selectedItem) {
|
public void selected(ChannelInfoItem selectedItem) {
|
||||||
final FragmentManager fragmentManager = getFM();
|
final FragmentManager fragmentManager = getFM();
|
||||||
NavigationHelper.openChannelFragment(fragmentManager,
|
NavigationHelper.openChannelFragment(fragmentManager,
|
||||||
|
@ -326,6 +331,11 @@ public class SubscriptionFragment extends BaseStateFragment<List<SubscriptionEnt
|
||||||
selectedItem.getUrl(),
|
selectedItem.getUrl(),
|
||||||
selectedItem.getName());
|
selectedItem.getName());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void held(ChannelInfoItem selectedItem) {
|
||||||
|
showLongTapDialog(selectedItem);
|
||||||
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
//noinspection ConstantConditions
|
//noinspection ConstantConditions
|
||||||
|
@ -336,6 +346,85 @@ public class SubscriptionFragment extends BaseStateFragment<List<SubscriptionEnt
|
||||||
importExportListHeader.setOnClickListener(v -> importExportOptions.switchState());
|
importExportListHeader.setOnClickListener(v -> importExportOptions.switchState());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void showLongTapDialog(ChannelInfoItem selectedItem) {
|
||||||
|
final Context context = getContext();
|
||||||
|
final Activity activity = getActivity();
|
||||||
|
if (context == null || context.getResources() == null || getActivity() == null) return;
|
||||||
|
|
||||||
|
final String[] commands = new String[]{
|
||||||
|
context.getResources().getString(R.string.share),
|
||||||
|
context.getResources().getString(R.string.unsubscribe)
|
||||||
|
};
|
||||||
|
|
||||||
|
final DialogInterface.OnClickListener actions = (dialogInterface, i) -> {
|
||||||
|
switch (i) {
|
||||||
|
case 0:
|
||||||
|
shareChannel(selectedItem);
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
deleteChannel(selectedItem);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
final View bannerView = View.inflate(activity, R.layout.dialog_title, null);
|
||||||
|
bannerView.setSelected(true);
|
||||||
|
|
||||||
|
TextView titleView = bannerView.findViewById(R.id.itemTitleView);
|
||||||
|
titleView.setText(selectedItem.getName());
|
||||||
|
|
||||||
|
TextView detailsView = bannerView.findViewById(R.id.itemAdditionalDetails);
|
||||||
|
detailsView.setVisibility(View.GONE);
|
||||||
|
|
||||||
|
new AlertDialog.Builder(activity)
|
||||||
|
.setCustomTitle(bannerView)
|
||||||
|
.setItems(commands, actions)
|
||||||
|
.create()
|
||||||
|
.show();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void shareChannel (ChannelInfoItem selectedItem) {
|
||||||
|
shareUrl(selectedItem.getName(), selectedItem.getUrl());
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressLint("CheckResult")
|
||||||
|
private void deleteChannel (ChannelInfoItem selectedItem) {
|
||||||
|
subscriptionService.subscriptionTable()
|
||||||
|
.getSubscription(selectedItem.getServiceId(), selectedItem.getUrl())
|
||||||
|
.toObservable()
|
||||||
|
.observeOn(Schedulers.io())
|
||||||
|
.subscribe(getDeleteObserver());
|
||||||
|
|
||||||
|
Toast.makeText(activity, getString(R.string.channel_unsubscribed), Toast.LENGTH_SHORT).show();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
private Observer<List<SubscriptionEntity>> getDeleteObserver(){
|
||||||
|
return new Observer<List<SubscriptionEntity>>() {
|
||||||
|
@Override
|
||||||
|
public void onSubscribe(Disposable d) {
|
||||||
|
disposables.add(d);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onNext(List<SubscriptionEntity> subscriptionEntities) {
|
||||||
|
subscriptionService.subscriptionTable().delete(subscriptionEntities);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onError(Throwable exception) {
|
||||||
|
SubscriptionFragment.this.onError(exception);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onComplete() { }
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
private void resetFragment() {
|
private void resetFragment() {
|
||||||
if (disposables != null) disposables.clear();
|
if (disposables != null) disposables.clear();
|
||||||
if (infoListAdapter != null) infoListAdapter.clearStreamItemList();
|
if (infoListAdapter != null) infoListAdapter.clearStreamItemList();
|
||||||
|
|
|
@ -32,6 +32,7 @@ import org.schabi.newpipe.extractor.Info;
|
||||||
import org.schabi.newpipe.extractor.ListExtractor.InfoItemsPage;
|
import org.schabi.newpipe.extractor.ListExtractor.InfoItemsPage;
|
||||||
import org.schabi.newpipe.extractor.NewPipe;
|
import org.schabi.newpipe.extractor.NewPipe;
|
||||||
import org.schabi.newpipe.extractor.channel.ChannelInfo;
|
import org.schabi.newpipe.extractor.channel.ChannelInfo;
|
||||||
|
import org.schabi.newpipe.extractor.channel.ChannelInfoItem;
|
||||||
import org.schabi.newpipe.extractor.exceptions.ContentNotAvailableException;
|
import org.schabi.newpipe.extractor.exceptions.ContentNotAvailableException;
|
||||||
import org.schabi.newpipe.extractor.exceptions.ParsingException;
|
import org.schabi.newpipe.extractor.exceptions.ParsingException;
|
||||||
import org.schabi.newpipe.extractor.exceptions.ReCaptchaException;
|
import org.schabi.newpipe.extractor.exceptions.ReCaptchaException;
|
||||||
|
|
|
@ -27,6 +27,7 @@
|
||||||
<string name="rss_button_title" translatable="false">RSS</string>
|
<string name="rss_button_title" translatable="false">RSS</string>
|
||||||
<string name="subscribe_button_title">Subscribe</string>
|
<string name="subscribe_button_title">Subscribe</string>
|
||||||
<string name="subscribed_button_title">Subscribed</string>
|
<string name="subscribed_button_title">Subscribed</string>
|
||||||
|
<string name="unsubscribe">Unsubscribe</string>
|
||||||
<string name="channel_unsubscribed">Channel unsubscribed</string>
|
<string name="channel_unsubscribed">Channel unsubscribed</string>
|
||||||
<string name="subscription_change_failed">Could not change subscription</string>
|
<string name="subscription_change_failed">Could not change subscription</string>
|
||||||
<string name="subscription_update_failed">Could not update subscription</string>
|
<string name="subscription_update_failed">Could not update subscription</string>
|
||||||
|
|
Loading…
Reference in a new issue