Giter Site home page Giter Site logo

pocket-casts-android's Introduction

Pocket Casts is the world's most powerful podcast platform, an app by listeners, for listeners.

Install

If you're just looking to install Pocket Casts Android, you can find it on Google Play. If you're a developer wanting to contribute, read on.

Build Instructions

  1. Make sure you've installed Android Studio.
  2. In Android Studio, open the project from the local repository.
  3. Go to Tools β†’ Device Manager and create an emulated device.
  4. Go to Run β†’ Edit Configurations… and create an Android App configuration.
  5. Select the module "pocketcasts-android.app.main".
  6. Run.

Build and Test

To build, install, and test the project from the command line:

$ ./gradlew :app:assembleDebugProd          # assemble the debug .apk
$ ./gradlew :app:installDebugProd           # install the debug .apk to a connected device
$ ./gradlew :app:testDebugUnitTest          # assemble, install and run unit tests
$ ./gradlew :app:connectedDebugAndroidTest  # assemble, install and run Android tests

Directory structure

.
β”œβ”€β”€ app                    # Mobile app
β”œβ”€β”€ automotive             # Automotive app
β”œβ”€β”€ modules
β”‚   β”œβ”€β”€ features
β”‚   β”‚   β”œβ”€β”€ account        # Create account and sign in pages.
β”‚   β”‚   β”œβ”€β”€ cartheme       # Automotive resources needed for the account pages.
β”‚   β”‚   β”œβ”€β”€ discover       # Discover section.
β”‚   β”‚   β”œβ”€β”€ endofyear      # End of year stats.
β”‚   β”‚   β”œβ”€β”€ filters        # Filters section.
β”‚   β”‚   β”œβ”€β”€ navigation     # Navigation utilities.
β”‚   β”‚   β”œβ”€β”€ player         # Full screen player
β”‚   β”‚   β”œβ”€β”€ podcasts       # Podcasts section.
β”‚   β”‚   β”œβ”€β”€ profile        # Profile section.
β”‚   β”‚   β”œβ”€β”€ search         # Search pages.
β”‚   β”‚   β”œβ”€β”€ settings       # Settings pages.
β”‚   β”‚   └── taskerplugin   # Plugin for integration with Tasker app.
β”‚   └── services
β”‚       β”œβ”€β”€ analytics      # Analytics code.
β”‚       β”œβ”€β”€ compose        # Shared Compose code.
β”‚       β”œβ”€β”€ images         # Image resources.
β”‚       β”œβ”€β”€ localization   # Contains the strings in English and localized strings from GlotPress. 
β”‚       β”œβ”€β”€ model          # The database logic and entities. Also transfer objects required which aren't stored in the database.
β”‚       β”œβ”€β”€ preferences    # Stores the user preferences and configuration settings.
β”‚       β”œβ”€β”€ repositories   # Provides accessing to the data from the 'servers' and 'model' modules.
β”‚       β”œβ”€β”€ servers        # Provides the network calls to the servers. The UI layer should access these through the 'repositories' module.
β”‚       β”œβ”€β”€ ui             # Shared UI code for the 'compose' and 'views' modules. This includes the themes.
β”‚       β”œβ”€β”€ utils          # Utility classes.
β”‚       └── views          # Shred Only the old views code.

The hierarchy of the modules in the project are reflected in this diagram.

Contributing

Read our Contributing Guide to learn about reporting issues, contributing code, and more ways to contribute.

Documentation

Signing a Release

To build a signed release, add these lines to your local.properties file

signingKeyStoreFile=/Users/username/git/secret.keystore
signingKeyStorePassword=
signingKeyAlias=
signingKeyPassword=

pocket-casts-android's People

Contributors

ashiagr avatar atharv028 avatar calebkl avatar emilylaguna avatar geekygecko avatar gyund avatar iangmaia avatar joaomgcd avatar josepatinob avatar karacca avatar ksog66 avatar liutikas avatar luizgrp avatar mchowning avatar mebarbosa avatar mikescamell avatar misikora avatar oguzkocer avatar owenlejeune avatar p-burk avatar rodrigoborgesdeoliveira avatar spencertransier avatar suwasto avatar ted3x avatar tylercarberry avatar vgjohn avatar wiryadev avatar wzieba avatar xenom34 avatar yashraj254 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

