diff options
author | ByteHamster <info@bytehamster.com> | 2020-10-17 23:35:24 +0200 |
---|---|---|
committer | ByteHamster <info@bytehamster.com> | 2020-10-17 23:35:24 +0200 |
commit | 8f6c560f01334c1fa0e74b05cbf1dbad05119572 (patch) | |
tree | b33427028fcd76e22204f69cd466aedbb8b5d1b8 /app/src/main/java | |
parent | 4971bb52873839acc6d00d12730c1d36cf0ea394 (diff) | |
parent | ee4b2c05545b81ef154a5802479793e8eaf29af1 (diff) | |
download | AntennaPod-8f6c560f01334c1fa0e74b05cbf1dbad05119572.zip |
Merge branch 'master' into develop
Diffstat (limited to 'app/src/main/java')
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); } } |