Merge pull request #3936 from ByteHamster/add-feed-page

Made add feed page more white
This commit is contained in:
H. Lehmann 2020-03-16 22:41:05 +01:00 committed by GitHub
commit 21c617cc74
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 228 additions and 313 deletions

View File

@ -23,12 +23,9 @@ import java.io.IOException;
import static androidx.test.InstrumentationRegistry.getInstrumentation; import static androidx.test.InstrumentationRegistry.getInstrumentation;
import static androidx.test.espresso.Espresso.onView; import static androidx.test.espresso.Espresso.onView;
import static androidx.test.espresso.action.ViewActions.click; import static androidx.test.espresso.action.ViewActions.click;
import static androidx.test.espresso.action.ViewActions.replaceText;
import static androidx.test.espresso.action.ViewActions.scrollTo; import static androidx.test.espresso.action.ViewActions.scrollTo;
import static androidx.test.espresso.action.ViewActions.typeText;
import static androidx.test.espresso.contrib.ActivityResultMatchers.hasResultCode; import static androidx.test.espresso.contrib.ActivityResultMatchers.hasResultCode;
import static androidx.test.espresso.intent.Intents.intended;
import static androidx.test.espresso.intent.Intents.times;
import static androidx.test.espresso.intent.matcher.IntentMatchers.hasComponent;
import static androidx.test.espresso.matcher.ViewMatchers.isRoot; import static androidx.test.espresso.matcher.ViewMatchers.isRoot;
import static androidx.test.espresso.matcher.ViewMatchers.withId; import static androidx.test.espresso.matcher.ViewMatchers.withId;
import static androidx.test.espresso.matcher.ViewMatchers.withText; import static androidx.test.espresso.matcher.ViewMatchers.withText;
@ -77,7 +74,8 @@ public class MainActivityTest {
final Feed feed = uiTestUtils.hostedFeeds.get(0); final Feed feed = uiTestUtils.hostedFeeds.get(0);
openNavDrawer(); openNavDrawer();
onView(withText(R.string.add_feed_label)).perform(click()); onView(withText(R.string.add_feed_label)).perform(click());
onView(withId(R.id.etxtFeedurl)).perform(scrollTo(), typeText(feed.getDownload_url())); onView(withId(R.id.btn_add_via_url)).perform(scrollTo(), click());
onView(withId(R.id.text)).perform(replaceText(feed.getDownload_url()));
onView(withText(R.string.confirm_label)).perform(scrollTo(), click()); onView(withText(R.string.confirm_label)).perform(scrollTo(), click());
Espresso.closeSoftKeyboard(); Espresso.closeSoftKeyboard();
onView(withText(R.string.subscribe_label)).perform(click()); onView(withText(R.string.subscribe_label)).perform(click());

View File

@ -116,7 +116,7 @@ public class NavigationDrawerTest {
openNavDrawer(); openNavDrawer();
onView(withId(R.id.nav_list)).perform(swipeUp()); onView(withId(R.id.nav_list)).perform(swipeUp());
onDrawerItem(withText(R.string.add_feed_label)).perform(click()); onDrawerItem(withText(R.string.add_feed_label)).perform(click());
onView(isRoot()).perform(waitForView(withId(R.id.txtvFeedurl), 1000)); onView(isRoot()).perform(waitForView(withId(R.id.btn_add_via_url), 1000));
assertEquals(activity.getString(R.string.add_feed_label), activity.getSupportActionBar().getTitle()); assertEquals(activity.getString(R.string.add_feed_label), activity.getSupportActionBar().getTitle());
// podcasts // podcasts

View File

@ -2,20 +2,19 @@ package de.danoeh.antennapod.fragment;
import android.app.Activity; import android.app.Activity;
import android.content.ActivityNotFoundException; import android.content.ActivityNotFoundException;
import android.content.ClipboardManager;
import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.net.Uri; import android.net.Uri;
import android.os.Bundle; import android.os.Bundle;
import android.util.Log; import android.util.Log;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import android.view.ContextMenu;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.MenuItem;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText; import android.widget.EditText;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import de.danoeh.antennapod.R; import de.danoeh.antennapod.R;
import de.danoeh.antennapod.activity.MainActivity; import de.danoeh.antennapod.activity.MainActivity;
import de.danoeh.antennapod.activity.OnlineFeedViewActivity; import de.danoeh.antennapod.activity.OnlineFeedViewActivity;
@ -23,16 +22,11 @@ import de.danoeh.antennapod.activity.OpmlImportActivity;
import de.danoeh.antennapod.fragment.gpodnet.GpodnetMainFragment; import de.danoeh.antennapod.fragment.gpodnet.GpodnetMainFragment;
/** /**
* Provides actions for adding new podcast subscriptions * Provides actions for adding new podcast subscriptions.
*/ */
public class AddFeedFragment extends Fragment { public class AddFeedFragment extends Fragment {
public static final String TAG = "AddFeedFragment"; public static final String TAG = "AddFeedFragment";
/**
* Preset value for url text field.
*/
private static final String ARG_FEED_URL = "feedurl";
private static final int REQUEST_CODE_CHOOSE_OPML_IMPORT_PATH = 1; private static final int REQUEST_CODE_CHOOSE_OPML_IMPORT_PATH = 1;
private EditText combinedFeedSearchBox; private EditText combinedFeedSearchBox;
@ -45,8 +39,20 @@ public class AddFeedFragment extends Fragment {
activity = (MainActivity) getActivity(); activity = (MainActivity) getActivity();
((AppCompatActivity) getActivity()).setSupportActionBar(root.findViewById(R.id.toolbar)); ((AppCompatActivity) getActivity()).setSupportActionBar(root.findViewById(R.id.toolbar));
setupAdvancedSearchButtons(root); root.findViewById(R.id.btn_search_itunes).setOnClickListener(v
setupSeachBox(root); -> activity.loadChildFragment(new ItunesSearchFragment()));
root.findViewById(R.id.btn_search_fyyd).setOnClickListener(v
-> activity.loadChildFragment(new FyydSearchFragment()));
root.findViewById(R.id.btn_search_gpodder).setOnClickListener(v
-> activity.loadChildFragment(new GpodnetMainFragment()));
combinedFeedSearchBox = root.findViewById(R.id.combinedFeedSearchBox);
combinedFeedSearchBox.setOnEditorActionListener((v, actionId, event) -> {
performSearch();
return true;
});
root.findViewById(R.id.btn_add_via_url).setOnClickListener(v
-> showAddViaUrlDialog());
View butOpmlImport = root.findViewById(R.id.btn_opml_import); View butOpmlImport = root.findViewById(R.id.btn_opml_import);
butOpmlImport.setOnClickListener(v -> { butOpmlImport.setOnClickListener(v -> {
@ -63,54 +69,20 @@ public class AddFeedFragment extends Fragment {
return root; return root;
} }
private void setupSeachBox(View root) { private void showAddViaUrlDialog() {
final EditText etxtFeedurl = root.findViewById(R.id.etxtFeedurl); AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
builder.setTitle(R.string.add_podcast_by_url);
Bundle args = getArguments(); View content = View.inflate(getContext(), R.layout.edit_text_dialog, null);
if (args != null && args.getString(ARG_FEED_URL) != null) { EditText editText = content.findViewById(R.id.text);
etxtFeedurl.setText(args.getString(ARG_FEED_URL)); editText.setHint(R.string.add_podcast_by_url_hint);
ClipboardManager clipboard = (ClipboardManager) getContext().getSystemService(Context.CLIPBOARD_SERVICE);
editText.setText(clipboard.getText());
builder.setView(content);
builder.setPositiveButton(R.string.confirm_label, (dialog, which) -> addUrl(editText.getText().toString()));
builder.setNegativeButton(R.string.cancel_label, null);
builder.show();
} }
Button butConfirmAddUrl = root.findViewById(R.id.butConfirm);
butConfirmAddUrl.setOnClickListener(v -> {
addUrl(etxtFeedurl.getText().toString());
});
combinedFeedSearchBox = root.findViewById(R.id.combinedFeedSearchBox);
combinedFeedSearchBox.setOnEditorActionListener((v, actionId, event) -> {
performSearch();
return true;
});
}
private void setupAdvancedSearchButtons(View root) {
View butAdvancedSearch = root.findViewById(R.id.advanced_search);
registerForContextMenu(butAdvancedSearch);
butAdvancedSearch.setOnClickListener(v -> butAdvancedSearch.showContextMenu());
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
getActivity().getMenuInflater().inflate(R.menu.advanced_search, menu);
}
@Override
public boolean onContextItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.search_fyyd:
activity.loadChildFragment(new FyydSearchFragment());
return true;
case R.id.search_gpodder:
activity.loadChildFragment(new GpodnetMainFragment());
return true;
case R.id.search_itunes:
activity.loadChildFragment(new ItunesSearchFragment());
return true;
}
return false;
}
private void addUrl(String url) { private void addUrl(String url) {
Intent intent = new Intent(getActivity(), OnlineFeedViewActivity.class); Intent intent = new Intent(getActivity(), OnlineFeedViewActivity.class);
intent.putExtra(OnlineFeedViewActivity.ARG_FEEDURL, url); intent.putExtra(OnlineFeedViewActivity.ARG_FEEDURL, url);

View File

@ -2,6 +2,7 @@ package de.danoeh.antennapod.fragment;
import android.content.Intent; import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
import android.util.DisplayMetrics;
import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AlertDialog;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
import android.util.Log; import android.util.Log;
@ -26,11 +27,12 @@ import java.util.List;
public class QuickFeedDiscoveryFragment extends Fragment implements AdapterView.OnItemClickListener { public class QuickFeedDiscoveryFragment extends Fragment implements AdapterView.OnItemClickListener {
private static final String TAG = "FeedDiscoveryFragment"; private static final String TAG = "FeedDiscoveryFragment";
private static final int NUM_SUGGESTIONS = 12;
private ProgressBar progressBar; private ProgressBar progressBar;
private Disposable disposable; private Disposable disposable;
private FeedDiscoverAdapter adapter; private FeedDiscoverAdapter adapter;
private GridView subscriptionGridLayout; private GridView discoverGridLayout;
private TextView errorTextView; private TextView errorTextView;
@Override @Override
@ -41,24 +43,31 @@ public class QuickFeedDiscoveryFragment extends Fragment implements AdapterView.
discoverMore.setOnClickListener(v -> discoverMore.setOnClickListener(v ->
((MainActivity) getActivity()).loadChildFragment(new ItunesSearchFragment())); ((MainActivity) getActivity()).loadChildFragment(new ItunesSearchFragment()));
subscriptionGridLayout = root.findViewById(R.id.discover_grid); discoverGridLayout = root.findViewById(R.id.discover_grid);
progressBar = root.findViewById(R.id.discover_progress_bar); progressBar = root.findViewById(R.id.discover_progress_bar);
errorTextView = root.findViewById(R.id.discover_error); errorTextView = root.findViewById(R.id.discover_error);
adapter = new FeedDiscoverAdapter((MainActivity) getActivity()); adapter = new FeedDiscoverAdapter((MainActivity) getActivity());
subscriptionGridLayout.setAdapter(adapter); discoverGridLayout.setAdapter(adapter);
subscriptionGridLayout.setOnItemClickListener(this); discoverGridLayout.setOnItemClickListener(this);
DisplayMetrics displayMetrics = getContext().getResources().getDisplayMetrics();
float screenWidthDp = displayMetrics.widthPixels / displayMetrics.density;
if (screenWidthDp > 600) {
discoverGridLayout.setNumColumns(6);
} else {
discoverGridLayout.setNumColumns(4);
}
// Fill with dummy elements to have a fixed height and // Fill with dummy elements to have a fixed height and
// prevent the UI elements below from jumping on slow connections // prevent the UI elements below from jumping on slow connections
List<PodcastSearchResult> dummies = new ArrayList<>(); List<PodcastSearchResult> dummies = new ArrayList<>();
for (int i = 0; i < 8; i++) { for (int i = 0; i < NUM_SUGGESTIONS; i++) {
dummies.add(PodcastSearchResult.dummy()); dummies.add(PodcastSearchResult.dummy());
} }
adapter.updateData(dummies); adapter.updateData(dummies);
loadToplist(); loadToplist();
return root; return root;
} }
@ -72,22 +81,22 @@ public class QuickFeedDiscoveryFragment extends Fragment implements AdapterView.
private void loadToplist() { private void loadToplist() {
progressBar.setVisibility(View.VISIBLE); progressBar.setVisibility(View.VISIBLE);
subscriptionGridLayout.setVisibility(View.INVISIBLE); discoverGridLayout.setVisibility(View.INVISIBLE);
errorTextView.setVisibility(View.GONE); errorTextView.setVisibility(View.GONE);
ItunesTopListLoader loader = new ItunesTopListLoader(getContext()); ItunesTopListLoader loader = new ItunesTopListLoader(getContext());
disposable = loader.loadToplist(8) disposable = loader.loadToplist(NUM_SUGGESTIONS)
.subscribe(podcasts -> { .subscribe(podcasts -> {
errorTextView.setVisibility(View.GONE); errorTextView.setVisibility(View.GONE);
progressBar.setVisibility(View.GONE); progressBar.setVisibility(View.GONE);
subscriptionGridLayout.setVisibility(View.VISIBLE); discoverGridLayout.setVisibility(View.VISIBLE);
adapter.updateData(podcasts); adapter.updateData(podcasts);
}, error -> { }, error -> {
Log.e(TAG, Log.getStackTraceString(error)); Log.e(TAG, Log.getStackTraceString(error));
errorTextView.setText(error.getLocalizedMessage()); errorTextView.setText(error.getLocalizedMessage());
errorTextView.setVisibility(View.VISIBLE); errorTextView.setVisibility(View.VISIBLE);
progressBar.setVisibility(View.GONE); progressBar.setVisibility(View.GONE);
subscriptionGridLayout.setVisibility(View.INVISIBLE); discoverGridLayout.setVisibility(View.INVISIBLE);
}); });
} }

View File

@ -13,25 +13,14 @@
app:title="@string/add_feed_label" app:title="@string/add_feed_label"
android:id="@+id/toolbar"/> android:id="@+id/toolbar"/>
<ScrollView
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:scrollbars="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:focusableInTouchMode="true"
android:padding="8dp">
<androidx.cardview.widget.CardView <androidx.cardview.widget.CardView
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
app:cardCornerRadius="4dp" app:cardCornerRadius="4dp"
android:elevation="16dp" app:cardElevation="4dp"
android:layout_margin="8dp"> android:layout_marginLeft="16dp"
android:layout_marginRight="16dp"
android:layout_marginTop="16dp">
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
@ -66,128 +55,105 @@
android:background="@null"/> android:background="@null"/>
</LinearLayout> </LinearLayout>
</androidx.cardview.widget.CardView> </androidx.cardview.widget.CardView>
<ScrollView
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:scrollbars="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:focusableInTouchMode="true"
android:padding="16dp">
<fragment <fragment
android:id="@+id/quickFeedDiscovery" android:id="@+id/quickFeedDiscovery"
android:name="de.danoeh.antennapod.fragment.QuickFeedDiscoveryFragment" android:name="de.danoeh.antennapod.fragment.QuickFeedDiscoveryFragment"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"/>
android:layout_margin="8dp"/>
<androidx.cardview.widget.CardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:cardCornerRadius="4dp"
android:elevation="8dp"
android:layout_margin="8dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="16dp"
android:orientation="vertical">
<TextView <TextView
android:id="@+id/txtvFeedurl"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@string/txtvfeedurl_label" android:text="@string/advanced"
android:textSize="18sp" android:textSize="18sp"
android:layout_marginTop="16dp"
android:layout_marginBottom="8dp" android:layout_marginBottom="8dp"
android:layout_marginLeft="4dp"
android:layout_marginStart="4dp"
android:textColor="?android:attr/textColorPrimary"/> android:textColor="?android:attr/textColorPrimary"/>
<EditText
android:id="@+id/etxtFeedurl"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:cursorVisible="true"
android:focusable="true"
android:focusableInTouchMode="true"
android:hint="@string/etxtFeedurlHint"
android:inputType="textUri"/>
<Button
android:id="@+id/butConfirm"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end"
style="?android:attr/buttonBarButtonStyle"
android:text="@string/confirm_label"/>
</LinearLayout>
</androidx.cardview.widget.CardView>
<androidx.cardview.widget.CardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:cardCornerRadius="4dp"
android:elevation="8dp"
android:layout_margin="8dp">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="8dp"
android:layout_gravity="center_horizontal"
android:orientation="horizontal">
<LinearLayout
android:id="@+id/advanced_search"
android:layout_width="120dp"
android:layout_height="wrap_content"
android:orientation="vertical"
android:gravity="center_horizontal"
android:padding="8dp"
android:background="?android:attr/selectableItemBackground">
<ImageView
android:layout_width="40dp"
android:layout_height="match_parent"
android:contentDescription="@string/advanced_search"
app:srcCompat="?attr/action_search"
android:scaleType="center"
android:layout_marginBottom="4dp"/>
<TextView <TextView
android:id="@+id/btn_add_via_url"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@string/advanced_search" android:drawablePadding="8dp"
android:textAlignment="center" app:drawableStartCompat="?attr/content_new"
android:textColor="?android:attr/textColorPrimary"/> app:drawableLeftCompat="?attr/content_new"
</LinearLayout> android:paddingTop="8dp"
android:paddingBottom="8dp"
android:background="?android:attr/selectableItemBackground"
android:textColor="?android:attr/textColorPrimary"
android:clickable="true"
android:text="@string/add_podcast_by_url"/>
<LinearLayout <TextView
android:id="@+id/btn_search_itunes"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:drawablePadding="8dp"
app:drawableStartCompat="?attr/action_search"
app:drawableLeftCompat="?attr/action_search"
android:paddingTop="8dp"
android:paddingBottom="8dp"
android:background="?android:attr/selectableItemBackground"
android:textColor="?android:attr/textColorPrimary"
android:clickable="true"
android:text="@string/search_itunes_label"/>
<TextView
android:id="@+id/btn_search_fyyd"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:drawablePadding="8dp"
app:drawableStartCompat="?attr/action_search"
app:drawableLeftCompat="?attr/action_search"
android:paddingTop="8dp"
android:paddingBottom="8dp"
android:background="?android:attr/selectableItemBackground"
android:textColor="?android:attr/textColorPrimary"
android:clickable="true"
android:text="@string/search_fyyd_label"/>
<TextView
android:id="@+id/btn_search_gpodder"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:drawablePadding="8dp"
app:drawableStartCompat="?attr/action_search"
app:drawableLeftCompat="?attr/action_search"
android:paddingTop="8dp"
android:paddingBottom="8dp"
android:background="?android:attr/selectableItemBackground"
android:textColor="?android:attr/textColorPrimary"
android:clickable="true"
android:text="@string/browse_gpoddernet_label"/>
<TextView
android:id="@+id/btn_opml_import" android:id="@+id/btn_opml_import"
android:layout_width="120dp"
android:layout_height="wrap_content"
android:orientation="vertical"
android:gravity="center_horizontal"
android:padding="8dp"
android:background="?android:attr/selectableItemBackground">
<ImageView
android:layout_width="40dp"
android:layout_height="match_parent"
android:contentDescription="@string/opml_import_label"
app:srcCompat="?attr/av_download"
android:scaleType="center"
android:layout_marginBottom="4dp"/>
<TextView
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@string/opml_import_label" android:drawablePadding="8dp"
android:textAlignment="center" app:drawableStartCompat="?attr/av_download"
android:textColor="?android:attr/textColorPrimary"/> app:drawableLeftCompat="?attr/av_download"
</LinearLayout> android:paddingTop="8dp"
android:paddingBottom="8dp"
</LinearLayout> android:background="?android:attr/selectableItemBackground"
</androidx.cardview.widget.CardView> android:textColor="?android:attr/textColorPrimary"
android:clickable="true"
android:text="@string/opml_import_label"/>
</LinearLayout> </LinearLayout>
</ScrollView> </ScrollView>
</LinearLayout> </LinearLayout>

View File

@ -1,16 +1,9 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView <LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android" xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
app:cardCornerRadius="4dp"
android:elevation="16dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="16dp"
android:orientation="vertical"> android:orientation="vertical">
<LinearLayout <LinearLayout
@ -24,8 +17,6 @@
android:textSize="18sp" android:textSize="18sp"
android:layout_marginBottom="8dp" android:layout_marginBottom="8dp"
android:layout_weight="1" android:layout_weight="1"
android:layout_marginLeft="4dp"
android:layout_marginStart="4dp"
android:textColor="?android:attr/textColorPrimary"/> android:textColor="?android:attr/textColorPrimary"/>
<Button <Button
@ -71,8 +62,4 @@
android:layout_height="wrap_content"/> android:layout_height="wrap_content"/>
</RelativeLayout> </RelativeLayout>
</LinearLayout> </LinearLayout>
</androidx.cardview.widget.CardView>

View File

@ -1,14 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/search_itunes"
android:title="@string/search_itunes_label" />
<item
android:id="@+id/search_gpodder"
android:title="@string/browse_gpoddernet_label" />
<item
android:id="@+id/search_fyyd"
android:title="@string/search_fyyd_label" />
</menu>

View File

@ -120,14 +120,6 @@
<string name="num_selected_label">%d selected</string> <string name="num_selected_label">%d selected</string>
<string name="loading_more">Loading more…</string> <string name="loading_more">Loading more…</string>
<!-- 'Add Feed' Activity labels -->
<string name="feedurl_label">Podcast feed URL</string>
<string name="etxtFeedurlHint">www.example.com/feed</string>
<string name="txtvfeedurl_label">Add Podcast by URL</string>
<string name="browse_gpoddernet_label">Browse gpodder.net</string>
<string name="discover">Discover</string>
<string name="discover_more">more »</string>
<!-- Actions on feeds --> <!-- Actions on feeds -->
<string name="mark_all_read_label">Mark all as played</string> <string name="mark_all_read_label">Mark all as played</string>
<string name="mark_all_read_msg">Marked all Episodes as played</string> <string name="mark_all_read_msg">Marked all Episodes as played</string>
@ -694,7 +686,12 @@
<string name="search_podcast_hint">Search podcast…</string> <string name="search_podcast_hint">Search podcast…</string>
<string name="search_itunes_label">Search iTunes</string> <string name="search_itunes_label">Search iTunes</string>
<string name="search_fyyd_label">Search fyyd</string> <string name="search_fyyd_label">Search fyyd</string>
<string name="advanced_search">Advanced search</string> <string name="advanced">Advanced</string>
<string name="add_podcast_by_url">Add Podcast by URL</string>
<string name="add_podcast_by_url_hint" translatable="false">www.example.com/feed</string>
<string name="browse_gpoddernet_label">Browse gpodder.net</string>
<string name="discover">Discover</string>
<string name="discover_more">more »</string>
<string name="filter">Filter</string> <string name="filter">Filter</string>