pocket-casts-android's Issues

Various UI issues when the device uses the largest font and display settings

I was bouncing around the app with my Pixel 3 phone with the devices font size and the display size set to the maximum values, and I noticed a few UI issues, so I figured I'd open this issue to log them somewhere.


1. Help & Feedback Screen has a bit of horizontal scroll
horizontal.scroll.mp4
2. Help & Feedback "Still stuck..." box cuts words in half

The word feedback is split in two in the "Still stuck..." dialog

image

3. Help & Feedback "Get in touch popup" has buttons outside the popup
4. Not all toolbars reflect the updated font size

It looks like our non-compose toolbars aren't reflecting the font size as much as the compose toolbars do. This can be seen when switching between the Settings and the About screens.

Font Size Default Largest
Settings image image
About image image
5. Profile's Active Account section loses its top and bottom padding

image

6. Podcast page's folder icon feels a bit crowded against the podcast picture

The spacing between the icons on the podcast page feels off to me because the folder icon crowds up to the podcast picture.

image

7. The Choose Folder Color screen's colors crowd the right side of the screen

image

The episode row buffering state stays after switching episodes.

When tapping play on multiple episode rows the buffering state stays on the row for the old episodes.

Steps to repeat

  1. Using a mobile connect or slow network
  2. Open a podcast page with a list of episodes
  3. Tap the play buttons one after another down the screen
  4. Old episodes that are no longer buffering show the animated buffer spinner.

If you scroll the page so the rows are no longer visible and come back the spinner has stopped.

171564605-d2d5653f-4ad4-408c-8c02-3a9a5de79945.mov

Long Press for Multi-Select Mode Causes Crash in 7.20.0

To reproduce:

  1. Install the 7.20 beta
  2. Go to a podcast’s page
  3. Long press on any episode row
  4. Long press the episode row again

The app will crash the first time. Multi-select mode should work on the second try.

I found this error in debug.txt:

E 24/6 09:45:58 Fatal crash.
java.lang.IllegalStateException: FragmentManager has been destroyed
Screen_Recording_20220623-173302_Pocket.Casts.mp4

Device info:

  • App version : 7.20.0 (8085)
  • Phone: Samsung Galaxy S9+
  • Android version: 10

Issue with timing of Up Next sync

Up Next syncing is set to happen 5 seconds after the last change to Up Next was made. There might be a timing issue here though in that if you make more changes to the Up Next list while the previous changes have already been sent to the server, but before a response comes back you can end up in a slightly inconsistent state, eg:
So:

  1. Add 3 things to Up Next
  2. Up Next sync task starts, with those changes, but hasn't received a response yet
  3. Remove 1 of the episodes added from Up Next
  4. Up Next task gets a response, that there should be 3 things in Up Next, so it makes that change
  5. Now the thing you removed is back in Up Next

Note that it's possible that the next time an Up Next sync runs, the remove will get sent and then this will fix itself. Adding this issue so we can do more detailed testing, for example putting a long sleep in between getting the server data and processing it to test if we can mess things up.

Full screen player shows old show notes after switching episodes

Reported in Slack

Steps to repeat.

  1. Play an episode
  2. Add another episode to the Up Next
  3. Open the full screen player
  4. Switch to the Notes tab
  5. Switch back to the Now Playing tab
  6. Archive the episode from the shelf
  7. Quickly switch back to the Notes tab
    The old show notes will still be there for a short period of time while the new show notes are downloaded.
  • Clear the show notes when we switch episodes.
  • Check if the show notes are getting loaded straight away.
  • Show a loading indicator in the app while the show notes are being downloaded.
Screen_Recording_20220429-081533_Pocket.Casts.mp4

Tapping the play button flickers back to a pause icon

