Merge branch 'develop' into develop
This commit is contained in:
commit
5a0192f3c8
|
@ -0,0 +1 @@
|
|||
<!-- Please make sure that you have read our contribution guidelines: https://github.com/AntennaPod/AntennaPod/blob/develop/CONTRIBUTING.md#submit-a-pull-request -->
|
|
@ -29,12 +29,9 @@ Submit a pull request
|
|||
---------------------
|
||||
- If you want to work on a feature that has been requested or fix a bug that has been reported on the "issues" page, add a comment to it so that other people know that you are working on it.
|
||||
- Fork the repository.
|
||||
- Almost all changes of AntennaPod are done on the `develop` branch. If a new version of AntennaPod is released, the `develop` branch is merged into `master`. As a result, the `master` branch probably doesn't contain the latest changes when you are reading this. Please make sure that you are branching from `develop`! Otherwise, there might be a lot of merge-conflicts when merging your changes into `develop` and therefore it might take longer to review your pull-request. Exceptions are changes in files like README.md, CONTRIBUTING.md, and other files that are not directly related to the source code.
|
||||
- If your pull request fixes a bug that has been reported or implements a feature that has been requested in another issue, try to mention it so that it can be closed once your pull request has been merged. If you use special keywords in the [commit comment](https://help.github.com/en/github/managing-your-work-on-github/linking-a-pull-request-to-an-issue) or [pull request text](https://github.blog/2013-05-14-closing-issues-via-pull-requests/), GitHub will close the issue(s) automatically when the changes land on the master branch.
|
||||
- Although not every part of AntennaPod's source code is fully documented yet, it would be very nice if you could add documentation to your changes if it is a larger pull request.
|
||||
- If possible, add unit tests for your pull request and make sure that they pass. Information on how to add unit tests and run them can be found here: (TODO)
|
||||
|
||||
|
||||
Improving this file
|
||||
-------------------
|
||||
If you think this file needs clarification or additional information on certain topics, feel free to improve it via pull requests or by opening an issue.
|
||||
- Almost all changes of AntennaPod are done on the `develop` branch. If a new version of AntennaPod is released, the `develop` branch is merged into `master`. As a result, the `master` branch probably doesn't contain the latest changes when you are reading this. Please make sure that you are branching from `develop`! Otherwise, there might be a lot of merge-conflicts when merging your changes into `develop` and therefore it might take longer to review your pull-request. Exceptions are urgent issues that need to be fixed in the production version.
|
||||
- If your pull request fixes a bug that has been reported or implements a feature that has been requested in another issue, try to mention it in the message, so that it can be closed once your pull request has been merged. If you use special keywords in the [commit comment](https://help.github.com/en/github/managing-your-work-on-github/linking-a-pull-request-to-an-issue) or [pull request text](https://github.blog/2013-05-14-closing-issues-via-pull-requests/), GitHub will close the issue(s) automatically.
|
||||
- If possible, add unit tests for your pull request and make sure that they pass.
|
||||
- Please do not upgrade dependencies or build tools unless you have a good reason for it. Doing so can easily introduce bugs that are hard to track down.
|
||||
- If you plan to do a change that touches many files (10+), please ask beforehand. This usually causes merge conflicts for other developers.
|
||||
- Please follow our code style. You can use Checkstyle within Android Studio using our [coniguration file](https://github.com/AntennaPod/AntennaPod/blob/develop/config/checkstyle/checkstyle-new-code.xml).
|
||||
|
|
|
@ -1,8 +1,12 @@
|
|||
package de.danoeh.antennapod.dialog;
|
||||
|
||||
import android.content.Context;
|
||||
import androidx.appcompat.app.AlertDialog;
|
||||
import android.text.TextUtils;
|
||||
import android.view.LayoutInflater;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.RadioButton;
|
||||
|
||||
import androidx.appcompat.app.AlertDialog;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.HashSet;
|
||||
|
@ -10,6 +14,8 @@ import java.util.Set;
|
|||
|
||||
import de.danoeh.antennapod.R;
|
||||
import de.danoeh.antennapod.core.feed.FeedItemFilter;
|
||||
import de.danoeh.antennapod.core.feed.FeedItemFilterGroup;
|
||||
import de.danoeh.antennapod.view.RecursiveRadioGroup;
|
||||
|
||||
public abstract class FilterDialog {
|
||||
|
||||
|
@ -22,36 +28,48 @@ public abstract class FilterDialog {
|
|||
}
|
||||
|
||||
public void openDialog() {
|
||||
final String[] items = context.getResources().getStringArray(R.array.episode_filter_options);
|
||||
final String[] values = context.getResources().getStringArray(R.array.episode_filter_values);
|
||||
final boolean[] checkedItems = new boolean[items.length];
|
||||
|
||||
final Set<String> filterValues = new HashSet<>(Arrays.asList(filter.getValues()));
|
||||
|
||||
// make sure we have no empty strings in the filter list
|
||||
for (String filterValue : filterValues) {
|
||||
if (TextUtils.isEmpty(filterValue)) {
|
||||
filterValues.remove(filterValue);
|
||||
}
|
||||
}
|
||||
|
||||
for (int i = 0; i < values.length; i++) {
|
||||
String value = values[i];
|
||||
if (filterValues.contains(value)) {
|
||||
checkedItems[i] = true;
|
||||
}
|
||||
}
|
||||
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(context);
|
||||
builder.setTitle(R.string.filter);
|
||||
builder.setMultiChoiceItems(items, checkedItems, (dialog, which, isChecked) -> {
|
||||
if (isChecked) {
|
||||
filterValues.add(values[which]);
|
||||
} else {
|
||||
filterValues.remove(values[which]);
|
||||
|
||||
LayoutInflater inflater = LayoutInflater.from(this.context);
|
||||
LinearLayout layout = (LinearLayout) inflater.inflate(R.layout.filter_dialog, null, false);
|
||||
builder.setView(layout);
|
||||
|
||||
for (FeedItemFilterGroup item : FeedItemFilterGroup.values()) {
|
||||
RecursiveRadioGroup row = (RecursiveRadioGroup) inflater.inflate(R.layout.filter_dialog_row, null);
|
||||
RadioButton filter1 = row.findViewById(R.id.filter_dialog_radioButton1);
|
||||
RadioButton filter2 = row.findViewById(R.id.filter_dialog_radioButton2);
|
||||
filter1.setText(item.values[0].displayName);
|
||||
filter1.setTag(item.values[0].filterId);
|
||||
filter2.setText(item.values[1].displayName);
|
||||
filter2.setTag(item.values[1].filterId);
|
||||
layout.addView(row);
|
||||
}
|
||||
|
||||
for (String filterId : filterValues) {
|
||||
if (!TextUtils.isEmpty(filterId)) {
|
||||
((RadioButton) layout.findViewWithTag(filterId)).setChecked(true);
|
||||
}
|
||||
}
|
||||
|
||||
builder.setPositiveButton(R.string.confirm_label, (dialog, which) -> {
|
||||
filterValues.clear();
|
||||
for (int i = 0; i < layout.getChildCount(); i++) {
|
||||
if (!(layout.getChildAt(i) instanceof RecursiveRadioGroup)) {
|
||||
continue;
|
||||
}
|
||||
RecursiveRadioGroup group = (RecursiveRadioGroup) layout.getChildAt(i);
|
||||
if (group.getCheckedButton() != null) {
|
||||
String tag = (String) group.getCheckedButton().getTag();
|
||||
if (tag != null) { // Clear buttons use no tag
|
||||
filterValues.add((String) group.getCheckedButton().getTag());
|
||||
}
|
||||
}
|
||||
}
|
||||
updateFilter(filterValues);
|
||||
});
|
||||
builder.setPositiveButton(R.string.confirm_label, (dialog, which) -> updateFilter(filterValues));
|
||||
builder.setNegativeButton(R.string.cancel_label, null);
|
||||
builder.create().show();
|
||||
}
|
||||
|
|
|
@ -0,0 +1,67 @@
|
|||
package de.danoeh.antennapod.view;
|
||||
|
||||
import android.content.Context;
|
||||
import android.util.AttributeSet;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.RadioButton;
|
||||
import java.util.ArrayList;
|
||||
|
||||
/**
|
||||
* An alternative to {@link android.widget.RadioGroup} that allows to nest children.
|
||||
* Basend on https://stackoverflow.com/a/14309274.
|
||||
*/
|
||||
public class RecursiveRadioGroup extends LinearLayout {
|
||||
private final ArrayList<RadioButton> radioButtons = new ArrayList<>();
|
||||
private RadioButton checkedButton = null;
|
||||
|
||||
public RecursiveRadioGroup(Context context) {
|
||||
super(context);
|
||||
}
|
||||
|
||||
public RecursiveRadioGroup(Context context, AttributeSet attrs) {
|
||||
this(context, attrs, 0);
|
||||
}
|
||||
|
||||
public RecursiveRadioGroup(Context context, AttributeSet attrs, int defStyle) {
|
||||
super(context, attrs, defStyle);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addView(View child, int index, ViewGroup.LayoutParams params) {
|
||||
super.addView(child, index, params);
|
||||
parseChild(child);
|
||||
}
|
||||
|
||||
public void parseChild(final View child) {
|
||||
if (child instanceof RadioButton) {
|
||||
RadioButton button = (RadioButton) child;
|
||||
radioButtons.add(button);
|
||||
button.setOnCheckedChangeListener((buttonView, isChecked) -> {
|
||||
if (!isChecked) {
|
||||
return;
|
||||
}
|
||||
checkedButton = (RadioButton) buttonView;
|
||||
|
||||
for (RadioButton view : radioButtons) {
|
||||
if (view != buttonView) {
|
||||
view.setChecked(false);
|
||||
}
|
||||
}
|
||||
});
|
||||
} else if (child instanceof ViewGroup) {
|
||||
parseChildren((ViewGroup) child);
|
||||
}
|
||||
}
|
||||
|
||||
public void parseChildren(final ViewGroup child) {
|
||||
for (int i = 0; i < child.getChildCount(); i++) {
|
||||
parseChild(child.getChildAt(i));
|
||||
}
|
||||
}
|
||||
|
||||
public RadioButton getCheckedButton() {
|
||||
return checkedButton;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical"
|
||||
android:paddingLeft="24dp"
|
||||
android:paddingTop="24dp"
|
||||
android:paddingRight="24dp"
|
||||
android:paddingBottom="8dp">
|
||||
|
||||
</LinearLayout>
|
|
@ -0,0 +1,61 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<de.danoeh.antennapod.view.RecursiveRadioGroup
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:paddingBottom="8dp"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<androidx.cardview.widget.CardView
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:clipChildren="true"
|
||||
app:cardCornerRadius="32dp"
|
||||
app:cardElevation="0dp">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<RadioButton
|
||||
android:id="@+id/filter_dialog_radioButton1"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginEnd="2dp"
|
||||
android:layout_marginRight="2dp"
|
||||
android:layout_weight="1"
|
||||
android:background="?attr/filter_dialog_button_background"
|
||||
android:button="@android:color/transparent"
|
||||
android:foreground="?android:attr/selectableItemBackground"
|
||||
android:checked="false"
|
||||
android:gravity="center"
|
||||
android:textColor="@color/filter_dialog_button_text" />
|
||||
|
||||
<RadioButton
|
||||
android:id="@+id/filter_dialog_radioButton2"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="1"
|
||||
android:background="?attr/filter_dialog_button_background"
|
||||
android:button="@android:color/transparent"
|
||||
android:foreground="?android:attr/selectableItemBackground"
|
||||
android:checked="false"
|
||||
android:gravity="center"
|
||||
android:textColor="@color/filter_dialog_button_text" />
|
||||
</LinearLayout>
|
||||
</androidx.cardview.widget.CardView>
|
||||
|
||||
<RadioButton
|
||||
android:id="@+id/filter_dialog_clear"
|
||||
android:layout_width="48dp"
|
||||
android:layout_height="48dp"
|
||||
android:background="@drawable/ic_filter_close"
|
||||
android:button="@android:color/transparent"
|
||||
android:foreground="?android:attr/selectableItemBackground"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:checked="true" />
|
||||
|
||||
</de.danoeh.antennapod.view.RecursiveRadioGroup>
|
|
@ -1,8 +1,10 @@
|
|||
package de.danoeh.antennapod.core.feed;
|
||||
|
||||
import android.text.TextUtils;
|
||||
import android.util.Log;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
import de.danoeh.antennapod.core.storage.DBReader;
|
||||
|
@ -11,17 +13,21 @@ import de.danoeh.antennapod.core.util.LongList;
|
|||
import static de.danoeh.antennapod.core.feed.FeedItem.TAG_FAVORITE;
|
||||
|
||||
public class FeedItemFilter {
|
||||
|
||||
private final String[] mProperties;
|
||||
|
||||
private boolean showPlayed = false;
|
||||
private boolean showUnplayed = false;
|
||||
private boolean showPaused = false;
|
||||
private boolean showNotPaused = false;
|
||||
private boolean showQueued = false;
|
||||
private boolean showNotQueued = false;
|
||||
private boolean showDownloaded = false;
|
||||
private boolean showNotDownloaded = false;
|
||||
private boolean showHasMedia = false;
|
||||
private boolean showNoMedia = false;
|
||||
private boolean showIsFavorite = false;
|
||||
private boolean showNotFavorite = false;
|
||||
|
||||
public FeedItemFilter(String properties) {
|
||||
this(TextUtils.split(properties, ","));
|
||||
|
@ -29,15 +35,18 @@ public class FeedItemFilter {
|
|||
|
||||
public FeedItemFilter(String[] properties) {
|
||||
this.mProperties = properties;
|
||||
for(String property : properties) {
|
||||
for (String property : properties) {
|
||||
// see R.arrays.feed_filter_values
|
||||
switch(property) {
|
||||
switch (property) {
|
||||
case "unplayed":
|
||||
showUnplayed = true;
|
||||
break;
|
||||
case "paused":
|
||||
showPaused = true;
|
||||
break;
|
||||
case "not_paused":
|
||||
showNotPaused = true;
|
||||
break;
|
||||
case "played":
|
||||
showPlayed = true;
|
||||
break;
|
||||
|
@ -56,9 +65,17 @@ public class FeedItemFilter {
|
|||
case "has_media":
|
||||
showHasMedia = true;
|
||||
break;
|
||||
case "no_media":
|
||||
showNoMedia = true;
|
||||
break;
|
||||
case "is_favorite":
|
||||
showIsFavorite = true;
|
||||
break;
|
||||
case "not_favorite":
|
||||
showNotFavorite = true;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -77,12 +94,15 @@ public class FeedItemFilter {
|
|||
if (showQueued && showNotQueued) return result;
|
||||
if (showDownloaded && showNotDownloaded) return result;
|
||||
|
||||
final LongList queuedIds = DBReader.getQueueIDList();
|
||||
for(FeedItem item : items) {
|
||||
final LongList queuedIds = DBReader.getQueueIDList();
|
||||
for (FeedItem item : items) {
|
||||
// If the item does not meet a requirement, skip it.
|
||||
|
||||
if (showPlayed && !item.isPlayed()) continue;
|
||||
if (showUnplayed && item.isPlayed()) continue;
|
||||
|
||||
if (showPaused && item.getState() != FeedItem.State.IN_PROGRESS) continue;
|
||||
if (showNotPaused && item.getState() == FeedItem.State.IN_PROGRESS) continue;
|
||||
|
||||
boolean queued = queuedIds.contains(item.getId());
|
||||
if (showQueued && !queued) continue;
|
||||
|
@ -93,8 +113,10 @@ public class FeedItemFilter {
|
|||
if (showNotDownloaded && downloaded) continue;
|
||||
|
||||
if (showHasMedia && !item.hasMedia()) continue;
|
||||
if (showNoMedia && item.hasMedia()) continue;
|
||||
|
||||
if (showIsFavorite && !item.isTagged(TAG_FAVORITE)) continue;
|
||||
if (showNotFavorite && item.isTagged(TAG_FAVORITE)) continue;
|
||||
|
||||
// If the item reaches here, it meets all criteria
|
||||
result.add(item);
|
||||
|
|
|
@ -0,0 +1,36 @@
|
|||
package de.danoeh.antennapod.core.feed;
|
||||
|
||||
import de.danoeh.antennapod.core.R;
|
||||
|
||||
public enum FeedItemFilterGroup {
|
||||
PLAYED(new ItemProperties(R.string.hide_played_episodes_label, "played"),
|
||||
new ItemProperties(R.string.not_played, "unplayed")),
|
||||
PAUSED(new ItemProperties(R.string.hide_paused_episodes_label, "paused"),
|
||||
new ItemProperties(R.string.not_paused, "not_paused")),
|
||||
FAVORITE(new ItemProperties(R.string.hide_is_favorite_label, "is_favorite"),
|
||||
new ItemProperties(R.string.not_favorite, "not_favorite")),
|
||||
MEDIA(new ItemProperties(R.string.has_media, "has_media"),
|
||||
new ItemProperties(R.string.no_media, "no_media")),
|
||||
QUEUED(new ItemProperties(R.string.queued_label, "queued"),
|
||||
new ItemProperties(R.string.not_queued_label, "not_queued")),
|
||||
DOWNLOADED(new ItemProperties(R.string.hide_downloaded_episodes_label, "downloaded"),
|
||||
new ItemProperties(R.string.hide_not_downloaded_episodes_label, "not_downloaded"));
|
||||
|
||||
public final ItemProperties[] values;
|
||||
|
||||
FeedItemFilterGroup(ItemProperties... values) {
|
||||
this.values = values;
|
||||
}
|
||||
|
||||
public static class ItemProperties {
|
||||
|
||||
public final int displayName;
|
||||
public final String filterId;
|
||||
|
||||
public ItemProperties(int displayName, String filterId) {
|
||||
this.displayName = displayName;
|
||||
this.filterId = filterId;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
|
@ -0,0 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item android:color="@color/accent_dark" android:state_checked="true"/>
|
||||
<item android:color="@color/dialog_filter_inactive_dark" />
|
||||
</selector>
|
|
@ -0,0 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item android:color="@color/accent_light" android:state_checked="true" />
|
||||
<item android:color="@color/dialog_filter_inactive_light" />
|
||||
</selector>
|
|
@ -0,0 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item android:color="?attr/colorOnSecondary" android:state_checked="true" />
|
||||
<item android:color="?android:textColorPrimary" />
|
||||
</selector>
|
|
@ -0,0 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item android:color="@color/dialog_filter_inactive_dark" android:state_checked="true" />
|
||||
<item android:color="@color/dialog_filter_clear_inactive_dark" />
|
||||
</selector>
|
|
@ -0,0 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item android:color="@color/dialog_filter_inactive_light" android:state_checked="true" />
|
||||
<item android:color="@color/dialog_filter_clear_inactive_light" />
|
||||
</selector>
|
|
@ -0,0 +1,55 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
|
||||
<item
|
||||
android:bottom="5dp"
|
||||
android:left="5dp"
|
||||
android:right="5dp"
|
||||
android:top="5dp">
|
||||
|
||||
<shape android:shape="oval">
|
||||
<stroke
|
||||
android:width="4dp"
|
||||
android:color="?attr/filter_dialog_clear" />
|
||||
</shape>
|
||||
</item>
|
||||
|
||||
<!-- x -->
|
||||
<item
|
||||
android:bottom="12dp"
|
||||
android:left="12dp"
|
||||
android:right="12dp"
|
||||
android:top="12dp">
|
||||
<rotate
|
||||
android:fromDegrees="135"
|
||||
android:pivotX="50%"
|
||||
android:pivotY="50%"
|
||||
android:toDegrees="135">
|
||||
<shape android:shape="line">
|
||||
<stroke
|
||||
android:width="4dp"
|
||||
android:color="?attr/filter_dialog_clear" />
|
||||
</shape>
|
||||
</rotate>
|
||||
</item>
|
||||
|
||||
<item
|
||||
android:bottom="12dp"
|
||||
android:left="12dp"
|
||||
android:right="12dp"
|
||||
android:top="12dp">
|
||||
<rotate
|
||||
android:fromDegrees="45"
|
||||
android:pivotX="50%"
|
||||
android:pivotY="50%"
|
||||
android:toDegrees="45">
|
||||
<shape android:shape="line">
|
||||
<stroke
|
||||
android:width="4dp"
|
||||
android:color="?attr/filter_dialog_clear" />
|
||||
</shape>
|
||||
|
||||
</rotate>
|
||||
</item>
|
||||
|
||||
</layer-list>
|
|
@ -245,30 +245,6 @@
|
|||
<item>exoplayer</item>
|
||||
</string-array>
|
||||
|
||||
<string-array name="episode_filter_options">
|
||||
<item>@string/hide_unplayed_episodes_label</item>
|
||||
<item>@string/hide_paused_episodes_label</item>
|
||||
<item>@string/hide_played_episodes_label</item>
|
||||
<item>@string/hide_queued_episodes_label</item>
|
||||
<item>@string/hide_not_queued_episodes_label</item>
|
||||
<item>@string/hide_downloaded_episodes_label</item>
|
||||
<item>@string/hide_not_downloaded_episodes_label</item>
|
||||
<item>@string/hide_has_media_label</item>
|
||||
<item>@string/hide_is_favorite_label</item>
|
||||
</string-array>
|
||||
|
||||
<string-array name="episode_filter_values">
|
||||
<item>unplayed</item>
|
||||
<item>paused</item>
|
||||
<item>played</item>
|
||||
<item>queued</item>
|
||||
<item>not_queued</item>
|
||||
<item>downloaded</item>
|
||||
<item>not_downloaded</item>
|
||||
<item>has_media</item>
|
||||
<item>is_favorite</item>
|
||||
</string-array>
|
||||
|
||||
<!-- sort for podcast screen, not for queue -->
|
||||
<string-array name="feed_episodes_sort_options">
|
||||
<item>@string/sort_date_new_old</item>
|
||||
|
|
|
@ -58,6 +58,8 @@
|
|||
<attr name="action_icon_color" format="color"/>
|
||||
<attr name="scrollbar_thumb" format="reference"/>
|
||||
<attr name="background_elevated" format="color"/>
|
||||
<attr name="filter_dialog_clear" format="reference"/>
|
||||
<attr name="filter_dialog_button_background" format="reference"/>
|
||||
|
||||
<declare-styleable name="SquareImageView">
|
||||
<attr name="direction" format="enum">
|
||||
|
|
|
@ -28,4 +28,9 @@
|
|||
<color name="master_switch_background_light">#DDDDDD</color>
|
||||
<color name="master_switch_background_dark">#191919</color>
|
||||
|
||||
<!-- filter dialog -->
|
||||
<color name="dialog_filter_clear_inactive_light">#666666</color>
|
||||
<color name="dialog_filter_clear_inactive_dark">#bbbbbb</color>
|
||||
<color name="dialog_filter_inactive_light">#eeeeee</color>
|
||||
<color name="dialog_filter_inactive_dark">#555555</color>
|
||||
</resources>
|
||||
|
|
|
@ -152,14 +152,9 @@
|
|||
<string name="select_all_above">Select all above</string>
|
||||
<string name="select_all_below">Select all below</string>
|
||||
<string name="hide_unplayed_episodes_label">Unplayed</string>
|
||||
<string name="hide_paused_episodes_label">Paused</string>
|
||||
<string name="hide_played_episodes_label">Played</string>
|
||||
<string name="hide_queued_episodes_label">Queued</string>
|
||||
<string name="hide_not_queued_episodes_label">Not queued</string>
|
||||
<string name="hide_downloaded_episodes_label">Downloaded</string>
|
||||
<string name="hide_not_downloaded_episodes_label">Not downloaded</string>
|
||||
<string name="hide_has_media_label">Has media</string>
|
||||
<string name="hide_is_favorite_label">Is favorite</string>
|
||||
<string name="filtered_label">Filtered</string>
|
||||
<string name="refresh_failed_msg">{fa-exclamation-circle} Last Refresh failed</string>
|
||||
<string name="open_podcast">Open Podcast</string>
|
||||
|
@ -737,13 +732,23 @@
|
|||
<string name="selected_downloaded_label">Selected downloaded Episodes</string>
|
||||
<string name="not_downloaded_label">Not downloaded</string>
|
||||
<string name="selected_not_downloaded_label">Selected not downloaded Episodes</string>
|
||||
<string name="queued_label">Queued</string>
|
||||
<string name="selected_queued_label">Selected queued Episodes</string>
|
||||
<string name="not_queued_label">Not queued</string>
|
||||
<string name="selected_not_queued_label">Selected not queued Episodes</string>
|
||||
<string name="has_media">Has media</string>
|
||||
<string name="selected_has_media_label">Selected episodes with media</string>
|
||||
|
||||
<string name="hide_is_favorite_label">Is favorite</string>
|
||||
<string name="not_favorite">Not favorite</string>
|
||||
<string name="hide_downloaded_episodes_label">Downloaded</string>
|
||||
<string name="hide_not_downloaded_episodes_label">Not downloaded</string>
|
||||
<string name="queued_label">Queued</string>
|
||||
<string name="not_queued_label">Not queued</string>
|
||||
<string name="has_media">Has media</string>
|
||||
<string name="no_media">No media</string>
|
||||
<string name="hide_paused_episodes_label">Paused</string>
|
||||
<string name="not_paused">Not paused</string>
|
||||
<string name="hide_played_episodes_label">Played</string>
|
||||
<string name="not_played">Not played</string>
|
||||
|
||||
<!-- Sort -->
|
||||
<string name="sort_title_a_z">Title (A \u2192 Z)</string>
|
||||
<string name="sort_title_z_a">Title (Z \u2192 A)</string>
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools">
|
||||
|
||||
<style name="Theme.AntennaPod.Light" parent="Theme.Base.AntennaPod.Light">
|
||||
<!-- Room for API dependent attributes -->
|
||||
|
@ -73,6 +73,8 @@
|
|||
<item name="ic_key">@drawable/ic_key_black</item>
|
||||
<item name="ic_volume_adaption">@drawable/ic_volume_adaption_black</item>
|
||||
<item name="scrollbar_thumb">@drawable/scrollbar_thumb_light</item>
|
||||
<item name="filter_dialog_clear">@color/filter_dialog_clear_light</item>
|
||||
<item name="filter_dialog_button_background">@color/filter_dialog_background_light</item>
|
||||
</style>
|
||||
|
||||
<style name="Theme.AntennaPod.Dark" parent="Theme.Base.AntennaPod.Dark">
|
||||
|
@ -148,6 +150,8 @@
|
|||
<item name="ic_key">@drawable/ic_key_white</item>
|
||||
<item name="ic_volume_adaption">@drawable/ic_volume_adaption_white</item>
|
||||
<item name="scrollbar_thumb">@drawable/scrollbar_thumb_dark</item>
|
||||
<item name="filter_dialog_clear">@color/filter_dialog_clear_dark</item>
|
||||
<item name="filter_dialog_button_background">@color/filter_dialog_background_dark</item>
|
||||
</style>
|
||||
|
||||
<style name="Theme.AntennaPod.TrueBlack" parent="Theme.Base.AntennaPod.TrueBlack">
|
||||
|
|
Loading…
Reference in New Issue