summaryrefslogtreecommitdiff
path: root/app/src/main/java
diff options
context:
space:
mode:
authorByteHamster <info@bytehamster.com>2020-10-17 23:35:24 +0200
committerByteHamster <info@bytehamster.com>2020-10-17 23:35:24 +0200
commit8f6c560f01334c1fa0e74b05cbf1dbad05119572 (patch)
treeb33427028fcd76e22204f69cd466aedbb8b5d1b8 /app/src/main/java
parent4971bb52873839acc6d00d12730c1d36cf0ea394 (diff)
parentee4b2c05545b81ef154a5802479793e8eaf29af1 (diff)
downloadAntennaPod-8f6c560f01334c1fa0e74b05cbf1dbad05119572.zip
Merge branch 'master' into develop
Diffstat (limited to 'app/src/main/java')
-rw-r--r--app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java24
-rw-r--r--app/src/main/java/de/danoeh/antennapod/adapter/actionbutton/VisitWebsiteActionButton.java4
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/FeedItemlistFragment.java9
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/ItemPagerFragment.java14
-rw-r--r--app/src/main/java/de/danoeh/antennapod/menuhandler/MenuItemUtils.java2
-rw-r--r--app/src/main/java/de/danoeh/antennapod/view/ToolbarIconTintManager.java24
6 files changed, 62 insertions, 15 deletions
diff --git a/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java
index 5a59cda01..6f237e1aa 100644
--- a/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java
+++ b/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java
@@ -26,6 +26,7 @@ import androidx.appcompat.app.ActionBarDrawerToggle;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.widget.Toolbar;
import androidx.core.content.ContextCompat;
+import androidx.core.view.ViewCompat;
import androidx.drawerlayout.widget.DrawerLayout;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
@@ -78,6 +79,7 @@ public class MainActivity extends CastEnabledActivity {
public static final String EXTRA_OPEN_PLAYER = "open_player";
public static final String EXTRA_REFRESH_ON_START = "refresh_on_start";
public static final String EXTRA_STARTED_FROM_SEARCH = "started_from_search";
+ public static final String KEY_GENERATED_VIEW_ID = "generated_view_id";
private @Nullable DrawerLayout drawerLayout;
private @Nullable ActionBarDrawerToggle drawerToggle;
@@ -99,6 +101,9 @@ public class MainActivity extends CastEnabledActivity {
public void onCreate(Bundle savedInstanceState) {
lastTheme = UserPreferences.getNoTitleTheme();
setTheme(lastTheme);
+ if (savedInstanceState != null) {
+ ensureGeneratedViewIdGreaterThan(savedInstanceState.getInt(KEY_GENERATED_VIEW_ID, 0));
+ }
super.onCreate(savedInstanceState);
StorageUtils.checkStorageAvailability(this);
setContentView(R.layout.main);
@@ -150,6 +155,25 @@ public class MainActivity extends CastEnabledActivity {
sheetBehavior.setBottomSheetCallback(bottomSheetCallback);
}
+ /**
+ * ViewCompat.generateViewId stores the current ID in a static variable.
+ * When the process is killed, the variable gets reset.
+ * This makes sure that we do not get ID collisions
+ * and therefore errors when trying to restore state from another view.
+ */
+ @SuppressWarnings("StatementWithEmptyBody")
+ private void ensureGeneratedViewIdGreaterThan(int minimum) {
+ while (ViewCompat.generateViewId() <= minimum) {
+ // Generate new IDs
+ }
+ }
+
+ @Override
+ protected void onSaveInstanceState(@NonNull Bundle outState) {
+ super.onSaveInstanceState(outState);
+ outState.putInt(KEY_GENERATED_VIEW_ID, ViewCompat.generateViewId());
+ }
+
private BottomSheetBehavior.BottomSheetCallback bottomSheetCallback =
new BottomSheetBehavior.BottomSheetCallback() {
@Override
diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/actionbutton/VisitWebsiteActionButton.java b/app/src/main/java/de/danoeh/antennapod/adapter/actionbutton/VisitWebsiteActionButton.java
index 46712a666..7b8659968 100644
--- a/app/src/main/java/de/danoeh/antennapod/adapter/actionbutton/VisitWebsiteActionButton.java
+++ b/app/src/main/java/de/danoeh/antennapod/adapter/actionbutton/VisitWebsiteActionButton.java
@@ -8,6 +8,7 @@ import androidx.annotation.AttrRes;
import androidx.annotation.StringRes;
import de.danoeh.antennapod.R;
import de.danoeh.antennapod.core.feed.FeedItem;
+import de.danoeh.antennapod.core.util.IntentUtils;
public class VisitWebsiteActionButton extends ItemActionButton {
@@ -29,8 +30,7 @@ public class VisitWebsiteActionButton extends ItemActionButton {
@Override
public void onClick(Context context) {
- Uri uri = Uri.parse(item.getLink());
- context.startActivity(new Intent(Intent.ACTION_VIEW, uri));
+ IntentUtils.openInBrowser(context, item.getLink());
}
@Override
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/FeedItemlistFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/FeedItemlistFragment.java
index cef5e13e7..115f8c665 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/FeedItemlistFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/FeedItemlistFragment.java
@@ -281,7 +281,12 @@ public class FeedItemlistFragment extends Fragment implements AdapterView.OnItem
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
- if (!super.onOptionsItemSelected(item)) {
+ if (item.getItemId() == R.id.action_search) {
+ item.getActionView().post(() -> iconTintManager.updateTint());
+ }
+ if (super.onOptionsItemSelected(item)) {
+ return true;
+ } else {
if (feed == null) {
((MainActivity) getActivity()).showSnackbarAbovePlayer(
R.string.please_wait_for_data, Toast.LENGTH_LONG);
@@ -332,8 +337,6 @@ public class FeedItemlistFragment extends Fragment implements AdapterView.OnItem
DownloadRequestErrorDialogCreator.newRequestErrorDialog(getActivity(), e.getMessage());
return true;
}
- } else {
- return true;
}
}
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/ItemPagerFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/ItemPagerFragment.java
index 3b1171df4..2425a174e 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/ItemPagerFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/ItemPagerFragment.java
@@ -38,6 +38,8 @@ import io.reactivex.schedulers.Schedulers;
public class ItemPagerFragment extends Fragment {
private static final String ARG_FEEDITEMS = "feeditems";
private static final String ARG_FEEDITEM_POS = "feeditem_pos";
+ private static final String KEY_PAGER_ID = "pager_id";
+ private ViewPager2 pager;
/**
* Creates a new instance of an ItemPagerFragment.
@@ -77,12 +79,16 @@ public class ItemPagerFragment extends Fragment {
feedItems = getArguments().getLongArray(ARG_FEEDITEMS);
int feedItemPos = getArguments().getInt(ARG_FEEDITEM_POS);
- ViewPager2 pager = layout.findViewById(R.id.pager);
+ pager = layout.findViewById(R.id.pager);
// FragmentStatePagerAdapter documentation:
// > When using FragmentStatePagerAdapter the host ViewPager must have a valid ID set.
// When opening multiple ItemPagerFragments by clicking "item" -> "visit podcast" -> "item" -> etc,
// the ID is no longer unique and FragmentStatePagerAdapter does not display any pages.
int newId = ViewCompat.generateViewId();
+ if (savedInstanceState != null && savedInstanceState.getInt(KEY_PAGER_ID, 0) != 0) {
+ // Restore state by using the same ID as before. ID collisions are prevented in MainActivity.
+ newId = savedInstanceState.getInt(KEY_PAGER_ID, 0);
+ }
pager.setId(newId);
pager.setAdapter(new ItemPagerAdapter(this));
pager.setCurrentItem(feedItemPos, false);
@@ -100,6 +106,12 @@ public class ItemPagerFragment extends Fragment {
}
@Override
+ public void onSaveInstanceState(@NonNull Bundle outState) {
+ super.onSaveInstanceState(outState);
+ outState.putInt(KEY_PAGER_ID, pager.getId());
+ }
+
+ @Override
public void onDestroyView() {
super.onDestroyView();
EventBus.getDefault().unregister(this);
diff --git a/app/src/main/java/de/danoeh/antennapod/menuhandler/MenuItemUtils.java b/app/src/main/java/de/danoeh/antennapod/menuhandler/MenuItemUtils.java
index 9f6c28ee1..6b3c99975 100644
--- a/app/src/main/java/de/danoeh/antennapod/menuhandler/MenuItemUtils.java
+++ b/app/src/main/java/de/danoeh/antennapod/menuhandler/MenuItemUtils.java
@@ -8,6 +8,7 @@ import androidx.appcompat.widget.SearchView;
import de.danoeh.antennapod.R;
import de.danoeh.antennapod.activity.MainActivity;
import de.danoeh.antennapod.core.preferences.UserPreferences;
+import de.danoeh.antennapod.core.util.ThemeUtils;
import de.danoeh.antennapod.fragment.SearchFragment;
/**
@@ -33,6 +34,7 @@ public class MenuItemUtils extends de.danoeh.antennapod.core.menuhandler.MenuIte
public static void setupSearchItem(Menu menu, MainActivity activity, long feedId, String feedTitle) {
MenuItem searchItem = menu.findItem(R.id.action_search);
final SearchView sv = (SearchView) searchItem.getActionView();
+ sv.setBackgroundColor(ThemeUtils.getColorFromAttr(activity, android.R.attr.windowBackground));
sv.setQueryHint(activity.getString(R.string.search_label));
sv.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
diff --git a/app/src/main/java/de/danoeh/antennapod/view/ToolbarIconTintManager.java b/app/src/main/java/de/danoeh/antennapod/view/ToolbarIconTintManager.java
index 163100fff..37d8db03e 100644
--- a/app/src/main/java/de/danoeh/antennapod/view/ToolbarIconTintManager.java
+++ b/app/src/main/java/de/danoeh/antennapod/view/ToolbarIconTintManager.java
@@ -1,7 +1,9 @@
package de.danoeh.antennapod.view;
import android.content.Context;
-import android.graphics.PorterDuff;
+import android.graphics.PorterDuff.Mode;
+import android.graphics.PorterDuffColorFilter;
+import android.graphics.drawable.Drawable;
import android.view.ContextThemeWrapper;
import androidx.appcompat.widget.Toolbar;
import androidx.core.view.ViewCompat;
@@ -33,16 +35,20 @@ public abstract class ToolbarIconTintManager implements AppBarLayout.OnOffsetCha
public void updateTint() {
if (isTinted) {
doTint(new ContextThemeWrapper(context, R.style.Theme_AntennaPod_Dark));
- if (toolbar.getNavigationIcon() != null) { // Tablets do not show a navigation icon
- toolbar.getNavigationIcon().setColorFilter(0xffffffff, PorterDuff.Mode.SRC_ATOP);
- }
- toolbar.getOverflowIcon().setColorFilter(0xffffffff, PorterDuff.Mode.SRC_ATOP);
+ safeSetColorFilter(toolbar.getNavigationIcon(), new PorterDuffColorFilter(0xffffffff, Mode.SRC_ATOP));
+ safeSetColorFilter(toolbar.getOverflowIcon(), new PorterDuffColorFilter(0xffffffff, Mode.SRC_ATOP));
+ safeSetColorFilter(toolbar.getCollapseIcon(), new PorterDuffColorFilter(0xffffffff, Mode.SRC_ATOP));
} else {
doTint(context);
- if (toolbar.getNavigationIcon() != null) { // Tablets do not show a navigation icon
- toolbar.getNavigationIcon().clearColorFilter();
- }
- toolbar.getOverflowIcon().clearColorFilter();
+ safeSetColorFilter(toolbar.getNavigationIcon(), null);
+ safeSetColorFilter(toolbar.getOverflowIcon(), null);
+ safeSetColorFilter(toolbar.getCollapseIcon(), null);
+ }
+ }
+
+ private void safeSetColorFilter(Drawable icon, PorterDuffColorFilter filter) {
+ if (icon != null) {
+ icon.setColorFilter(filter);
}
}