Merge pull request #5200 from TacoTheDank/plugin-updates

Update plugins and Gradle
This commit is contained in:
ByteHamster 2021-07-24 17:47:09 +02:00 committed by GitHub
commit dbac6cae46
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
20 changed files with 422 additions and 468 deletions

View File

@ -1,7 +1,7 @@
plugins { plugins {
id('com.android.application') id('com.android.application')
id('com.getkeepsafe.dexcount') id('com.getkeepsafe.dexcount')
id('com.github.triplet.play') version '2.7.5' apply false id('com.github.triplet.play') version '3.4.0' apply false
} }
apply from: "../common.gradle" apply from: "../common.gradle"
apply from: "../playFlavor.gradle" apply from: "../playFlavor.gradle"
@ -170,8 +170,8 @@ dependencies {
if (project.hasProperty("antennaPodPlayPublisherCredentials")) { if (project.hasProperty("antennaPodPlayPublisherCredentials")) {
apply plugin: 'com.github.triplet.play' apply plugin: 'com.github.triplet.play'
play { play {
track = 'alpha' track.set('alpha')
serviceAccountCredentials = file(antennaPodPlayPublisherCredentials) serviceAccountCredentials.set(file(antennaPodPlayPublisherCredentials))
} }
} }

View File

@ -20,7 +20,7 @@ import static java.util.Collections.singletonList;
/** /**
* Test class for GpodnetService * Test class for GpodnetService
*/ */
@Ignore @Ignore("Needs valid credentials to run")
@RunWith(AndroidJUnit4.class) @RunWith(AndroidJUnit4.class)
public class GPodnetServiceTest { public class GPodnetServiceTest {

View File

@ -1,36 +0,0 @@
package de.test.antennapod.ui;
import android.content.Intent;
import androidx.test.filters.MediumTest;
import androidx.test.rule.ActivityTestRule;
import de.danoeh.antennapod.R;
import de.danoeh.antennapod.activity.VideoplayerActivity;
import org.junit.Ignore;
import org.junit.Rule;
import org.junit.Test;
import static androidx.test.espresso.Espresso.onView;
import static androidx.test.espresso.assertion.ViewAssertions.matches;
import static androidx.test.espresso.matcher.ViewMatchers.isDisplayed;
import static androidx.test.espresso.matcher.ViewMatchers.withId;
/**
* Test class for VideoplayerActivity
*/
@MediumTest
@Ignore
public class VideoplayerActivityTest {
@Rule
public ActivityTestRule<VideoplayerActivity> activityTestRule = new ActivityTestRule<>(VideoplayerActivity.class, false, false);
/**
* Test if activity can be started.
*/
@Test
public void testStartActivity() throws Exception {
activityTestRule.launchActivity(new Intent());
onView(withId(R.id.videoPlayerContainer)).check(matches(isDisplayed()));
}
}

View File

@ -1,10 +1,12 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" <manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="de.danoeh.antennapod" package="de.danoeh.antennapod"
android:installLocation="auto"> android:installLocation="auto">
<uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
tools:ignore="ScopedStorage" />
<uses-permission android:name="android.permission.WAKE_LOCK"/> <uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/> <uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
@ -353,4 +355,11 @@
android:resource="@xml/actions" /> android:resource="@xml/actions" />
</application> </application>
<queries>
<intent>
<action android:name="android.intent.action.SEND" />
<data android:mimeType="text/*" />
</intent>
</queries>
</manifest> </manifest>

View File

@ -119,20 +119,19 @@ public class OpmlFeedChooserActivity extends AppCompatActivity {
@Override @Override
public boolean onOptionsItemSelected(MenuItem item) { public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) { final int itemId = item.getItemId();
case R.id.select_all_item: if (itemId == R.id.select_all_item) {
selectAll.setVisible(false); selectAll.setVisible(false);
selectAllItems(true); selectAllItems(true);
deselectAll.setVisible(true); deselectAll.setVisible(true);
return true; return true;
case R.id.deselect_all_item: } else if (itemId == R.id.deselect_all_item) {
deselectAll.setVisible(false); deselectAll.setVisible(false);
selectAllItems(false); selectAllItems(false);
selectAll.setVisible(true); selectAll.setVisible(true);
return true; return true;
default:
return false;
} }
return false;
} }
private void selectAllItems(boolean b) { private void selectAllItems(boolean b) {

View File

@ -88,30 +88,28 @@ public class PreferenceActivity extends AppCompatActivity implements SearchPrefe
} }
public static int getTitleOfPage(int preferences) { public static int getTitleOfPage(int preferences) {
switch (preferences) { if (preferences == R.xml.preferences_network) {
case R.xml.preferences_network:
return R.string.network_pref; return R.string.network_pref;
case R.xml.preferences_autodownload: } else if (preferences == R.xml.preferences_autodownload) {
return R.string.pref_automatic_download_title; return R.string.pref_automatic_download_title;
case R.xml.preferences_playback: } else if (preferences == R.xml.preferences_playback) {
return R.string.playback_pref; return R.string.playback_pref;
case R.xml.preferences_storage: } else if (preferences == R.xml.preferences_storage) {
return R.string.storage_pref; return R.string.storage_pref;
case R.xml.preferences_import_export: } else if (preferences == R.xml.preferences_import_export) {
return R.string.import_export_pref; return R.string.import_export_pref;
case R.xml.preferences_user_interface: } else if (preferences == R.xml.preferences_user_interface) {
return R.string.user_interface_label; return R.string.user_interface_label;
case R.xml.preferences_gpodder: } else if (preferences == R.xml.preferences_gpodder) {
return R.string.gpodnet_main_label; return R.string.gpodnet_main_label;
case R.xml.preferences_notifications: } else if (preferences == R.xml.preferences_notifications) {
return R.string.notification_pref_fragment; return R.string.notification_pref_fragment;
case R.xml.feed_settings: } else if (preferences == R.xml.feed_settings) {
return R.string.feed_settings_label; return R.string.feed_settings_label;
case R.xml.preferences_swipe: } else if (preferences == R.xml.preferences_swipe) {
return R.string.swipeactions_label; return R.string.swipeactions_label;
default:
return R.string.settings_label;
} }
return R.string.settings_label;
} }
public PreferenceFragmentCompat openScreen(int screen) { public PreferenceFragmentCompat openScreen(int screen) {

View File

@ -507,16 +507,16 @@ public class AudioPlayerFragment extends Fragment implements
if (feedItem != null && FeedItemMenuHandler.onMenuItemClicked(this, item.getItemId(), feedItem)) { if (feedItem != null && FeedItemMenuHandler.onMenuItemClicked(this, item.getItemId(), feedItem)) {
return true; return true;
} }
switch (item.getItemId()) {
case R.id.disable_sleeptimer_item: // Fall-through final int itemId = item.getItemId();
case R.id.set_sleeptimer_item: if (itemId == R.id.disable_sleeptimer_item || itemId == R.id.set_sleeptimer_item) {
new SleepTimerDialog().show(getChildFragmentManager(), "SleepTimerDialog"); new SleepTimerDialog().show(getChildFragmentManager(), "SleepTimerDialog");
return true; return true;
case R.id.audio_controls: } else if (itemId == R.id.audio_controls) {
PlaybackControlsDialog dialog = PlaybackControlsDialog.newInstance(); PlaybackControlsDialog dialog = PlaybackControlsDialog.newInstance();
dialog.show(getChildFragmentManager(), "playback_controls"); dialog.show(getChildFragmentManager(), "playback_controls");
return true; return true;
case R.id.open_feed_item: } else if (itemId == R.id.open_feed_item) {
if (feedItem != null) { if (feedItem != null) {
Intent intent = MainActivity.getIntentToOpenFeed(getContext(), feedItem.getFeedId()); Intent intent = MainActivity.getIntentToOpenFeed(getContext(), feedItem.getFeedId());
startActivity(intent); startActivity(intent);

View File

@ -122,11 +122,11 @@ public abstract class EpisodesListFragment extends Fragment {
@Override @Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) { public boolean onOptionsItemSelected(@NonNull MenuItem item) {
if (!super.onOptionsItemSelected(item)) { if (!super.onOptionsItemSelected(item)) {
switch (item.getItemId()) { final int itemId = item.getItemId();
case R.id.refresh_item: if (itemId == R.id.refresh_item) {
AutoUpdateManager.runImmediate(requireContext()); AutoUpdateManager.runImmediate(requireContext());
return true; return true;
case R.id.mark_all_read_item: } else if (itemId == R.id.mark_all_read_item) {
ConfirmationDialog markAllReadConfirmationDialog = new ConfirmationDialog(getActivity(), ConfirmationDialog markAllReadConfirmationDialog = new ConfirmationDialog(getActivity(),
R.string.mark_all_read_label, R.string.mark_all_read_label,
R.string.mark_all_read_confirmation_msg) { R.string.mark_all_read_confirmation_msg) {
@ -141,7 +141,7 @@ public abstract class EpisodesListFragment extends Fragment {
}; };
markAllReadConfirmationDialog.createNewDialog().show(); markAllReadConfirmationDialog.createNewDialog().show();
return true; return true;
case R.id.remove_all_new_flags_item: } else if (itemId == R.id.remove_all_new_flags_item) {
ConfirmationDialog removeAllNewFlagsConfirmationDialog = new ConfirmationDialog(getActivity(), ConfirmationDialog removeAllNewFlagsConfirmationDialog = new ConfirmationDialog(getActivity(),
R.string.remove_all_new_flags_label, R.string.remove_all_new_flags_label,
R.string.remove_all_new_flags_confirmation_msg) { R.string.remove_all_new_flags_confirmation_msg) {
@ -156,9 +156,8 @@ public abstract class EpisodesListFragment extends Fragment {
}; };
removeAllNewFlagsConfirmationDialog.createNewDialog().show(); removeAllNewFlagsConfirmationDialog.createNewDialog().show();
return true; return true;
default:
return false;
} }
return false;
} else { } else {
return true; return true;
} }

View File

@ -332,17 +332,16 @@ public class FeedItemlistFragment extends Fragment implements AdapterView.OnItem
if (feedMenuHandled) { if (feedMenuHandled) {
return true; return true;
} }
switch (item.getItemId()) { final int itemId = item.getItemId();
case R.id.rename_item: if (itemId == R.id.rename_item) {
new RenameFeedDialog(getActivity(), feed).show(); new RenameFeedDialog(getActivity(), feed).show();
return true; return true;
case R.id.remove_item: } else if (itemId == R.id.remove_item) {
RemoveFeedDialog.show(getContext(), feed, () -> RemoveFeedDialog.show(getContext(), feed, () ->
((MainActivity) getActivity()).loadFragment(EpisodesFragment.TAG, null)); ((MainActivity) getActivity()).loadFragment(EpisodesFragment.TAG, null));
return true; return true;
default:
return false;
} }
return false;
} }
@Override @Override

View File

@ -143,8 +143,8 @@ public class NavDrawerFragment extends Fragment implements SharedPreferences.OnS
} }
private boolean onFeedContextMenuClicked(Feed feed, MenuItem item) { private boolean onFeedContextMenuClicked(Feed feed, MenuItem item) {
switch (item.getItemId()) { final int itemId = item.getItemId();
case R.id.remove_all_new_flags_item: if (itemId == R.id.remove_all_new_flags_item) {
ConfirmationDialog removeAllNewFlagsConfirmationDialog = new ConfirmationDialog(getContext(), ConfirmationDialog removeAllNewFlagsConfirmationDialog = new ConfirmationDialog(getContext(),
R.string.remove_all_new_flags_label, R.string.remove_all_new_flags_label,
R.string.remove_all_new_flags_confirmation_msg) { R.string.remove_all_new_flags_confirmation_msg) {
@ -156,7 +156,7 @@ public class NavDrawerFragment extends Fragment implements SharedPreferences.OnS
}; };
removeAllNewFlagsConfirmationDialog.createNewDialog().show(); removeAllNewFlagsConfirmationDialog.createNewDialog().show();
return true; return true;
case R.id.mark_all_read_item: } else if (itemId == R.id.mark_all_read_item) {
ConfirmationDialog markAllReadConfirmationDialog = new ConfirmationDialog(getContext(), ConfirmationDialog markAllReadConfirmationDialog = new ConfirmationDialog(getContext(),
R.string.mark_all_read_label, R.string.mark_all_read_label,
R.string.mark_all_read_confirmation_msg) { R.string.mark_all_read_confirmation_msg) {
@ -169,17 +169,16 @@ public class NavDrawerFragment extends Fragment implements SharedPreferences.OnS
}; };
markAllReadConfirmationDialog.createNewDialog().show(); markAllReadConfirmationDialog.createNewDialog().show();
return true; return true;
case R.id.rename_item: } else if (itemId == R.id.rename_item) {
new RenameFeedDialog(getActivity(), feed).show(); new RenameFeedDialog(getActivity(), feed).show();
return true; return true;
case R.id.remove_item: } else if (itemId == R.id.remove_item) {
RemoveFeedDialog.show(getContext(), feed, () -> { RemoveFeedDialog.show(getContext(), feed, () -> {
((MainActivity) getActivity()).loadFragment(EpisodesFragment.TAG, null); ((MainActivity) getActivity()).loadFragment(EpisodesFragment.TAG, null);
}); });
return true; return true;
default:
return super.onContextItemSelected(item);
} }
return super.onContextItemSelected(item);
} }
@Subscribe(threadMode = ThreadMode.MAIN) @Subscribe(threadMode = ThreadMode.MAIN)

View File

@ -258,14 +258,14 @@ public class QueueFragment extends Fragment implements Toolbar.OnMenuItemClickLi
@Override @Override
public boolean onMenuItemClick(MenuItem item) { public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()) { final int itemId = item.getItemId();
case R.id.queue_lock: if (itemId == R.id.queue_lock) {
toggleQueueLock(); toggleQueueLock();
return true; return true;
case R.id.refresh_item: } else if (itemId == R.id.refresh_item) {
AutoUpdateManager.runImmediate(requireContext()); AutoUpdateManager.runImmediate(requireContext());
return true; return true;
case R.id.clear_queue: } else if (itemId == R.id.clear_queue) {
// make sure the user really wants to clear the queue // make sure the user really wants to clear the queue
ConfirmationDialog conDialog = new ConfirmationDialog(getActivity(), ConfirmationDialog conDialog = new ConfirmationDialog(getActivity(),
R.string.clear_queue_label, R.string.clear_queue_label,
@ -280,40 +280,40 @@ public class QueueFragment extends Fragment implements Toolbar.OnMenuItemClickLi
}; };
conDialog.createNewDialog().show(); conDialog.createNewDialog().show();
return true; return true;
case R.id.queue_sort_episode_title_asc: } else if (itemId == R.id.queue_sort_episode_title_asc) {
setSortOrder(SortOrder.EPISODE_TITLE_A_Z); setSortOrder(SortOrder.EPISODE_TITLE_A_Z);
return true; return true;
case R.id.queue_sort_episode_title_desc: } else if (itemId == R.id.queue_sort_episode_title_desc) {
setSortOrder(SortOrder.EPISODE_TITLE_Z_A); setSortOrder(SortOrder.EPISODE_TITLE_Z_A);
return true; return true;
case R.id.queue_sort_date_asc: } else if (itemId == R.id.queue_sort_date_asc) {
setSortOrder(SortOrder.DATE_OLD_NEW); setSortOrder(SortOrder.DATE_OLD_NEW);
return true; return true;
case R.id.queue_sort_date_desc: } else if (itemId == R.id.queue_sort_date_desc) {
setSortOrder(SortOrder.DATE_NEW_OLD); setSortOrder(SortOrder.DATE_NEW_OLD);
return true; return true;
case R.id.queue_sort_duration_asc: } else if (itemId == R.id.queue_sort_duration_asc) {
setSortOrder(SortOrder.DURATION_SHORT_LONG); setSortOrder(SortOrder.DURATION_SHORT_LONG);
return true; return true;
case R.id.queue_sort_duration_desc: } else if (itemId == R.id.queue_sort_duration_desc) {
setSortOrder(SortOrder.DURATION_LONG_SHORT); setSortOrder(SortOrder.DURATION_LONG_SHORT);
return true; return true;
case R.id.queue_sort_feed_title_asc: } else if (itemId == R.id.queue_sort_feed_title_asc) {
setSortOrder(SortOrder.FEED_TITLE_A_Z); setSortOrder(SortOrder.FEED_TITLE_A_Z);
return true; return true;
case R.id.queue_sort_feed_title_desc: } else if (itemId == R.id.queue_sort_feed_title_desc) {
setSortOrder(SortOrder.FEED_TITLE_Z_A); setSortOrder(SortOrder.FEED_TITLE_Z_A);
return true; return true;
case R.id.queue_sort_random: } else if (itemId == R.id.queue_sort_random) {
setSortOrder(SortOrder.RANDOM); setSortOrder(SortOrder.RANDOM);
return true; return true;
case R.id.queue_sort_smart_shuffle_asc: } else if (itemId == R.id.queue_sort_smart_shuffle_asc) {
setSortOrder(SortOrder.SMART_SHUFFLE_OLD_NEW); setSortOrder(SortOrder.SMART_SHUFFLE_OLD_NEW);
return true; return true;
case R.id.queue_sort_smart_shuffle_desc: } else if (itemId == R.id.queue_sort_smart_shuffle_desc) {
setSortOrder(SortOrder.SMART_SHUFFLE_NEW_OLD); setSortOrder(SortOrder.SMART_SHUFFLE_NEW_OLD);
return true; return true;
case R.id.queue_keep_sorted: } else if (itemId == R.id.queue_keep_sorted) {
boolean keepSortedOld = UserPreferences.isQueueKeepSorted(); boolean keepSortedOld = UserPreferences.isQueueKeepSorted();
boolean keepSortedNew = !keepSortedOld; boolean keepSortedNew = !keepSortedOld;
UserPreferences.setQueueKeepSorted(keepSortedNew); UserPreferences.setQueueKeepSorted(keepSortedNew);
@ -326,9 +326,8 @@ public class QueueFragment extends Fragment implements Toolbar.OnMenuItemClickLi
} }
refreshToolbarState(); refreshToolbarState();
return true; return true;
default:
return false;
} }
return false;
} }
private void toggleQueueLock() { private void toggleQueueLock() {
@ -404,20 +403,19 @@ public class QueueFragment extends Fragment implements Toolbar.OnMenuItemClickLi
return true; return true;
} }
switch(item.getItemId()) { final int itemId = item.getItemId();
case R.id.move_to_top_item: if (itemId == R.id.move_to_top_item) {
queue.add(0, queue.remove(position)); queue.add(0, queue.remove(position));
recyclerAdapter.notifyItemMoved(position, 0); recyclerAdapter.notifyItemMoved(position, 0);
DBWriter.moveQueueItemToTop(selectedItem.getId(), true); DBWriter.moveQueueItemToTop(selectedItem.getId(), true);
return true; return true;
case R.id.move_to_bottom_item: } else if (itemId == R.id.move_to_bottom_item) {
queue.add(queue.size() - 1, queue.remove(position)); queue.add(queue.size() - 1, queue.remove(position));
recyclerAdapter.notifyItemMoved(position, queue.size() - 1); recyclerAdapter.notifyItemMoved(position, queue.size() - 1);
DBWriter.moveQueueItemToBottom(selectedItem.getId(), true); DBWriter.moveQueueItemToBottom(selectedItem.getId(), true);
return true; return true;
default:
return FeedItemMenuHandler.onMenuItemClicked(this, item.getItemId(), selectedItem);
} }
return FeedItemMenuHandler.onMenuItemClicked(this, item.getItemId(), selectedItem);
} }
@Override @Override

View File

@ -172,31 +172,30 @@ public class SubscriptionFragment extends Fragment implements Toolbar.OnMenuItem
@Override @Override
public boolean onMenuItemClick(MenuItem item) { public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()) { final int itemId = item.getItemId();
case R.id.refresh_item: if (itemId == R.id.refresh_item) {
AutoUpdateManager.runImmediate(requireContext()); AutoUpdateManager.runImmediate(requireContext());
return true; return true;
case R.id.subscriptions_filter: } else if (itemId == R.id.subscriptions_filter) {
SubscriptionsFilterDialog.showDialog(requireContext()); SubscriptionsFilterDialog.showDialog(requireContext());
return true; return true;
case R.id.subscriptions_sort: } else if (itemId == R.id.subscriptions_sort) {
FeedSortDialog.showDialog(requireContext()); FeedSortDialog.showDialog(requireContext());
return true; return true;
case R.id.subscription_num_columns_2: } else if (itemId == R.id.subscription_num_columns_2) {
setColumnNumber(2); setColumnNumber(2);
return true; return true;
case R.id.subscription_num_columns_3: } else if (itemId == R.id.subscription_num_columns_3) {
setColumnNumber(3); setColumnNumber(3);
return true; return true;
case R.id.subscription_num_columns_4: } else if (itemId == R.id.subscription_num_columns_4) {
setColumnNumber(4); setColumnNumber(4);
return true; return true;
case R.id.subscription_num_columns_5: } else if (itemId == R.id.subscription_num_columns_5) {
setColumnNumber(5); setColumnNumber(5);
return true; return true;
default:
return false;
} }
return false;
} }
private void setColumnNumber(int columns) { private void setColumnNumber(int columns) {
@ -315,28 +314,27 @@ public class SubscriptionFragment extends Fragment implements Toolbar.OnMenuItem
Feed feed = selectedFeed; Feed feed = selectedFeed;
selectedFeed = null; selectedFeed = null;
switch (item.getItemId()) { final int itemId = item.getItemId();
case R.id.remove_all_new_flags_item: if (itemId == R.id.remove_all_new_flags_item) {
displayConfirmationDialog( displayConfirmationDialog(
R.string.remove_all_new_flags_label, R.string.remove_all_new_flags_label,
R.string.remove_all_new_flags_confirmation_msg, R.string.remove_all_new_flags_confirmation_msg,
() -> DBWriter.removeFeedNewFlag(feed.getId())); () -> DBWriter.removeFeedNewFlag(feed.getId()));
return true; return true;
case R.id.mark_all_read_item: } else if (itemId == R.id.mark_all_read_item) {
displayConfirmationDialog( displayConfirmationDialog(
R.string.mark_all_read_label, R.string.mark_all_read_label,
R.string.mark_all_read_confirmation_msg, R.string.mark_all_read_confirmation_msg,
() -> DBWriter.markFeedRead(feed.getId())); () -> DBWriter.markFeedRead(feed.getId()));
return true; return true;
case R.id.rename_item: } else if (itemId == R.id.rename_item) {
new RenameFeedDialog(getActivity(), feed).show(); new RenameFeedDialog(getActivity(), feed).show();
return true; return true;
case R.id.remove_item: } else if (itemId == R.id.remove_item) {
RemoveFeedDialog.show(getContext(), feed, null); RemoveFeedDialog.show(getContext(), feed, null);
return true; return true;
default:
return super.onContextItemSelected(item);
} }
return super.onContextItemSelected(item);
} }
private <T> void displayConfirmationDialog(@StringRes int title, @StringRes int message, Callable<? extends T> task) { private <T> void displayConfirmationDialog(@StringRes int title, @StringRes int message, Callable<? extends T> task) {

View File

@ -142,17 +142,13 @@ public class FeedItemMenuHandler {
@NonNull FeedItem selectedItem) { @NonNull FeedItem selectedItem) {
@NonNull Context context = fragment.requireContext(); @NonNull Context context = fragment.requireContext();
switch (menuItemId) { if (menuItemId == R.id.skip_episode_item) {
case R.id.skip_episode_item:
IntentUtils.sendLocalBroadcast(context, PlaybackService.ACTION_SKIP_CURRENT_EPISODE); IntentUtils.sendLocalBroadcast(context, PlaybackService.ACTION_SKIP_CURRENT_EPISODE);
break; } else if (menuItemId == R.id.remove_item) {
case R.id.remove_item:
DBWriter.deleteFeedMediaOfItem(context, selectedItem.getMedia().getId()); DBWriter.deleteFeedMediaOfItem(context, selectedItem.getMedia().getId());
break; } else if (menuItemId == R.id.remove_new_flag_item) {
case R.id.remove_new_flag_item:
removeNewFlagWithUndo(fragment, selectedItem); removeNewFlagWithUndo(fragment, selectedItem);
break; } else if (menuItemId == R.id.mark_read_item) {
case R.id.mark_read_item:
selectedItem.setPlayed(true); selectedItem.setPlayed(true);
DBWriter.markItemPlayed(selectedItem, FeedItem.PLAYED, true); DBWriter.markItemPlayed(selectedItem, FeedItem.PLAYED, true);
if (GpodnetPreferences.loggedIn()) { if (GpodnetPreferences.loggedIn()) {
@ -168,8 +164,7 @@ public class FeedItemMenuHandler {
SyncService.enqueueEpisodeAction(context, actionPlay); SyncService.enqueueEpisodeAction(context, actionPlay);
} }
} }
break; } else if (menuItemId == R.id.mark_unread_item) {
case R.id.mark_unread_item:
selectedItem.setPlayed(false); selectedItem.setPlayed(false);
DBWriter.markItemPlayed(selectedItem, FeedItem.UNPLAYED, false); DBWriter.markItemPlayed(selectedItem, FeedItem.UNPLAYED, false);
if (GpodnetPreferences.loggedIn() && selectedItem.getMedia() != null) { if (GpodnetPreferences.loggedIn() && selectedItem.getMedia() != null) {
@ -178,35 +173,27 @@ public class FeedItemMenuHandler {
.build(); .build();
SyncService.enqueueEpisodeAction(context, actionNew); SyncService.enqueueEpisodeAction(context, actionNew);
} }
break; } else if (menuItemId == R.id.add_to_queue_item) {
case R.id.add_to_queue_item:
DBWriter.addQueueItem(context, selectedItem); DBWriter.addQueueItem(context, selectedItem);
break; } else if (menuItemId == R.id.remove_from_queue_item) {
case R.id.remove_from_queue_item:
DBWriter.removeQueueItem(context, true, selectedItem); DBWriter.removeQueueItem(context, true, selectedItem);
break; } else if (menuItemId == R.id.add_to_favorites_item) {
case R.id.add_to_favorites_item:
DBWriter.addFavoriteItem(selectedItem); DBWriter.addFavoriteItem(selectedItem);
break; } else if (menuItemId == R.id.remove_from_favorites_item) {
case R.id.remove_from_favorites_item:
DBWriter.removeFavoriteItem(selectedItem); DBWriter.removeFavoriteItem(selectedItem);
break; } else if (menuItemId == R.id.reset_position) {
case R.id.reset_position:
selectedItem.getMedia().setPosition(0); selectedItem.getMedia().setPosition(0);
if (PlaybackPreferences.getCurrentlyPlayingFeedMediaId() == selectedItem.getMedia().getId()) { if (PlaybackPreferences.getCurrentlyPlayingFeedMediaId() == selectedItem.getMedia().getId()) {
PlaybackPreferences.writeNoMediaPlaying(); PlaybackPreferences.writeNoMediaPlaying();
IntentUtils.sendLocalBroadcast(context, PlaybackService.ACTION_SHUTDOWN_PLAYBACK_SERVICE); IntentUtils.sendLocalBroadcast(context, PlaybackService.ACTION_SHUTDOWN_PLAYBACK_SERVICE);
} }
DBWriter.markItemPlayed(selectedItem, FeedItem.UNPLAYED, true); DBWriter.markItemPlayed(selectedItem, FeedItem.UNPLAYED, true);
break; } else if (menuItemId == R.id.visit_website_item) {
case R.id.visit_website_item:
IntentUtils.openInBrowser(context, FeedItemUtil.getLinkWithFallback(selectedItem)); IntentUtils.openInBrowser(context, FeedItemUtil.getLinkWithFallback(selectedItem));
break; } else if (menuItemId == R.id.share_item) {
case R.id.share_item:
ShareDialog shareDialog = ShareDialog.newInstance(selectedItem); ShareDialog shareDialog = ShareDialog.newInstance(selectedItem);
shareDialog.show((fragment.getActivity().getSupportFragmentManager()), "ShareEpisodeDialog"); shareDialog.show((fragment.getActivity().getSupportFragmentManager()), "ShareEpisodeDialog");
break; } else {
default:
Log.d(TAG, "Unknown menuItemId: " + menuItemId); Log.d(TAG, "Unknown menuItemId: " + menuItemId);
return false; return false;
} }

View File

@ -60,20 +60,16 @@ public class FeedMenuHandler {
*/ */
public static boolean onOptionsItemClicked(final Context context, final MenuItem item, public static boolean onOptionsItemClicked(final Context context, final MenuItem item,
final Feed selectedFeed) throws DownloadRequestException { final Feed selectedFeed) throws DownloadRequestException {
switch (item.getItemId()) { final int itemId = item.getItemId();
case R.id.refresh_item: if (itemId == R.id.refresh_item) {
DBTasks.forceRefreshFeed(context, selectedFeed, true); DBTasks.forceRefreshFeed(context, selectedFeed, true);
break; } else if (itemId == R.id.refresh_complete_item) {
case R.id.refresh_complete_item:
DBTasks.forceRefreshCompleteFeed(context, selectedFeed); DBTasks.forceRefreshCompleteFeed(context, selectedFeed);
break; } else if (itemId == R.id.sort_items) {
case R.id.sort_items:
showSortDialog(context, selectedFeed); showSortDialog(context, selectedFeed);
break; } else if (itemId == R.id.filter_items) {
case R.id.filter_items:
showFilterDialog(context, selectedFeed); showFilterDialog(context, selectedFeed);
break; } else if (itemId == R.id.mark_all_read_item) {
case R.id.mark_all_read_item:
ConfirmationDialog conDialog = new ConfirmationDialog(context, ConfirmationDialog conDialog = new ConfirmationDialog(context,
R.string.mark_all_read_label, R.string.mark_all_read_label,
R.string.mark_all_read_feed_confirmation_msg) { R.string.mark_all_read_feed_confirmation_msg) {
@ -86,17 +82,13 @@ public class FeedMenuHandler {
} }
}; };
conDialog.createNewDialog().show(); conDialog.createNewDialog().show();
break; } else if (itemId == R.id.visit_website_item) {
case R.id.visit_website_item:
IntentUtils.openInBrowser(context, selectedFeed.getLink()); IntentUtils.openInBrowser(context, selectedFeed.getLink());
break; } else if (itemId == R.id.share_link_item) {
case R.id.share_link_item:
ShareUtils.shareFeedlink(context, selectedFeed); ShareUtils.shareFeedlink(context, selectedFeed);
break; } else if (itemId == R.id.share_download_url_item) {
case R.id.share_download_url_item:
ShareUtils.shareFeedDownloadLink(context, selectedFeed); ShareUtils.shareFeedDownloadLink(context, selectedFeed);
break; } else {
default:
return false; return false;
} }
return true; return true;

View File

@ -123,33 +123,28 @@ public class ShownotesWebView extends WebView implements View.OnLongClickListene
return false; return false;
} }
switch (item.getItemId()) { final int itemId = item.getItemId();
case R.id.open_in_browser_item: if (itemId == R.id.open_in_browser_item) {
IntentUtils.openInBrowser(getContext(), selectedUrl); IntentUtils.openInBrowser(getContext(), selectedUrl);
break; } else if (itemId == R.id.share_url_item) {
case R.id.share_url_item:
ShareUtils.shareLink(getContext(), selectedUrl); ShareUtils.shareLink(getContext(), selectedUrl);
break; } else if (itemId == R.id.copy_url_item) {
case R.id.copy_url_item:
ClipData clipData = ClipData.newPlainText(selectedUrl, selectedUrl); ClipData clipData = ClipData.newPlainText(selectedUrl, selectedUrl);
android.content.ClipboardManager cm = (android.content.ClipboardManager) getContext() ClipboardManager cm = (ClipboardManager) getContext()
.getSystemService(Context.CLIPBOARD_SERVICE); .getSystemService(Context.CLIPBOARD_SERVICE);
cm.setPrimaryClip(clipData); cm.setPrimaryClip(clipData);
Snackbar s = Snackbar.make(this, R.string.copied_url_msg, Snackbar.LENGTH_LONG); Snackbar s = Snackbar.make(this, R.string.copied_url_msg, Snackbar.LENGTH_LONG);
ViewCompat.setElevation(s.getView(), 100); ViewCompat.setElevation(s.getView(), 100);
s.show(); s.show();
break; } else if (itemId == R.id.go_to_position_item) {
case R.id.go_to_position_item:
if (Timeline.isTimecodeLink(selectedUrl) && timecodeSelectedListener != null) { if (Timeline.isTimecodeLink(selectedUrl) && timecodeSelectedListener != null) {
timecodeSelectedListener.accept(Timeline.getTimecodeLinkTime(selectedUrl)); timecodeSelectedListener.accept(Timeline.getTimecodeLinkTime(selectedUrl));
} else { } else {
Log.e(TAG, "Selected go_to_position_item, but URL was no timecode link: " + selectedUrl); Log.e(TAG, "Selected go_to_position_item, but URL was no timecode link: " + selectedUrl);
} }
break; } else {
default:
selectedUrl = null; selectedUrl = null;
return false; return false;
} }
selectedUrl = null; selectedUrl = null;
return true; return true;

View File

@ -1,11 +1,12 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<LinearLayout <LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android" xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="horizontal" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent"> android:layout_height="match_parent"
android:orientation="horizontal"
tools:viewBindingIgnore="true">
<FrameLayout <FrameLayout
android:id="@+id/navDrawerFragment" android:id="@+id/navDrawerFragment"
@ -33,11 +34,11 @@
tools:background="@android:color/holo_red_dark" /> tools:background="@android:color/holo_red_dark" />
<FrameLayout <FrameLayout
android:elevation="8dp"
android:id="@+id/audioplayerFragment" android:id="@+id/audioplayerFragment"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:background="?android:attr/windowBackground" android:background="?android:attr/windowBackground"
android:elevation="8dp"
android:visibility="gone" android:visibility="gone"
app:layout_behavior="de.danoeh.antennapod.view.LockableBottomSheetBehavior" /> app:layout_behavior="de.danoeh.antennapod.view.LockableBottomSheetBehavior" />

View File

@ -1,14 +1,17 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<androidx.drawerlayout.widget.DrawerLayout <androidx.drawerlayout.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android" xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawer_layout" android:id="@+id/drawer_layout"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
tools:ignore="InconsistentLayout"> tools:ignore="InconsistentLayout"
<!-- InconsistentLayout: Tablet layout does not have a drawer --> tools:viewBindingIgnore="true">
<!-- InconsistentLayout: Tablet layout does not have a drawer -->
<!-- viewBindingIgnore: Configurations for main.xml must
agree on the root element's ID -->
<androidx.coordinatorlayout.widget.CoordinatorLayout <androidx.coordinatorlayout.widget.CoordinatorLayout
android:id="@+id/overview_coordinator_layout" android:id="@+id/overview_coordinator_layout"
android:layout_width="match_parent" android:layout_width="match_parent"
@ -23,11 +26,11 @@
tools:background="@android:color/holo_red_dark" /> tools:background="@android:color/holo_red_dark" />
<FrameLayout <FrameLayout
android:elevation="8dp"
android:id="@+id/audioplayerFragment" android:id="@+id/audioplayerFragment"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:background="?android:attr/windowBackground" android:background="?android:attr/windowBackground"
android:elevation="8dp"
android:visibility="gone" android:visibility="gone"
app:layout_behavior="de.danoeh.antennapod.view.LockableBottomSheetBehavior" /> app:layout_behavior="de.danoeh.antennapod.view.LockableBottomSheetBehavior" />

View File

@ -2,12 +2,12 @@ buildscript {
repositories { repositories {
google() google()
mavenCentral() mavenCentral()
maven { url "https://plugins.gradle.org/m2/" } gradlePluginPortal()
jcenter() jcenter()
} }
dependencies { dependencies {
classpath 'com.android.tools.build:gradle:3.6.3' classpath 'com.android.tools.build:gradle:4.1.3'
classpath 'com.getkeepsafe.dexcount:dexcount-gradle-plugin:1.0.2' classpath 'com.getkeepsafe.dexcount:dexcount-gradle-plugin:1.0.4'
classpath 'de.timfreiheit.resourceplaceholders:placeholders:0.3' classpath 'de.timfreiheit.resourceplaceholders:placeholders:0.3'
classpath "gradle.plugin.com.github.spotbugs.snom:spotbugs-gradle-plugin:4.7.0" classpath "gradle.plugin.com.github.spotbugs.snom:spotbugs-gradle-plugin:4.7.0"
} }

View File

@ -52,8 +52,8 @@ android {
checkGeneratedSources = true checkGeneratedSources = true
} }
viewBinding { buildFeatures {
enabled = true viewBinding true
} }
} }

View File

@ -2,7 +2,8 @@
xmlns:tools="http://schemas.android.com/tools" package="de.danoeh.antennapod.core"> xmlns:tools="http://schemas.android.com/tools" package="de.danoeh.antennapod.core">
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
tools:ignore="ScopedStorage" />
<uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
@ -52,4 +53,16 @@
android:exported="true"/> android:exported="true"/>
</application> </application>
<queries>
<intent>
<action android:name="android.intent.action.SEND" />
<data android:mimeType="*/*" />
</intent>
<intent>
<action android:name="android.intent.action.VIEW" />
<data android:scheme="https" />
</intent>
</queries>
</manifest> </manifest>