The episode play button changes to a play icon, back to a pause icon, and then quickly back to a play icon again.

Steps to repeat

  1. Open a podcast page
  2. Tap an episode play button
171565520-080335a5-ed8f-43ab-bd57-5c70ddb2600b.mov

Tapping the currently playing chapter on the Chapters player tab, should take you to the playing tab

This is already on iOS, but an Android beta tester noted that on Android this restarts the chapter, which isn't great in terms of consistency.

Steps to repeat

  1. Subscribe to Upgrade https://pca.st/upgrade
  2. Play an episode
  3. Tap the mini player to open the full screen player
  4. Tap Chapters to open the list of chapters
  5. While the episode is playing tap the current chapter
    It should switch back to the 'Now Playing' tab. Instead it starts the chapter from the beginning again.
Screen_Recording_20220706-160623_Pocket.Casts.mp4

Reported Issue of App Not Resuming After Google Maps Directions

Reported in 5334414-zen

I also noticed that tonight when I was listening to podcasts in the car my car was connected via Bluetooth and I was also trying to navigate with Google maps and it completely shuts down the Pocket cast app. Help me figure this out otherwise I'm going to have to change my podcast app. I've been trying to troubleshoot this with you guys for a while and I'm getting to my breaking point.

App version : 7.19.2 (7566)
Phone: Samsung Galaxy S20 FE - SM-G781V
Android version: 12

When playing an uploaded video file, the fullscreen player does not open

When comparing video playback behavior between an episode and custom file, I've noticed when playing a video episode, the player comes in full mode, but when playing a custom file, retains in mini-mode.

Setup

  • Podcast episode with MP4 video file, e.g. Ted Talks
  • Custom MP4 file uploaded to the cloud storage

Steps to Reproduce

  1. Play the podcast episode first. You'll notice that the player comes in full view.
  2. Next, play the custom MP4 file, and you'll notice that the player stays in mini-mode.
video-player-custom-file.mp4

Originally reported with 7.5.3, and confirmed in a pre-release 7.20.0 build

ForegroundServiceStartNotAllowedException stopping playback

We have many reports from Android 12 users claiming that the app crashes or the audio quality deteriorates with playback while the screen is off.

Here are the logs from 1 customer:

E 17/3 22:25:04 Playback service error
android.app.ForegroundServiceStartNotAllowedException: Service.startForeground() not allowed due to mAllowStartForeground false: service au.com.shiftyjelly.pocketcasts/.core.player.PlaybackService
	at android.app.ForegroundServiceStartNotAllowedException$1.createFromParcel(ForegroundServiceStartNotAllowedException.java:54)
	at android.app.ForegroundServiceStartNotAllowedException$1.createFromParcel(ForegroundServiceStartNotAllowedException.java:50)
	at android.os.Parcel.readParcelable(Parcel.java:3333)
	at android.os.Parcel.createExceptionOrNull(Parcel.java:2420)
	at android.os.Parcel.createException(Parcel.java:2409)
	at android.os.Parcel.readException(Parcel.java:2392)
	at android.os.Parcel.readException(Parcel.java:2334)
	at android.app.IActivityManager$Stub$Proxy.setServiceForeground(IActivityManager.java:7096)
	at android.app.Service.startForeground(Service.java:733)
	at au.com.shiftyjelly.pocketcasts.core.player.PlaybackService$MediaControllerCallback.onPlaybackStateChangedWithNotification(PlaybackService.kt:10)
	at au.com.shiftyjelly.pocketcasts.core.player.PlaybackService$MediaControllerCallback.access$onPlaybackStateChangedWithNotification(PlaybackService.kt:1)
	at au.com.shiftyjelly.pocketcasts.core.player.PlaybackService$MediaControllerCallback$4.invoke(PlaybackService.kt:3)
	at au.com.shiftyjelly.pocketcasts.core.player.PlaybackService$MediaControllerCallback$4.invoke(PlaybackService.kt:1)
	at ek.l.b(Unknown Source:2)
	at pj.r.onNext(LambdaObserver.java:2)
	at uj.c2$a.d(ObservableObserveOn.java:8)
	at uj.c2$a.run(ObservableObserveOn.java:3)
	at ij.b$b.run(HandlerScheduler.java:1)
	at android.os.Handler.handleCallback(Handler.java:938)
	at android.os.Handler.dispatchMessage(Handler.java:99)
	at android.os.Looper.loopOnce(Looper.java:201)
	at android.os.Looper.loop(Looper.java:288)
	at android.app.ActivityThread.main(ActivityThread.java:7839)
	at java.lang.reflect.Method.invoke(Native Method)
	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)
