Merge pull request #3271 from Stypox/icons
Use vector drawables instead of PNGs for material icons
| @@ -80,7 +80,7 @@ android { | ||||
| } | ||||
|  | ||||
| ext { | ||||
|     androidxLibVersion = '1.0.0' | ||||
|     androidxLibVersion = '1.1.0' | ||||
|     exoPlayerLibVersion = '2.11.4' | ||||
|     roomDbLibVersion = '2.1.0' | ||||
|     leakCanaryLibVersion = '1.5.4' //1.6.1 | ||||
| @@ -153,13 +153,12 @@ dependencies { | ||||
|     testImplementation 'junit:junit:4.12' | ||||
|     testImplementation 'org.mockito:mockito-core:2.23.0' | ||||
|  | ||||
|     implementation 'androidx.appcompat:appcompat:1.1.0' | ||||
|     implementation "androidx.legacy:legacy-support-v4:${androidxLibVersion}" | ||||
|     implementation "androidx.appcompat:appcompat:${androidxLibVersion}" | ||||
|     implementation "com.google.android.material:material:${androidxLibVersion}" | ||||
|     implementation "androidx.recyclerview:recyclerview:${androidxLibVersion}" | ||||
|     implementation "androidx.legacy:legacy-preference-v14:${androidxLibVersion}" | ||||
|     implementation "androidx.cardview:cardview:${androidxLibVersion}" | ||||
|     implementation 'androidx.constraintlayout:constraintlayout:1.1.3' | ||||
|     implementation "androidx.preference:preference:${androidxLibVersion}" | ||||
|     implementation "androidx.cardview:cardview:1.0.0" | ||||
|     implementation "androidx.constraintlayout:constraintlayout:1.1.3" | ||||
|  | ||||
|     implementation 'com.xwray:groupie:2.7.0' | ||||
|     implementation 'com.xwray:groupie-kotlin-android-extensions:2.7.0' | ||||
|   | ||||
| @@ -165,8 +165,7 @@ public class MainActivity extends AppCompatActivity { | ||||
|             drawerItems.getMenu() | ||||
|                     .add(R.id.menu_tabs_group, kioskId, 0, KioskTranslator | ||||
|                             .getTranslatedKioskName(ks, this)) | ||||
|                     .setIcon(KioskTranslator.getKioskIcons(ks, this)); | ||||
|             kioskId++; | ||||
|                     .setIcon(KioskTranslator.getKioskIcon(ks, this)); | ||||
|         } | ||||
|  | ||||
|         drawerItems.getMenu() | ||||
| @@ -175,24 +174,24 @@ public class MainActivity extends AppCompatActivity { | ||||
|                 .setIcon(ThemeHelper.resolveResourceIdFromAttr(this, R.attr.ic_channel)); | ||||
|         drawerItems.getMenu() | ||||
|                 .add(R.id.menu_tabs_group, ITEM_ID_FEED, ORDER, R.string.fragment_feed_title) | ||||
|                 .setIcon(ThemeHelper.resolveResourceIdFromAttr(this, R.attr.rss)); | ||||
|                 .setIcon(ThemeHelper.resolveResourceIdFromAttr(this, R.attr.ic_rss)); | ||||
|         drawerItems.getMenu() | ||||
|                 .add(R.id.menu_tabs_group, ITEM_ID_BOOKMARKS, ORDER, R.string.tab_bookmarks) | ||||
|                 .setIcon(ThemeHelper.resolveResourceIdFromAttr(this, R.attr.ic_bookmark)); | ||||
|         drawerItems.getMenu() | ||||
|                 .add(R.id.menu_tabs_group, ITEM_ID_DOWNLOADS, ORDER, R.string.downloads) | ||||
|                 .setIcon(ThemeHelper.resolveResourceIdFromAttr(this, R.attr.download)); | ||||
|                 .setIcon(ThemeHelper.resolveResourceIdFromAttr(this, R.attr.ic_file_download)); | ||||
|         drawerItems.getMenu() | ||||
|                 .add(R.id.menu_tabs_group, ITEM_ID_HISTORY, ORDER, R.string.action_history) | ||||
|                 .setIcon(ThemeHelper.resolveResourceIdFromAttr(this, R.attr.history)); | ||||
|                 .setIcon(ThemeHelper.resolveResourceIdFromAttr(this, R.attr.ic_history)); | ||||
|  | ||||
|         //Settings and About | ||||
|         drawerItems.getMenu() | ||||
|                 .add(R.id.menu_options_about_group, ITEM_ID_SETTINGS, ORDER, R.string.settings) | ||||
|                 .setIcon(ThemeHelper.resolveResourceIdFromAttr(this, R.attr.settings)); | ||||
|                 .setIcon(ThemeHelper.resolveResourceIdFromAttr(this, R.attr.ic_settings)); | ||||
|         drawerItems.getMenu() | ||||
|                 .add(R.id.menu_options_about_group, ITEM_ID_ABOUT, ORDER, R.string.tab_about) | ||||
|                 .setIcon(ThemeHelper.resolveResourceIdFromAttr(this, R.attr.info)); | ||||
|                 .setIcon(ThemeHelper.resolveResourceIdFromAttr(this, R.attr.ic_info_outline)); | ||||
|  | ||||
|         toggle = new ActionBarDrawerToggle(this, drawer, toolbar, R.string.drawer_open, | ||||
|                 R.string.drawer_close); | ||||
| @@ -420,7 +419,7 @@ public class MainActivity extends AppCompatActivity { | ||||
|             drawerItems.getMenu() | ||||
|                     .add(R.id.menu_tabs_group, kioskId, ORDER, | ||||
|                             KioskTranslator.getTranslatedKioskName(ks, this)) | ||||
|                     .setIcon(KioskTranslator.getKioskIcons(ks, this)); | ||||
|                     .setIcon(KioskTranslator.getKioskIcon(ks, this)); | ||||
|             kioskId++; | ||||
|         } | ||||
|  | ||||
| @@ -429,24 +428,24 @@ public class MainActivity extends AppCompatActivity { | ||||
|                 .setIcon(ThemeHelper.resolveResourceIdFromAttr(this, R.attr.ic_channel)); | ||||
|         drawerItems.getMenu() | ||||
|                 .add(R.id.menu_tabs_group, ITEM_ID_FEED, ORDER, R.string.fragment_feed_title) | ||||
|                 .setIcon(ThemeHelper.resolveResourceIdFromAttr(this, R.attr.rss)); | ||||
|                 .setIcon(ThemeHelper.resolveResourceIdFromAttr(this, R.attr.ic_rss)); | ||||
|         drawerItems.getMenu() | ||||
|                 .add(R.id.menu_tabs_group, ITEM_ID_BOOKMARKS, ORDER, R.string.tab_bookmarks) | ||||
|                 .setIcon(ThemeHelper.resolveResourceIdFromAttr(this, R.attr.ic_bookmark)); | ||||
|         drawerItems.getMenu() | ||||
|                 .add(R.id.menu_tabs_group, ITEM_ID_DOWNLOADS, ORDER, R.string.downloads) | ||||
|                 .setIcon(ThemeHelper.resolveResourceIdFromAttr(this, R.attr.download)); | ||||
|                 .setIcon(ThemeHelper.resolveResourceIdFromAttr(this, R.attr.ic_file_download)); | ||||
|         drawerItems.getMenu() | ||||
|                 .add(R.id.menu_tabs_group, ITEM_ID_HISTORY, ORDER, R.string.action_history) | ||||
|                 .setIcon(ThemeHelper.resolveResourceIdFromAttr(this, R.attr.history)); | ||||
|                 .setIcon(ThemeHelper.resolveResourceIdFromAttr(this, R.attr.ic_history)); | ||||
|  | ||||
|         //Settings and About | ||||
|         drawerItems.getMenu() | ||||
|                 .add(R.id.menu_options_about_group, ITEM_ID_SETTINGS, ORDER, R.string.settings) | ||||
|                 .setIcon(ThemeHelper.resolveResourceIdFromAttr(this, R.attr.settings)); | ||||
|                 .setIcon(ThemeHelper.resolveResourceIdFromAttr(this, R.attr.ic_settings)); | ||||
|         drawerItems.getMenu() | ||||
|                 .add(R.id.menu_options_about_group, ITEM_ID_ABOUT, ORDER, R.string.tab_about) | ||||
|                 .setIcon(ThemeHelper.resolveResourceIdFromAttr(this, R.attr.info)); | ||||
|                 .setIcon(ThemeHelper.resolveResourceIdFromAttr(this, R.attr.ic_info_outline)); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|   | ||||
| @@ -25,6 +25,7 @@ import androidx.annotation.NonNull; | ||||
| import androidx.annotation.Nullable; | ||||
| import androidx.appcompat.app.AlertDialog; | ||||
| import androidx.appcompat.app.AppCompatActivity; | ||||
| import androidx.appcompat.content.res.AppCompatResources; | ||||
| import androidx.core.app.NotificationCompat; | ||||
| import androidx.fragment.app.FragmentManager; | ||||
|  | ||||
| @@ -313,7 +314,9 @@ public class RouterActivity extends AppCompatActivity { | ||||
|             final RadioButton radioButton | ||||
|                     = (RadioButton) inflater.inflate(R.layout.list_radio_icon_item, null); | ||||
|             radioButton.setText(item.description); | ||||
|             radioButton.setCompoundDrawablesWithIntrinsicBounds(item.icon, 0, 0, 0); | ||||
|             radioButton.setCompoundDrawablesWithIntrinsicBounds( | ||||
|                     AppCompatResources.getDrawable(getApplicationContext(), item.icon), | ||||
|                     null, null, null); | ||||
|             radioButton.setChecked(false); | ||||
|             radioButton.setId(id++); | ||||
|             radioButton.setLayoutParams(new RadioGroup.LayoutParams( | ||||
| @@ -366,26 +369,26 @@ public class RouterActivity extends AppCompatActivity { | ||||
|  | ||||
|         returnList.add(new AdapterChoiceItem(getString(R.string.show_info_key), | ||||
|                 getString(R.string.show_info), | ||||
|                 resolveResourceIdFromAttr(context, R.attr.info))); | ||||
|                 resolveResourceIdFromAttr(context, R.attr.ic_info_outline))); | ||||
|  | ||||
|         if (capabilities.contains(VIDEO) && !(isExtVideoEnabled && linkType != LinkType.STREAM)) { | ||||
|             returnList.add(new AdapterChoiceItem(getString(R.string.video_player_key), | ||||
|                     getString(R.string.video_player), | ||||
|                     resolveResourceIdFromAttr(context, R.attr.play))); | ||||
|                     resolveResourceIdFromAttr(context, R.attr.ic_play_arrow))); | ||||
|             returnList.add(new AdapterChoiceItem(getString(R.string.popup_player_key), | ||||
|                     getString(R.string.popup_player), | ||||
|                     resolveResourceIdFromAttr(context, R.attr.popup))); | ||||
|                     resolveResourceIdFromAttr(context, R.attr.ic_popup))); | ||||
|         } | ||||
|  | ||||
|         if (capabilities.contains(AUDIO) && !(isExtAudioEnabled && linkType != LinkType.STREAM)) { | ||||
|             returnList.add(new AdapterChoiceItem(getString(R.string.background_player_key), | ||||
|                     getString(R.string.background_player), | ||||
|                     resolveResourceIdFromAttr(context, R.attr.audio))); | ||||
|                     resolveResourceIdFromAttr(context, R.attr.ic_headset))); | ||||
|         } | ||||
|  | ||||
|         returnList.add(new AdapterChoiceItem(getString(R.string.download_key), | ||||
|                 getString(R.string.download), | ||||
|                 resolveResourceIdFromAttr(context, R.attr.download))); | ||||
|                 resolveResourceIdFromAttr(context, R.attr.ic_file_download))); | ||||
|  | ||||
|         return returnList; | ||||
|     } | ||||
|   | ||||
| @@ -396,13 +396,11 @@ public class DownloadDialog extends DialogFragment | ||||
|             Log.d(TAG, "initToolbar() called with: toolbar = [" + toolbar + "]"); | ||||
|         } | ||||
|  | ||||
|         boolean isLight = ThemeHelper.isLightThemeSelected(getActivity()); | ||||
|  | ||||
|         toolbar.setTitle(R.string.download_dialog_title); | ||||
|         toolbar.setNavigationIcon(isLight ? R.drawable.ic_arrow_back_black_24dp | ||||
|                 : R.drawable.ic_arrow_back_white_24dp); | ||||
|         toolbar.setNavigationIcon( | ||||
|             ThemeHelper.resolveResourceIdFromAttr(requireContext(), R.attr.ic_arrow_back)); | ||||
|         toolbar.inflateMenu(R.menu.dialog_url); | ||||
|         toolbar.setNavigationOnClickListener(v -> getDialog().dismiss()); | ||||
|         toolbar.setNavigationOnClickListener(v -> requireDialog().dismiss()); | ||||
|         toolbar.setNavigationContentDescription(R.string.cancel); | ||||
|  | ||||
|         okButton = toolbar.findViewById(R.id.okay); | ||||
|   | ||||
| @@ -1,6 +1,7 @@ | ||||
| package org.schabi.newpipe.fragments; | ||||
|  | ||||
| import android.content.Context; | ||||
| import android.content.res.ColorStateList; | ||||
| import android.os.Bundle; | ||||
| import android.preference.PreferenceManager; | ||||
| import android.util.Log; | ||||
| @@ -31,6 +32,7 @@ import org.schabi.newpipe.settings.tabs.Tab; | ||||
| import org.schabi.newpipe.settings.tabs.TabsManager; | ||||
| import org.schabi.newpipe.util.NavigationHelper; | ||||
| import org.schabi.newpipe.util.ServiceHelper; | ||||
| import org.schabi.newpipe.util.ThemeHelper; | ||||
| import org.schabi.newpipe.views.ScrollableTabLayout; | ||||
|  | ||||
| import java.util.ArrayList; | ||||
| @@ -90,6 +92,8 @@ public class MainFragment extends BaseFragment implements TabLayout.OnTabSelecte | ||||
|         tabLayout = rootView.findViewById(R.id.main_tab_layout); | ||||
|         viewPager = rootView.findViewById(R.id.pager); | ||||
|  | ||||
|         tabLayout.setTabIconTint(ColorStateList.valueOf( | ||||
|                 ThemeHelper.resolveColorFromAttr(requireContext(), R.attr.colorAccent))); | ||||
|         tabLayout.setupWithViewPager(viewPager); | ||||
|         tabLayout.addOnTabSelectedListener(this); | ||||
|  | ||||
|   | ||||
| @@ -4,6 +4,7 @@ import android.app.Activity; | ||||
| import android.content.Context; | ||||
| import android.content.Intent; | ||||
| import android.content.SharedPreferences; | ||||
| import android.graphics.drawable.Drawable; | ||||
| import android.net.Uri; | ||||
| import android.os.Build; | ||||
| import android.os.Bundle; | ||||
| @@ -35,6 +36,7 @@ import androidx.annotation.NonNull; | ||||
| import androidx.annotation.Nullable; | ||||
| import androidx.appcompat.app.ActionBar; | ||||
| import androidx.appcompat.app.AppCompatActivity; | ||||
| import androidx.appcompat.content.res.AppCompatResources; | ||||
| import androidx.core.content.ContextCompat; | ||||
| import androidx.fragment.app.Fragment; | ||||
| import androidx.viewpager.widget.ViewPager; | ||||
| @@ -85,6 +87,7 @@ import org.schabi.newpipe.util.PermissionHelper; | ||||
| import org.schabi.newpipe.util.ShareUtils; | ||||
| import org.schabi.newpipe.util.StreamItemAdapter; | ||||
| import org.schabi.newpipe.util.StreamItemAdapter.StreamSizeWrapper; | ||||
| import org.schabi.newpipe.util.ThemeHelper; | ||||
| import org.schabi.newpipe.views.AnimatedProgressBar; | ||||
| import org.schabi.newpipe.views.LargeTextMovementMethod; | ||||
|  | ||||
| @@ -495,13 +498,15 @@ public class VideoDetailFragment extends BaseStateFragment<StreamInfo> | ||||
|             videoTitleTextView.setMaxLines(1); | ||||
|             videoDescriptionRootLayout.setVisibility(View.GONE); | ||||
|             videoDescriptionView.setFocusable(false); | ||||
|             videoTitleToggleArrow.setImageResource(R.drawable.arrow_down); | ||||
|             videoTitleToggleArrow.setImageResource( | ||||
|                     ThemeHelper.resolveResourceIdFromAttr(requireContext(), R.attr.ic_expand_more)); | ||||
|         } else { | ||||
|             videoTitleTextView.setMaxLines(10); | ||||
|             videoDescriptionRootLayout.setVisibility(View.VISIBLE); | ||||
|             videoDescriptionView.setFocusable(true); | ||||
|             videoDescriptionView.setMovementMethod(new LargeTextMovementMethod()); | ||||
|             videoTitleToggleArrow.setImageResource(R.drawable.arrow_up); | ||||
|             videoTitleToggleArrow.setImageResource( | ||||
|                     ThemeHelper.resolveResourceIdFromAttr(requireContext(), R.attr.ic_expand_less)); | ||||
|         } | ||||
|     } | ||||
|  | ||||
| @@ -1073,7 +1078,8 @@ public class VideoDetailFragment extends BaseStateFragment<StreamInfo> | ||||
|             return; | ||||
|         } | ||||
|  | ||||
|         thumbnailImageView.setImageDrawable(ContextCompat.getDrawable(activity, imageResource)); | ||||
|         thumbnailImageView.setImageDrawable( | ||||
|                 AppCompatResources.getDrawable(requireContext(), imageResource)); | ||||
|         animateView(thumbnailImageView, false, 0, 0, | ||||
|                 () -> animateView(thumbnailImageView, true, 500)); | ||||
|     } | ||||
| @@ -1114,7 +1120,6 @@ public class VideoDetailFragment extends BaseStateFragment<StreamInfo> | ||||
|         animateView(videoTitleTextView, true, 0); | ||||
|  | ||||
|         videoDescriptionRootLayout.setVisibility(View.GONE); | ||||
|         videoTitleToggleArrow.setImageResource(R.drawable.arrow_down); | ||||
|         videoTitleToggleArrow.setVisibility(View.GONE); | ||||
|         videoTitleRoot.setClickable(false); | ||||
|  | ||||
| @@ -1166,8 +1171,9 @@ public class VideoDetailFragment extends BaseStateFragment<StreamInfo> | ||||
|             uploaderThumb.setVisibility(View.GONE); | ||||
|         } | ||||
|  | ||||
|         subChannelThumb.setImageDrawable(ContextCompat.getDrawable(activity, R.drawable.buddy)); | ||||
|         uploaderThumb.setImageDrawable(ContextCompat.getDrawable(activity, R.drawable.buddy)); | ||||
|         Drawable buddyDrawable = AppCompatResources.getDrawable(activity, R.drawable.buddy); | ||||
|         subChannelThumb.setImageDrawable(buddyDrawable); | ||||
|         uploaderThumb.setImageDrawable(buddyDrawable); | ||||
|  | ||||
|         if (info.getViewCount() >= 0) { | ||||
|             if (info.getStreamType().equals(StreamType.AUDIO_LIVE_STREAM)) { | ||||
| @@ -1229,8 +1235,9 @@ public class VideoDetailFragment extends BaseStateFragment<StreamInfo> | ||||
|  | ||||
|         videoDescriptionView.setVisibility(View.GONE); | ||||
|         videoTitleRoot.setClickable(true); | ||||
|         videoTitleToggleArrow.setImageResource( | ||||
|                 ThemeHelper.resolveResourceIdFromAttr(requireContext(), R.attr.ic_expand_more)); | ||||
|         videoTitleToggleArrow.setVisibility(View.VISIBLE); | ||||
|         videoTitleToggleArrow.setImageResource(R.drawable.arrow_down); | ||||
|         videoDescriptionRootLayout.setVisibility(View.GONE); | ||||
|  | ||||
|         if (info.getUploadDate() != null) { | ||||
| @@ -1276,7 +1283,7 @@ public class VideoDetailFragment extends BaseStateFragment<StreamInfo> | ||||
|  | ||||
|                 detailControlsPopup.setVisibility(View.GONE); | ||||
|                 spinnerToolbar.setVisibility(View.GONE); | ||||
|                 thumbnailPlayButton.setImageResource(R.drawable.ic_headset_white_24dp); | ||||
|                 thumbnailPlayButton.setImageResource(R.drawable.ic_headset_shadow); | ||||
|                 break; | ||||
|         } | ||||
|  | ||||
|   | ||||
| @@ -117,8 +117,8 @@ public class SuggestionListAdapter | ||||
|             queryView = rootView.findViewById(R.id.suggestion_search); | ||||
|             insertView = rootView.findViewById(R.id.suggestion_insert); | ||||
|  | ||||
|             historyResId = resolveResourceIdFromAttr(rootView.getContext(), R.attr.history); | ||||
|             searchResId = resolveResourceIdFromAttr(rootView.getContext(), R.attr.search); | ||||
|             historyResId = resolveResourceIdFromAttr(rootView.getContext(), R.attr.ic_history); | ||||
|             searchResId = resolveResourceIdFromAttr(rootView.getContext(), R.attr.ic_search); | ||||
|         } | ||||
|  | ||||
|         private static int resolveResourceIdFromAttr(final Context context, | ||||
|   | ||||
| @@ -362,14 +362,14 @@ public class StatisticsPlaylistFragment | ||||
|         if (sortMode == StatisticSortMode.LAST_PLAYED) { | ||||
|             sortMode = StatisticSortMode.MOST_PLAYED; | ||||
|             setTitle(getString(R.string.title_most_played)); | ||||
|             sortButtonIcon | ||||
|                     .setImageResource(ThemeHelper.getIconByAttr(R.attr.history, getContext())); | ||||
|             sortButtonIcon.setImageResource( | ||||
|                 ThemeHelper.resolveResourceIdFromAttr(requireContext(), R.attr.ic_history)); | ||||
|             sortButtonText.setText(R.string.title_last_played); | ||||
|         } else { | ||||
|             sortMode = StatisticSortMode.LAST_PLAYED; | ||||
|             setTitle(getString(R.string.title_last_played)); | ||||
|             sortButtonIcon | ||||
|                     .setImageResource(ThemeHelper.getIconByAttr(R.attr.filter, getContext())); | ||||
|             sortButtonIcon.setImageResource( | ||||
|                 ThemeHelper.resolveResourceIdFromAttr(requireContext(), R.attr.ic_filter_list)); | ||||
|             sortButtonText.setText(R.string.title_most_played); | ||||
|         } | ||||
|         startLoading(true); | ||||
|   | ||||
| @@ -20,10 +20,10 @@ enum class FeedGroupIcon( | ||||
|     ALL(0, R.attr.ic_asterisk), | ||||
|     MUSIC(1, R.attr.ic_music_note), | ||||
|     EDUCATION(2, R.attr.ic_school), | ||||
|     FITNESS(3, R.attr.ic_fitness), | ||||
|     FITNESS(3, R.attr.ic_fitness_center), | ||||
|     SPACE(4, R.attr.ic_telescope), | ||||
|     COMPUTER(5, R.attr.ic_computer), | ||||
|     GAMING(6, R.attr.ic_videogame), | ||||
|     GAMING(6, R.attr.ic_videogame_asset), | ||||
|     SPORTS(7, R.attr.ic_sports), | ||||
|     NEWS(8, R.attr.ic_megaphone), | ||||
|     FAVORITES(9, R.attr.ic_heart), | ||||
| @@ -32,29 +32,29 @@ enum class FeedGroupIcon( | ||||
|     TREND(12, R.attr.ic_trending_up), | ||||
|     MOVIE(13, R.attr.ic_movie), | ||||
|     BACKUP(14, R.attr.ic_backup), | ||||
|     ART(15, R.attr.palette), | ||||
|     ART(15, R.attr.ic_palette), | ||||
|     PERSON(16, R.attr.ic_person), | ||||
|     PEOPLE(17, R.attr.ic_people), | ||||
|     MONEY(18, R.attr.ic_money), | ||||
|     KIDS(19, R.attr.ic_kids), | ||||
|     KIDS(19, R.attr.ic_child_care), | ||||
|     FOOD(20, R.attr.ic_fastfood), | ||||
|     SMILE(21, R.attr.ic_smile), | ||||
|     EXPLORE(22, R.attr.ic_explore), | ||||
|     RESTAURANT(23, R.attr.ic_restaurant), | ||||
|     MIC(24, R.attr.ic_mic), | ||||
|     HEADSET(25, R.attr.audio), | ||||
|     HEADSET(25, R.attr.ic_headset), | ||||
|     RADIO(26, R.attr.ic_radio), | ||||
|     SHOPPING_CART(27, R.attr.ic_shopping_cart), | ||||
|     WATCH_LATER(28, R.attr.ic_watch_later), | ||||
|     WORK(29, R.attr.ic_work), | ||||
|     HOT(30, R.attr.ic_hot), | ||||
|     HOT(30, R.attr.ic_kiosk_hot), | ||||
|     CHANNEL(31, R.attr.ic_channel), | ||||
|     BOOKMARK(32, R.attr.ic_bookmark), | ||||
|     PETS(33, R.attr.ic_pets), | ||||
|     WORLD(34, R.attr.ic_world), | ||||
|     STAR(35, R.attr.ic_stars), | ||||
|     SUN(36, R.attr.ic_sunny), | ||||
|     RSS(37, R.attr.rss); | ||||
|     RSS(37, R.attr.ic_rss); | ||||
|  | ||||
|     @DrawableRes | ||||
|     fun getDrawableRes(context: Context): Int { | ||||
|   | ||||
| @@ -201,9 +201,10 @@ public final class BackgroundPlayer extends Service { | ||||
|     } | ||||
|  | ||||
|     private NotificationCompat.Builder createNotification() { | ||||
|         notRemoteView = new RemoteViews(BuildConfig.APPLICATION_ID, R.layout.player_notification); | ||||
|         notRemoteView = new RemoteViews(BuildConfig.APPLICATION_ID, | ||||
|                 R.layout.player_background_notification); | ||||
|         bigNotRemoteView = new RemoteViews(BuildConfig.APPLICATION_ID, | ||||
|                 R.layout.player_notification_expanded); | ||||
|                 R.layout.player_background_notification_expanded); | ||||
|  | ||||
|         setupNotification(notRemoteView); | ||||
|         setupNotification(bigNotRemoteView); | ||||
| @@ -655,7 +656,7 @@ public final class BackgroundPlayer extends Service { | ||||
|             super.onPlaying(); | ||||
|             resetNotification(); | ||||
|             updateNotificationThumbnail(); | ||||
|             updateNotification(R.drawable.ic_pause_white); | ||||
|             updateNotification(R.drawable.exo_controls_pause); | ||||
|         } | ||||
|  | ||||
|         @Override | ||||
| @@ -663,7 +664,7 @@ public final class BackgroundPlayer extends Service { | ||||
|             super.onPaused(); | ||||
|             resetNotification(); | ||||
|             updateNotificationThumbnail(); | ||||
|             updateNotification(R.drawable.ic_play_arrow_white); | ||||
|             updateNotification(R.drawable.exo_controls_play); | ||||
|         } | ||||
|  | ||||
|         @Override | ||||
| @@ -677,7 +678,7 @@ public final class BackgroundPlayer extends Service { | ||||
|                 notRemoteView.setProgressBar(R.id.notificationProgressBar, 100, 100, false); | ||||
|             } | ||||
|             updateNotificationThumbnail(); | ||||
|             updateNotification(R.drawable.ic_replay_white); | ||||
|             updateNotification(R.drawable.ic_replay_white_24dp); | ||||
|         } | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -491,7 +491,7 @@ public final class MainVideoPlayer extends AppCompatActivity | ||||
|  | ||||
|     protected void setMuteButton(final ImageButton muteButton, final boolean isMuted) { | ||||
|         muteButton.setImageDrawable(AppCompatResources.getDrawable(getApplicationContext(), isMuted | ||||
|                 ? R.drawable.ic_volume_off_white_72dp : R.drawable.ic_volume_up_white_72dp)); | ||||
|                 ? R.drawable.ic_volume_off_white_24dp : R.drawable.ic_volume_up_white_24dp)); | ||||
|     } | ||||
|  | ||||
|  | ||||
| @@ -989,7 +989,7 @@ public final class MainVideoPlayer extends AppCompatActivity | ||||
|         @Override | ||||
|         public void onBlocked() { | ||||
|             super.onBlocked(); | ||||
|             playPauseButton.setImageResource(R.drawable.ic_pause_white); | ||||
|             playPauseButton.setImageResource(R.drawable.ic_pause_white_24dp); | ||||
|             animatePlayButtons(false, 100); | ||||
|             animateView(closeButton, false, DEFAULT_CONTROLS_DURATION); | ||||
|             getRootView().setKeepScreenOn(true); | ||||
| @@ -1005,7 +1005,7 @@ public final class MainVideoPlayer extends AppCompatActivity | ||||
|         public void onPlaying() { | ||||
|             super.onPlaying(); | ||||
|             animateView(playPauseButton, AnimationUtils.Type.SCALE_AND_ALPHA, false, 80, 0, () -> { | ||||
|                 playPauseButton.setImageResource(R.drawable.ic_pause_white); | ||||
|                 playPauseButton.setImageResource(R.drawable.ic_pause_white_24dp); | ||||
|                 animatePlayButtons(true, 200); | ||||
|                 playPauseButton.requestFocus(); | ||||
|                 animateView(closeButton, false, DEFAULT_CONTROLS_DURATION); | ||||
| @@ -1018,7 +1018,7 @@ public final class MainVideoPlayer extends AppCompatActivity | ||||
|         public void onPaused() { | ||||
|             super.onPaused(); | ||||
|             animateView(playPauseButton, AnimationUtils.Type.SCALE_AND_ALPHA, false, 80, 0, () -> { | ||||
|                 playPauseButton.setImageResource(R.drawable.ic_play_arrow_white); | ||||
|                 playPauseButton.setImageResource(R.drawable.ic_play_arrow_white_24dp); | ||||
|                 animatePlayButtons(true, 200); | ||||
|                 playPauseButton.requestFocus(); | ||||
|                 animateView(closeButton, false, DEFAULT_CONTROLS_DURATION); | ||||
| @@ -1039,7 +1039,7 @@ public final class MainVideoPlayer extends AppCompatActivity | ||||
|         @Override | ||||
|         public void onCompleted() { | ||||
|             animateView(playPauseButton, AnimationUtils.Type.SCALE_AND_ALPHA, false, 0, 0, () -> { | ||||
|                 playPauseButton.setImageResource(R.drawable.ic_replay_white); | ||||
|                 playPauseButton.setImageResource(R.drawable.ic_replay_white_24dp); | ||||
|                 animatePlayButtons(true, DEFAULT_CONTROLS_DURATION); | ||||
|                 animateView(closeButton, true, DEFAULT_CONTROLS_DURATION); | ||||
|             }); | ||||
| @@ -1368,12 +1368,12 @@ public final class MainVideoPlayer extends AppCompatActivity | ||||
|                 } | ||||
|  | ||||
|                 final int resId = currentProgressPercent <= 0 | ||||
|                         ? R.drawable.ic_volume_off_white_72dp | ||||
|                         ? R.drawable.ic_volume_off_white_24dp | ||||
|                         : currentProgressPercent < 0.25 | ||||
|                         ? R.drawable.ic_volume_mute_white_72dp | ||||
|                         ? R.drawable.ic_volume_mute_white_24dp | ||||
|                         : currentProgressPercent < 0.75 | ||||
|                         ? R.drawable.ic_volume_down_white_72dp | ||||
|                         : R.drawable.ic_volume_up_white_72dp; | ||||
|                         ? R.drawable.ic_volume_down_white_24dp | ||||
|                         : R.drawable.ic_volume_up_white_24dp; | ||||
|  | ||||
|                 playerImpl.getVolumeImageView().setImageDrawable( | ||||
|                         AppCompatResources.getDrawable(getApplicationContext(), resId) | ||||
| @@ -1400,10 +1400,10 @@ public final class MainVideoPlayer extends AppCompatActivity | ||||
|                 } | ||||
|  | ||||
|                 final int resId = currentProgressPercent < 0.25 | ||||
|                         ? R.drawable.ic_brightness_low_white_72dp | ||||
|                         ? R.drawable.ic_brightness_low_white_24dp | ||||
|                         : currentProgressPercent < 0.75 | ||||
|                                 ? R.drawable.ic_brightness_medium_white_72dp | ||||
|                                 : R.drawable.ic_brightness_high_white_72dp; | ||||
|                                 ? R.drawable.ic_brightness_medium_white_24dp | ||||
|                                 : R.drawable.ic_brightness_high_white_24dp; | ||||
|  | ||||
|                 playerImpl.getBrightnessImageView().setImageDrawable( | ||||
|                         AppCompatResources.getDrawable(getApplicationContext(), resId) | ||||
|   | ||||
| @@ -892,7 +892,7 @@ public final class PopupVideoPlayer extends Service { | ||||
|         public void onBlocked() { | ||||
|             super.onBlocked(); | ||||
|             resetNotification(); | ||||
|             updateNotification(R.drawable.ic_play_arrow_white); | ||||
|             updateNotification(R.drawable.exo_controls_play); | ||||
|         } | ||||
|  | ||||
|         @Override | ||||
| @@ -902,9 +902,9 @@ public final class PopupVideoPlayer extends Service { | ||||
|             updateWindowFlags(ONGOING_PLAYBACK_WINDOW_FLAGS); | ||||
|  | ||||
|             resetNotification(); | ||||
|             updateNotification(R.drawable.ic_pause_white); | ||||
|             updateNotification(R.drawable.exo_controls_pause); | ||||
|  | ||||
|             videoPlayPause.setBackgroundResource(R.drawable.ic_pause_white); | ||||
|             videoPlayPause.setBackgroundResource(R.drawable.exo_controls_pause); | ||||
|             hideControls(DEFAULT_CONTROLS_DURATION, DEFAULT_CONTROLS_HIDE_TIME); | ||||
|  | ||||
|             startForeground(NOTIFICATION_ID, notBuilder.build()); | ||||
| @@ -914,7 +914,7 @@ public final class PopupVideoPlayer extends Service { | ||||
|         public void onBuffering() { | ||||
|             super.onBuffering(); | ||||
|             resetNotification(); | ||||
|             updateNotification(R.drawable.ic_play_arrow_white); | ||||
|             updateNotification(R.drawable.exo_controls_play); | ||||
|         } | ||||
|  | ||||
|         @Override | ||||
| @@ -924,8 +924,8 @@ public final class PopupVideoPlayer extends Service { | ||||
|             updateWindowFlags(IDLE_WINDOW_FLAGS); | ||||
|  | ||||
|             resetNotification(); | ||||
|             updateNotification(R.drawable.ic_play_arrow_white); | ||||
|             videoPlayPause.setBackgroundResource(R.drawable.ic_play_arrow_white); | ||||
|             updateNotification(R.drawable.exo_controls_play); | ||||
|             videoPlayPause.setBackgroundResource(R.drawable.exo_controls_play); | ||||
|  | ||||
|             stopForeground(false); | ||||
|         } | ||||
| @@ -934,9 +934,9 @@ public final class PopupVideoPlayer extends Service { | ||||
|         public void onPausedSeek() { | ||||
|             super.onPausedSeek(); | ||||
|             resetNotification(); | ||||
|             updateNotification(R.drawable.ic_play_arrow_white); | ||||
|             updateNotification(R.drawable.exo_controls_play); | ||||
|  | ||||
|             videoPlayPause.setBackgroundResource(R.drawable.ic_pause_white); | ||||
|             videoPlayPause.setBackgroundResource(R.drawable.exo_controls_play); | ||||
|         } | ||||
|  | ||||
|         @Override | ||||
| @@ -946,8 +946,8 @@ public final class PopupVideoPlayer extends Service { | ||||
|             updateWindowFlags(IDLE_WINDOW_FLAGS); | ||||
|  | ||||
|             resetNotification(); | ||||
|             updateNotification(R.drawable.ic_replay_white); | ||||
|             videoPlayPause.setBackgroundResource(R.drawable.ic_replay_white); | ||||
|             updateNotification(R.drawable.ic_replay_white_24dp); | ||||
|             videoPlayPause.setBackgroundResource(R.drawable.ic_replay_white_24dp); | ||||
|  | ||||
|             stopForeground(false); | ||||
|         } | ||||
|   | ||||
| @@ -643,13 +643,13 @@ public abstract class ServicePlayerActivity extends AppCompatActivity | ||||
|     private void onStateChanged(final int state) { | ||||
|         switch (state) { | ||||
|             case BasePlayer.STATE_PAUSED: | ||||
|                 playPauseButton.setImageResource(R.drawable.ic_play_arrow_white); | ||||
|                 playPauseButton.setImageResource(R.drawable.ic_play_arrow_white_24dp); | ||||
|                 break; | ||||
|             case BasePlayer.STATE_PLAYING: | ||||
|                 playPauseButton.setImageResource(R.drawable.ic_pause_white); | ||||
|                 playPauseButton.setImageResource(R.drawable.ic_pause_white_24dp); | ||||
|                 break; | ||||
|             case BasePlayer.STATE_COMPLETED: | ||||
|                 playPauseButton.setImageResource(R.drawable.ic_replay_white); | ||||
|                 playPauseButton.setImageResource(R.drawable.ic_replay_white_24dp); | ||||
|                 break; | ||||
|             default: | ||||
|                 break; | ||||
| @@ -717,9 +717,9 @@ public abstract class ServicePlayerActivity extends AppCompatActivity | ||||
|             // using rootView.getContext() because getApplicationContext() didn't work | ||||
|             item.setIcon(player.isMuted() | ||||
|                     ? ThemeHelper.resolveResourceIdFromAttr(rootView.getContext(), | ||||
|                             R.attr.volume_off) | ||||
|                             R.attr.ic_volume_off) | ||||
|                     : ThemeHelper.resolveResourceIdFromAttr(rootView.getContext(), | ||||
|                             R.attr.volume_on)); | ||||
|                             R.attr.ic_volume_up)); | ||||
|         } | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -46,7 +46,7 @@ import android.widget.TextView; | ||||
|  | ||||
| import androidx.annotation.NonNull; | ||||
| import androidx.annotation.Nullable; | ||||
| import androidx.core.content.ContextCompat; | ||||
| import androidx.appcompat.content.res.AppCompatResources; | ||||
|  | ||||
| import com.google.android.exoplayer2.C; | ||||
| import com.google.android.exoplayer2.PlaybackParameters; | ||||
| @@ -682,13 +682,13 @@ public abstract class VideoPlayer extends BasePlayer | ||||
|     @Override | ||||
|     public void onFastRewind() { | ||||
|         super.onFastRewind(); | ||||
|         showAndAnimateControl(R.drawable.ic_action_av_fast_rewind, true); | ||||
|         showAndAnimateControl(R.drawable.ic_fast_rewind_white_24dp, true); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void onFastForward() { | ||||
|         super.onFastForward(); | ||||
|         showAndAnimateControl(R.drawable.ic_action_av_fast_forward, true); | ||||
|         showAndAnimateControl(R.drawable.ic_fast_forward_white_24dp, true); | ||||
|     } | ||||
|  | ||||
|     /*////////////////////////////////////////////////////////////////////////// | ||||
| @@ -956,7 +956,7 @@ public abstract class VideoPlayer extends BasePlayer | ||||
|  | ||||
|  | ||||
|         controlAnimationView.setVisibility(View.VISIBLE); | ||||
|         controlAnimationView.setImageDrawable(ContextCompat.getDrawable(context, drawableId)); | ||||
|         controlAnimationView.setImageDrawable(AppCompatResources.getDrawable(context, drawableId)); | ||||
|         controlViewAnimator.start(); | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -10,6 +10,7 @@ import android.widget.ProgressBar; | ||||
| import android.widget.TextView; | ||||
|  | ||||
| import androidx.annotation.NonNull; | ||||
| import androidx.annotation.Nullable; | ||||
| import androidx.fragment.app.DialogFragment; | ||||
| import androidx.recyclerview.widget.LinearLayoutManager; | ||||
| import androidx.recyclerview.widget.RecyclerView; | ||||
| @@ -22,6 +23,7 @@ import org.schabi.newpipe.database.subscription.SubscriptionEntity; | ||||
| import org.schabi.newpipe.local.subscription.SubscriptionManager; | ||||
| import org.schabi.newpipe.report.ErrorActivity; | ||||
| import org.schabi.newpipe.report.UserAction; | ||||
| import org.schabi.newpipe.util.ThemeHelper; | ||||
|  | ||||
| import java.util.List; | ||||
| import java.util.Vector; | ||||
| @@ -83,6 +85,12 @@ public class SelectChannelFragment extends DialogFragment { | ||||
|     // Init | ||||
|     //////////////////////////////////////////////////////////////////////////*/ | ||||
|  | ||||
|     @Override | ||||
|     public void onCreate(@Nullable final Bundle savedInstanceState) { | ||||
|         super.onCreate(savedInstanceState); | ||||
|         setStyle(STYLE_NO_TITLE, ThemeHelper.getMinWidthDialogTheme(requireContext())); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public View onCreateView(@NonNull final LayoutInflater inflater, final ViewGroup container, | ||||
|                              final Bundle savedInstanceState) { | ||||
|   | ||||
| @@ -9,7 +9,8 @@ import android.view.ViewGroup; | ||||
| import android.widget.ImageView; | ||||
| import android.widget.TextView; | ||||
|  | ||||
| import androidx.core.content.ContextCompat; | ||||
| import androidx.annotation.Nullable; | ||||
| import androidx.appcompat.content.res.AppCompatResources; | ||||
| import androidx.fragment.app.DialogFragment; | ||||
| import androidx.recyclerview.widget.LinearLayoutManager; | ||||
| import androidx.recyclerview.widget.RecyclerView; | ||||
| @@ -21,6 +22,7 @@ import org.schabi.newpipe.report.ErrorActivity; | ||||
| import org.schabi.newpipe.report.UserAction; | ||||
| import org.schabi.newpipe.util.KioskTranslator; | ||||
| import org.schabi.newpipe.util.ServiceHelper; | ||||
| import org.schabi.newpipe.util.ThemeHelper; | ||||
|  | ||||
| import java.util.List; | ||||
| import java.util.Vector; | ||||
| @@ -61,6 +63,16 @@ public class SelectKioskFragment extends DialogFragment { | ||||
|         onCancelListener = listener; | ||||
|     } | ||||
|  | ||||
|     /*////////////////////////////////////////////////////////////////////////// | ||||
|     // Init | ||||
|     //////////////////////////////////////////////////////////////////////////*/ | ||||
|  | ||||
|     @Override | ||||
|     public void onCreate(@Nullable final Bundle savedInstanceState) { | ||||
|         super.onCreate(savedInstanceState); | ||||
|         setStyle(STYLE_NO_TITLE, ThemeHelper.getMinWidthDialogTheme(requireContext())); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public View onCreateView(final LayoutInflater inflater, final ViewGroup container, | ||||
|                              final Bundle savedInstanceState) { | ||||
| @@ -148,13 +160,8 @@ public class SelectKioskFragment extends DialogFragment { | ||||
|             final Entry entry = kioskList.get(position); | ||||
|             holder.titleView.setText(entry.kioskName); | ||||
|             holder.thumbnailView | ||||
|                     .setImageDrawable(ContextCompat.getDrawable(getContext(), entry.icon)); | ||||
|             holder.view.setOnClickListener(new View.OnClickListener() { | ||||
|                 @Override | ||||
|                 public void onClick(final View view) { | ||||
|                     clickedItem(entry); | ||||
|                 } | ||||
|             }); | ||||
|                     .setImageDrawable(AppCompatResources.getDrawable(requireContext(), entry.icon)); | ||||
|             holder.view.setOnClickListener(view -> clickedItem(entry)); | ||||
|         } | ||||
|  | ||||
|         class Entry { | ||||
|   | ||||
| @@ -60,7 +60,7 @@ public final class AddTabDialog { | ||||
|         private DialogListAdapter(final Context context, final ChooseTabListItem[] items) { | ||||
|             this.inflater = LayoutInflater.from(context); | ||||
|             this.items = items; | ||||
|             this.fallbackIcon = ThemeHelper.resolveResourceIdFromAttr(context, R.attr.ic_hot); | ||||
|             this.fallbackIcon = ThemeHelper.resolveResourceIdFromAttr(context, R.attr.ic_kiosk_hot); | ||||
|         } | ||||
|  | ||||
|         @Override | ||||
|   | ||||
| @@ -233,7 +233,7 @@ public class ChooseTabsFragment extends Fragment { | ||||
|                 case KIOSK: | ||||
|                     returnList.add(new ChooseTabListItem(tab.getTabId(), | ||||
|                             getString(R.string.kiosk_page_summary), | ||||
|                             ThemeHelper.resolveResourceIdFromAttr(context, R.attr.ic_hot))); | ||||
|                             ThemeHelper.resolveResourceIdFromAttr(context, R.attr.ic_kiosk_hot))); | ||||
|                     break; | ||||
|                 case CHANNEL: | ||||
|                     returnList.add(new ChooseTabListItem(tab.getTabId(), | ||||
| @@ -244,7 +244,8 @@ public class ChooseTabsFragment extends Fragment { | ||||
|                     if (!tabList.contains(tab)) { | ||||
|                         returnList.add(new ChooseTabListItem(tab.getTabId(), | ||||
|                                 getString(R.string.default_kiosk_page_summary), | ||||
|                                 ThemeHelper.resolveResourceIdFromAttr(context, R.attr.ic_hot))); | ||||
|                                 ThemeHelper.resolveResourceIdFromAttr(context, | ||||
|                                         R.attr.ic_kiosk_hot))); | ||||
|                     } | ||||
|                     break; | ||||
|                 default: | ||||
|   | ||||
| @@ -231,7 +231,7 @@ public abstract class Tab { | ||||
|         @DrawableRes | ||||
|         @Override | ||||
|         public int getTabIconRes(final Context context) { | ||||
|             return ThemeHelper.resolveResourceIdFromAttr(context, R.attr.rss); | ||||
|             return ThemeHelper.resolveResourceIdFromAttr(context, R.attr.ic_rss); | ||||
|         } | ||||
|  | ||||
|         @Override | ||||
| @@ -281,7 +281,7 @@ public abstract class Tab { | ||||
|         @DrawableRes | ||||
|         @Override | ||||
|         public int getTabIconRes(final Context context) { | ||||
|             return ThemeHelper.resolveResourceIdFromAttr(context, R.attr.history); | ||||
|             return ThemeHelper.resolveResourceIdFromAttr(context, R.attr.ic_history); | ||||
|         } | ||||
|  | ||||
|         @Override | ||||
| @@ -323,7 +323,7 @@ public abstract class Tab { | ||||
|         @DrawableRes | ||||
|         @Override | ||||
|         public int getTabIconRes(final Context context) { | ||||
|             final int kioskIcon = KioskTranslator.getKioskIcons(kioskId, context); | ||||
|             final int kioskIcon = KioskTranslator.getKioskIcon(kioskId, context); | ||||
|  | ||||
|             if (kioskIcon <= 0) { | ||||
|                 throw new IllegalStateException("Kiosk ID is not valid: \"" + kioskId + "\""); | ||||
| @@ -459,7 +459,7 @@ public abstract class Tab { | ||||
|         @DrawableRes | ||||
|         @Override | ||||
|         public int getTabIconRes(final Context context) { | ||||
|             return KioskTranslator.getKioskIcons(getDefaultKioskId(context), context); | ||||
|             return KioskTranslator.getKioskIcon(getDefaultKioskId(context), context); | ||||
|         } | ||||
|  | ||||
|         @Override | ||||
|   | ||||
| @@ -49,19 +49,19 @@ public final class KioskTranslator { | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public static int getKioskIcons(final String kioskId, final Context c) { | ||||
|     public static int getKioskIcon(final String kioskId, final Context c) { | ||||
|         switch (kioskId) { | ||||
|             case "Trending": | ||||
|             case "Top 50": | ||||
|             case "New & hot": | ||||
|             case "conferences": | ||||
|                 return ThemeHelper.resolveResourceIdFromAttr(c, R.attr.ic_hot); | ||||
|                 return ThemeHelper.resolveResourceIdFromAttr(c, R.attr.ic_kiosk_hot); | ||||
|             case "Local": | ||||
|                 return ThemeHelper.resolveResourceIdFromAttr(c, R.attr.ic_kiosk_local); | ||||
|             case "Recently added": | ||||
|                 return ThemeHelper.resolveResourceIdFromAttr(c, R.attr.ic_kiosk_recent); | ||||
|             case "Most liked": | ||||
|                 return ThemeHelper.resolveResourceIdFromAttr(c, R.attr.thumbs_up); | ||||
|                 return ThemeHelper.resolveResourceIdFromAttr(c, R.attr.ic_thumb_up); | ||||
|             default: | ||||
|                 return 0; | ||||
|         } | ||||
|   | ||||
| @@ -231,16 +231,4 @@ public final class ThemeHelper { | ||||
|         return PreferenceManager.getDefaultSharedPreferences(context) | ||||
|                 .getString(themeKey, defaultTheme); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * This will get the R.drawable.* resource to which attr is currently pointing to. | ||||
|      * | ||||
|      * @param attr    a R.attribute.* resource value | ||||
|      * @param context the context to use | ||||
|      * @return a R.drawable.* resource value | ||||
|      */ | ||||
|     public static int getIconByAttr(final int attr, final Context context) { | ||||
|         return context.obtainStyledAttributes(new int[]{attr}) | ||||
|                 .getResourceId(0, -1); | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -224,15 +224,9 @@ public class MissionsFragment extends Fragment { | ||||
|         mList.setAdapter(mAdapter); | ||||
|  | ||||
|         if (mSwitch != null) { | ||||
|             boolean isLight = ThemeHelper.isLightThemeSelected(mContext); | ||||
|             int icon; | ||||
|  | ||||
|             if (mLinear) | ||||
|                 icon = isLight ? R.drawable.ic_grid_black_24dp : R.drawable.ic_grid_white_24dp; | ||||
|             else | ||||
|                 icon = isLight ? R.drawable.ic_list_black_24dp : R.drawable.ic_list_white_24dp; | ||||
|  | ||||
|             mSwitch.setIcon(icon); | ||||
|             mSwitch.setIcon(mLinear | ||||
|                     ? ThemeHelper.resolveResourceIdFromAttr(requireContext(), R.attr.ic_grid) | ||||
|                     : ThemeHelper.resolveResourceIdFromAttr(requireContext(), R.attr.ic_list)); | ||||
|             mSwitch.setTitle(mLinear ? R.string.grid : R.string.list); | ||||
|             mPrefs.edit().putBoolean("linear", mLinear).apply(); | ||||
|         } | ||||
|   | ||||
| @@ -191,12 +191,12 @@ public class Utility { | ||||
|     public static int getIconForFileType(FileType type) { | ||||
|         switch (type) { | ||||
|             case MUSIC: | ||||
|                 return R.drawable.music; | ||||
|                 return R.drawable.ic_headset_white_24dp; | ||||
|             default: | ||||
|             case VIDEO: | ||||
|                 return R.drawable.video; | ||||
|                 return R.drawable.ic_movie_white_24dp; | ||||
|             case SUBTITLE: | ||||
|                 return R.drawable.subtitle; | ||||
|                 return R.drawable.ic_subtitles_white_24dp; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|   | ||||
| Before Width: | Height: | Size: 575 B | 
| Before Width: | Height: | Size: 535 B | 
| Before Width: | Height: | Size: 223 B | 
| Before Width: | Height: | Size: 148 B | 
| Before Width: | Height: | Size: 554 B | 
| Before Width: | Height: | Size: 546 B | 
| Before Width: | Height: | Size: 337 B | 
| Before Width: | Height: | Size: 345 B | 
| Before Width: | Height: | Size: 180 B | 
| Before Width: | Height: | Size: 185 B | 
| Before Width: | Height: | Size: 258 B | 
| Before Width: | Height: | Size: 267 B | 
| Before Width: | Height: | Size: 384 B | 
| Before Width: | Height: | Size: 394 B | 
| Before Width: | Height: | Size: 396 B | 
| Before Width: | Height: | Size: 398 B | 
| Before Width: | Height: | Size: 207 B | 
| Before Width: | Height: | Size: 317 B | 
| Before Width: | Height: | Size: 319 B | 
| Before Width: | Height: | Size: 98 B | 
| Before Width: | Height: | Size: 99 B | 
| Before Width: | Height: | Size: 149 B | 
| Before Width: | Height: | Size: 156 B | 
| Before Width: | Height: | Size: 151 B | 
| Before Width: | Height: | Size: 159 B | 
| Before Width: | Height: | Size: 256 B | 
| Before Width: | Height: | Size: 252 B | 
| Before Width: | Height: | Size: 148 B | 
| Before Width: | Height: | Size: 163 B | 
| Before Width: | Height: | Size: 107 B | 
| Before Width: | Height: | Size: 111 B | 
| Before Width: | Height: | Size: 103 B | 
| Before Width: | Height: | Size: 105 B | 
| Before Width: | Height: | Size: 107 B | 
| Before Width: | Height: | Size: 422 B | 
| Before Width: | Height: | Size: 415 B | 
| Before Width: | Height: | Size: 349 B | 
| Before Width: | Height: | Size: 350 B | 
| Before Width: | Height: | Size: 494 B | 
| Before Width: | Height: | Size: 486 B | 
| Before Width: | Height: | Size: 163 B | 
| Before Width: | Height: | Size: 172 B | 
| Before Width: | Height: | Size: 487 B | 
| Before Width: | Height: | Size: 485 B | 
| Before Width: | Height: | Size: 208 B | 
| Before Width: | Height: | Size: 206 B | 
| Before Width: | Height: | Size: 475 B | 
| Before Width: | Height: | Size: 460 B | 
| Before Width: | Height: | Size: 589 B | 
| Before Width: | Height: | Size: 590 B | 
| Before Width: | Height: | Size: 265 B | 
| Before Width: | Height: | Size: 276 B | 
| Before Width: | Height: | Size: 319 B | 
| Before Width: | Height: | Size: 132 B | 
| Before Width: | Height: | Size: 134 B | 
| Before Width: | Height: | Size: 422 B | 
| Before Width: | Height: | Size: 439 B | 
| Before Width: | Height: | Size: 135 B | 
| Before Width: | Height: | Size: 92 B | 
| Before Width: | Height: | Size: 138 B | 
| Before Width: | Height: | Size: 189 B | 
| Before Width: | Height: | Size: 193 B | 
| Before Width: | Height: | Size: 194 B | 
| Before Width: | Height: | Size: 283 B | 
| Before Width: | Height: | Size: 195 B | 
| Before Width: | Height: | Size: 358 B | 
| Before Width: | Height: | Size: 2.1 KiB | 
| Before Width: | Height: | Size: 106 B | 
| Before Width: | Height: | Size: 163 B | 
| Before Width: | Height: | Size: 159 B | 
| Before Width: | Height: | Size: 107 B | 
| Before Width: | Height: | Size: 143 B | 
| Before Width: | Height: | Size: 363 B | 
| Before Width: | Height: | Size: 234 B | 
| Before Width: | Height: | Size: 675 B After Width: | Height: | Size: 675 B | 
| Before Width: | Height: | Size: 410 B | 
| Before Width: | Height: | Size: 417 B | 
 Tobias Groza
					Tobias Groza