updating share episode dialog

This commit is contained in:
Gerardo Vázquez 2020-06-26 10:58:37 -05:00
parent 1bc3639a39
commit 1b57b00fb3
5 changed files with 105 additions and 56 deletions

View File

@ -31,6 +31,7 @@ import java.text.NumberFormat;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.app.ActivityOptionsCompat;
import androidx.core.content.ContextCompat;
@ -390,8 +391,7 @@ public abstract class MediaplayerActivity extends CastEnabledActivity implements
break;
case R.id.share_item:
if (feedItem != null) {
ShareDialog shareDialog = new ShareDialog(getApplicationContext(), feedItem);
shareDialog.createDialog().show();
new ShareDialog(this, feedItem).show(((AppCompatActivity) this).getSupportFragmentManager(), "ShareEpisodeDialog");
}
break;
default:

View File

@ -1,89 +1,91 @@
package de.danoeh.antennapod.dialog;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.Switch;
import java.util.ArrayList;
import java.util.List;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AlertDialog;
import androidx.fragment.app.DialogFragment;
import de.danoeh.antennapod.R;
import de.danoeh.antennapod.core.feed.FeedItem;
import de.danoeh.antennapod.core.util.ShareUtils;
public class ShareDialog {
public class ShareDialog extends DialogFragment {
private static final String TAG = "ShareDialog";
private final Context ctx;
private AlertDialog dialog;
private List<String> shareDialogOptions;
private String[] items;
private FeedItem item;
private RadioGroup radioGroup;
private RadioButton radioEpisodeWebsite;
private RadioButton radioMediaFile;
private Switch switchStartAt;
public ShareDialog(Context ctx, FeedItem item) {
this.ctx = ctx;
this.item = item;
shareDialogOptions = new ArrayList<>();
}
public AlertDialog createDialog() {
@NonNull
@Override
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
View content = View.inflate(ctx, R.layout.share_episode_dialog, null);
AlertDialog.Builder builder = new AlertDialog.Builder(ctx);
builder.setTitle(R.string.share_episode_label);
builder.setView(content);
radioGroup = content.findViewById(R.id.share_dialog_radio_group);
radioEpisodeWebsite = content.findViewById(R.id.share_episode_website_radio);
radioMediaFile = content.findViewById(R.id.share_media_file_radio);
switchStartAt = content.findViewById(R.id.share_start_at_timer_dialog);
setupOptions();
dialog = new AlertDialog.Builder(ctx)
.setTitle(R.string.share_label)
.setItems(items, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int i) {
// The 'which' argument contains the index position
// of the selected item
if (items[i].equals(ctx.getString(R.string.share_link_label))) {
ShareUtils.shareFeedItemLink(ctx, item);
} else if (items[i].equals(ctx.getString(R.string.share_item_url_label))) {
ShareUtils.shareFeedItemDownloadLink(ctx, item);
} else if (items[i].equals(ctx.getString(R.string.share_link_with_position_label))) {
ShareUtils.shareFeedItemLink(ctx, item, true);
} else if (items[i].equals(ctx.getString(R.string.share_item_url_with_position_label))) {
ShareUtils.shareFeedItemDownloadLink(ctx, item, true);
} else if (items[i].equals(ctx.getString(R.string.share_file_label))) {
ShareUtils.shareFeedItemFile(ctx, item.getMedia());
builder
.setPositiveButton(R.string.share_label, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
if (radioEpisodeWebsite.isChecked()) {
if (switchStartAt.isChecked()) {
ShareUtils.shareFeedItemLink(ctx, item, true);
} else {
ShareUtils.shareFeedItemLink(ctx, item);
}
} else {
if (switchStartAt.isChecked()) {
ShareUtils.shareFeedItemDownloadLink(ctx, item, true);
} else {
ShareUtils.shareFeedItemDownloadLink(ctx, item);
}
}
}
})
.create();
return dialog;
.setNegativeButton(R.string.cancel_label, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.dismiss();
}
});
return builder.create();
}
private void setupOptions() {
final boolean hasMedia = item.getMedia() != null;
shareDialogOptions.add(ctx.getString(R.string.share_link_label));
shareDialogOptions.add(ctx.getString(R.string.share_link_with_position_label));
shareDialogOptions.add(ctx.getString(R.string.share_item_url_label));
shareDialogOptions.add(ctx.getString(R.string.share_item_url_with_position_label));
shareDialogOptions.add(ctx.getString(R.string.share_file_label));
if (!ShareUtils.hasLinkToShare(item)) {
shareDialogOptions.remove(ctx.getString(R.string.share_link_label));
shareDialogOptions.remove(ctx.getString(R.string.share_link_with_position_label));
radioEpisodeWebsite.setVisibility(View.GONE);
radioMediaFile.setChecked(true);
}
if (!hasMedia || item.getMedia().getDownload_url() == null) {
shareDialogOptions.remove(ctx.getString(R.string.share_item_url_label));
shareDialogOptions.remove(ctx.getString(R.string.share_item_url_with_position_label));
radioMediaFile.setVisibility(View.GONE);
radioEpisodeWebsite.setChecked(true);
}
if (!hasMedia || item.getMedia().getPosition() <= 0) {
shareDialogOptions.remove(ctx.getString(R.string.share_item_url_with_position_label));
shareDialogOptions.remove(ctx.getString(R.string.share_link_with_position_label));
}
boolean fileDownloaded = hasMedia && item.getMedia().fileExists();
if (!fileDownloaded) {
shareDialogOptions.remove(ctx.getString(R.string.share_file_label));
}
// preparing the resulting shareOptions for dialog
items = new String[shareDialogOptions.size()];
shareDialogOptions.toArray(items);
}
}

View File

@ -9,6 +9,7 @@ import android.view.MenuItem;
import com.google.android.material.snackbar.Snackbar;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import de.danoeh.antennapod.R;
import de.danoeh.antennapod.activity.MainActivity;
@ -235,8 +236,7 @@ public class FeedItemMenuHandler {
IntentUtils.openInBrowser(context, FeedItemUtil.getLinkWithFallback(selectedItem));
break;
case R.id.share_item:
ShareDialog shareDialog = new ShareDialog(context, selectedItem);
shareDialog.createDialog().show();
new ShareDialog(context, selectedItem).show(((AppCompatActivity) context).getSupportFragmentManager(), "ShareEpisodeDialog");
break;
default:
Log.d(TAG, "Unknown menuItemId: " + menuItemId);

View File

@ -0,0 +1,40 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:padding="16dp">
<RadioGroup
android:id="@+id/share_dialog_radio_group"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="16dp"
android:orientation="vertical">
<RadioButton android:id="@+id/share_episode_website_radio"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/share_dialog_episode_website_label"
android:checked="true"
/>
<RadioButton android:id="@+id/share_media_file_radio"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/share_dialog_media_file_label"
/>
</RadioGroup>
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="@string/share_dialog_include_label"/>
<Switch
android:id="@+id/share_start_at_timer_dialog"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/share_start_at_timer_dialog_label" />
</LinearLayout>

View File

@ -765,6 +765,13 @@
<string name="rating_later_label">Remind me later</string>
<string name="rating_now_label">Sure, let\'s do this!</string>
<!-- Share epidose dialog -->
<string name="share_episode_label">Share…</string>
<string name="share_dialog_include_label">Include:</string>
<string name="share_start_at_timer_dialog_label">Start at (timer)</string>
<string name="share_dialog_media_file_label">Media file URL</string>
<string name="share_dialog_episode_website_label">Episode website</string>
<!-- Audio controls -->
<string name="audio_controls">Audio controls</string>
<string name="playback_speed">Playback Speed</string>