Caused by: android.os.RemoteException: Remote stack trace:
	at com.android.server.am.ActiveServices.setServiceForegroundInnerLocked(ActiveServices.java:1837)
	at com.android.server.am.ActiveServices.setServiceForegroundLocked(ActiveServices.java:1350)
	at com.android.server.am.ActivityManagerService.setServiceForeground(ActivityManagerService.java:11903)
	at android.app.IActivityManager$Stub.onTransact(IActivityManager.java:3205)
	at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:2498)

ApplicationExitInfo(timestamp=18/03/22, 9:35 pm pid=19707 realUid=10237 packageUid=10237 definingUid=10237 user=0 process=au.com.shiftyjelly.pocketcasts reason=9 (EXCESSIVE RESOURCE USAGE) subreason=7 (EXCESSIVE CPU USAGE) status=0 importance=400 pss=158MB rss=175MB description=excessive cpu 22790 during 300121 dur=1781131 limit=2 state=empty trace=null

Device info:

App version : 7.19.2 (7566)
Sync account: [email protected]
Last Sync: 2022-03-18T10:34:59.987Z
Time: 2022-03-18 23:35:09 Local
      2022-03-18 10:35:09 Utc
Background refresh: true

Phone: Google - oriole - Pixel 6 - oriole
Kernel: 5.10.43-android12-9-00007-g9771767708df-ab8009062 - abfarm-release-rbe-64-00086
Android version: 12 SDK 31
Phone ID: 929e6fab-74fe-4a75-8b4d-2fa40c562bf9

#4871871-zen
#4885182-zen

Both reported that setting the battery optimization to unrestricted for Pocket Casts resolved it. There have been users, however, who have reported that updating the battery optimization setting has not fixed the issue.

Add "Open Player Automatically" setting

iOS has the option to "Open Player Automatically" under the "General" settings. Turning this on means that tapping to play an episode from, for example, an episode screen or from an episode list will automatically open the full screen player. Let's add this setting to Android to be consistent.


Here's the feature on iOS:

open-player-automatically.mov

Page flashes if you tap the same bottom navigation option again

We should detect when we are already on that screen and either do nothing or, if we want to "reset" the view when we tap the icon again (i.e., return to the top of the page) do something like smoothly scrolling back to the top instead of having the screen flash white.

20191202_174520.mp4

Download Size Not Aligned With Icon

Reported in 5347288-zen

Small UI bug to report. The download size isn't properly centered under the download icon, in both portrait and landscape mode, screenshots attached.

Device: Oppo Find X3 Pro
OS: ColorOS v12.1
Android Version: 12
App Version: 7.19.2 (7566

Screenshot_2022-07-04-20-00-53-00_28ad70af3b47247953fcd94176b9a9c1

Screenshot_2022-07-04-20-00-20-84_28ad70af3b47247953fcd94176b9a9c1

Improve podcasts share to match iOS

  • Move the title and description to a second page
  • Selecting the podcast should just show an alpha layer on to inside of shrinking the artwork
  • Move the select tick to the bottom corner
  • Round the corners

iOS

OPML import failures

There was a report of timeouts when importing from large opml files resulting in a timeout. In testing this, I did not encounter that issue because I instead got an uninitialized property error.

BgTask: OPML import failed.
                 kotlin.UninitializedPropertyAccessException: lateinit property podcastManager has not been initialized
                 	at au.com.shiftyjelly.pocketcasts.repositories.opml.OpmlImportTask.getPodcastManager(OpmlImportTask.kt:57)
                 	at au.com.shiftyjelly.pocketcasts.repositories.opml.OpmlImportTask.processFile(OpmlImportTask.kt:80)
                 	at au.com.shiftyjelly.pocketcasts.repositories.opml.OpmlImportTask.doWork(OpmlImportTask.kt:67)
                 	at androidx.work.CoroutineWorker$startWork$1.invokeSuspend(CoroutineWorker.kt:68)
                 	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
                 	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106)
                 	at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:570)
                 	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:749)
                 	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:677)
                 	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:664)

The issue with importing large files may require server work.

Full screen video player media controls don't hide automatically

On a phone with API 28 when playing a video in full screen, the media controls don’t hide automatically until the screen is double tapped. The controls should automatically hide the controls after a few seconds or if you single tap the screen.

Lots of users have reported this issue.

Screen.Recording.2022-07-06.at.11.06.33.pm.mov

Cannot open the player when choosing an episode which is being casted

When you are casting an episode via Chromecast and try to open that episode within the Pocket Casts app by selecting the episode via the notification bar, nothing happens.

The logs mention:

I 01/7 10:45:25 can't startForeground as the notification is null
I 01/7 10:45:25 can't startForeground as the notification is null
I 01/7 10:45:25 can't startForeground as the notification is null
I 01/7 10:45:25 can't startForeground as the notification is null

Screen Recording:

Screen_Recording_20220701-104558_One.UI.Home.mp4

Device Info:

App version : 7.20.0 (8085)
Phone: samsung - R9s - SM-G990E - r9s
Kernel: 5.4.147-24366045-abG990EXXU2CVF1 - 21DK7B18
Android version: 12 SDK 31
Background refresh: true
Battery restriction: Unrestricted

#5339958-zen

Remove 'cartheme' module

Remove 'cartheme' module as this is built into Android Automotive. We were advised to switch to the new Automotive library.

Change the old car library

    implementation "androidx.car:car:1.0.0-alpha7"

for the new one

    implementation "androidx.car.app:app-automotive:1.1.0"

Sort starred podcasts screen with most recently starred first

iOS and the web player sort the starred podcasts with the most recently starred podcast first. Android appears to do the opposite and put the most recently starred last. We should update this to be consistent with the web and iOS (retrieving this data from the server if necessary).

OPML import fails with invalid XML

<?xml version="1.0" encoding="UTF-8"?>
<opml version='1.0'>
  <head>
  </head>
  <body>
    <outline 
      text="Left, Right &amp; Center" 
      type="rss" 
      xmlUrl="https://leftrightandcenter-feed.kcrw.com"  
      htmlUrl="https://www.kcrw.com/news/shows/left-right-center?utm_source=KCRW&utm_medium=RSS&utm_campaign=kcrw-show-rss" />
  </body>
</opml>

The OPML XML is invalid so the import fails. It's caused by the & in the feed URL. I have heard this issue a few times so maybe we should have a fallback parser when an exception happens. It's common that there is one feed URL per line so we could parse the file line by line and pattern match the URLs with a regular expression.

This is the exception it throws.

BgTask: OPML import failed.
org.apache.harmony.xml.ExpatParser$ParseException: At line 23, column 188: not well-formed (invalid token)
	at org.apache.harmony.xml.ExpatParser.parseFragment(ExpatParser.java:528)
	at org.apache.harmony.xml.ExpatParser.parseDocument(ExpatParser.java:487)
	at org.apache.harmony.xml.ExpatReader.parse(ExpatReader.java:324)
	at org.apache.harmony.xml.ExpatReader.parse(ExpatReader.java:287)
	at javax.xml.parsers.SAXParser.parse(SAXParser.java:390)
	at javax.xml.parsers.SAXParser.parse(SAXParser.java:187)
	at au.com.shiftyjelly.pocketcasts.repositories.opml.OpmlImportTask.readOpmlFeedUrls(OpmlImportTask.kt:124)
	at au.com.shiftyjelly.pocketcasts.repositories.opml.OpmlImportTask.processFile(OpmlImportTask.kt:77)
	at au.com.shiftyjelly.pocketcasts.repositories.opml.OpmlImportTask.doWork(OpmlImportTask.kt:67)

We should also add an error message if it fails rather than failing silently.

Podcast Settings -> Included in filters page changes required

There's a bug on this page where the heading says "Choose podcasts", but it should say "Select filters"

Android:

vs how it should look from iOS:

Additionally we should hide the "Included in filters" button if there are no filters it can be included in (eg: there aren't any that are currently not All Podcasts") otherwise you get a screen like this. Which doesn't really make a lot of sense. What can a user do here? What does it mean? We already hide this option on iOS.

Spacing off on Add File screen header

The save button on the add file header is too close to the right side of the screen.

Also, the header leaves room for the top system bar, but it covers up that bar, so there is too much blank space at the top of the screen.

Investigate the Android Automotive crash

I have received an email from Google about our latest Android Automotive build.

Screen Shot 2022-07-06 at 10 38 37 am

A user has also sent us a video of a crash when tapping the set up account button which could be related.

Image.from.iOS.3.MOV

Full screen player 'Rearrange Actions' page the back button

The back button on the 'Rearrange Actions' page doesn't exit the page.

Steps to repeat

  1. Play an episode
  2. Tap on the mini player to open the full screen player
  3. Tap the three dots in the shelf
  4. Tap the edit pen icon
  5. Press the back button (or swipe from the edge of the screen on modern phones)
    The page should close but instead it requires another back button press and it quits the full screen player.
156082563-7eeb4d9c-96f7-4ee2-8018-333c04e50670.mp4

Artwork not showing on player screen

Per @ezebecke:

We've had a couple of reports recently of users not seeing the artwork on the player screen and using the β€˜Refresh All Podcast Artwork’ not solving the issue. We haven't been able to replicate but I'm listing both reports here in case we get more cases and we need further investigation:

  • 5315844-zen
  • 5306118-zen (may be using a VPN)

Changing your device language resets the Auto Archive settings

When you change your device language, the archive settings in Pocket Casts resets. So if a user initially had podcasts set to never archive, that gets cleared when you change the device language.

It seems specific to the Auto Archive settings and doesn't affect other settings.

Screen Recording:

165913506-bff4592e-13c2-4d57-bc6c-08cf9e404aeb.mp4

Links with position in them do not start from the shared position

Test steps:

  1. Share a link with position from the app
  2. Close the app and wipe the app's data
  3. Open the link
  4. Observe that the web player has the podcast loaded to the proper position
  5. Tap the button to open the podcast in the app
  6. Begin playing the podcast within the app and observe that it does not start playing from the proper position

Improve 'Storage & data use' setting section

The iOS version of the 'Storage & data use' setting section is much easier to use.

Some of the main changes are

  • Remove 'Storage 96GB free out of 112GB' and switch to 'Downloaded Files' with a summary of the disk usage.
  • On 'Manage downloads' remove the horizontal lines
  • Figure out if we even need the 'Clear download cache' action
  • On 'Storage & Date Use' put the usage settings first

iOS version

Compared to Android

Share podcasts artwork not loading

The artwork doesn't load on the share podasts page.

Steps to repeat

  1. Tap 'Podcasts' tab
  2. Tap the three dots icon in the toolbar
  3. Tap 'Share podcasts'

Clean up old Java code

There is still some Java code in the project. It would be good to check if it's still needed and convert it over to Kotlin.

Full screen player bottom sheets should be dark.

Steps to reproduce.

  • Tap on the mini player (if the mini player isn't there, play a podcast first)
  • Tap 'select' in the toolbar
  • Long press on an episode row

The bottom sheets on the full screen player should match the dark theme.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    πŸ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. πŸ“ŠπŸ“ˆπŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❀️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.